Oh, sorry…
// CHECK
collides(Level level) {
boolean result = false;
// TOP
if (is_tile_solid(x+1, y, level)) result = true;
if (is_tile_solid(x+w-2, y, level)) result = true;
// BOTTOM
if (is_tile_solid(x+1, y+h-1, level)) result = true;
if (is_tile_solid(x+w-2, y+h-1, level)) result = true;
// LEFT
if (is_tile_solid(x, y+1, level)) result = true;
if (is_tile_solid(x, y+h-2, level)) result = true;
// RIGHT
if (is_tile_solid(x+w-1, y+1, level)) result = true;
if (is_tile_solid(x+w-1, y+h-2, level)) result = true;
return result;
}
// MOVE ENTITY
void move(Level level, int delta) {
float axs = Math.abs(xs);
float ays = Math.abs(ys);
float max = ays;
if (axs > ays) { max = axs; }
float xstep = xs/max;
float ystep = ys/max;
float axstep = Math.abs(xstep);
float aystep = Math.abs(ystep);
while (axs > 0 || ays > 0) {
x += xstep;
if (collides(level)) { x -= xstep; }
y += ystep;
if (collides(level)) { y -= ystep; }
axs -= axstep;
ays -= aystep;
}
}
// COLLISION
boolean is_tile_solid(float xpos, float ypos, Level level) {
int i = (int) ((xpos) / Level.tilesize);
int j = (int) ((ypos) / Level.tilesize);
if (i >= 0 && i < level.getMapWidth() && j >= 0 && j < level.getMapHeight()) {
if ( level.getMap().getTileId(i, j, Cnst.COLLISION) == Cnst.SOLID ) return true;
else return false;
}
return true;
}