X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fpowerup.cpp;h=09a747063e4d402318e99ee2bd80e0e893447b09;hb=77d00a6f464cc87c6b50cf1f3b38064a7ae9aead;hp=ebced415ca26e2c723cf9c80695191dfc8bf2b32;hpb=0787a91b484e283316770f19896a4406090450d7;p=supertux.git diff --git a/src/object/powerup.cpp b/src/object/powerup.cpp index ebced415c..09a747063 100644 --- a/src/object/powerup.cpp +++ b/src/object/powerup.cpp @@ -31,7 +31,7 @@ #include "log.hpp" PowerUp::PowerUp(const lisp::Lisp& lisp) - : MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING) + : MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING) { lisp.get("script", script); no_physics = false; @@ -41,43 +41,47 @@ PowerUp::PowerUp(const lisp::Lisp& lisp) sound_manager->preload("sounds/fire-flower.wav"); } -HitResponse -PowerUp::collision(GameObject& other, const CollisionHit& hit) +void +PowerUp::collision_solid(const CollisionHit& hit) { - if(other.get_flags() & FLAG_SOLID) { - if(fabsf(hit.normal.y) > .5) { // roof or ground - physic.set_velocity_y(0); - } else { // bumped left or right - physic.set_velocity_x(-physic.get_velocity_x()); - } - - return CONTINUE; + if(hit.bottom) { + physic.set_velocity_y(0); + } + if(hit.right || hit.left) { + physic.set_velocity_x(-physic.get_velocity_x()); } - +} + +HitResponse +PowerUp::collision(GameObject& other, const CollisionHit&) +{ Player* player = dynamic_cast(&other); if(player == 0) return FORCE_MOVE; - remove_me(); - if (script != "") { std::istringstream stream(script); Sector::current()->run_script(stream, "powerup-script"); + remove_me(); return ABORT_MOVE; } // some defaults if no script has been set if (sprite_name == "images/powerups/egg/egg.sprite") { - player->add_bonus(GROWUP_BONUS, true); + if(!player->add_bonus(GROWUP_BONUS, true)) + return FORCE_MOVE; sound_manager->play("sounds/grow.wav"); } else if (sprite_name == "images/powerups/fireflower/fireflower.sprite") { - player->add_bonus(FIRE_BONUS, true); + if(!player->add_bonus(FIRE_BONUS, true)) + return FORCE_MOVE; sound_manager->play("sounds/fire-flower.wav"); } else if (sprite_name == "images/powerups/star/star.sprite") { player->make_invincible(); } else if (sprite_name == "images/powerups/1up/1up.sprite") { player->get_status()->add_coins(100); } + + remove_me(); return ABORT_MOVE; } @@ -89,4 +93,3 @@ PowerUp::update(float elapsed_time) } IMPLEMENT_FACTORY(PowerUp, "powerup"); -