package com.thecherno.ld29.entity.mob; import java.util.List; import com.thecherno.ld29.entity.Entity; import com.thecherno.ld29.graphics.Light; import com.thecherno.ld29.level.Level; import com.thecherno.ld29.level.tile.Tile; public abstract class Mob extends Entity { private int dir = -1; public void move(int xa, int ya) { if (xa != 0 && ya != 0) { move(xa, 0); move(0, ya); return; } if (xa < 0) dir = 3; if (ya < 0) dir = 0; if (xa > 0) dir = 1; if (ya > 0) dir = 2; if (light(xa, ya, dir)) { xa /= 2; ya /= 2; } if (!collision(xa, ya)) { x += xa; y += ya; } } private boolean light(int xa, int ya, int dir) { List<Light> lights = level.getLights(x, y, dir); if (lights.size() <= 0) return false; Light light = lights.get(0); if (light.intensity > 30) return false; if (light.dir == 3) { light.x--; } else if (light.dir == 1) { light.x++; } else if (light.dir == 0) { light.y--; } else if (light.dir == 2) { light.y++; } return true; /* for (int i = 0; i < lights.size(); i++) { if (light) }*/ } public boolean collision(int xa, int ya) { boolean solid = false; for (int i = 0; i < 4; i++) { int xt = ((x + xa) + i % 2 * 48 + 8) >> 6; int yt = ((y + ya) + i / 2 * 48 + 8) >> 6; Tile tile = level.getTile(xt, yt, Level.FOREGROUND); if (tile == null) continue; if (tile.solid()) solid = true; } return solid; } }