Add wind changing and influence to missile
This commit is contained in:
parent
bcf6584fc9
commit
455f6998d7
@ -29,6 +29,7 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
|
|||||||
private Terrain terrain;
|
private Terrain terrain;
|
||||||
private Turret serverTurret, clientTurret;
|
private Turret serverTurret, clientTurret;
|
||||||
private Turret instanceTurret;
|
private Turret instanceTurret;
|
||||||
|
private final Wind wind;
|
||||||
|
|
||||||
private final boolean serverInstance;
|
private final boolean serverInstance;
|
||||||
private SocketHelper socketHelper;
|
private SocketHelper socketHelper;
|
||||||
@ -43,6 +44,7 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
|
|||||||
initBackground();
|
initBackground();
|
||||||
font = new Font(Constants.FONT_NAME, Font.PLAIN, 24);
|
font = new Font(Constants.FONT_NAME, Font.PLAIN, 24);
|
||||||
|
|
||||||
|
wind = new Wind();
|
||||||
gameStarted = false;
|
gameStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,9 +138,9 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
|
|||||||
terrain = new Terrain(Constants.WIDTH);
|
terrain = new Terrain(Constants.WIDTH);
|
||||||
newRound(seed);
|
newRound(seed);
|
||||||
|
|
||||||
serverTurret = new Turret(Turret.SERVER, terrain);
|
serverTurret = new Turret(Turret.SERVER, terrain, wind);
|
||||||
serverTurret.setTurretListener(serverTurretListener);
|
serverTurret.setTurretListener(serverTurretListener);
|
||||||
clientTurret = new Turret(Turret.CLIENT, terrain);
|
clientTurret = new Turret(Turret.CLIENT, terrain, wind);
|
||||||
clientTurret.setTurretListener(clientTurretListener);
|
clientTurret.setTurretListener(clientTurretListener);
|
||||||
|
|
||||||
instanceTurret = (serverInstance) ? serverTurret : clientTurret;
|
instanceTurret = (serverInstance) ? serverTurret : clientTurret;
|
||||||
@ -154,6 +156,7 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
|
|||||||
// Reinit background with same seed on server and client.
|
// Reinit background with same seed on server and client.
|
||||||
initBackground();
|
initBackground();
|
||||||
terrain.generate();
|
terrain.generate();
|
||||||
|
wind.change();
|
||||||
|
|
||||||
if (gameStarted) {
|
if (gameStarted) {
|
||||||
serverTurret.reinit();
|
serverTurret.reinit();
|
||||||
|
@ -29,12 +29,14 @@ public class Turret implements Constants {
|
|||||||
private boolean shootState;
|
private boolean shootState;
|
||||||
private final ShootInfo shootInfo;
|
private final ShootInfo shootInfo;
|
||||||
private final Terrain terrain; // TODO GameInfo
|
private final Terrain terrain; // TODO GameInfo
|
||||||
|
private final Wind wind;
|
||||||
private TurretListener listener;
|
private TurretListener listener;
|
||||||
|
|
||||||
public Turret(boolean server, Terrain terrain) {
|
public Turret(boolean server, Terrain terrain, Wind wind) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.turretX = (server ? 5 : Constants.WIDTH - 5);
|
this.turretX = (server ? 5 : Constants.WIDTH - 5);
|
||||||
this.terrain = terrain;
|
this.terrain = terrain;
|
||||||
|
this.wind = wind;
|
||||||
barrelRadius = Constants.WIDTH / 20;
|
barrelRadius = Constants.WIDTH / 20;
|
||||||
shootInfo = new ShootInfo();
|
shootInfo = new ShootInfo();
|
||||||
reinit();
|
reinit();
|
||||||
@ -80,7 +82,7 @@ public class Turret implements Constants {
|
|||||||
double x = barrelX;
|
double x = barrelX;
|
||||||
double y = barrelY;
|
double y = barrelY;
|
||||||
final double speed = shotPower * (Constants.WIDTH / 80d);
|
final double speed = shotPower * (Constants.WIDTH / 80d);
|
||||||
final double windSpeed = 0d;
|
final double windSpeed = wind.getSpeed();
|
||||||
final double speedX = speed * Math.cos(barrelAngle);
|
final double speedX = speed * Math.cos(barrelAngle);
|
||||||
final double vsin = speed * Math.sin(barrelAngle);
|
final double vsin = speed * Math.sin(barrelAngle);
|
||||||
|
|
||||||
@ -90,7 +92,7 @@ public class Turret implements Constants {
|
|||||||
final double speedY = vsin - GRAVITATION_ACCELERATION * t;
|
final double speedY = vsin - GRAVITATION_ACCELERATION * t;
|
||||||
// The longer the missile flight, the greater the wind impact.
|
// The longer the missile flight, the greater the wind impact.
|
||||||
if (server) x += speedX + Math.sin(t) * windSpeed;
|
if (server) x += speedX + Math.sin(t) * windSpeed;
|
||||||
else x -= speedX + Math.sin(t) * windSpeed;
|
else x -= speedX + Math.sin(t) * -windSpeed;
|
||||||
y += speedY;
|
y += speedY;
|
||||||
t += 0.01;
|
t += 0.01;
|
||||||
|
|
||||||
@ -137,7 +139,7 @@ public class Turret implements Constants {
|
|||||||
shootInfo.x = barrelX;
|
shootInfo.x = barrelX;
|
||||||
shootInfo.y = barrelY;
|
shootInfo.y = barrelY;
|
||||||
final double speed = shotPower * (Constants.WIDTH / 80d);
|
final double speed = shotPower * (Constants.WIDTH / 80d);
|
||||||
shootInfo.windSpeed = 0d;//Wind.getInstance().getSpeed();
|
shootInfo.windSpeed = wind.getSpeed() * (server ? 1 : -1);
|
||||||
shootInfo.speedX = speed * Math.cos(barrelAngle);
|
shootInfo.speedX = speed * Math.cos(barrelAngle);
|
||||||
shootInfo.vsin = speed * Math.sin(barrelAngle);
|
shootInfo.vsin = speed * Math.sin(barrelAngle);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user