Added fire works at the end sequence.
authorRicardo Cruz <rick2@aeiou.pt>
Mon, 13 Sep 2004 22:48:50 +0000 (22:48 +0000)
committerRicardo Cruz <rick2@aeiou.pt>
Mon, 13 Sep 2004 22:48:50 +0000 (22:48 +0000)
To do: add sound and tweak it a bit.

SVN-Revision: 1904

src/gameloop.cpp
src/gameloop.h

index 62e0d7f..4c427d1 100644 (file)
@@ -87,8 +87,9 @@ GameSession::GameSession(const std::string& levelname_, int mode, bool flip_leve
   game_pause = false;
   fps_fps = 0;
 
-  fps_timer.init(true);            
+  fps_timer.init(true);
   frame_timer.init(true);
+  random_timer.init(true);
   frame_rate.set_fps(100);
 
   context = new DrawingContext();
@@ -108,6 +109,7 @@ GameSession::restart_level()
 
   fps_timer.init(true);
   frame_timer.init(true);
+  random_timer.init(true);
 
   last_keys.clear();
 
@@ -513,6 +515,7 @@ GameSession::check_end_conditions()
   else if(!end_sequence && endtile && endtile->data == 0)
     {
       end_sequence = ENDSEQUENCE_RUNNING;
+      random_timer.start(200);  // start 1st fire work
       last_x_pos = -1;
       SoundManager::get()->play_music(level_end_song, 0);
       endsequence_timer.start(7000); // 5 seconds until we finish the map
@@ -552,6 +555,20 @@ GameSession::action(double frame_ratio)
     currentsector->play_music(LEVEL_MUSIC);
     newsector = newspawnpoint = "";
   }
+
+  // on end sequence make a few fire works
+  if(end_sequence == ENDSEQUENCE_RUNNING && !random_timer.check())
+    {
+    Vector epicenter = currentsector->camera->get_translation();
+    epicenter.x += screen->w * ((float)rand() / RAND_MAX);
+    epicenter.y += (screen->h/2) * ((float)rand() / RAND_MAX);
+
+    int red = rand() % 255;  // calculate fire work color
+    int green = rand() % red;
+    currentsector->add_particles(epicenter, 45, Color(red,green,0), 3, 1.4, 1300);
+
+    random_timer.start(rand() % 400 + 600);  // next fire work
+    }
 }
 
 void 
index d36c95c..1efa4a3 100644 (file)
@@ -117,6 +117,8 @@ private:
 
   // for cheating
   std::string last_keys;
+  // for fire works
+  Timer random_timer;
 
   void restart_level();