summary refs log tree commit diff
path: root/src/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities')
-rw-r--r--src/Entities/Player.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 4fa481e..5d41ad0 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -19,10 +19,10 @@ void Player::update(const Time& time, GFX::Window& window, GFX::Camera& camera,
     auto destination = m_transform.position() + direction * move_speed;
 
     auto collisions = colliding_terrain(destination, world);
-    if (!collisions.empty()) {
-        for (auto collision : collisions) {
-            destination = collision_reposition(m_transform.position(), destination, collision);
-        }
+    for (auto collision : collisions) {
+        auto original = destination;
+        destination = collision_reposition(m_transform.position(), destination, collision);
+        if (!original.mostly_equal(destination)) break;
     }
 
     move_to(destination);
@@ -97,7 +97,7 @@ Position::World Player::position_for_bounding_box(AABB box) {
 
 Position::World Player::collision_reposition(Position::World from, Position::World to, AABB colliding) {
     if (from == to) return from;
-    auto resulting_bounding_box = bounding_box_for_position(from).cast_box(to - from, colliding);
+    auto resulting_bounding_box = bounding_box_for_position(from).collision_response(to - from, colliding);
     return position_for_bounding_box(resulting_bounding_box); // Ugly, we convert to AABB and back.
 }