X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fshort_fuse.cpp;h=f92ec4867ed8b2e897a2477d0827633235a8d7fb;hb=d794aac09d4a3b3f5f93985cd74381bb4de4ce84;hp=db16a61ab22346d764b41b2a38e0810b54a54a15;hpb=71ea91f6bf80d100535a0b79f004785d1d8db8b2;p=supertux.git diff --git a/src/badguy/short_fuse.cpp b/src/badguy/short_fuse.cpp index db16a61ab..f92ec4867 100644 --- a/src/badguy/short_fuse.cpp +++ b/src/badguy/short_fuse.cpp @@ -15,9 +15,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include "audio/sound_manager.hpp" #include "badguy/bomb.hpp" #include "badguy/short_fuse.hpp" +#include "object/bullet.hpp" #include "object/explosion.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" @@ -35,9 +35,6 @@ ShortFuse::ShortFuse(const Reader& reader) : walk_speed = 100; max_drop_height = -1; - //Prevent stutter when Tux jumps on Mr Bomb - sound_manager->preload("sounds/explosion.wav"); - //Check if we need another sprite if( !reader.get( "sprite", sprite_name ) ){ return; @@ -47,31 +44,23 @@ ShortFuse::ShortFuse(const Reader& reader) : return; } //Replace sprite - sprite = sprite_manager->create( sprite_name ); -} - -/* ShortFuse created by a dispenser always gets default sprite atm.*/ -ShortFuse::ShortFuse(const Vector& pos, Direction d) : - WalkingBadguy(pos, d, "images/creatures/short_fuse/short_fuse.sprite", "left", "right") -{ - walk_speed = 80; - max_drop_height = 16; - sound_manager->preload("sounds/explosion.wav"); + sprite = SpriteManager::current()->create( sprite_name ); } void -ShortFuse::explode (void) +ShortFuse::explode() { - if (!is_valid ()) + if (!is_valid()) return; - Explosion *explosion = new Explosion (get_bbox ().get_middle ()); + auto explosion = std::make_shared(get_bbox ().get_middle()); - explosion->hurts (false); - explosion->pushes (true); - Sector::current()->add_object (explosion); + explosion->hurts(false); + explosion->pushes(true); + Sector::current()->add_object(explosion); - remove_me (); + run_dead_script(); + remove_me(); } bool @@ -97,5 +86,20 @@ ShortFuse::collision_player (Player& player, const CollisionHit&) return ABORT_MOVE; } +HitResponse +ShortFuse::collision_bullet (Bullet& bullet, const CollisionHit& ) +{ + // All bullets cause the unstable short fuse to explode + bullet.remove_me(); + explode(); + return ABORT_MOVE; +} + +void +ShortFuse::kill_fall (void) +{ + explode (); +} + /* vim: set sw=2 sts=2 et : */ /* EOF */