set_state(ICESTATE_NORMAL);
}
- if (ice_state == ICESTATE_NORMAL && might_fall(601))
+ if (ice_state == ICESTATE_NORMAL && on_ground() && might_fall(601))
{
dir = (dir == LEFT ? RIGHT : LEFT);
sprite->set_action(dir == LEFT ? "left" : "right");
void
MrIceBlock::collision_solid(const CollisionHit& hit)
{
+ update_on_ground_flag(hit);
+
if(hit.top || hit.bottom) { // floor or roof
physic.set_velocity_y(0);
return;
case ICESTATE_NORMAL:
if(hit.right && dir == RIGHT) {
dir = LEFT;
+ sprite->set_action(dir == LEFT ? "left" : "right");
+ physic.set_velocity_x(-physic.get_velocity_x());
} else if(hit.left && dir == LEFT) {
dir = RIGHT;
+ sprite->set_action(dir == LEFT ? "left" : "right");
+ physic.set_velocity_x(-physic.get_velocity_x());
}
- sprite->set_action(dir == LEFT ? "left" : "right");
- physic.set_velocity_x(-physic.get_velocity_x());
break;
case ICESTATE_KICKED: {
#if 0