1
0

Add ability to shoot

This commit is contained in:
Victor 2014-03-15 18:32:07 +02:00
parent a853d9a01b
commit 5e5aeb31e2

View File

@ -16,6 +16,7 @@ public class Turret implements Constants {
private static final int TURRET_WIDTH = PLAYERS_BLOCK_COUNT; private static final int TURRET_WIDTH = PLAYERS_BLOCK_COUNT;
private static final int TURRET_HEIGHT = PLAYERS_BLOCK_COUNT + 1; private static final int TURRET_HEIGHT = PLAYERS_BLOCK_COUNT + 1;
// Parameters
private final int turretX, turretY; private final int turretX, turretY;
private final int barrelRadius; private final int barrelRadius;
private final boolean server; private final boolean server;
@ -23,13 +24,21 @@ public class Turret implements Constants {
private double barrelAngle; private double barrelAngle;
private double shotPower; 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.server = server;
this.turretX = (server ? 5 : Constants.WIDTH - 5); this.turretX = (server ? 5 : Constants.WIDTH - 5);
this.turretY = turretY; this.turretY = turretY;
this.terrain = terrain;
barrelAngle = ANGLE_45; barrelAngle = ANGLE_45;
shotPower = 0.5d; shotPower = 0.5d;
barrelRadius = Constants.WIDTH / 20; barrelRadius = Constants.WIDTH / 20;
shootState = false;
shootInfo = new ShootInfo();
calculateBarrelPosition(); calculateBarrelPosition();
} }
@ -39,6 +48,17 @@ public class Turret implements Constants {
g.setColor(server ? Color.BLUE : Color.RED); g.setColor(server ? Color.BLUE : Color.RED);
g.fillArc(turretX - TURRET_WIDTH / 2, Constants.HEIGHT - turretY - TURRET_HEIGHT / 2, g.fillArc(turretX - TURRET_WIDTH / 2, Constants.HEIGHT - turretY - TURRET_HEIGHT / 2,
TURRET_WIDTH, TURRET_HEIGHT, 0, 180); 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) { if (DEBUG_MODE) {
g.setColor(Color.RED); g.setColor(Color.RED);
double x = barrelX; 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() { private void calculateBarrelPosition() {
final int sign = (server ? 1 : -1); final int sign = (server ? 1 : -1);
barrelX = (int) (turretX + sign * barrelRadius * shotPower * Math.cos(barrelAngle)); barrelX = (int) (turretX + sign * barrelRadius * shotPower * Math.cos(barrelAngle));