diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index e8d858a4..a6716807 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -89,7 +89,7 @@ public class GameState implements Runnable {
markOrder = new MarkOrder(); //This could be instantiated at some point with a select map?
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();
}
@@ -184,7 +184,7 @@ public class GameState implements Runnable {
@Override
public void run() {
- while (true) {
+ while (currentStage != GameStages.FINISHED) {
try {
Thread.sleep(1000 / STATE_UPDATES_PER_SECOND);
} catch (InterruptedException e) {
@@ -229,17 +229,24 @@ public class GameState implements Runnable {
* Called periodically in this GameState thread to update the GameState values
*/
public void update() {
+ Boolean raceFinished = true;
+
Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0;
previousUpdateTime = System.currentTimeMillis();
for (ServerYacht yacht : yachts.values()) {
updateVelocity(yacht);
yacht.runAutoPilot();
yacht.updateLocation(timeInterval);
- if (!yacht.getFinishedRace()) {
+ if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
checkForCollision(yacht);
checkForLegProgression(yacht);
+ raceFinished = false;
}
}
+
+ if (raceFinished) {
+ currentStage = GameStages.FINISHED;
+ }
}
@@ -283,7 +290,7 @@ public class GameState implements Runnable {
Double velocity = yacht.getCurrentVelocity();
Double trueWindAngle = Math.abs(windDirection - yacht.getHeading());
Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle);
- Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * 3;
+ Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots);
// TODO: 15/08/17 remove magic numbers from these equations.
if (yacht.getSailIn()) {
if (velocity < maxBoatSpeed - 500) {
@@ -345,6 +352,7 @@ public class GameState implements Runnable {
private void checkForLegProgression(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
+// System.out.println(yacht.getCurrentMarkSeqID());
Boolean hasProgressed;
if (currentMarkSeqID == 0) {
@@ -493,7 +501,6 @@ public class GameState implements Runnable {
Boolean isClockwiseCross = GeoUtility.isClockwise(mark1, mark2, prevMark.getMidPoint());
if (crossedLine == 1 && isClockwiseCross || crossedLine == 2 && !isClockwiseCross) {
yacht.setClosestCurrentMark(mark1);
- yacht.setIsFinished(true);
yacht.setBoatStatus(BoatStatus.FINISHED);
return true;
}
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index 8965839d..bd22063c 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -1,5 +1,6 @@
package seng302.gameServer;
+import gherkin.lexer.Fi;
import java.io.IOException;
import java.net.ServerSocket;
import java.time.LocalDateTime;
@@ -48,7 +49,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
GameState.addMarkPassListener(this::broadcastMessage);
terminated = false;
- thread = new Thread(this);
+ thread = new Thread(this, "MainServer");
thread.start();
}
@@ -82,7 +83,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
//FINISHED
else if (GameState.getCurrentStage() == GameStages.FINISHED) {
-
+ terminate();
}
}
diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java
index c8a1e3b5..bae4216c 100644
--- a/src/main/java/seng302/gameServer/ServerToClientThread.java
+++ b/src/main/java/seng302/gameServer/ServerToClientThread.java
@@ -88,7 +88,7 @@ public class ServerToClientThread implements Runnable, Observer {
return;
}
- thread = new Thread(this);
+ thread = new Thread(this, "ServerToClient");
thread.start();
}
diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java
index 2a8a8935..2f10929c 100644
--- a/src/main/java/seng302/model/ServerYacht.java
+++ b/src/main/java/seng302/model/ServerYacht.java
@@ -42,12 +42,11 @@ public class ServerYacht extends Observable {
private Double autoHeading;
//Mark Rounding
- private Integer currentMarkSeqID = 0;
+ private Integer currentMarkSeqID;
private Boolean hasEnteredRoundingZone;
private Mark closestCurrentMark;
private Boolean hasPassedLine;
private Boolean hasPassedThroughGate;
- private Boolean finishedRace;
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
@@ -65,11 +64,11 @@ public class ServerYacht extends Observable {
this.lastLocation = location;
this.heading = 120.0; //In degrees
this.currentVelocity = 0d; //in mms-1
+ this.currentMarkSeqID = 0;
this.hasEnteredRoundingZone = false;
this.hasPassedLine = false;
this.hasPassedThroughGate = false;
- this.finishedRace = false;
}
@@ -322,15 +321,6 @@ public class ServerYacht extends Observable {
return boatName;
}
-
- public void setIsFinished(Boolean isFinished) {
- finishedRace = isFinished;
- }
-
- public Boolean getFinishedRace() {
- return finishedRace;
- }
-
public Double getCurrentVelocity() {
return currentVelocity;
}
diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh
index 08d148e2..e38bf0b7 100644
--- a/src/main/resources/server_config/xml_templates/race.ftlh
+++ b/src/main/resources/server_config/xml_templates/race.ftlh
@@ -35,6 +35,14 @@
+
+
+
+
+
+
+
+