X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbadguy%2Fmole.cpp;h=6a14b0f6874a86e4c15ac5a49afc1f33e43873ad;hb=2ad3ecbc14b77d373c796ad04d6389489666cc01;hp=73c1877412ada4060561932c8bb26e82108e5708;hpb=c307442e4bf1352cf1807b171b5ab175ba063b31;p=supertux.git diff --git a/src/badguy/mole.cpp b/src/badguy/mole.cpp index 73c187741..6a14b0f68 100644 --- a/src/badguy/mole.cpp +++ b/src/badguy/mole.cpp @@ -26,6 +26,13 @@ #include "random_generator.hpp" #include "log.hpp" #include "level.hpp" +#include "lisp/writer.hpp" +#include "object_factory.hpp" +#include "audio/sound_manager.hpp" +#include "sector.hpp" +#include "sprite/sprite.hpp" + +#include static const float IDLE_TIME = 0.2f; /**< time to wait before and after throwing */ static const float THROW_TIME = 4.6f; /**< time to spend throwing */ @@ -33,23 +40,29 @@ static const float THROW_INTERVAL = 1; /**< time between two thrown rocks */ static const float THROW_VELOCITY = 400; /**< initial velocity of thrown rocks */ Mole::Mole(const lisp::Lisp& reader) - : BadGuy(reader, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING) + : BadGuy(reader, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING) { physic.enable_gravity(false); + sound_manager->preload("sounds/fall.wav"); + sound_manager->preload("sounds/squish.wav"); + sound_manager->preload("sounds/dartfire.wav"); } Mole::Mole(const Vector& pos) - : BadGuy(pos, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING) + : BadGuy(pos, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING) { physic.enable_gravity(false); + sound_manager->preload("sounds/fall.wav"); + sound_manager->preload("sounds/squish.wav"); + sound_manager->preload("sounds/dartfire.wav"); } void Mole::write(lisp::Writer& writer) { writer.start_list("mole"); - writer.write_float("x", start_position.x); - writer.write_float("y", start_position.y); + writer.write("x", start_position.x); + writer.write("y", start_position.y); writer.end_list("mole"); } @@ -64,7 +77,7 @@ Mole::kill_fall() { set_state(DEAD); sound_manager->play("sounds/fall.wav", get_pos()); - if (countMe) Sector::current()->get_level()->stats.badguys++; + run_dead_script(); } HitResponse @@ -78,7 +91,7 @@ Mole::collision_squished(GameObject& ) { set_state(DEAD); sound_manager->play("sounds/squish.wav", get_pos()); - if (countMe) Sector::current()->get_level()->stats.badguys++; + run_dead_script(); return true; } @@ -104,26 +117,26 @@ Mole::active_update(float elapsed_time) switch (state) { case PRE_THROWING: if (timer.check()) { - set_state(THROWING); + set_state(THROWING); } break; case THROWING: if (throw_timer.check()) { throw_rock(); - throw_timer.start(THROW_INTERVAL); + throw_timer.start(THROW_INTERVAL); } if (timer.check()) { - set_state(POST_THROWING); + set_state(POST_THROWING); } break; case POST_THROWING: if (timer.check()) { - set_state(PEEKING); + set_state(PEEKING); } break; case PEEKING: if (sprite->animation_done()) { - set_state(PRE_THROWING); + set_state(PRE_THROWING); } break; case DEAD: @@ -132,33 +145,33 @@ Mole::active_update(float elapsed_time) } -void +void Mole::set_state(MoleState new_state) { switch (new_state) { case PRE_THROWING: sprite->set_action("idle"); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); timer.start(IDLE_TIME); break; case THROWING: sprite->set_action("idle"); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); timer.start(THROW_TIME); throw_timer.start(THROW_INTERVAL); break; case POST_THROWING: sprite->set_action("idle"); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); timer.start(IDLE_TIME); break; case PEEKING: sprite->set_action("peeking", 1); - set_group(COLGROUP_STATIC); + set_colgroup_active(COLGROUP_STATIC); break; case DEAD: sprite->set_action("idle"); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); break; } @@ -166,4 +179,3 @@ Mole::set_state(MoleState new_state) } IMPLEMENT_FACTORY(Mole, "mole") -