Instead of limitating the number of bullets, according to the ones in screen, do...
authorRicardo Cruz <rick2@aeiou.pt>
Sun, 9 May 2004 21:15:58 +0000 (21:15 +0000)
committerRicardo Cruz <rick2@aeiou.pt>
Sun, 9 May 2004 21:15:58 +0000 (21:15 +0000)
This was asked in a comment on The Linux Game Tome and I already wanted to do this, since the day I made that hack, so here it goes.
You can tune that time on the defines.h file, it is the BULLETS_TIMEOUT definition (in ms). There is a fire test level.

SVN-Revision: 1059

src/defines.h
src/world.cpp
src/world.h

index 163f1bd..49c81ce 100644 (file)
@@ -69,7 +69,7 @@ enum DyingType {
 
 #define START_LIVES 4
 
-#define MAX_BULLETS 2
+#define BULLETS_TIMEOUT 500
 
 #define YM_FOR_JUMP 6.0
 #define WALK_ACCELERATION_X 0.03
index 3322b9f..924d456 100644 (file)
@@ -56,6 +56,7 @@ World::World(const std::string& filename)
   apply_bonuses();
 
   scrolling_timer.init(true);
+  bullets_timer.init(true);
 }
 
 World::World(const std::string& subset, int level_nr)
@@ -77,6 +78,7 @@ World::World(const std::string& subset, int level_nr)
   apply_bonuses();
 
   scrolling_timer.init(true);
+  bullets_timer.init(true);
 }
 
 void
@@ -541,9 +543,11 @@ World::add_upgrade(float x, float y, Direction dir, UpgradeKind kind)
 void 
 World::add_bullet(float x, float y, float xm, Direction dir)
 {
-  if(bullets.size() > MAX_BULLETS-1)
+  if(bullets_timer.check())
     return;
 
+  bullets_timer.start(BULLETS_TIMEOUT);
+
   Bullet new_bullet;
   new_bullet.init(x,y,xm,dir);
   bullets.push_back(new_bullet);
index e62ce66..58dccfc 100644 (file)
@@ -58,6 +58,7 @@ public:
   std::vector<FloatingScore*> floating_scores;
 
   std::vector<Upgrade> upgrades;
+  Timer bullets_timer;
   std::vector<Bullet> bullets;
   typedef std::vector<ParticleSystem*> ParticleSystems;
   ParticleSystems particle_systems;