X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fmriceblock.cpp;h=7ab283788f3fd7953f160ec3ce7e1f32e4ac6a3a;hb=7a6f00e27bdc0aac2107506c3b00cbf0bf1cccc5;hp=f5d927eace25ba4abcc4c121067dbb6180cc572d;hpb=9aaf3e33f5549191b84ec7cc1a50fe3491f5a7e0;p=supertux.git diff --git a/src/badguy/mriceblock.cpp b/src/badguy/mriceblock.cpp index f5d927eac..7ab283788 100644 --- a/src/badguy/mriceblock.cpp +++ b/src/badguy/mriceblock.cpp @@ -57,9 +57,9 @@ MrIceBlock::write(lisp::Writer& writer) } void -MrIceBlock::activate() +MrIceBlock::initialize() { - WalkingBadguy::activate(); + WalkingBadguy::initialize(); set_state(ICESTATE_NORMAL); } @@ -106,12 +106,10 @@ MrIceBlock::collision_solid(const CollisionHit& hit) if(hit.right && dir == RIGHT) { dir = LEFT; sound_manager->play("sounds/iceblock_bump.wav", get_pos()); - if(++squishcount >= MAXSQUISHES) { kill_fall(); break; } physic.set_velocity_x(-KICKSPEED); } else if(hit.left && dir == LEFT) { dir = RIGHT; sound_manager->play("sounds/iceblock_bump.wav", get_pos()); - if(++squishcount >= MAXSQUISHES) { kill_fall(); break; } physic.set_velocity_x(KICKSPEED); } sprite->set_action(dir == LEFT ? "flat-left" : "flat-right"); @@ -186,10 +184,13 @@ MrIceBlock::collision_squished(GameObject& object) switch(ice_state) { case ICESTATE_KICKED: case ICESTATE_NORMAL: - squishcount++; - if(squishcount >= MAXSQUISHES) { - kill_fall(); - return true; + { + Player* player = dynamic_cast(&object); + squishcount++; + if ((squishcount >= MAXSQUISHES) || (player && player->does_buttjump)) { + kill_fall(); + return true; + } } set_state(ICESTATE_FLAT); @@ -224,7 +225,7 @@ MrIceBlock::set_state(IceState state) switch(state) { case ICESTATE_NORMAL: - WalkingBadguy::activate(); + WalkingBadguy::initialize(); break; case ICESTATE_FLAT: if(dir == UP) { @@ -263,7 +264,7 @@ MrIceBlock::grab(MovingObject&, const Vector& pos, Direction dir) this->dir = dir; sprite->set_action(dir == LEFT ? "flat-left" : "flat-right"); set_state(ICESTATE_GRABBED); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); } void @@ -271,7 +272,7 @@ MrIceBlock::ungrab(MovingObject& , Direction dir) { this->dir = dir; set_state(dir == UP ? ICESTATE_FLAT : ICESTATE_KICKED); - set_group(COLGROUP_MOVING); + set_colgroup_active(COLGROUP_MOVING); } bool