Shorter movement code making use of vector math
This commit is contained in:
parent
ac347dc6d8
commit
8a0298b2db
@ -95,52 +95,37 @@ public abstract class MovableEntity extends Entity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float dist = speed * dt;
|
LevelTile currentTile = state.level.getTile(pos);
|
||||||
|
Vector2 new_pos = currDirection.getVector(speed * dt).add(pos);
|
||||||
LevelTile currentTile = state.level.getTile(pos.x, pos.y);
|
|
||||||
Vector2 new_pos = new Vector2(pos);
|
|
||||||
|
|
||||||
|
if (currentTile == null) {
|
||||||
|
// handle traveling back onto the screen
|
||||||
switch (currDirection) {
|
switch (currDirection) {
|
||||||
case UP:
|
case UP:
|
||||||
if (currentTile == null && pos.y > state.level.height + 1) {
|
if (pos.y >= state.level.height + 1f) {
|
||||||
new_pos.y = -1f;
|
new_pos.y = -1f;
|
||||||
canMove = true;
|
|
||||||
} else {
|
|
||||||
new_pos.y += dist;
|
|
||||||
nextTile = state.level.getTile(new_pos.x, new_pos.y + 0.5f);
|
|
||||||
canMove = nextTile == null || nextTile.isPassable();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
if (currentTile == null && pos.x > state.level.width + 1) {
|
|
||||||
new_pos.x = -1f;
|
|
||||||
canMove = true;
|
|
||||||
} else {
|
|
||||||
new_pos.x += dist;
|
|
||||||
nextTile = state.level.getTile(new_pos.x + 0.5f, new_pos.y);
|
|
||||||
canMove = nextTile == null || nextTile.isPassable();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
if (currentTile == null && pos.y < 0) {
|
if (pos.y <= 0) {
|
||||||
new_pos.y = state.level.height + 1;
|
new_pos.y = state.level.height + 1f;
|
||||||
canMove = true;
|
|
||||||
} else {
|
|
||||||
new_pos.y -= dist;
|
|
||||||
nextTile = state.level.getTile(new_pos.x, new_pos.y - 0.5f);
|
|
||||||
canMove = nextTile == null || nextTile.isPassable();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LEFT:
|
case LEFT:
|
||||||
if (currentTile == null && pos.x < 0) {
|
if (pos.x <= 0) {
|
||||||
new_pos.x = state.level.width + 1;
|
new_pos.x = state.level.width + 1f;
|
||||||
canMove = true;
|
|
||||||
} else {
|
|
||||||
new_pos.x -= dist;
|
|
||||||
nextTile = state.level.getTile(new_pos.x - 0.5f, new_pos.y);
|
|
||||||
canMove = nextTile == null || nextTile.isPassable();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case RIGHT:
|
||||||
|
if (pos.x >= state.level.width + 1f) {
|
||||||
|
new_pos.x = -1f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
canMove = true;
|
||||||
|
} else {
|
||||||
|
nextTile = state.level.getTile(currDirection.getVector(0.5f).add(new_pos));
|
||||||
|
canMove = nextTile == null || nextTile.isPassable();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if move isn't going to collide with wall, move normally.
|
// if move isn't going to collide with wall, move normally.
|
||||||
|
Loading…
Reference in New Issue
Block a user