package shootergame.entity; import java.util.ArrayList; import shootergame.Main; import shootergame.display.Camera; import shootergame.display.transparent.ITransparentObject; import shootergame.display.transparent.TransparentObjects; import shootergame.init.Entities; import shootergame.tiles.Tile; import shootergame.util.math.MathHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; import shootergame.world.World; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; public class Entity implements ITransparentObject { public Vec2d pos; public double angle; public boolean opaqueTile = true; public double hitbox = 1; public boolean isSolid = false; public Chunk chunk; public Entity(Vec2d pos, double angle) { // Add this entity to the list of entities Entities.entities.add(this); // Store the specified values this.angle = angle; this.pos = pos; } public Entity() { this(new Vec2d(0, 0), 0); } public void tick(Chunk chunk, Layer layer) { } @Override public void render(Vec2d pos, Camera camera) { } public void doRender(Vec2d pos, Camera camera) { if(this.opaqueTile) { TransparentObjects.register(this, camera, pos); } else { this.render(pos, camera); } } @Override public boolean isOpaqueTile() { return this.opaqueTile; } public void moveForward(double speed) { Vec2d pos = this.pos.add(MathHelpers.moveTowards2(speed, Math.toRadians(this.angle))); if(this.moveIsLegal(new Vec2d(this.pos.x, pos.y))) this.pos.y = pos.y; if(this.moveIsLegal(new Vec2d(pos.x, this.pos.y))) this.pos.x = pos.x; } public void moveBackward(double speed) { Vec2d pos = this.pos.add(MathHelpers.moveTowards2(-speed, Math.toRadians(this.angle))); if(this.moveIsLegal(new Vec2d(this.pos.x, pos.y))) this.pos.y = pos.y; if(this.moveIsLegal(new Vec2d(pos.x, this.pos.y))) this.pos.x = pos.x; } public void moveForward() { this.moveForward(0.1); } public void moveBackward() { this.moveBackward(0.1); } public void kill() { chunk.killEntity(this); } public boolean moveIsLegal(Vec2d pos) { /*// Is this entity solid if(isSolid) { // Get the layer Layer l = Main.world.getLayer(); // Get some tiles Vec2i[] tiles = { new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0), new Vec2i(MathHelpers.floor(pos.x)+1, MathHelpers.floor(pos.y)+0), new Vec2i(MathHelpers.floor(pos.x)+1, MathHelpers.floor(pos.y)+1), new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+1) }; for(Vec2i tpos : tiles) { { // Get the tile Tile t = l.getBackTile(tpos); // Send false if the tile isn't walkable if(!t.tileWalkable) { System.out.println("1"); return false; } } { // Get the front tile Tile t = l.getFrontTile(tpos); // Send false if the tile isn't walkable if(!t.tileWalkable) { System.out.println("2"); return false; } // Check the tiles hitbox if the tile is solid if(t.tileSolid) { // Is the entity in the tiles hitbox if( tpos.x + t.tileHitbox < pos.x || tpos.x - t.tileHitbox > pos.x || tpos.y + t.tileHitbox < pos.y || tpos.y - t.tileHitbox > pos.y ) { System.out.println("3"); // Send back false return false; } } } } }*/ // Send back true if everything passes return true; } }