bump patch for upgrades from matzeb
authorIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 21:09:31 +0000 (21:09 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 21:09:31 +0000 (21:09 +0000)
SVN-Revision: 768

src/special.cpp
src/special.h
src/world.cpp

index 66d2d00..7e4bcbe 100644 (file)
@@ -288,10 +288,32 @@ Upgrade::draw()
 }
 
 void
-Upgrade::collision(void* p_c_object, int c_object)
+Upgrade::bump(Player* )
+{
+  // these can't be bumped
+  if(kind != UPGRADE_GROWUP)
+    return;
+
+  play_sound(sounds[SND_BUMP_UPGRADE], SOUND_CENTER_SPEAKER);
+  
+  // do a little jump and change direction
+  physic.set_velocity(-physic.get_velocity_x(), 3);
+  dir = dir == LEFT ? RIGHT : LEFT;
+  physic.enable_gravity(true);
+}
+
+void
+Upgrade::collision(void* p_c_object, int c_object, CollisionType type)
 {
   Player* pplayer = NULL;
 
+  if(type == COLLISION_BUMP) {
+    if(c_object == CO_PLAYER)
+      pplayer = (Player*) p_c_object;
+    bump(pplayer);
+    return;
+  }
+
   switch (c_object)
     {
     case CO_PLAYER:
index a297944..41e37bc 100644 (file)
@@ -52,7 +52,7 @@ public:
   void init(float x, float y, Direction dir, UpgradeKind kind);
   void action(double frame_ratio);
   void draw();
-  void collision(void* p_c_object, int c_object);
+  void collision(void* p_c_object, int c_object, CollisionType type);
 
 private:
   /** removes the Upgrade from the global upgrade list. Note that after this
@@ -60,6 +60,8 @@ private:
    * anymore then
    */
   void remove_me();
+
+  void bump(Player* player);
 };
 
 class Bullet
index 8d57e12..f869d0f 100644 (file)
@@ -375,7 +375,7 @@ World::collision_handler()
         {
           // We have detected a collision and now call the collision
           // functions of the collided objects.
-          upgrades[i].collision(&tux, CO_PLAYER);
+          upgrades[i].collision(&tux, CO_PLAYER, COLLISION_NORMAL);
         }
     }
 }
@@ -614,9 +614,7 @@ World::trybumpbadguy(float x, float y)
           upgrades[i].base.x >= x - 32 && upgrades[i].base.x <= x + 32 &&
           upgrades[i].base.y >= y - 16 && upgrades[i].base.y <= y + 16)
         {
-          upgrades[i].base.xm = -upgrades[i].base.xm;
-          upgrades[i].base.ym = -8;
-          play_sound(sounds[SND_BUMP_UPGRADE], SOUND_CENTER_SPEAKER);
+          upgrades[i].collision(&tux, CO_PLAYER, COLLISION_BUMP);
         }
     }
 }