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
|
@Override
|
||||||
public void onStatusChanged(int status, Object data) {
|
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) {
|
switch (status) {
|
||||||
case ON_CONNECT:
|
case ON_CONNECT:
|
||||||
gameStarted = true;
|
long seed = System.currentTimeMillis();
|
||||||
|
socketHelper.sendSeed(seed);
|
||||||
|
startGame(seed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
terrain = new Terrain(Constants.WIDTH);
|
private void clientNetworkStatus(int status, Object data) {
|
||||||
terrain.generate(System.currentTimeMillis());
|
switch (status) {
|
||||||
|
case ON_SEED_RECEIVED:
|
||||||
serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain);
|
startGame((long) data);
|
||||||
clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,6 +92,16 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ
|
|||||||
g.dispose();
|
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
|
@Override
|
||||||
protected void mousePressed(int x, int y) {
|
protected void mousePressed(int x, int y) {
|
||||||
if (!gameStarted) return;
|
if (!gameStarted) return;
|
||||||
|
@ -7,7 +7,8 @@ package com.annimon.turrets;
|
|||||||
public interface NetworkListener {
|
public interface NetworkListener {
|
||||||
|
|
||||||
public static final int
|
public static final int
|
||||||
ON_CONNECT = 1;
|
ON_CONNECT = 1,
|
||||||
|
ON_SEED_RECEIVED = 2;
|
||||||
|
|
||||||
public void onStatusChanged(int status, Object data);
|
public void onStatusChanged(int status, Object data);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,31 @@ public class SocketHelper extends Thread {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onStatusChanged(NetworkListener.ON_CONNECT, null);
|
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 {
|
public void close() throws IOException {
|
||||||
|
Loading…
Reference in New Issue
Block a user