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)
{