1
0

Sync moves in network game

This commit is contained in:
Victor 2014-03-16 14:57:55 +02:00
parent 061c7647c3
commit 63f76b6151

View File

@ -19,7 +19,7 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
private final boolean serverInstance; private final boolean serverInstance;
private SocketHelper socketHelper; private SocketHelper socketHelper;
private boolean gameStarted; private boolean gameStarted, serverMove;
public GameCanvas(boolean serverInstance) { public GameCanvas(boolean serverInstance) {
this.serverInstance = serverInstance; this.serverInstance = serverInstance;
@ -56,6 +56,10 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
socketHelper.sendSeed(seed); socketHelper.sendSeed(seed);
startGame(seed); startGame(seed);
break; break;
case ON_MOVE_RECEIVED:
clientTurret.setTurretInfo((TurretInfo) data);
clientTurret.shoot(clientTurretListener);
break;
} }
} }
@ -64,6 +68,10 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
case ON_SEED_RECEIVED: case ON_SEED_RECEIVED:
startGame((long) data); startGame((long) data);
break; break;
case ON_MOVE_RECEIVED:
serverTurret.setTurretInfo((TurretInfo) data);
serverTurret.shoot(serverTurretListener);
break;
} }
} }
@ -100,23 +108,52 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain); clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain);
gameStarted = true; gameStarted = true;
serverMove = true;
}
private boolean allowMove() {
return (gameStarted && !(serverInstance ^ serverMove));
} }
@Override @Override
protected void mousePressed(int x, int y) { protected void mousePressed(int x, int y) {
if (!gameStarted) return; if (!allowMove()) return;
clientTurret.setBarrelParams(x, Constants.HEIGHT - y); if (serverInstance) serverTurret.setBarrelParams(x, Constants.HEIGHT - y);
else clientTurret.setBarrelParams(x, Constants.HEIGHT - y);
} }
@Override @Override
protected void mouseReleased(int x, int y) { protected void mouseReleased(int x, int y) {
if (!gameStarted) return; if (!allowMove()) return;
clientTurret.shoot(); if (serverInstance) {
socketHelper.sendMove(serverTurret.getTurretInfo());
serverTurret.shoot(serverTurretListener);
} else {
socketHelper.sendMove(clientTurret.getTurretInfo());
clientTurret.shoot(clientTurretListener);
}
} }
@Override @Override
protected void mouseDragged(int x, int y) { protected void mouseDragged(int x, int y) {
if (!gameStarted) return; if (!allowMove()) return;
clientTurret.setBarrelParams(x, Constants.HEIGHT - y); if (serverInstance) serverTurret.setBarrelParams(x, Constants.HEIGHT - y);
else clientTurret.setBarrelParams(x, Constants.HEIGHT - y);
} }
private Turret.TurretListener serverTurretListener = new Turret.TurretListener() {
@Override
public void shootComplete(int x) {
serverMove = !serverMove;
}
};
private Turret.TurretListener clientTurretListener = new Turret.TurretListener() {
@Override
public void shootComplete(int x) {
serverMove = !serverMove;
}
};
} }