From 4eef872a604a13bdbb6a9becfbf3b01509332ead Mon Sep 17 00:00:00 2001 From: cbt24 Date: Fri, 7 Apr 2017 12:26:43 +1200 Subject: [PATCH] Decoupled drawing and adding track points, added combobox selector for visible boats. --- src/main/java/seng302/Controllers/RaceController.java | 11 +++++++++++ src/main/java/seng302/Model/BoatInRace.java | 10 ++++++++++ src/main/java/seng302/Model/Race.java | 1 + src/main/java/seng302/Model/ResizableRaceCanvas.java | 7 ++----- src/main/resources/scenes/racepane.fxml | 5 +++-- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index 7fb037d2..464a007b 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -4,6 +4,7 @@ package seng302.Controllers; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; @@ -40,6 +41,8 @@ public class RaceController extends Controller { Label timer; @FXML Label FPS; + @FXML + ComboBox visibleTrackSelect; @FXML TableView boatInfoTable; @@ -165,6 +168,7 @@ public class RaceController extends Controller { startScreen.setVisible(false); ongoingRacePane.setVisible(true); + visibleTrackSelect.setItems(FXCollections.observableArrayList(startingBoats)); initializeFPS(); initializeAnnotations(); @@ -191,6 +195,13 @@ public class RaceController extends Controller { FPS.setText((fps)); } + /** + * + */ + public void toggleTrackVisibility() { + visibleTrackSelect.getSelectionModel().getSelectedItem().setTrackVisible(true); + } + /** * Set up FPS display at bottom of screen */ diff --git a/src/main/java/seng302/Model/BoatInRace.java b/src/main/java/seng302/Model/BoatInRace.java index 87d8165d..dd4f8133 100644 --- a/src/main/java/seng302/Model/BoatInRace.java +++ b/src/main/java/seng302/Model/BoatInRace.java @@ -28,10 +28,12 @@ public class BoatInRace extends Boat { private StringProperty currentLegName; private boolean started = false; private StringProperty position; + private Queue track = new ConcurrentLinkedQueue(); private long nextValidTime = 0; private final int TRACK_POINT_TIME_INTERVAL = 1000; // every 2 seconds private final int TRACK_POINT_LIMIT = 10; + private boolean trackVisible = false; /** * Constructor method. @@ -272,4 +274,12 @@ public class BoatInRace extends Boat { public Queue getTrack() { return track; } + + public boolean isTrackVisible() { + return trackVisible; + } + + public void setTrackVisible(boolean trackVisible) { + this.trackVisible = trackVisible; + } } diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 2c181089..c29dccfc 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -203,6 +203,7 @@ public abstract class Race implements Runnable { for (BoatInRace boat : startingBoats) { if (boat != null && !boat.isFinished()) { + boat.addTrackPoint(boat.getCurrentPosition()); updatePosition(boat, Math.round(1000 / lastFPS) > 20 ? 15 : Math.round(1000 / lastFPS)); checkPosition(boat, totalTimeElapsed); } diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index 1608b0f1..5da4bdc4 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -281,7 +281,7 @@ public class ResizableRaceCanvas extends Canvas { } else { displayBoat(boat, 0); } - addTrackPoint(boat); + drawTrackPoint(boat); if (raceAnno) displayText(boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); @@ -289,10 +289,7 @@ public class ResizableRaceCanvas extends Canvas { } } - private void addTrackPoint(BoatInRace boat) { - if (boat.addTrackPoint(boat.getCurrentPosition())) { - GraphCoordinate coordinate = this.map.convertGPS(boat.getCurrentPosition()); - } + private void drawTrackPoint(BoatInRace boat) { for (GPSCoordinate coordinate : boat.getTrack()) { GraphCoordinate scaledCoordinate = this.map.convertGPS(coordinate); gc.setFill(boat.getColour()); diff --git a/src/main/resources/scenes/racepane.fxml b/src/main/resources/scenes/racepane.fxml index f7e5c19f..9a0ebddb 100644 --- a/src/main/resources/scenes/racepane.fxml +++ b/src/main/resources/scenes/racepane.fxml @@ -71,12 +71,13 @@ - + - + +