diff --git a/racevisionGame/src/main/java/shared/dataInput/EmptyBoatDataSource.java b/racevisionGame/src/main/java/shared/dataInput/EmptyBoatDataSource.java index 7a8d2151..1579c0f0 100644 --- a/racevisionGame/src/main/java/shared/dataInput/EmptyBoatDataSource.java +++ b/racevisionGame/src/main/java/shared/dataInput/EmptyBoatDataSource.java @@ -22,7 +22,7 @@ public class EmptyBoatDataSource implements BoatDataSource { private final Map markerMap = new HashMap<>(); - private int sequenceNumber = 0; + private int sequenceNumber = -1; public EmptyBoatDataSource() { diff --git a/racevisionGame/src/main/java/shared/dataInput/EmptyRaceDataSource.java b/racevisionGame/src/main/java/shared/dataInput/EmptyRaceDataSource.java index 676d7e70..e395e51f 100644 --- a/racevisionGame/src/main/java/shared/dataInput/EmptyRaceDataSource.java +++ b/racevisionGame/src/main/java/shared/dataInput/EmptyRaceDataSource.java @@ -84,7 +84,7 @@ public class EmptyRaceDataSource implements RaceDataSource { private RaceTypeEnum raceType = RaceTypeEnum.NOT_A_RACE_TYPE; - private int sequenceNumber = 0; + private int sequenceNumber = -1; public EmptyRaceDataSource() { diff --git a/racevisionGame/src/main/java/shared/dataInput/EmptyRegattaDataSource.java b/racevisionGame/src/main/java/shared/dataInput/EmptyRegattaDataSource.java index 1546972e..2fdf70c6 100644 --- a/racevisionGame/src/main/java/shared/dataInput/EmptyRegattaDataSource.java +++ b/racevisionGame/src/main/java/shared/dataInput/EmptyRegattaDataSource.java @@ -60,7 +60,7 @@ public class EmptyRegattaDataSource implements RegattaDataSource { - private int sequenceNumber = 0; + private int sequenceNumber = -1; public EmptyRegattaDataSource() { diff --git a/racevisionGame/src/main/java/shared/model/RaceState.java b/racevisionGame/src/main/java/shared/model/RaceState.java index b4a845e2..44debda8 100644 --- a/racevisionGame/src/main/java/shared/model/RaceState.java +++ b/racevisionGame/src/main/java/shared/model/RaceState.java @@ -148,9 +148,11 @@ public abstract class RaceState extends Observable{ * @param raceDataSource New race data source. */ public void setRaceDataSource(RaceDataSource raceDataSource) { - this.raceDataSource = raceDataSource; - this.getRaceClock().setStartingTime(raceDataSource.getStartDateTime()); - useLegsList(raceDataSource.getLegs()); + if ((this.raceDataSource == null) || (raceDataSource.getSequenceNumber() > this.raceDataSource.getSequenceNumber())) { + this.raceDataSource = raceDataSource; + this.getRaceClock().setStartingTime(raceDataSource.getStartDateTime()); + useLegsList(raceDataSource.getLegs()); + } } /** @@ -158,7 +160,9 @@ public abstract class RaceState extends Observable{ * @param boatDataSource New boat data source. */ public void setBoatDataSource(BoatDataSource boatDataSource) { - this.boatDataSource = boatDataSource; + if ((this.boatDataSource == null) || (boatDataSource.getSequenceNumber() > this.boatDataSource.getSequenceNumber())) { + this.boatDataSource = boatDataSource; + } } /** @@ -166,7 +170,9 @@ public abstract class RaceState extends Observable{ * @param regattaDataSource New regatta data source. */ public void setRegattaDataSource(RegattaDataSource regattaDataSource) { - this.regattaDataSource = regattaDataSource; + if ((this.regattaDataSource == null) || (regattaDataSource.getSequenceNumber() > this.regattaDataSource.getSequenceNumber())) { + this.regattaDataSource = regattaDataSource; + } } diff --git a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java index 733d20e0..57efb862 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java @@ -15,11 +15,13 @@ import javafx.scene.control.Label; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; +import javafx.scene.paint.Color; import javafx.scene.paint.PhongMaterial; import javafx.scene.shape.MeshView; import mock.app.Event; import network.Messages.Enums.RaceStatusEnum; import network.Messages.Enums.RequestToJoinEnum; +import shared.model.Boat; import visualiser.app.App; import visualiser.gameController.ControllerClient; import visualiser.layout.SeaSurface; @@ -124,61 +126,67 @@ public class InGameLobbyController extends Controller { @Override public void onChanged(Change change) { - Platform.runLater( - () -> { - while (change.next()){ - if (change.wasAdded() || change.wasRemoved() || change.wasUpdated()){ - try{ - resetLobby(); - int count = 0; - int row = 0; - for (VisualiserBoat boat :visualiserRaceEvent.getVisualiserRaceState().getBoats()) { - View3D playerBoatToSet = new View3D(); - playerBoatToSet.setItems(subjects); - - playerContainer.add(playerBoatToSet, (count % 3) , row); - playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10)); - - SeaSurface sea = new SeaSurface(750, 200); - sea.setX(250); - sea.setZ(210); - subjects.add(sea); - - MeshView mesh = new MeshView(importer.getImport()); - PhongMaterial boatColorMat = new PhongMaterial(boat.getColor()); - mesh.setMaterial(boatColorMat); - Subject3D subject = new Subject3D(mesh,0); - subjects.add(subject); - - playerBoatToSet.setDistance(50); - playerBoatToSet.setYaw(45); - playerBoatToSet.setPitch(20); - - - - AnimationTimer rotate = new AnimationTimer() { - @Override - public void handle(long now) { - subject.setHeading(subject.getHeading().getAngle() + 0.1); - } - }; - rotate.start(); - - allPlayerLabels.get(count).setText(boat.getName()); - allPlayerLabels.get(count).toFront(); - count += 1; - if (count > 2){ - row = 1; - } - } - } - catch(ConcurrentModificationException e){ - } - } + Platform.runLater(() -> { + while (change.next()) { + if (change.wasAdded() || change.wasRemoved() || change.wasUpdated()) { + populateLobby(); + } + } + }); + } + + public void populateLobby() { + + try{ + resetLobby(); + int count = 0; + int row = 0; + + for (VisualiserBoat boat :visualiserRaceEvent.getVisualiserRaceState().getBoats()) { + View3D playerBoatToSet = new View3D(); + playerBoatToSet.setItems(subjects); + + playerContainer.add(playerBoatToSet, (count % 3) , row); + playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10)); + + SeaSurface sea = new SeaSurface(750, 200); + sea.setX(250); + sea.setZ(210); + subjects.add(sea); + + MeshView mesh = new MeshView(importer.getImport()); + PhongMaterial boatColorMat = new PhongMaterial(boat.getColor()); + mesh.setMaterial(boatColorMat); + Subject3D subject = new Subject3D(mesh,0); + subjects.add(subject); + + playerBoatToSet.setDistance(50); + playerBoatToSet.setYaw(45); + playerBoatToSet.setPitch(20); + + + + AnimationTimer rotate = new AnimationTimer() { + @Override + public void handle(long now) { + subject.setHeading(subject.getHeading().getAngle() + 0.1); } + }; + rotate.start(); + + allPlayerLabels.get(count).setText(boat.getName()); + allPlayerLabels.get(count).toFront(); + count += 1; + if (count > 2){ + row = 1; } - ); + } + } + catch(ConcurrentModificationException e){ + e.printStackTrace(); + } } + } /* private void populatePlayers(ListChangeListener.Change change){ @@ -191,7 +199,6 @@ public class InGameLobbyController extends Controller { //Initialises the race clock. initialiseRaceClock(this.visualiserRaceEvent.getVisualiserRaceState()); - //Starts the race countdown timer. countdownTimer(); } @@ -227,10 +234,9 @@ public class InGameLobbyController extends Controller { new AnimationTimer() { @Override public void handle(long arg0) { - //Get the current race status. RaceStatusEnum raceStatus = visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum(); - + //Try catch for getting interval times try { long interval = ChronoUnit.MILLIS.between(visualiserRaceEvent.getVisualiserRaceState().getRaceClock().getCurrentTime(), visualiserRaceEvent.getVisualiserRaceState().getRaceClock().getStartingTime()); diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java index a294d3fd..4a0316ee 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java @@ -94,7 +94,7 @@ public class VisualiserRaceState extends RaceState { super.setRaceDataSource(raceDataSource); if (getBoatDataSource() != null) { - this.generateVisualiserBoats(this.boats, getBoatDataSource().getBoats(), raceDataSource.getParticipants(), unassignedColors); + this.generateVisualiserBoats(this.boats, getBoatDataSource().getBoats(), getRaceDataSource().getParticipants(), unassignedColors); } initialiseLegCompletionOrder(); @@ -109,7 +109,7 @@ public class VisualiserRaceState extends RaceState { super.setBoatDataSource(boatDataSource); if (getRaceDataSource() != null) { - this.generateVisualiserBoats(this.boats, boatDataSource.getBoats(), getRaceDataSource().getParticipants(), unassignedColors); + this.generateVisualiserBoats(this.boats, getBoatDataSource().getBoats(), getRaceDataSource().getParticipants(), unassignedColors); } }