From 6e9535d78fb40a059ea93c7ec4d24e3469bf7183 Mon Sep 17 00:00:00 2001 From: Michael Rausch Date: Wed, 26 Jul 2017 19:35:59 +1200 Subject: [PATCH] Fixed race timer & Added boats to team position list - Race status messages are sent at regular intervals instead of once at race start - Boat positions are initialised on the Team Position list - Timer counts up from when host clicks ready Tags: #story[377] --- .../seng302/client/ClientPacketParser.java | 9 ++++++--- .../controllers/RaceViewController.java | 16 ++++++++++++++-- .../java/seng302/gameServer/GameState.java | 13 ++++++++++++- .../seng302/gameServer/MainServerThread.java | 17 ++++++++++++++--- .../gameServer/ServerToClientThread.java | 5 ++--- src/main/resources/views/RaceView.fxml | 18 +++++++++--------- 6 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/main/java/seng302/client/ClientPacketParser.java b/src/main/java/seng302/client/ClientPacketParser.java index 4198dc55..c6eb89a3 100644 --- a/src/main/java/seng302/client/ClientPacketParser.java +++ b/src/main/java/seng302/client/ClientPacketParser.java @@ -223,18 +223,21 @@ public class ClientPacketParser { private static void setBoatLegPosition(Yacht updatingBoat, Integer leg){ Integer placing = 1; - if (leg != updatingBoat.getLegNumber() && (raceStarted || raceFinished)) { + + if (/* TODO implement when we are getting this data /TODO leg != updatingBoat.getLegNumber() && */(raceStarted || raceFinished)) { for (Yacht boat : boats.values()) { + placing = boat.getSourceId(); + /* See above to-do if (boat.getLegNumber() != null && leg <= boat.getLegNumber()){ placing += 1; - } + }*/ } updatingBoat.setPosition(placing.toString()); updatingBoat.setLegNumber(leg); boatsPos.putIfAbsent(placing, updatingBoat); boatsPos.replace(placing, updatingBoat); } else if(updatingBoat.getLegNumber() == null){ - updatingBoat.setPosition("1"); + updatingBoat.setPosition("-"); updatingBoat.setLegNumber(leg); } } diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 436da210..9bbc0f06 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -287,6 +287,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel updateWindDirection(); // updateOrder(); updateBoatSelectionComboBox(); + updateOrder(); }) ); @@ -383,9 +384,12 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } if (ClientPacketParser.isRaceStarted()) { + /* for (Yacht boat : ClientPacketParser.getBoatsPos().values()) { - if (participantIDs.contains(boat.getSourceId())) { // check if the boat is racing - if (boat.getBoatStatus() == 3) { // 3 is finish status + System.out.println("Hi tjere" + boat.getBoatName()); + if (participantIDs.contains(boat.getSourceId()) || true + ) { // check if the boat is racing + if (boat.getBoatStatus() == 69) { // 3 is finish status Text textToAdd = new Text(boat.getPosition() + ". " + boat.getShortName() + " (Finished)"); textToAdd.setFill(Paint.valueOf("#d3d3d3")); @@ -397,9 +401,17 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel textToAdd.setFill(Paint.valueOf("#d3d3d3")); textToAdd.setStyle(""); positionVbox.getChildren().add(textToAdd); + System.out.println("Adding " + textToAdd.getText()); } } } + */ + for (Yacht boat : ClientPacketParser.getBoats().values()){ + Text textToAdd = new Text(boat.getSourceId() + ". " + boat.getShortName() + " "); + textToAdd.setFill(Paint.valueOf("#d3d3d3")); + textToAdd.setStyle(""); + positionVbox.getChildren().add(textToAdd); + } } else { for (Yacht boat : ClientPacketParser.getBoats().values()) { if (participantIDs.contains(boat.getSourceId())) { // check if the boat is racing diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index abd46b51..ff92f6a5 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -25,7 +25,10 @@ public class GameState implements Runnable { private static Map yachts; private static Boolean isRaceStarted; private static GameStages currentStage; - + + private static long startTime = System.currentTimeMillis(); + + public GameState(String hostIpAddress) { windDirection = 170d; windSpeed = 10000d; @@ -79,9 +82,17 @@ public class GameState implements Runnable { } public static void setCurrentStage(GameStages currentStage) { + if (currentStage == GameStages.RACING){ + startTime = System.currentTimeMillis(); + } + GameState.currentStage = currentStage; } + public static long getStartTime(){ + return startTime; + } + public static Double getWindDirection() { return windDirection; } diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index a5021985..85d5c698 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -11,7 +11,10 @@ import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.PriorityBlockingQueue; +import java.util.logging.Logger; /** * A class describing the overall server, which creates and collects server threads for each client @@ -133,8 +136,16 @@ public class MainServerThread extends Observable implements Runnable, ClientConn } public void startGame() { - for (ServerToClientThread serverToClientThread : serverToClientThreads) { - serverToClientThread.sendRaceStatusMessage(); - } + Timer t = new Timer(); + + t.schedule(new TimerTask() { + @Override + public void run() { + + for (ServerToClientThread serverToClientThread : serverToClientThreads) { + serverToClientThread.sendRaceStatusMessage(); + } + } + }, 0, 500); } } diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 6bb2b596..7411310d 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -340,8 +340,7 @@ public class ServerToClientThread implements Runnable, Observer { public void sendRaceStatusMessage() { // variables taken from GameServerThread - int TIME_TILL_RACE_START = 20 * 1000; - long startTime = System.currentTimeMillis() + TIME_TILL_RACE_START; + List boatSubMessages = new ArrayList<>(); BoatStatus boatStatus; @@ -369,7 +368,7 @@ public class ServerToClientThread implements Runnable, Observer { raceStatus = RaceStatus.WARNING; } - sendMessage(new RaceStatusMessage(1, raceStatus, startTime, GameState.getWindDirection(), + sendMessage(new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), GameState.getWindDirection(), GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(), RaceType.MATCH_RACE, 1, boatSubMessages)); } diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index ea453f32..cbe3b2dd 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -20,12 +20,12 @@ -