Add ability to shoot
This commit is contained in:
parent
a853d9a01b
commit
5e5aeb31e2
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user