X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fexplosion.cpp;h=e62244b7863f006daa5d444d97223d5ec4eb9fab;hb=7e15c4f871809033278711a6e9327616da00c4c9;hp=c172e11eda1406d7b5ab78acf061ce7f3a88567e;hpb=b190b1597483fe76b98b6fcda1ba8f2d037dd8ed;p=supertux.git diff --git a/src/object/explosion.cpp b/src/object/explosion.cpp index c172e11ed..e62244b78 100644 --- a/src/object/explosion.cpp +++ b/src/object/explosion.cpp @@ -20,19 +20,25 @@ #include #include "explosion.hpp" + #include "badguy/badguy.hpp" #include "object/sprite_particle.hpp" #include "random_generator.hpp" +#include "object_factory.hpp" +#include "audio/sound_manager.hpp" +#include "sector.hpp" + +#include Explosion::Explosion(const Vector& pos) - : MovingSprite(pos, "images/objects/explosion/explosion.sprite", LAYER_OBJECTS+40, COLGROUP_TOUCHABLE), state(STATE_WAITING) + : MovingSprite(pos, "images/objects/explosion/explosion.sprite", LAYER_OBJECTS+40, COLGROUP_TOUCHABLE), state(STATE_WAITING) { sound_manager->preload("sounds/explosion.wav"); set_pos(get_pos() - (get_bbox().get_middle() - get_pos())); } Explosion::Explosion(const lisp::Lisp& reader) - : MovingSprite(reader, "images/objects/explosion/explosion.sprite", LAYER_OBJECTS+40, COLGROUP_TOUCHABLE), state(STATE_WAITING) + : MovingSprite(reader, "images/objects/explosion/explosion.sprite", LAYER_OBJECTS+40, COLGROUP_TOUCHABLE), state(STATE_WAITING) { sound_manager->preload("sounds/explosion.wav"); } @@ -47,18 +53,21 @@ Explosion::explode() sprite->set_animation_loops(1); //TODO: this is necessary because set_action will not set "loops" when "action" is the default action sound_manager->play("sounds/explosion.wav", get_pos()); - // spawn some particles - // TODO: provide convenience function in MovingSprite or MovingObject? - for (int i = 0; i < 100; i++) { - Vector ppos = bbox.get_middle(); - float angle = systemRandom.randf(-M_PI_2, M_PI_2); - float velocity = systemRandom.randf(450, 900); - float vx = sin(angle)*velocity; - float vy = -cos(angle)*velocity; - Vector pspeed = Vector(vx, vy); - Vector paccel = Vector(0, 1000); - Sector::current()->add_object(new SpriteParticle("images/objects/particles/explosion.sprite", "default", ppos, ANCHOR_MIDDLE, pspeed, paccel, LAYER_OBJECTS-1)); - } + if (0) + { + // spawn some particles + // TODO: provide convenience function in MovingSprite or MovingObject? + for (int i = 0; i < 100; i++) { + Vector ppos = bbox.get_middle(); + float angle = systemRandom.randf(-M_PI_2, M_PI_2); + float velocity = systemRandom.randf(450, 900); + float vx = sin(angle)*velocity; + float vy = -cos(angle)*velocity; + Vector pspeed = Vector(vx, vy); + Vector paccel = Vector(0, 1000); + Sector::current()->add_object(new SpriteParticle("images/objects/particles/explosion.sprite", "default", ppos, ANCHOR_MIDDLE, pspeed, paccel, LAYER_OBJECTS-1)); + } + } } void @@ -70,7 +79,7 @@ Explosion::update(float ) break; case STATE_EXPLODING: if(sprite->animation_done()) { - remove_me(); + remove_me(); } break; }