X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fstalactite.cpp;h=a5f688a904bdb7d0d5e42907061eb91d4739c638;hb=1aebdec925e3e34bab28706f9cac90f90e4308f9;hp=3c63bea43c7fb564387bd329dcc5d69909820226;hpb=b08f473d758b69519fe265ba201acd4d4ee5be10;p=supertux.git diff --git a/src/badguy/stalactite.cpp b/src/badguy/stalactite.cpp index 3c63bea43..a5f688a90 100644 --- a/src/badguy/stalactite.cpp +++ b/src/badguy/stalactite.cpp @@ -23,13 +23,13 @@ static const int SHAKE_RANGE_X = 40; static const float SHAKE_TIME = .8f; -static const float SQUISH_TIME = 2; static const float SHAKE_RANGE_Y = 400; Stalactite::Stalactite(const Reader& lisp) : BadGuy(lisp, "images/creatures/stalactite/stalactite.sprite", LAYER_TILES - 1), timer(), - state(STALACTITE_HANGING) + state(STALACTITE_HANGING), + shake_delta() { countMe = false; set_colgroup_active(COLGROUP_TOUCHABLE); @@ -50,15 +50,14 @@ Stalactite::active_update(float elapsed_time) } } } else if(state == STALACTITE_SHAKING) { + shake_delta = Vector(graphicsRandom.rand(-3,3), 0); if(timer.check()) { state = STALACTITE_FALLING; physic.enable_gravity(true); set_colgroup_active(COLGROUP_MOVING); } - } else if(state == STALACTITE_FALLING || state == STALACTITE_SQUISHED) { + } else if(state == STALACTITE_FALLING) { movement = physic.get_movement(elapsed_time); - if(state == STALACTITE_SQUISHED && timer.check()) - remove_me(); } } @@ -66,10 +65,13 @@ void Stalactite::squish() { state = STALACTITE_SQUISHED; - set_colgroup_active(COLGROUP_MOVING_ONLY_STATIC); + physic.enable_gravity(true); + physic.set_velocity_x(0); + physic.set_velocity_y(0); + set_state(STATE_SQUISHED); sprite->set_action("squished"); - if(!timer.started()) - timer.start(SQUISH_TIME); + set_group(COLGROUP_MOVING_ONLY_STATIC); + run_dead_script(); } void @@ -109,8 +111,6 @@ Stalactite::collision_badguy(BadGuy& other, const CollisionHit& hit) other.kill_fall(); } - remove_me(); - return FORCE_MOVE; } @@ -122,16 +122,13 @@ Stalactite::kill_fall() void Stalactite::draw(DrawingContext& context) { - if(get_state() != STATE_ACTIVE) + if(get_state() == STATE_INIT || get_state() == STATE_INACTIVE) return; if(state == STALACTITE_SQUISHED) { sprite->draw(context, get_pos(), LAYER_OBJECTS); - return; - } - - if(state == STALACTITE_SHAKING) { - sprite->draw(context, get_pos() + Vector(systemRandom.rand(-3,3), 0), layer); + } else if(state == STALACTITE_SHAKING) { + sprite->draw(context, get_pos() + shake_delta, layer); } else { sprite->draw(context, get_pos(), layer); }