From 23dfc6a6bfe43cb77cbe2ff91316c3216b50930f Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Thu, 4 May 2017 10:34:25 +1200 Subject: [PATCH 1/9] Fixed annotation toggles displaying behind course #story[782] --- .../java/seng302/Networking/Utils/BoatLocationMessage.java | 2 -- .../src/main/java/seng302/Controllers/RaceController.java | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java index 4f236747..cfedde63 100644 --- a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java +++ b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java @@ -190,8 +190,6 @@ public class BoatLocationMessage extends AC35Data int coordinateInt = (int) ((coordinate / 180.0) * 2147483648.0); return coordinateInt; - - } /** diff --git a/visualiser/src/main/java/seng302/Controllers/RaceController.java b/visualiser/src/main/java/seng302/Controllers/RaceController.java index b893b3ad..e1195dab 100644 --- a/visualiser/src/main/java/seng302/Controllers/RaceController.java +++ b/visualiser/src/main/java/seng302/Controllers/RaceController.java @@ -6,8 +6,10 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.layout.GridPane; +import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import seng302.Mock.StreamedRace; import seng302.Model.*; @@ -129,7 +131,7 @@ public class RaceController extends Controller { raceMap.drawRaceMap(); raceMap.setVisible(true); - canvasBase.getChildren().add(raceMap); + canvasBase.getChildren().add(0, raceMap); race.setVisible(true); //Initialize save annotation array, fps listener, and annotation listeners From e43353c3221ee8b58dd9dbbfa59bda4d5174f5a7 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Thu, 4 May 2017 12:10:13 +1200 Subject: [PATCH 2/9] Boat table and positions now update. #story[782] --- visualiser/src/main/java/seng302/Mock/StreamedRace.java | 8 ++++++++ visualiser/src/main/java/seng302/Model/Race.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index 90f79355..d0eb7d59 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -58,6 +58,14 @@ public class StreamedRace extends Race { int legNumber = boatStatusMessage.getLegNumber(); + if (legNumber == 0) { + boat.setCurrentLeg(new Leg("Prestart", -1)); + } + + if (legNumber >= 1 && legNumber < legs.size()) { + boat.setCurrentLeg(legs.get(legNumber)); + } + if (boatStatus == BoatStatus.DNF) { boat.setDnf(true); } else if (boatStatus == BoatStatus.FINISHED || legNumber > raceData.getLegs().size()) { diff --git a/visualiser/src/main/java/seng302/Model/Race.java b/visualiser/src/main/java/seng302/Model/Race.java index 6cdd435b..edc40181 100644 --- a/visualiser/src/main/java/seng302/Model/Race.java +++ b/visualiser/src/main/java/seng302/Model/Race.java @@ -247,7 +247,7 @@ public abstract class Race implements Runnable { for(Boat boat: startingBoats) { if(boat != null) { boat.setPosition(Integer.toString(startingBoats.indexOf(boat) + 1)); - if (boat.getCurrentLeg().getName().equals("DNF") || boat.getCurrentLeg().getLegNumber() == 0) + if (boat.isDnf() || !boat.isStarted() || boat.getCurrentLeg().getLegNumber() < 0) boat.setPosition("-"); } } From 94ad164a457759eda7d0e0af0e4ea78b37182af7 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Thu, 4 May 2017 12:11:36 +1200 Subject: [PATCH 3/9] Boat table and positions now update. #story[782] --- visualiser/src/main/java/seng302/Mock/StreamedRace.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index d0eb7d59..27839f76 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -58,10 +58,6 @@ public class StreamedRace extends Race { int legNumber = boatStatusMessage.getLegNumber(); - if (legNumber == 0) { - boat.setCurrentLeg(new Leg("Prestart", -1)); - } - if (legNumber >= 1 && legNumber < legs.size()) { boat.setCurrentLeg(legs.get(legNumber)); } From cfa6ba1c3f4ea16c4bb0446059806a35bf388718 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Thu, 4 May 2017 12:25:50 +1200 Subject: [PATCH 4/9] Fixed speed notbeing displayed from AC35 live data - Turns out the AC35 stream gives the speed in the SOG (speed over ground) section, not the boat speed section #story[782] --- .../Networking/MessageDecoders/BoatLocationDecoder.java | 3 +++ .../java/seng302/Networking/Utils/BoatLocationMessage.java | 2 +- visualiser/src/main/java/seng302/Mock/StreamedRace.java | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/network/src/main/java/seng302/Networking/MessageDecoders/BoatLocationDecoder.java b/network/src/main/java/seng302/Networking/MessageDecoders/BoatLocationDecoder.java index 91c8088c..e2352640 100644 --- a/network/src/main/java/seng302/Networking/MessageDecoders/BoatLocationDecoder.java +++ b/network/src/main/java/seng302/Networking/MessageDecoders/BoatLocationDecoder.java @@ -61,6 +61,9 @@ public class BoatLocationDecoder { currentSet = Arrays.copyOfRange(encodedBoatLocation,52, 54); rudderAngle = Arrays.copyOfRange(encodedBoatLocation,54, 56); +// System.out.println(bytesToInt(sourceID)); +// System.out.println(bytesToInt(boatSpeed)); + message = new BoatLocationMessage(messageVersionNumber, bytesToLong(time), bytesToInt(sourceID), bytesToInt(seqNum), deviceType, bytesToInt(latitude), diff --git a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java index cfedde63..2a60a528 100644 --- a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java +++ b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java @@ -166,7 +166,7 @@ public class BoatLocationMessage extends AC35Data this.roll = 0; this.boatSpeed = convertBoatSpeedDoubleToInt(boatSpeed); this.boatCOG = 0; - this.boatSOG = 0; + this.boatSOG = convertBoatSpeedDoubleToInt(boatSpeed); this.apparentWindSpeed = 0; this.apparentWindAngle = 0; this.trueWindSpeed = 0; diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index 90f79355..eeef8443 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -84,7 +84,7 @@ public class StreamedRace extends Race { double lon = boatLocationMessage.getLongitudeDouble(); boat.setCurrentPosition(new GPSCoordinate(lat, lon)); boat.setHeading(boatLocationMessage.getHeadingDegrees()); - boat.setVelocity(boatLocationMessage.getBoatSpeed() * MMPS_TO_KN); + boat.setVelocity(boatLocationMessage.getBoatSOG() * MMPS_TO_KN); } } From c1fa760ddef92b0ead0718a11b3e4cd2d96cfbba Mon Sep 17 00:00:00 2001 From: cbt24 Date: Thu, 4 May 2017 12:38:21 +1200 Subject: [PATCH 5/9] Streamlined clock handling. - Set starting time from network - Update RaceClock instance to current time from network #story[782] --- .../seng302/Controllers/StartController.java | 31 ++++++++++++++----- .../src/main/resources/scenes/start.fxml | 8 +++-- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/visualiser/src/main/java/seng302/Controllers/StartController.java b/visualiser/src/main/java/seng302/Controllers/StartController.java index 8daf5afa..56d37f63 100644 --- a/visualiser/src/main/java/seng302/Controllers/StartController.java +++ b/visualiser/src/main/java/seng302/Controllers/StartController.java @@ -22,10 +22,8 @@ import java.net.Socket; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.List; -import java.util.Observable; -import java.util.Observer; -import java.util.ResourceBundle; +import java.time.format.DateTimeFormatter; +import java.util.*; /** * Created by esa46 on 6/04/17. @@ -35,6 +33,7 @@ public class StartController extends Controller implements Observer { @FXML private GridPane start; @FXML private AnchorPane startWrapper; @FXML private Label raceTitleLabel; + @FXML private Label raceStartLabel; @FXML private TableView boatNameTable; @FXML private TableColumn boatNameColumn; @@ -103,7 +102,6 @@ public class StartController extends Controller implements Observer { long currentTime = System.currentTimeMillis(); long startTime = currentTime + (PRERACE_TIME/scaleFactor); DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss"); - @Override public void handle(long arg0) { timeLeft = startTime - currentTime; @@ -122,7 +120,7 @@ public class StartController extends Controller implements Observer { }.start(); } - protected void setRaceClock() { + private void setRaceClock() { raceClock = new RaceClock(raceData.getZonedDateTime()); timeZoneTime.textProperty().bind(raceClock.timeStringProperty()); @@ -138,6 +136,20 @@ public class StartController extends Controller implements Observer { }.start(); } + private void setStartingTime() { + String dateFormat = "'Starting time:' HH:mm dd/MM/YYYY"; + Platform.runLater(()-> { + long utcTime = visualiserInput.getRaceStatus().getExpectedStartTime(); + raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(raceClock.getLocalTime(utcTime))); + }); + } + + private void setCurrentTime() { + Platform.runLater(()-> + raceClock.setTime(raceClock.getLocalTime(visualiserInput.getRaceStatus().getCurrentTime())) + ); + } + @Override public void update(Observable o, Object arg) { if(o instanceof StreamedCourse) { @@ -148,7 +160,12 @@ public class StartController extends Controller implements Observer { Platform.runLater(() -> raceTitleLabel.setText(((StreamedCourse)o).getRegattaName())); } if (((StreamedCourse) o).hasReadCourse()) { - Platform.runLater(() -> setRaceClock()); + Platform.runLater(() -> { + setRaceClock(); + while(visualiserInput.getRaceStatus() == null); + setStartingTime(); + setCurrentTime(); + }); } } } diff --git a/visualiser/src/main/resources/scenes/start.fxml b/visualiser/src/main/resources/scenes/start.fxml index aa417926..86598ad6 100644 --- a/visualiser/src/main/resources/scenes/start.fxml +++ b/visualiser/src/main/resources/scenes/start.fxml @@ -1,5 +1,9 @@ + + + + @@ -10,7 +14,7 @@ - + @@ -41,7 +45,7 @@