X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fmrbomb.cpp;h=1ed824001a1603fcc673b8fe5912b391d6b72f81;hb=198f758764fff064a47630b5d0f1e3d6aabe95a8;hp=558b27097ccbceb31e3b1eb8cd0fd36818997e7a;hpb=885abe21ca32b9b3d620593a3153e5befe67ce8c;p=supertux.git diff --git a/src/badguy/mrbomb.cpp b/src/badguy/mrbomb.cpp index 558b27097..1ed824001 100644 --- a/src/badguy/mrbomb.cpp +++ b/src/badguy/mrbomb.cpp @@ -20,32 +20,21 @@ #include #include "mrbomb.hpp" +#include "bomb.hpp" #include "object/explosion.hpp" #include "sprite/sprite_manager.hpp" #include "audio/sound_manager.hpp" -#include "level.hpp" - -namespace { - const float TICKING_TIME = 1.0f; /**< delay until ticking MrBomb explodes */ -} MrBomb::MrBomb(const lisp::Lisp& reader) - : WalkingBadguy(reader, "images/creatures/mr_bomb/mr_bomb.sprite", "left", "right") + : WalkingBadguy(reader, "images/creatures/mr_bomb/mr_bomb.sprite", "left", "right") { walk_speed = 80; max_drop_height = 16; grabbed = false; + //Prevent stutter when Tux jumps on Mr Bomb sound_manager->preload("sounds/explosion.wav"); - ticking.reset(sound_manager->create_sound_source("sounds/fizz.wav")); - ticking->set_position(get_pos()); - ticking->set_looping(true); - ticking->set_gain(2.0); - ticking->set_reference_distance(32); - - state = STATE_IDLE; - //Check if we need another sprite if( !reader.get( "sprite", sprite_name ) ){ return; @@ -58,22 +47,14 @@ MrBomb::MrBomb(const lisp::Lisp& reader) sprite = sprite_manager->create( sprite_name ); } -/* MrBomb created by a despencer always gets default sprite atm.*/ +/* MrBomb created by a dispenser always gets default sprite atm.*/ MrBomb::MrBomb(const Vector& pos, Direction d) - : WalkingBadguy(pos, d, "images/creatures/mr_bomb/mr_bomb.sprite", "left", "right") + : WalkingBadguy(pos, d, "images/creatures/mr_bomb/mr_bomb.sprite", "left", "right") { walk_speed = 80; max_drop_height = 16; grabbed = false; sound_manager->preload("sounds/explosion.wav"); - - state = STATE_IDLE; - - ticking.reset(sound_manager->create_sound_source("sounds/fizz.wav")); - ticking->set_position(get_pos()); - ticking->set_looping(true); - ticking->set_gain(2.0); - ticking->set_reference_distance(32); } void @@ -103,58 +84,21 @@ MrBomb::collision_player(Player& player, const CollisionHit& hit) bool MrBomb::collision_squished(GameObject& object) { - if(frozen) unfreeze(); - Player* player = dynamic_cast(&object); - if (player) { - player->bounce(*this); - } - if (state == STATE_IDLE) { - if (player && countMe) Sector::current()->get_level()->stats.badguys++; - state = STATE_TICKING; - - // TODO: currently we need to re-create ticking sound object every time, in case we had to stop it - ticking.reset(sound_manager->create_sound_source("sounds/fizz.wav")); - ticking->set_position(get_pos()); - ticking->set_looping(true); - ticking->set_gain(2.0); - ticking->set_reference_distance(32); - - ticking->play(); - ticking_timer.start(TICKING_TIME); - walk_left_action = "ticking-left"; - walk_right_action = "ticking-right"; - sprite->set_action(dir == LEFT ? walk_left_action : walk_right_action); - } + remove_me(); + Sector::current()->add_object(new Bomb(get_pos(), dir, sprite_name )); + kill_squished(object); return true; } void MrBomb::active_update(float elapsed_time) { - if (state == STATE_TICKING) { - ticking->set_position(get_pos()); - if(ticking_timer.check()) { - explode(); - } - } if(grabbed) return; WalkingBadguy::active_update(elapsed_time); } void -MrBomb::explode() -{ - ticking->stop(); - - remove_me(); - Explosion* explosion = new Explosion(get_bbox().get_middle()); - Sector::current()->add_object(explosion); - - run_dead_script(); -} - -void MrBomb::kill_fall() { remove_me(); @@ -188,19 +132,6 @@ MrBomb::freeze() { WalkingBadguy::freeze(); sprite->set_action(dir == LEFT ? "iced-left" : "iced-right"); - if (state == STATE_TICKING) { - ticking_timer.stop(); - ticking->stop(); - walk_left_action = "left"; - walk_right_action = "right"; - state = STATE_IDLE; - } -} - -void -MrBomb::unfreeze() -{ - WalkingBadguy::unfreeze(); } bool