diff --git a/src/object/player.cpp b/src/object/player.cpp index 060cf049f4..5c488b3982 100644 --- a/src/object/player.cpp +++ b/src/object/player.cpp @@ -2307,7 +2307,7 @@ Player::collision_tile(uint32_t tile_attributes) } void -Player::collision_solid(const CollisionHit& hit) +Player::handle_collision_logic(const CollisionHit& hit) { if (hit.bottom) { if (m_physic.get_velocity_y() > 0) @@ -2360,6 +2360,12 @@ Player::collision_solid(const CollisionHit& hit) m_boost = 0.f; } +void +Player::collision_solid(const CollisionHit& hit) +{ + handle_collision_logic(hit); +} + HitResponse Player::collision(MovingObject& other, const CollisionHit& hit) { @@ -2392,9 +2398,9 @@ Player::collision(MovingObject& other, const CollisionHit& hit) return FORCE_MOVE; if (m_stone) return ABORT_MOVE; - - if (hit.bottom && badguy->is_frozen()) - m_on_ground_flag = true; + if (badguy->is_frozen() && badguy->get_physic().get_velocity_y() != 0) { + handle_collision_logic(hit); + } } return CONTINUE; diff --git a/src/object/player.hpp b/src/object/player.hpp index 04653bc97a..3546103b0c 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -493,6 +493,9 @@ class Player final : public MovingObject */ void ungrab_object(GameObject* gameobject = nullptr); + /** Method for shared collision logic */ + void handle_collision_logic(const CollisionHit& hit); + void next_target(); void prev_target();