From 75c15d492e8c7ca247eb10c212d72df2c2fcb37a Mon Sep 17 00:00:00 2001 From: fjc40 Date: Fri, 15 Sep 2017 11:24:55 +1200 Subject: [PATCH 1/2] There was a null pointer exception when finishing the race, as the finish leg doesn't have compound marks. --- .../visualiser/Controllers/RaceViewController.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index c2153c1f..e04c5290 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -429,12 +429,14 @@ public class RaceViewController extends Controller { @Override public void handle(long now) { CompoundMark target = boat.getCurrentLeg().getEndCompoundMark(); - Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate()); + if (target != null) { + Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate()); - nextMarkArrow.setX(view3D.getPivot().getX()); - nextMarkArrow.setY(view3D.getPivot().getY()); - nextMarkArrow.setZ(view3D.getPivot().getZ() + 15); - nextMarkArrow.setHeading(headingToMark.degrees()); + nextMarkArrow.setX(view3D.getPivot().getX()); + nextMarkArrow.setY(view3D.getPivot().getY()); + nextMarkArrow.setZ(view3D.getPivot().getZ() + 15); + nextMarkArrow.setHeading(headingToMark.degrees()); + } } }; arrowToNextMark.start(); From 424cd63c59c8bf689f8196764bf21195b91242a4 Mon Sep 17 00:00:00 2001 From: fjc40 Date: Mon, 18 Sep 2017 12:44:10 +1200 Subject: [PATCH 2/2] Should fix the race xml issues where boats get unassigned sometimes. This removes the static raceServer stuff. The Race/Boat/Regatta XML commands only execute if they contain newer data (it checks the sequence number). --- racevisionGame/src/main/java/mock/model/RaceServer.java | 7 ------- .../src/main/java/network/Messages/LatestMessages.java | 3 +-- .../src/main/java/shared/dataInput/BoatXMLReader.java | 4 ++++ .../src/main/java/shared/dataInput/RaceXMLReader.java | 4 ++++ .../src/main/java/shared/dataInput/RegattaXMLReader.java | 4 ++++ .../VisualiserRaceCommands/BoatsXMLMessageCommand.java | 6 +++--- .../VisualiserRaceCommands/RaceXMLMessageCommand.java | 4 +++- .../VisualiserRaceCommands/RegattaXMLMessageCommand.java | 5 +++-- .../VisualiserRaceCommands/XMLMessageCommandFactory.java | 9 ++++++--- 9 files changed, 28 insertions(+), 18 deletions(-) diff --git a/racevisionGame/src/main/java/mock/model/RaceServer.java b/racevisionGame/src/main/java/mock/model/RaceServer.java index 7f213a72..103e4d66 100644 --- a/racevisionGame/src/main/java/mock/model/RaceServer.java +++ b/racevisionGame/src/main/java/mock/model/RaceServer.java @@ -24,7 +24,6 @@ import java.util.logging.Logger; public class RaceServer { private MockRace race; private LatestMessages latestMessages; - private static RaceServer server; private List collisionEvents = new ArrayList<>(); @@ -50,16 +49,10 @@ public class RaceServer { public RaceServer(MockRace race, LatestMessages latestMessages) { - server = this; this.race = race; this.latestMessages = latestMessages; } - public static void staticUpdateXML() { - if (server != null) { - server.updateXMLFiles(); - } - } /** * Parses the race to create a snapshot, and places it in latestMessages. diff --git a/racevisionGame/src/main/java/network/Messages/LatestMessages.java b/racevisionGame/src/main/java/network/Messages/LatestMessages.java index 86f02d91..8b395b1c 100644 --- a/racevisionGame/src/main/java/network/Messages/LatestMessages.java +++ b/racevisionGame/src/main/java/network/Messages/LatestMessages.java @@ -157,11 +157,10 @@ public class LatestMessages extends Observable { return false; } else { - RaceServer.staticUpdateXML(); return true; } } -} \ No newline at end of file +} diff --git a/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java index 25c956d9..d3e77be8 100644 --- a/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java @@ -183,6 +183,10 @@ public class BoatXMLReader extends XMLReader implements BoatDataSource { return sequenceNumber; } + public void setSequenceNumber(int sequenceNumber) { + this.sequenceNumber = sequenceNumber; + } + @Override public void incrementSequenceNumber() { sequenceNumber++; diff --git a/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java index 41d60e5f..af274a9c 100644 --- a/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java @@ -499,6 +499,10 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { return sequenceNumber; } + public void setSequenceNumber(int sequenceNumber) { + this.sequenceNumber = sequenceNumber; + } + @Override public void incrementSequenceNumber() { sequenceNumber++; diff --git a/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java index 36743105..3628c429 100644 --- a/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java @@ -217,6 +217,10 @@ public class RegattaXMLReader extends XMLReader implements RegattaDataSource { return sequenceNumber; } + public void setSequenceNumber(int sequenceNumber) { + this.sequenceNumber = sequenceNumber; + } + @Override public void incrementSequenceNumber() { sequenceNumber++; diff --git a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/BoatsXMLMessageCommand.java b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/BoatsXMLMessageCommand.java index 7f56d745..ce58e8a1 100644 --- a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/BoatsXMLMessageCommand.java +++ b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/BoatsXMLMessageCommand.java @@ -41,8 +41,8 @@ public class BoatsXMLMessageCommand implements Command { @Override public void execute() { - - visualiserRace.setBoatDataSource(boatDataSource); - + if (boatDataSource.getSequenceNumber() > visualiserRace.getBoatDataSource().getSequenceNumber()) { + visualiserRace.setBoatDataSource(boatDataSource); + } } } diff --git a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RaceXMLMessageCommand.java b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RaceXMLMessageCommand.java index 0b194674..dbf20544 100644 --- a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RaceXMLMessageCommand.java +++ b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RaceXMLMessageCommand.java @@ -38,7 +38,9 @@ public class RaceXMLMessageCommand implements Command { @Override public void execute() { - visualiserRace.setRaceDataSource(raceDataSource); + if (raceDataSource.getSequenceNumber() > visualiserRace.getRaceDataSource().getSequenceNumber()) { + visualiserRace.setRaceDataSource(raceDataSource); + } } } diff --git a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RegattaXMLMessageCommand.java b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RegattaXMLMessageCommand.java index 6597e557..ea146d12 100644 --- a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RegattaXMLMessageCommand.java +++ b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/RegattaXMLMessageCommand.java @@ -37,8 +37,9 @@ public class RegattaXMLMessageCommand implements Command { @Override public void execute() { - - visualiserRace.setRegattaDataSource(regattaDataSource); + if (regattaDataSource.getSequenceNumber() > visualiserRace.getRegattaDataSource().getSequenceNumber()) { + visualiserRace.setRegattaDataSource(regattaDataSource); + } } } diff --git a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/XMLMessageCommandFactory.java b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/XMLMessageCommandFactory.java index b9b58f1c..c5e93d8e 100644 --- a/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/XMLMessageCommandFactory.java +++ b/racevisionGame/src/main/java/visualiser/Commands/VisualiserRaceCommands/XMLMessageCommandFactory.java @@ -34,17 +34,20 @@ public class XMLMessageCommandFactory { switch (message.getXmlMsgSubType()) { case BOAT: - BoatDataSource boatDataSource = new BoatXMLReader(message.getXmlMessage(), XMLFileType.Contents); + BoatXMLReader boatDataSource = new BoatXMLReader(message.getXmlMessage(), XMLFileType.Contents); + boatDataSource.setSequenceNumber(message.getSequenceNumber()); return new BoatsXMLMessageCommand(boatDataSource, visualiserRace); case RACE: - RaceDataSource raceDataSource = new RaceXMLReader(message.getXmlMessage(), XMLFileType.Contents); + RaceXMLReader raceDataSource = new RaceXMLReader(message.getXmlMessage(), XMLFileType.Contents); + raceDataSource.setSequenceNumber(message.getSequenceNumber()); return new RaceXMLMessageCommand(raceDataSource, visualiserRace); case REGATTA: - RegattaDataSource regattaDataSource = new RegattaXMLReader(message.getXmlMessage(), XMLFileType.Contents); + RegattaXMLReader regattaDataSource = new RegattaXMLReader(message.getXmlMessage(), XMLFileType.Contents); + regattaDataSource.setSequenceNumber(message.getSequenceNumber()); return new RegattaXMLMessageCommand(regattaDataSource, visualiserRace);