From 049f0f733194d3fd3d2f6b16357121c8fcefdfbd Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Tue, 2 May 2017 19:50:12 +1200 Subject: [PATCH] Changed main loop so boats are looped through with a different starting boat -This was necessary because one boat (the last one to be processed) would lag and jump, as sometimes there was not enough time for all location messages to be sent before the next lot were added. - The solution was to add a boatOffset, which means while the boats are still processed with3 coming after 2 coming after 1 etc, the loop starts with boat 0, then the next run through it wiull start with boat 1 and so on. -This eliminated the lag (or at least spread it evenly across all the boats) #story[778] --- mock/src/main/java/seng302/Data/RaceData.java | 2 +- .../seng302/DataInput/RaceDataSource.java | 2 +- .../java/seng302/DataInput/RaceXMLReader.java | 8 ++- mock/src/main/java/seng302/Model/Race.java | 10 ++-- .../main/java/seng302/Model/RaceClock.java | 52 ------------------- .../test/java/seng302/Data/RaceDataTest.java | 2 +- .../Networking/PacketDump/AC35DumpReader.java | 1 - 7 files changed, 13 insertions(+), 64 deletions(-) delete mode 100644 mock/src/main/java/seng302/Model/RaceClock.java diff --git a/mock/src/main/java/seng302/Data/RaceData.java b/mock/src/main/java/seng302/Data/RaceData.java index cde1dffb..58409c05 100644 --- a/mock/src/main/java/seng302/Data/RaceData.java +++ b/mock/src/main/java/seng302/Data/RaceData.java @@ -93,7 +93,7 @@ public class RaceData { */ private void appendRaceId() { Element raceIdElement = doc.createElement("RaceID"); - raceIdElement.appendChild(doc.createTextNode(dataSource.getRaceId())); + raceIdElement.appendChild(doc.createTextNode(Integer.toString(dataSource.getRaceId()))); rootElement.appendChild(raceIdElement); } diff --git a/mock/src/main/java/seng302/DataInput/RaceDataSource.java b/mock/src/main/java/seng302/DataInput/RaceDataSource.java index 52e2fd7d..290fba5a 100644 --- a/mock/src/main/java/seng302/DataInput/RaceDataSource.java +++ b/mock/src/main/java/seng302/DataInput/RaceDataSource.java @@ -20,7 +20,7 @@ public interface RaceDataSource { List getMarkers(); - String getRaceId(); + int getRaceId(); String getRaceType(); diff --git a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java index 6a56891d..ea812a65 100644 --- a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java +++ b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java @@ -20,7 +20,7 @@ import java.util.List; */ public class RaceXMLReader extends XMLReader implements RaceDataSource { private static double COORDINATEPADDING = 0.0005; - private String raceID; + private int raceID; private List boats = new ArrayList<>(); private Color[] colors = {Color.BLUEVIOLET, Color.BLACK, Color.RED, Color.ORANGE, Color.DARKOLIVEGREEN, Color.LIMEGREEN};//TODO make this established in xml or come up with a better system. private List legs = new ArrayList<>(); @@ -70,10 +70,8 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { } public void readID() { - NodeList race = doc.getElementsByTagName("race"); - - raceID = getTextValueOfNode((Element) race.item(0), "raceId"); + raceID = Integer.parseInt(getTextValueOfNode((Element) race.item(0), "raceId")); } /** @@ -358,7 +356,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { return mapBottomRight; } - public String getRaceId() { + public int getRaceId() { return raceID; } diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index c4da279c..7159ec0a 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -38,6 +38,7 @@ public class Race implements Runnable { private int raceId; private int dnfChance = 0; //percentage chance a boat fails at each checkpoint private MockOutput mockOutput; + private static int boatOffset = 0; /** @@ -47,11 +48,12 @@ public class Race implements Runnable { * @param legs Number of marks in order that the boats pass in order to complete the race. * @param scaleFactor for race */ - public Race(List boats, List legs, int scaleFactor, MockOutput mockOutput) { + public Race(List boats, List legs, int raceID, int scaleFactor, MockOutput mockOutput) { this.startingBoats = FXCollections.observableArrayList(boats); this.legs = legs; this.legs.add(new Leg("Finish", this.legs.size())); + this.raceId = raceID; this.scaleFactor = scaleFactor; this.mockOutput = mockOutput; @@ -63,7 +65,7 @@ public class Race implements Runnable { } public Race(RaceDataSource raceData, int scaleFactor, MockOutput mockOutput) { - this(raceData.getBoats(), raceData.getLegs(), scaleFactor, mockOutput); + this(raceData.getBoats(), raceData.getLegs(), raceData.getRaceId(), scaleFactor, mockOutput); } /** @@ -163,7 +165,8 @@ public class Race implements Runnable { ArrayList boatStatusMessages = new ArrayList(); //For each boat, we update it's position, and generate a BoatLocationMessage. - for (Boat boat : startingBoats) { + for (int i = 0; i < startingBoats.size(); i++) { + Boat boat = startingBoats.get((i + boatOffset) % startingBoats.size()); if (boat != null) { //Update position. if (boat.getTimeFinished() < 0) { @@ -177,6 +180,7 @@ public class Race implements Runnable { stop(); } } + boatOffset = (boatOffset + 1) % (startingBoats.size()); RaceStatus raceStatus = new RaceStatus(totalTimeElapsed, raceId, 3, 2, boatStatusMessages); mockOutput.parseRaceStatus(raceStatus); } diff --git a/mock/src/main/java/seng302/Model/RaceClock.java b/mock/src/main/java/seng302/Model/RaceClock.java deleted file mode 100644 index 0be11147..00000000 --- a/mock/src/main/java/seng302/Model/RaceClock.java +++ /dev/null @@ -1,52 +0,0 @@ -package seng302.Model; - -import com.github.bfsmith.geotimezone.TimeZoneLookup; -import com.github.bfsmith.geotimezone.TimeZoneResult; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; - - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - -/** - * Created by Gondr on 19/04/2017. - */ -public class RaceClock { - private StringProperty time; - private DateTimeFormatter dateTimeFormatter; - private String timeZone; - private ZoneId zoneId; - - public RaceClock(GPSCoordinate gpsCoordinate) { - TimeZoneLookup timeZoneLookup = new TimeZoneLookup(); - TimeZoneResult timeZoneResult = timeZoneLookup.getTimeZone(gpsCoordinate.getLatitude(), gpsCoordinate.getLongitude()); - zoneId = ZoneId.of(timeZoneResult.getResult()); - LocalDateTime localDateTime = LocalDateTime.now(zoneId); - ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); - dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss z"); - time = new SimpleStringProperty(dateTimeFormatter.format(zonedDateTime)); - DateTimeFormatter timeZoneFormatter = DateTimeFormatter.ofPattern("z"); - timeZone = timeZoneFormatter.format(zonedDateTime); - } - - public void updateTime() { - LocalDateTime localDateTime = LocalDateTime.now(zoneId); - ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); - time.setValue(dateTimeFormatter.format(zonedDateTime)); - } - - public String getTime() { - return time.get(); - } - - public StringProperty timeProperty() { - return time; - } - - public String getTimeZone() { - return timeZone; - } -} diff --git a/mock/src/test/java/seng302/Data/RaceDataTest.java b/mock/src/test/java/seng302/Data/RaceDataTest.java index 378e20ed..5f9ed54c 100644 --- a/mock/src/test/java/seng302/Data/RaceDataTest.java +++ b/mock/src/test/java/seng302/Data/RaceDataTest.java @@ -75,7 +75,7 @@ public class RaceDataTest { String newId = result.substring(result.indexOf("") + 8, result.indexOf("")); String newRaceType = result.substring(result.indexOf("") + 10, result.indexOf("")); - assertTrue(raceDataSource.getRaceId().equals(newId)); + assertTrue(raceDataSource.getRaceId() == Integer.parseInt(newId)); assertTrue(raceDataSource.getRaceType().equals(newRaceType)); } diff --git a/network/src/main/java/seng302/Networking/PacketDump/AC35DumpReader.java b/network/src/main/java/seng302/Networking/PacketDump/AC35DumpReader.java index 1a9d735b..6b27ed4d 100644 --- a/network/src/main/java/seng302/Networking/PacketDump/AC35DumpReader.java +++ b/network/src/main/java/seng302/Networking/PacketDump/AC35DumpReader.java @@ -30,7 +30,6 @@ public class AC35DumpReader { packets = new ArrayList<>(); - System.out.println(dump.length); readAllPackets(); }