From 885abe21ca32b9b3d620593a3153e5befe67ce8c Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Tue, 13 May 2008 21:15:29 +0000 Subject: [PATCH] MrBomb keeps walking while ticking SVN-Revision: 5465 --- data/images/creatures/mr_bomb/mr_bomb.sprite | 14 +++-- data/images/creatures/mr_bomb/ticking-0.png | Bin 0 -> 3924 bytes data/images/creatures/mr_bomb/ticking-1.png | Bin 0 -> 3121 bytes data/images/creatures/mr_bomb/ticking-2.png | Bin 0 -> 3914 bytes data/images/creatures/mr_bomb/ticking-3.png | Bin 0 -> 3121 bytes src/badguy/mrbomb.cpp | 79 +++++++++++++++++++++++++-- src/badguy/mrbomb.hpp | 12 +++- 7 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 data/images/creatures/mr_bomb/ticking-0.png create mode 100644 data/images/creatures/mr_bomb/ticking-1.png create mode 100644 data/images/creatures/mr_bomb/ticking-2.png create mode 100644 data/images/creatures/mr_bomb/ticking-3.png diff --git a/data/images/creatures/mr_bomb/mr_bomb.sprite b/data/images/creatures/mr_bomb/mr_bomb.sprite index 788833572..56e221bb7 100644 --- a/data/images/creatures/mr_bomb/mr_bomb.sprite +++ b/data/images/creatures/mr_bomb/mr_bomb.sprite @@ -26,15 +26,17 @@ (action (name "ticking-left") - (fps 2.0) - (hitbox 3 8 31.8 31.8) - (images "exploding-left-0.png" - "exploding-left-1.png")) + (fps 10.0) + (hitbox 3 12 31.8 31.8) + (images "ticking-0.png" + "ticking-1.png" + "ticking-2.png" + "ticking-3.png")) (action (name "ticking-right") - (fps 2.0) - (hitbox 10 8 31.8 31.8) + (fps 10.0) + (hitbox 7 12 31.8 31.8) (mirror-action "ticking-left")) ) diff --git a/data/images/creatures/mr_bomb/ticking-0.png b/data/images/creatures/mr_bomb/ticking-0.png new file mode 100644 index 0000000000000000000000000000000000000000..abc7872d77d31b4371aa2e4687b744305e023f5a GIT binary patch literal 3924 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 LNkvXXu0mjf-T?q@ literal 0 HcmV?d00001 diff --git a/data/images/creatures/mr_bomb/ticking-2.png b/data/images/creatures/mr_bomb/ticking-2.png new file mode 100644 index 0000000000000000000000000000000000000000..971129d56363ac6669ceda110121d679146e074c GIT binary patch literal 3914 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 LNkvXXu0mjf$({k0 literal 0 HcmV?d00001 diff --git a/src/badguy/mrbomb.cpp b/src/badguy/mrbomb.cpp index cc74c01a4..558b27097 100644 --- a/src/badguy/mrbomb.cpp +++ b/src/badguy/mrbomb.cpp @@ -20,10 +20,14 @@ #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") @@ -32,9 +36,16 @@ MrBomb::MrBomb(const lisp::Lisp& reader) 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; @@ -55,6 +66,14 @@ MrBomb::MrBomb(const Vector& pos, Direction d) 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 @@ -84,21 +103,58 @@ MrBomb::collision_player(Player& player, const CollisionHit& hit) bool MrBomb::collision_squished(GameObject& object) { - remove_me(); - Sector::current()->add_object(new Bomb(get_pos(), dir, sprite_name )); - kill_squished(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); + } 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(); @@ -132,6 +188,19 @@ 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 diff --git a/src/badguy/mrbomb.hpp b/src/badguy/mrbomb.hpp index 14f326dec..4f28ce602 100644 --- a/src/badguy/mrbomb.hpp +++ b/src/badguy/mrbomb.hpp @@ -41,11 +41,21 @@ public: bool is_portable() const; void freeze(); + void unfreeze(); bool is_freezable() const; - virtual MrBomb* clone() const { return new MrBomb(*this); } + void explode(); protected: + enum State { + STATE_IDLE, + STATE_TICKING + }; + + State state; + std::auto_ptr ticking; + Timer ticking_timer; + bool collision_squished(GameObject& object); private: -- 2.11.0