1
0

Sync terrain generation on start network game

This commit is contained in:
Victor 2014-03-16 14:15:37 +02:00
parent 012c0e49a0
commit 25fab59e20
3 changed files with 52 additions and 7 deletions

View File

@ -45,15 +45,24 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
@Override
public void onStatusChanged(int status, Object data) {
if (serverInstance) serverNetworkStatus(status, data);
else clientNetworkStatus(status, data);
}
private void serverNetworkStatus(int status, Object data) {
switch (status) {
case ON_CONNECT:
gameStarted = true;
terrain = new Terrain(Constants.WIDTH);
terrain.generate(System.currentTimeMillis());
long seed = System.currentTimeMillis();
socketHelper.sendSeed(seed);
startGame(seed);
break;
}
}
serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain);
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain);
private void clientNetworkStatus(int status, Object data) {
switch (status) {
case ON_SEED_RECEIVED:
startGame((long) data);
break;
}
}
@ -82,6 +91,16 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
new Background().draw(g);
g.dispose();
}
private void startGame(long seed) {
terrain = new Terrain(Constants.WIDTH);
terrain.generate(seed);
serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain);
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain);
gameStarted = true;
}
@Override
protected void mousePressed(int x, int y) {

View File

@ -7,7 +7,8 @@ package com.annimon.turrets;
public interface NetworkListener {
public static final int
ON_CONNECT = 1;
ON_CONNECT = 1,
ON_SEED_RECEIVED = 2;
public void onStatusChanged(int status, Object data);
}

View File

@ -27,6 +27,31 @@ public class SocketHelper extends Thread {
@Override
public void run() {
listener.onStatusChanged(NetworkListener.ON_CONNECT, null);
while (true) {
try {
final int status = dis.readInt();
switch (status) {
case NetworkListener.ON_SEED_RECEIVED:
listener.onStatusChanged(status, receiveSeed());
break;
}
} catch (IOException ex) { }
try {
Thread.sleep(200);
} catch (InterruptedException ex) { }
}
}
public void sendSeed(long seed) {
try {
dos.writeInt(NetworkListener.ON_SEED_RECEIVED);
dos.writeLong(seed);
} catch (IOException ex) {}
}
private long receiveSeed() throws IOException {
return dis.readLong();
}
public void close() throws IOException {