Sync terrain generation on start network game
This commit is contained in:
parent
012c0e49a0
commit
25fab59e20
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user