From 23d400f4cd35a3688376800a0a3680c5d2865080 Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke Date: Mon, 26 Apr 2004 21:09:31 +0000 Subject: [PATCH] bump patch for upgrades from matzeb SVN-Revision: 768 --- src/special.cpp | 24 +++++++++++++++++++++++- src/special.h | 4 +++- src/world.cpp | 6 ++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/special.cpp b/src/special.cpp index 66d2d0067..7e4bcbe6f 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -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: diff --git a/src/special.h b/src/special.h index a29794490..41e37bcef 100644 --- a/src/special.h +++ b/src/special.h @@ -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 diff --git a/src/world.cpp b/src/world.cpp index 8d57e120e..f869d0f00 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -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); } } } -- 2.11.0