|
@@ -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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|