* In the usage help, put LEVELFILE into brackets since it's an optional argument.
[supertux.git] / src / object / display_effect.cpp
index 7a254c5..1f67b43 100644 (file)
@@ -8,6 +8,9 @@
 DisplayEffect::DisplayEffect()
     : type(NO_FADE), fadetime(0), fading(0), black(false)
 {
+ border_size = 0; 
+ borders_fading = false;
+ borders_active = false;
 }
 
 DisplayEffect::~DisplayEffect()
@@ -17,6 +20,14 @@ DisplayEffect::~DisplayEffect()
 void
 DisplayEffect::update(float elapsed_time)
 {
+    if (borders_fading) {
+      if (border_size < 75) border_size += 1.5;
+      else borders_active = true;
+    }
+    else if (borders_active) {
+      if (border_size > 0) border_size -= 1.5;
+      else borders_active = false;
+    }
     switch(type) {
         case NO_FADE:
             return;
@@ -41,32 +52,37 @@ DisplayEffect::update(float elapsed_time)
 void
 DisplayEffect::draw(DrawingContext& context)
 {
-    if(!black && type == NO_FADE)
-        return;
-    
     context.push_transform();
     context.set_translation(Vector(0, 0));
 
-    uint8_t alpha;
-    if(black) {
-        alpha = 255;
-    } else {
-        switch(type) {
-            case FADE_IN:
-                alpha = static_cast<uint8_t>
-                    (fading * 255.0 / fadetime);
-                break;
-            case FADE_OUT:
-                alpha = static_cast<uint8_t>
-                    ((fadetime-fading) * 255.0 / fadetime);
-                break;
-            default:
-                alpha = 0;
-                assert(false);
-        }
+    if(black || type != NO_FADE) {    
+      float alpha;
+      if(black) {
+          alpha = 1.0f;
+      } else {
+          switch(type) {
+              case FADE_IN:
+                  alpha = fading / fadetime;
+                  break;
+              case FADE_OUT:
+                  alpha = (fadetime-fading) / fadetime;
+                  break;
+              default:
+                  alpha = 0;
+                  assert(false);
+          }
+      }
+      context.draw_filled_rect(Vector(0, 0), Vector(SCREEN_WIDTH, SCREEN_HEIGHT),
+              Color(0, 0, 0, alpha), LAYER_GUI-10);
+    }
+
+    if (borders_fading || borders_active) {
+      context.draw_filled_rect(Vector(0, 0), Vector(SCREEN_WIDTH, border_size),
+              Color(0, 0, 0, 1.0f), LAYER_GUI-10);
+      context.draw_filled_rect(Vector(0, SCREEN_HEIGHT - border_size), Vector(SCREEN_WIDTH, border_size),
+              Color(0, 0, 0, 1.0f), LAYER_GUI-10);
     }
-    context.draw_filled_rect(Vector(0, 0), Vector(SCREEN_WIDTH, SCREEN_HEIGHT),
-            Color(0, 0, 0, alpha), LAYER_GUI-10);
+
     context.pop_transform();
 }
 
@@ -100,3 +116,15 @@ DisplayEffect::is_black()
     return black;
 }
 
+void
+DisplayEffect::sixteen_to_nine()
+{
+  borders_fading = true;
+}
+
+void
+DisplayEffect::four_to_three()
+{
+  borders_fading = false;
+}
+