From 5444b872bd3127dff9d0313d1fb73ab109aad87e Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 1 May 2017 20:13:16 +1200 Subject: [PATCH 1/2] Fixed GPs Coordinates as well as got Boats to display - Fixed GPS conversion number being wrong (extra 1) - Fixed Boats displaying as the boat = null (cough Joseph) was stopping it from working as well as track is broken. #story[782] --- .../seng302/Networking/Utils/AC35UnitConverter.java | 6 +++--- .../src/main/java/seng302/Mock/RegattaXMLReader.java | 1 + .../src/main/java/seng302/Mock/StreamedRace.java | 5 +---- .../main/java/seng302/Model/ResizableRaceCanvas.java | 10 +++++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java b/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java index 3a99253c..6e5b85a2 100644 --- a/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java +++ b/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java @@ -5,14 +5,14 @@ package seng302.Networking.Utils; */ public class AC35UnitConverter { - public static double convertGPS(long value){ + public static double convertGPS(int value){ //converts latitude or longitue to angle - return (double) value * 180.0/21474836418.0;//2^31 = 21474836418 + return (double) value * 180.0 / 2147483648.0;//2^31 = 2147483648 } public static int convertGPSToInt(double value){ //converts latitude or longitue to angle - return (int) (value * 21474836418.0/180.0);//2^31 = 21474836418 + return (int) (value * 2147483648.0/180.0);//2^31 = 2147483648 } public static double convertHeading(long value){ diff --git a/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java b/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java index e5b4198e..1c0e3fa2 100644 --- a/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java @@ -64,6 +64,7 @@ public class RegattaXMLReader extends XMLReader { String courseName = getTextValueOfNode(attributes, "CourseName"); double centralLatitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralLatitude")); double centralLongitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralLongitude")); + System.out.println(String.format("central lat %s long %s", centralLatitude, centralLongitude)); double centralAltitude = Double.parseDouble(getTextValueOfNode(attributes, "CentralAltitude")); float utcOffset = Float.parseFloat(getTextValueOfNode(attributes, "UtcOffset")); float magneticVariation = Float.parseFloat(getTextValueOfNode(attributes, "MagneticVariation")); diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index b7fb6d72..b7e0b178 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -2,14 +2,11 @@ package seng302.Mock; import javafx.collections.FXCollections; import org.geotools.referencing.GeodeticCalculator; -import seng302.Constants; +import seng302.*; import seng302.Controllers.RaceController; -import seng302.GPSCoordinate; import seng302.Model.*; import seng302.Networking.MessageDecoders.BoatLocationDecoder; import seng302.Networking.Utils.BoatLocationMessage; -import seng302.RaceDataSource; -import seng302.VisualiserInput; import java.awt.geom.Point2D; import java.util.*; diff --git a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java index dc062c20..8775afd1 100644 --- a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -84,7 +84,9 @@ public class ResizableRaceCanvas extends Canvas { } public void displayBoat(Boat boat, double angle, Color colour) { - GraphCoordinate pos = this.map.convertGPS(boat.getCurrentPosition()); + GraphCoordinate pos = this.map.convertGPS(boat.getCurrentPosition());/* + System.out.println(String.format("x%s y%s", pos.getX(), pos.getY())); + System.exit(0);*/ Paint paint = colour; double[] x = {pos.getX() - 6, pos.getX(), pos.getX() + 6}; @@ -325,8 +327,6 @@ public class ResizableRaceCanvas extends Canvas { */ public void updateBoats() { int currentColour = 0; - // TODO Remove null when boats are ready - boats = null; if (boats != null) { for (Boat boat : boats) { boolean finished = boat.getCurrentLeg().getName().equals("Finish") || boat.getCurrentLeg().getName().equals("DNF"); @@ -344,8 +344,8 @@ public class ResizableRaceCanvas extends Canvas { if (raceAnno) displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); - - drawTrack(boat, colours.get(currentColour)); + //TODO this needs to be fixed. + //drawTrack(boat, colours.get(currentColour)); currentColour = (currentColour + 1) % colours.size(); } } From 84bb4fdb8f57fc65ddc850d60b1092ac9f8572d6 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 1 May 2017 20:23:52 +1200 Subject: [PATCH 2/2] Fixed merge issue - Strange Issue where there was a null pointer from convertGPS however it has resolved itself may crop in the future htough. #story[782] --- .../seng302/Mock/StreamedCourseXMLReader.java | 10 +++++----- .../main/java/seng302/Mock/StreamedRace.java | 19 +++++++++++++++---- .../java/seng302/Mock/StreamedRaceTest.java | 4 +++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index 5c8ffbeb..a41c8e7e 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -164,8 +164,7 @@ public class StreamedCourseXMLReader extends XMLReader { * @return value of "compoundMarkID" attribute */ private int getCompoundMarkID(Element element) { - //return Integer.parseInt(element.getAttribute("CompoundMarkID")); - return 3; + return Integer.parseInt(element.getAttribute("CompoundMarkID")); } /** @@ -184,10 +183,11 @@ public class StreamedCourseXMLReader extends XMLReader { private void readCompoundMarkSequence() throws StreamedCourseXMLException { Element nCompoundMarkSequence = (Element) doc.getElementsByTagName("CompoundMarkSequence").item(0); NodeList nCorners = nCompoundMarkSequence.getElementsByTagName("Corner"); - Marker lastMarker = getMarker(getCompoundMarkID((Element)nCorners.item(0))); - String legName = getCompoundMarkName(getCompoundMarkID((Element)nCorners.item(0))); + Element markXML = (Element)nCorners.item(0); + Marker lastMarker = getMarker(getCompoundMarkID(markXML)); + String legName = getCompoundMarkName(getCompoundMarkID(markXML)); for(int i = 1; i < nCorners.getLength(); i++) { - Element markXML = (Element)nCorners.item(i); + markXML = (Element)nCorners.item(i); Marker currentMarker = getMarker(getCompoundMarkID(markXML)); legs.add(new Leg(legName, lastMarker, currentMarker, i-1)); lastMarker = currentMarker; diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index b7e0b178..b9a154f4 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -6,6 +6,9 @@ import seng302.*; import seng302.Controllers.RaceController; import seng302.Model.*; import seng302.Networking.MessageDecoders.BoatLocationDecoder; +import seng302.Networking.Utils.BoatStatusMessage; +import seng302.Networking.Utils.ByteConverter; +import seng302.Networking.Utils.Enums.BoatStatus; import seng302.Networking.Utils.BoatLocationMessage; import java.awt.geom.Point2D; @@ -48,18 +51,26 @@ public class StreamedRace extends Race { } /** - * Checks the position of the boat, this updates the boats current position. + * Checks the position of the boat. * * @param boat Boat that the position is to be updated for. * @param timeElapsed Time that has elapse since the start of the the race. * @see BoatInRace */ protected void checkPosition(Boat boat, long timeElapsed) { - if (boat.getCurrentLeg().getName().toLowerCase().contains("finish")) { - //boat has finished + StreamedCourse raceData = visualiserInput.getCourse(); + BoatStatusMessage boatStatusMessage = visualiserInput.getBoatStatus().get(boat.getSourceID()); + BoatStatus boatStatus = BoatStatus.valueOf(boatStatusMessage.getBoatStatus()); + int legNumber = boatStatusMessage.getLegNumber(); + + if (boatStatus == BoatStatus.DNF) { + boat.setDnf(true); + } else if (boatStatus == BoatStatus.FINISHED || legNumber > raceData.getLegs().size()) { boatsFinished++; - boat.setFinished(true); boat.setTimeFinished(timeElapsed); + boat.setFinished(true); + } else { + boat.setCurrentLeg(raceData.getLegs().get(legNumber)); } //Update the boat display table in the GUI to reflect the leg change updatePositions(); diff --git a/visualiser/src/test/java/seng302/Mock/StreamedRaceTest.java b/visualiser/src/test/java/seng302/Mock/StreamedRaceTest.java index 46caf500..4abe29c4 100644 --- a/visualiser/src/test/java/seng302/Mock/StreamedRaceTest.java +++ b/visualiser/src/test/java/seng302/Mock/StreamedRaceTest.java @@ -76,7 +76,9 @@ public class StreamedRaceTest { "M2", "Gate" }; - for(int i = 0; i < legs.size(); i++) assertEquals(expectedNames[i], legs.get(i).getName()); + for(int i = 0; i < legs.size(); i++) { + assertEquals(expectedNames[i], legs.get(i).getName()); + } } /**