Browse Source

simplified collision with loop

Kajetan Johannes Hammerle 2 years ago
parent
commit
1508471ff0
1 changed files with 18 additions and 56 deletions
  1. 18 56
      common/world/World.cpp

+ 18 - 56
common/world/World.cpp

@@ -79,63 +79,25 @@ Vector3 World::limitMove(const Entity& e, Vector3 move) const {
 
     constexpr float step = 0.05f;
     while(move[0] != 0.0f || move[1] != 0.0f || move[2] != 0.0f) {
-        Vector3 old = realMove;
-        if(move[0] > step) {
-            realMove[0] += step;
-            move[0] -= step;
-        } else if(move[0] < -step) {
-            realMove[0] -= step;
-            move[0] += step;
-        } else if(move[0] != 0.0f) {
-            realMove[0] += move[0];
-            move[0] = 0.0f;
-        }
-        Box moved = box.offset(realMove);
-        for(const Box& box : boxes) {
-            if(box.collidesWith(moved)) {
-                move[0] = 0.0f;
-                realMove = old;
-                break;
-            }
-        }
-
-        old = realMove;
-        if(move[1] > step) {
-            realMove[1] += step;
-            move[1] -= step;
-        } else if(move[1] < -step) {
-            realMove[1] -= step;
-            move[1] += step;
-        } else if(move[1] != 0.0f) {
-            realMove[1] += move[1];
-            move[1] = 0.0f;
-        }
-        moved = box.offset(realMove);
-        for(const Box& box : boxes) {
-            if(box.collidesWith(moved)) {
-                move[1] = 0.0f;
-                realMove = old;
-                break;
+        for(int i = 0; i < 3; i++) {
+            Vector3 old = realMove;
+            if(move[i] > step) {
+                realMove[i] += step;
+                move[i] -= step;
+            } else if(move[i] < -step) {
+                realMove[i] -= step;
+                move[i] += step;
+            } else if(move[i] != 0.0f) {
+                realMove[i] += move[i];
+                move[i] = 0.0f;
             }
-        }
-
-        old = realMove;
-        if(move[2] > step) {
-            realMove[2] += step;
-            move[2] -= step;
-        } else if(move[2] < -step) {
-            realMove[2] -= step;
-            move[2] += step;
-        } else if(move[2] != 0.0f) {
-            realMove[2] += move[2];
-            move[2] = 0.0f;
-        }
-        moved = box.offset(realMove);
-        for(const Box& box : boxes) {
-            if(box.collidesWith(moved)) {
-                move[2] = 0.0f;
-                realMove = old;
-                break;
+            Box moved = box.offset(realMove);
+            for(const Box& box : boxes) {
+                if(box.collidesWith(moved)) {
+                    move[i] = 0.0f;
+                    realMove = old;
+                    break;
+                }
             }
         }
     }