Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
Haoming Yin
2017-08-16 16:55:53 +12:00
6 changed files with 50 additions and 49 deletions
@@ -89,7 +89,7 @@ public class GameState implements Runnable {
markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? markOrder = new MarkOrder(); //This could be instantiated at some point with a select map?
markListeners = new ArrayList<>(); markListeners = new ArrayList<>();
new Thread(this).start(); //Run the auto updates on the game state new Thread(this, "GameState").start(); //Run the auto updates on the game state
marks = new MarkOrder().getAllMarks(); marks = new MarkOrder().getAllMarks();
} }
@@ -184,7 +184,7 @@ public class GameState implements Runnable {
@Override @Override
public void run() { public void run() {
while (true) { while (currentStage != GameStages.FINISHED) {
try { try {
Thread.sleep(1000 / STATE_UPDATES_PER_SECOND); Thread.sleep(1000 / STATE_UPDATES_PER_SECOND);
} catch (InterruptedException e) { } catch (InterruptedException e) {
@@ -229,17 +229,24 @@ public class GameState implements Runnable {
* Called periodically in this GameState thread to update the GameState values * Called periodically in this GameState thread to update the GameState values
*/ */
public void update() { public void update() {
Boolean raceFinished = true;
Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0; Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0;
previousUpdateTime = System.currentTimeMillis(); previousUpdateTime = System.currentTimeMillis();
for (ServerYacht yacht : yachts.values()) { for (ServerYacht yacht : yachts.values()) {
updateVelocity(yacht); updateVelocity(yacht);
yacht.runAutoPilot(); yacht.runAutoPilot();
yacht.updateLocation(timeInterval); yacht.updateLocation(timeInterval);
if (!yacht.getFinishedRace()) { if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
checkForCollision(yacht); checkForCollision(yacht);
checkForLegProgression(yacht); checkForLegProgression(yacht);
raceFinished = false;
} }
} }
if (raceFinished) {
currentStage = GameStages.FINISHED;
}
} }
@@ -345,6 +352,7 @@ public class GameState implements Runnable {
private void checkForLegProgression(ServerYacht yacht) { private void checkForLegProgression(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
// System.out.println(yacht.getCurrentMarkSeqID());
Boolean hasProgressed; Boolean hasProgressed;
if (currentMarkSeqID == 0) { if (currentMarkSeqID == 0) {
@@ -493,7 +501,6 @@ public class GameState implements Runnable {
Boolean isClockwiseCross = GeoUtility.isClockwise(mark1, mark2, prevMark.getMidPoint()); Boolean isClockwiseCross = GeoUtility.isClockwise(mark1, mark2, prevMark.getMidPoint());
if (crossedLine == 1 && isClockwiseCross || crossedLine == 2 && !isClockwiseCross) { if (crossedLine == 1 && isClockwiseCross || crossedLine == 2 && !isClockwiseCross) {
yacht.setClosestCurrentMark(mark1); yacht.setClosestCurrentMark(mark1);
yacht.setIsFinished(true);
yacht.setBoatStatus(BoatStatus.FINISHED); yacht.setBoatStatus(BoatStatus.FINISHED);
return true; return true;
} }
@@ -1,12 +1,18 @@
package seng302.gameServer; package seng302.gameServer;
import gherkin.lexer.Fi;
import java.io.IOException; import java.io.IOException;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import seng302.gameServer.server.messages.BoatSubMessage;
import seng302.gameServer.server.messages.Message; import seng302.gameServer.server.messages.Message;
import seng302.gameServer.server.messages.RaceStatus;
import seng302.gameServer.server.messages.RaceStatusMessage;
import seng302.gameServer.server.messages.RaceType;
import seng302.model.GeoPoint; import seng302.model.GeoPoint;
import seng302.model.Player; import seng302.model.Player;
import seng302.model.PolarTable; import seng302.model.PolarTable;
@@ -43,7 +49,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv")); PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
GameState.addMarkPassListener(this::broadcastMessage); GameState.addMarkPassListener(this::broadcastMessage);
terminated = false; terminated = false;
thread = new Thread(this); thread = new Thread(this, "MainServer");
thread.start(); thread.start();
} }
@@ -77,7 +83,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
//FINISHED //FINISHED
else if (GameState.getCurrentStage() == GameStages.FINISHED) { else if (GameState.getCurrentStage() == GameStages.FINISHED) {
terminate();
} }
} }
@@ -159,14 +165,37 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
t.schedule(new TimerTask() { t.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
broadcastMessage(makeRaceStatusMessage());
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
serverToClientThread.sendRaceStatusMessage();
}
} }
}, 0, 500); }, 0, 500);
} }
private RaceStatusMessage makeRaceStatusMessage() {
// variables taken from GameServerThread
List<BoatSubMessage> boatSubMessages = new ArrayList<>();
RaceStatus raceStatus;
for (Player player : GameState.getPlayers()) {
ServerYacht y = player.getYacht();
BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(), 0,
0, 0, 1234L,
1234L);
boatSubMessages.add(m);
}
if (GameState.getCurrentStage() == GameStages.RACING) {
raceStatus = RaceStatus.STARTED;
} else {
raceStatus = RaceStatus.WARNING;
}
return new RaceStatusMessage(1, raceStatus, GameState.getStartTime(),
GameState.getWindDirection(),
GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
RaceType.MATCH_RACE, 1, boatSubMessages);
}
public void terminate() { public void terminate() {
terminated = true; terminated = true;
} }
@@ -88,7 +88,7 @@ public class ServerToClientThread implements Runnable, Observer {
return; return;
} }
thread = new Thread(this); thread = new Thread(this, "ServerToClient");
thread.start(); thread.start();
} }
@@ -318,31 +318,6 @@ public class ServerToClientThread implements Runnable, Observer {
return thread; return thread;
} }
public void sendRaceStatusMessage() {
// variables taken from GameServerThread
List<BoatSubMessage> boatSubMessages = new ArrayList<>();
RaceStatus raceStatus;
for (Player player : GameState.getPlayers()) {
ServerYacht y = player.getYacht();
BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(), 0,
0, 0, 1234L,
1234L);
boatSubMessages.add(m);
}
if (GameState.getCurrentStage() == GameStages.RACING) {
raceStatus = RaceStatus.STARTED;
} else {
raceStatus = RaceStatus.WARNING;
}
sendMessage(new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), GameState.getWindDirection(),
GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
RaceType.MATCH_RACE, 1, boatSubMessages));
}
public Socket getSocket() { public Socket getSocket() {
return socket; return socket;
} }
+2 -12
View File
@@ -42,12 +42,11 @@ public class ServerYacht extends Observable {
private Double autoHeading; private Double autoHeading;
//Mark Rounding //Mark Rounding
private Integer currentMarkSeqID = 0; private Integer currentMarkSeqID;
private Boolean hasEnteredRoundingZone; private Boolean hasEnteredRoundingZone;
private Mark closestCurrentMark; private Mark closestCurrentMark;
private Boolean hasPassedLine; private Boolean hasPassedLine;
private Boolean hasPassedThroughGate; private Boolean hasPassedThroughGate;
private Boolean finishedRace;
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName, public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
@@ -65,11 +64,11 @@ public class ServerYacht extends Observable {
this.lastLocation = location; this.lastLocation = location;
this.heading = 120.0; //In degrees this.heading = 120.0; //In degrees
this.currentVelocity = 0d; //in mms-1 this.currentVelocity = 0d; //in mms-1
this.currentMarkSeqID = 0;
this.hasEnteredRoundingZone = false; this.hasEnteredRoundingZone = false;
this.hasPassedLine = false; this.hasPassedLine = false;
this.hasPassedThroughGate = false; this.hasPassedThroughGate = false;
this.finishedRace = false;
} }
@@ -322,15 +321,6 @@ public class ServerYacht extends Observable {
return boatName; return boatName;
} }
public void setIsFinished(Boolean isFinished) {
finishedRace = isFinished;
}
public Boolean getFinishedRace() {
return finishedRace;
}
public Double getCurrentVelocity() { public Double getCurrentVelocity() {
return currentVelocity; return currentVelocity;
} }
@@ -290,6 +290,7 @@ public class GameClient {
} }
} }
if (raceFinished == true) { if (raceFinished == true) {
close();
loadFinishScreenView(); loadFinishScreenView();
} }
@@ -630,7 +630,6 @@ public class GameView extends Pane {
public void setBoatAsPlayer (ClientYacht playerYacht) { public void setBoatAsPlayer (ClientYacht playerYacht) {
this.playerYacht = playerYacht; this.playerYacht = playerYacht;
this.playerYacht.toggleSail();
boatObjects.get(playerYacht).setAsPlayer(); boatObjects.get(playerYacht).setAsPlayer();
annotations.get(playerYacht).addAnnotation( annotations.get(playerYacht).addAnnotation(
"velocity", "velocity",