From 08f203a0f8eb82de66694ebc64488af3a6a0ead3 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Tue, 2 May 2017 20:13:39 +1200 Subject: [PATCH] Added race statuses for before the race has started. 3 min -> 1 min is warning, 1 min -> 0 min is preparatory. -Boat locations (spread across start line) are also broad casted #story[778] --- mock/src/main/java/seng302/Model/Race.java | 27 ++++++++++++++++--- .../main/java/seng302/VisualiserInput.java | 4 +-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index 7159ec0a..fafb81e8 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -7,6 +7,7 @@ import javafx.collections.ObservableList; import org.geotools.referencing.GeodeticCalculator; +import org.joda.time.tz.UTCProvider; import seng302.Constants; import seng302.DataInput.RaceDataSource; import seng302.MockOutput; @@ -31,7 +32,7 @@ public class Race implements Runnable { protected int boatsFinished = 0; protected long totalTimeElapsed; protected int scaleFactor; - protected int PRERACE_TIME = 12000; //time in milliseconds to pause during pre-race + protected int PRERACE_TIME = 180000; //time in milliseconds to pause during pre-race. At the moment, 3 minutes protected boolean countdownFinish = false; protected boolean runRace = true; private int lastFPS = 20; @@ -119,13 +120,33 @@ public class Race implements Runnable { @Override public void handle(long arg0) { timeLeft = startTime - currentTime; - if (timeLeft <= 0) { + ArrayList boatStatusMessages = new ArrayList<>(); + //For each boat, we update it's position, and generate a BoatLocationMessage. + for (int i = 0; i < startingBoats.size(); i++) { + Boat boat = startingBoats.get((i + boatOffset) % startingBoats.size()); + if (boat != null) { + mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading()); + boatStatusMessages.add(new BoatStatusMessage(boat.getSourceID(), + boat.getCurrentLeg().getLegNumber() >= 0 ? BoatStatus.RACING : BoatStatus.DNF, boat.getCurrentLeg().getLegNumber())); + } + } + boatOffset = (boatOffset + 1) % (startingBoats.size()); + + + + if (timeLeft <= 60000/scaleFactor) { + RaceStatus raceStatus = new RaceStatus(System.currentTimeMillis(), raceId, 2, 2, boatStatusMessages); + mockOutput.parseRaceStatus(raceStatus); + } + else if (timeLeft <= 0) { countdownFinish = true; stop(); if (runRace) { simulateRace(); } } else { + RaceStatus raceStatus = new RaceStatus(System.currentTimeMillis(), raceId, 1, 2, boatStatusMessages); + mockOutput.parseRaceStatus(raceStatus); currentTimeInSeconds = (timeLeft * scaleFactor) / 1000; minutes = currentTimeInSeconds / 60; remainingSeconds = currentTimeInSeconds % 60; @@ -181,7 +202,7 @@ public class Race implements Runnable { } } boatOffset = (boatOffset + 1) % (startingBoats.size()); - RaceStatus raceStatus = new RaceStatus(totalTimeElapsed, raceId, 3, 2, boatStatusMessages); + RaceStatus raceStatus = new RaceStatus(System.currentTimeMillis(), raceId, 3, 2, boatStatusMessages); mockOutput.parseRaceStatus(raceStatus); } } diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index 38e93f4a..b1ab21de 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -191,7 +191,7 @@ public class VisualiserInput implements Runnable // System.out.println("HeartBeat Message! " + heartbeatSeqNum); break; case RACESTATUS: - System.out.println("Race Status Message"); +// System.out.println("Race Status Message"); raceStatus = ((RaceStatus) data); for (BoatStatusMessage msg: raceStatus.getBoatStatusMessages()){ boatStatus.put(msg.getSourceID(), msg); @@ -244,7 +244,7 @@ public class VisualiserInput implements Runnable //no decoder break; case BOATLOCATION: - System.out.println("Boat Location!"); +// System.out.println("Boat Location!"); BoatLocationMessage msg = (BoatLocationMessage) data; if (boatLocation.containsKey(msg.getSourceID())){ if (msg.getTime() > boatLocation.get(msg.getSourceID()).getTime()){