From 101dadc003d3820830161ee49410707e6e67a619 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Thu, 6 Apr 2017 17:11:24 +1200 Subject: [PATCH] Gave BoatInRace a track property that stores the coordinates of the track. Added a method in ResizableRaceCanvas that draws the points on the track every time the canvas updates. [Story 25] --- src/main/java/seng302/Model/BoatInRace.java | 22 +++++++++++++++++++ .../seng302/Model/ResizableRaceCanvas.java | 12 ++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/main/java/seng302/Model/BoatInRace.java b/src/main/java/seng302/Model/BoatInRace.java index d3086741..87d8165d 100644 --- a/src/main/java/seng302/Model/BoatInRace.java +++ b/src/main/java/seng302/Model/BoatInRace.java @@ -9,6 +9,8 @@ import seng302.Constants; import seng302.GPSCoordinate; import java.awt.geom.Point2D; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; /** * Boat in the Race extends Boat. @@ -26,6 +28,10 @@ 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; /** * Constructor method. @@ -250,4 +256,20 @@ public class BoatInRace extends Boat { public void setPosition(int position) { this.position.set(Integer.toString(position + 1)); } + + public boolean addTrackPoint(GPSCoordinate coordinate) { + Boolean added = System.currentTimeMillis() >= nextValidTime; + if (added && this.started && !this.finished) { + nextValidTime = System.currentTimeMillis() + TRACK_POINT_TIME_INTERVAL; + track.add(coordinate); + if (track.size() > TRACK_POINT_LIMIT) { + track.remove(); + } + } + return added; + } + + public Queue getTrack() { + return track; + } } diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index 00a0d8e1..1608b0f1 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -281,6 +281,7 @@ public class ResizableRaceCanvas extends Canvas { } else { displayBoat(boat, 0); } + addTrackPoint(boat); if (raceAnno) displayText(boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); @@ -288,6 +289,17 @@ public class ResizableRaceCanvas extends Canvas { } } + private void addTrackPoint(BoatInRace boat) { + if (boat.addTrackPoint(boat.getCurrentPosition())) { + GraphCoordinate coordinate = this.map.convertGPS(boat.getCurrentPosition()); + } + for (GPSCoordinate coordinate : boat.getTrack()) { + GraphCoordinate scaledCoordinate = this.map.convertGPS(coordinate); + gc.setFill(boat.getColour()); + gc.fillOval(scaledCoordinate.getX(), scaledCoordinate.getY(), 5, 5); + } + } + public void setRaceBoundaries(ArrayList boundaries) { this.raceBoundaries = new ArrayList<>(); for (GPSCoordinate bound : boundaries) {