X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fshort_fuse.cpp;h=f92ec4867ed8b2e897a2477d0827633235a8d7fb;hb=b91dbe6bc1d5047a127cdc688dda836c59e8c2d1;hp=d36c54da1c026ef6f0d172590e0d654214b11a7f;hpb=11e150736b6db59bfaef039f72c0daa11572d402;p=supertux.git diff --git a/src/badguy/short_fuse.cpp b/src/badguy/short_fuse.cpp index d36c54da1..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,32 +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); - run_dead_script (); - remove_me (); + run_dead_script(); + remove_me(); } bool @@ -98,6 +86,15 @@ 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) {