diff --git a/src/com/annimon/turrets/Turret.java b/src/com/annimon/turrets/Turret.java index b403fad..a987541 100644 --- a/src/com/annimon/turrets/Turret.java +++ b/src/com/annimon/turrets/Turret.java @@ -16,6 +16,7 @@ public class Turret implements Constants { private static final int TURRET_WIDTH = PLAYERS_BLOCK_COUNT; private static final int TURRET_HEIGHT = PLAYERS_BLOCK_COUNT + 1; + // Parameters private final int turretX, turretY; private final int barrelRadius; private final boolean server; @@ -23,13 +24,21 @@ public class Turret implements Constants { private double barrelAngle; private double shotPower; - public Turret(boolean server, int turretY) { + // Shooting + private boolean shootState; + private final ShootInfo shootInfo; + private final Terrain terrain; // TODO GameInfo + + public Turret(boolean server, int turretY, Terrain terrain) { this.server = server; this.turretX = (server ? 5 : Constants.WIDTH - 5); this.turretY = turretY; + this.terrain = terrain; barrelAngle = ANGLE_45; shotPower = 0.5d; barrelRadius = Constants.WIDTH / 20; + shootState = false; + shootInfo = new ShootInfo(); calculateBarrelPosition(); } @@ -39,6 +48,17 @@ public class Turret implements Constants { g.setColor(server ? Color.BLUE : Color.RED); g.fillArc(turretX - TURRET_WIDTH / 2, Constants.HEIGHT - turretY - TURRET_HEIGHT / 2, TURRET_WIDTH, TURRET_HEIGHT, 0, 180); + if (shootState) { + shootInfo.update(server); + shootInfo.draw(g); + if (shootInfo.isOver()) { + shootState = false; + } + if (shootInfo.isCollideTerrain(terrain)) { + shootState = false; + terrain.destroyTerrain((int) shootInfo.x); + } + } if (DEBUG_MODE) { g.setColor(Color.RED); double x = barrelX; @@ -75,6 +95,17 @@ public class Turret implements Constants { } } + public void shoot() { + shootState = true; + shootInfo.reset(); + shootInfo.x = barrelX; + shootInfo.y = barrelY; + final double speed = shotPower * (Constants.WIDTH / 80d); + shootInfo.windSpeed = 0d;//Wind.getInstance().getSpeed(); + shootInfo.speedX = speed * Math.cos(barrelAngle); + shootInfo.vsin = speed * Math.sin(barrelAngle); + } + private void calculateBarrelPosition() { final int sign = (server ? 1 : -1); barrelX = (int) (turretX + sign * barrelRadius * shotPower * Math.cos(barrelAngle));