From b07c30704a6c79494ec21f75a14d4107fb0209c7 Mon Sep 17 00:00:00 2001 From: fjc40 Date: Mon, 14 Aug 2017 12:58:05 +1200 Subject: [PATCH 1/7] The trackpoint line is now a line (poly-line) instead of a sequence of circles. A point along the poly-line is added every 250ms. issue #18 --- .../visualiser/model/ResizableRaceCanvas.java | 19 +++++++++++++++++-- .../java/visualiser/model/TrackPoint.java | 14 -------------- .../java/visualiser/model/VisualiserBoat.java | 6 ++---- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 5a0243f6..345fa43b 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -2,6 +2,7 @@ package visualiser.model; import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Paint; import javafx.scene.transform.Rotate; import network.Messages.Enums.BoatStatusEnum; @@ -11,6 +12,7 @@ import shared.model.Mark; import shared.model.RaceClock; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -171,6 +173,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { graphCoordinateB.getX(), graphCoordinateB.getY() ); + } /** @@ -523,15 +526,27 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Apply the boat color. gc.setFill(boat.getColor()); + double[] xPoints = new double[boat.getTrack().size()]; + double[] yPoints = new double[boat.getTrack().size()]; + int index = 0; + //Draw each TrackPoint. for (TrackPoint point : new ArrayList<>(boat.getTrack())) { //Convert the GPSCoordinate to a screen coordinate. GraphCoordinate scaledCoordinate = this.map.convertGPS(point.getCoordinate()); - //Draw a circle for the trackpoint. - gc.fillOval(scaledCoordinate.getX(), scaledCoordinate.getY(), point.getDiameter(), point.getDiameter()); + xPoints[index] = ((double)scaledCoordinate.getX()); + yPoints[index] = ((double)scaledCoordinate.getY()); + + + + index++; } + + + + gc.strokePolyline(xPoints, yPoints, xPoints.length); } } diff --git a/racevisionGame/src/main/java/visualiser/model/TrackPoint.java b/racevisionGame/src/main/java/visualiser/model/TrackPoint.java index 4e0c76c0..f3378a43 100644 --- a/racevisionGame/src/main/java/visualiser/model/TrackPoint.java +++ b/racevisionGame/src/main/java/visualiser/model/TrackPoint.java @@ -34,11 +34,6 @@ public class TrackPoint { */ private final double minAlpha; - /** - * The diameter to draw the track point with. - */ - private final double diameter; - /** * Creates a new track point with fixed GPS coordinates and time, to reach minimum opacity on expiry. @@ -53,7 +48,6 @@ public class TrackPoint { this.expiry = expiry; this.minAlpha = 0.1; - this.diameter = 5d; } @@ -97,12 +91,4 @@ public class TrackPoint { return timeAdded; } - - /** - * Returns the diameter to draw the track point with. - * @return The diameter to draw the track point with. - */ - public double getDiameter() { - return diameter; - } } diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java index 41d0e484..0d32c513 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java @@ -1,7 +1,5 @@ package visualiser.model; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; import javafx.scene.paint.Color; import network.Messages.Enums.BoatStatusEnum; import shared.model.Azimuth; @@ -38,7 +36,7 @@ public class VisualiserBoat extends Boat { /** * The minimum period of time, in milliseconds, between the creation of each track point. */ - private static final long trackPointTimeInterval = 5000; + private static final long trackPointTimeInterval = 250; /** * The number of track points that should be created before fully diminishing the alpha of a given track point. @@ -55,7 +53,7 @@ public class VisualiserBoat extends Boat { /** * Scalar used to scale the boat's wake. */ - private static final double wakeScale = 5; + private static final double wakeScale = 20; /** * If true then this boat has been allocated to the client. From 5a03d97713026c967445a6f59d0e7d9d864d238c Mon Sep 17 00:00:00 2001 From: fjc40 Date: Mon, 14 Aug 2017 13:01:27 +1200 Subject: [PATCH 2/7] Added comment. --- .../src/main/java/visualiser/model/ResizableRaceCanvas.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 345fa43b..b09c4b51 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -530,7 +530,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { double[] yPoints = new double[boat.getTrack().size()]; int index = 0; - //Draw each TrackPoint. + //Copy trackpoint locations to x/y arrays. for (TrackPoint point : new ArrayList<>(boat.getTrack())) { //Convert the GPSCoordinate to a screen coordinate. @@ -539,13 +539,9 @@ public class ResizableRaceCanvas extends ResizableCanvas { xPoints[index] = ((double)scaledCoordinate.getX()); yPoints[index] = ((double)scaledCoordinate.getY()); - - index++; } - - gc.strokePolyline(xPoints, yPoints, xPoints.length); } From 20055b188325c6a0218bb02b46d6a596c46d811d Mon Sep 17 00:00:00 2001 From: fjc40 Date: Wed, 16 Aug 2017 18:10:30 +1200 Subject: [PATCH 3/7] Removed redunant calls in VisualiserRaceState.initialiseBoats(). Slightly refactored ResizableRaceCanvas - removed a redundant drawPoint() function, functions which alter the gc stroke call save/restore. Text is drawn black, at 20pts. The drawBoats() function: instead of drawing everything for each boat, one boat at a time, it draws the track points for all boats, then wake for all boats, etc..., to have better layering. issue #18 --- .../visualiser/model/ResizableRaceCanvas.java | 154 ++++++++++++------ .../java/visualiser/model/VisualiserBoat.java | 2 +- .../visualiser/model/VisualiserRaceState.java | 4 - 3 files changed, 106 insertions(+), 54 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 0d9f0562..986c778d 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -4,6 +4,7 @@ package visualiser.model; import javafx.scene.paint.Color; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Paint; +import javafx.scene.text.Font; import javafx.scene.transform.Rotate; import network.Messages.Enums.BoatStatusEnum; import shared.dataInput.RaceDataSource; @@ -12,6 +13,7 @@ import shared.model.*; import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; /** @@ -141,8 +143,14 @@ public class ResizableRaceCanvas extends ResizableCanvas { * Draws a circle with a given diameter, centred on a given graph coordinate. * @param center The center coordinate of the circle. * @param diameter The diameter of the circle. + * @param paint The paint to use for the circle. */ - private void drawCircle(GraphCoordinate center, double diameter) { + private void drawCircle(GraphCoordinate center, double diameter, Paint paint) { + + gc.save(); + + gc.setFill(paint); + gc.setStroke(paint); //The graphCoordinates are for the center of the point, so we offset them to get the corner coordinate. gc.fillOval( @@ -150,6 +158,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { center.getY() - (diameter / 2), diameter, diameter ); + gc.restore(); } /** @@ -158,20 +167,16 @@ public class ResizableRaceCanvas extends ResizableCanvas { * @param graphCoordinateA Starting Point of the line in GraphCoordinate. * @param graphCoordinateB End Point of the line in GraphCoordinate. * @param paint Colour the line is to coloured. + * @param lineWidth The width of the line. */ - private void drawLine(GraphCoordinate graphCoordinateA, GraphCoordinate graphCoordinateB, Paint paint) { + private void drawLine(GraphCoordinate graphCoordinateA, GraphCoordinate graphCoordinateB, Paint paint, double lineWidth) { + + gc.save(); gc.setStroke(paint); gc.setFill(paint); - - double endPointDiameter = 6; - - //Draw first end-point. - drawCircle(graphCoordinateA, endPointDiameter); - - //Draw second end-point. - drawCircle(graphCoordinateB, endPointDiameter); + gc.setLineWidth(lineWidth); //Draw line between them. gc.strokeLine( @@ -180,25 +185,10 @@ public class ResizableRaceCanvas extends ResizableCanvas { graphCoordinateB.getX(), graphCoordinateB.getY() ); + gc.restore(); } - /** - * Display a point on the Canvas. It has a diameter of 10 pixels. - * - * @param graphCoordinate Coordinate that the point is to be displayed at. - * @param paint Paint to use for the point. - */ - private void drawPoint(GraphCoordinate graphCoordinate, Paint paint) { - - //Set paint. - gc.setFill(paint); - - double pointDiameter = 10; - - //Draw the point. - drawCircle(graphCoordinate, pointDiameter); - } /** @@ -210,8 +200,10 @@ public class ResizableRaceCanvas extends ResizableCanvas { * @param coordinate coordinate the text appears * @param timeToNextMark The time until the boat reaches the next mark. * @param timeSinceLastMark The time since the boat passed the last mark. + * @param paint The color of the text. + * @param fontSize The size of the font. */ - private void drawText(String name, String abbrev, double speed, GraphCoordinate coordinate, String timeToNextMark, String timeSinceLastMark) { + private void drawText(String name, String abbrev, double speed, GraphCoordinate coordinate, String timeToNextMark, String timeSinceLastMark, Paint paint, double fontSize) { //The text to draw. Built during the function. String text = ""; @@ -257,8 +249,15 @@ public class ResizableRaceCanvas extends ResizableCanvas { yCoord += 30; } + gc.save(); + + gc.setStroke(paint); + gc.setFont(new Font(gc.getFont().getName(), fontSize)); + //Draw text. gc.fillText(text, xCoord, yCoord); + + gc.restore(); } @@ -274,7 +273,9 @@ public class ResizableRaceCanvas extends ResizableCanvas { boat.getCurrentSpeed(), this.map.convertGPS(boat.getCurrentPosition()), boat.getTimeToNextMarkFormatted(this.visualiserRace.getVisualiserRaceState().getRaceClock().getCurrentTime()), - boat.getTimeSinceLastMarkFormatted(this.visualiserRace.getVisualiserRaceState().getRaceClock().getCurrentTime()) ); + boat.getTimeSinceLastMarkFormatted(this.visualiserRace.getVisualiserRaceState().getRaceClock().getCurrentTime()), + Color.BLACK, + 20 ); } @@ -286,29 +287,51 @@ public class ResizableRaceCanvas extends ResizableCanvas { */ private void drawBoats() { - for (VisualiserBoat boat : new ArrayList<>(visualiserRace.getVisualiserRaceState().getBoats())) { + List boats = new ArrayList<>(visualiserRace.getVisualiserRaceState().getBoats()); + //Sort to ensure we draw boats in consistent order. + boats.sort(Comparator.comparingInt(Boat::getSourceID)); - //Draw the boat. - drawBoat(boat); + //Current draw order: + // track points + // wake + // boat + // text + //Track points. + for (VisualiserBoat boat : boats) { + drawTrack(boat); + } + + //Wake. + for (VisualiserBoat boat : boats) { //Only draw wake if they are currently racing. if (boat.getStatus() == BoatStatusEnum.RACING) { drawWake(boat); } + } + + //Boat. + for (VisualiserBoat boat : boats) { + drawBoat(boat); + } + + //Text. + for (VisualiserBoat boat : boats) { + drawBoatText(boat); + } + + +/* //If the race hasn't started, we set the time since last mark to the current time, to ensure we don't start counting until the race actually starts. if ((boat.getStatus() != BoatStatusEnum.RACING) && (boat.getStatus() == BoatStatusEnum.FINISHED)) { boat.setTimeAtLastMark(visualiserRace.getVisualiserRaceState().getRaceClock().getCurrentTime()); } +*/ - //Draw boat label. - drawBoatText(boat); - //Draw track. - drawTrack(boat); - } } @@ -341,12 +364,14 @@ public class ResizableRaceCanvas extends ResizableCanvas { //The above shape is essentially a triangle 12px wide, and 24px long. + + gc.save(); + //Draw the boat. gc.setFill(boat.getColor()); - gc.save(); rotate(boat.getBearing().degrees(), pos.getX(), pos.getY()); - gc.fillPolygon(x, y, 3); + gc.fillPolygon(x, y, x.length); gc.restore(); @@ -375,12 +400,14 @@ public class ResizableRaceCanvas extends ResizableCanvas { //The above shape is essentially a triangle 24px wide, and 48 long. + + gc.save(); + //Draw the boat. gc.setFill(Color.BLACK); - gc.save(); rotate(boat.getBearing().degrees(), pos.getX(), pos.getY()); - gc.fillPolygon(x, y, 3); + gc.fillPolygon(x, y, x.length); gc.restore(); } @@ -396,8 +423,15 @@ public class ResizableRaceCanvas extends ResizableCanvas { GraphCoordinate wakeFrom = this.map.convertGPS(boat.getCurrentPosition()); GraphCoordinate wakeTo = this.map.convertGPS(boat.getWake()); - //Draw. - drawLine(wakeFrom, wakeTo, boat.getColor()); + double lineWidth = 4; + double endPointDiameter = 12; + + //Line. + drawLine(wakeFrom, wakeTo, boat.getColor(), lineWidth); + + //Draw end-point. + drawCircle(wakeTo, endPointDiameter, Color.BLACK); + } @@ -423,8 +457,10 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Calculate screen position. GraphCoordinate mark1 = this.map.convertGPS(mark.getPosition()); + double diameter = 10; + //Draw. - drawPoint(mark1, Color.LIMEGREEN); + drawCircle(mark1, diameter, Color.LIMEGREEN); } @@ -462,6 +498,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { */ private void drawBoundary() { + gc.save(); + //Prepare to draw. gc.setLineWidth(1); gc.setFill(Color.AQUA); @@ -484,6 +522,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Draw the boundary. gc.fillPolygon(xpoints, ypoints, xpoints.length); + gc.restore(); + } /** @@ -496,7 +536,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { this.map.setGPSTopLeft(visualiserRace.getVisualiserRaceState().getRaceDataSource().getMapTopLeft()); this.map.setGPSBotRight(visualiserRace.getVisualiserRaceState().getRaceDataSource().getMapBottomRight()); - gc.setLineWidth(2); clear(); @@ -604,6 +643,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { GraphCoordinate c1 = this.map.convertGPS(controlPoint); GraphCoordinate c2 = this.map.convertGPS(controlPoint2); + gc.save(); + gc.setLineWidth(2); gc.setStroke(Color.MEDIUMAQUAMARINE); @@ -614,20 +655,26 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.bezierCurveTo(c1.getX(), c1.getY(), c2.getX(), c2.getY(), curvePointEnd.getX(), curvePointEnd.getY()); gc.stroke(); gc.closePath(); - gc.save(); + //gc.save(); + gc.restore(); return pointToEndCurve; }else{//last leg so no curve GraphCoordinate startPath = this.map.convertGPS(legStartPoint); GraphCoordinate endPath = this.map.convertGPS(legs.get(index).getEndCompoundMark().getAverageGPSCoordinate()); + gc.save(); + gc.beginPath(); gc.moveTo(startPath.getX(), startPath.getY()); gc.lineTo(endPath.getX(), endPath.getY()); gc.stroke(); gc.closePath(); - gc.save(); + //gc.save(); drawArrowHead(legStartPoint, legs.get(index).getEndCompoundMark().getAverageGPSCoordinate()); + + gc.restore(); + return null; } } @@ -664,15 +711,22 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Check that track points are enabled. if (this.annoPath) { + gc.save(); + + gc.setLineWidth(3); + //Apply the boat color. gc.setFill(boat.getColor()); + gc.setStroke(boat.getColor()); - double[] xPoints = new double[boat.getTrack().size()]; - double[] yPoints = new double[boat.getTrack().size()]; + List trackPoints = new ArrayList<>(boat.getTrack()); + + double[] xPoints = new double[trackPoints.size()]; + double[] yPoints = new double[trackPoints.size()]; int index = 0; //Copy trackpoint locations to x/y arrays. - for (TrackPoint point : new ArrayList<>(boat.getTrack())) { + for (TrackPoint point : trackPoints) { //Convert the GPSCoordinate to a screen coordinate. GraphCoordinate scaledCoordinate = this.map.convertGPS(point.getCoordinate()); @@ -684,6 +738,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { } gc.strokePolyline(xPoints, yPoints, xPoints.length); + + gc.restore(); } } diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java index 0d65d7ad..6b91e6ac 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java @@ -53,7 +53,7 @@ public class VisualiserBoat extends Boat { /** * Scalar used to scale the boat's wake. */ - private static final double wakeScale = 20; + private static final double wakeScale = 25; /** * If true then this boat has been allocated to the client. diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java index b1767cd5..a1f21844 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java @@ -225,11 +225,7 @@ public class VisualiserRaceState extends RaceState { Leg startingLeg = getLegs().get(0); for (VisualiserBoat boat : boats) { - boat.setCurrentLeg(startingLeg); - boat.setTimeAtLastMark(getRaceClock().getCurrentTime()); - boat.setCurrentPosition(new GPSCoordinate(0, 0)); - } } From 114c18763bbd75139eb8ebb62e3d8f3c000d487e Mon Sep 17 00:00:00 2001 From: fjc40 Date: Wed, 16 Aug 2017 19:44:42 +1200 Subject: [PATCH 4/7] Reduced track point period to 1000ms. issue #18 --- .../src/main/java/visualiser/model/VisualiserBoat.java | 2 +- racevisionGame/src/main/resources/css/dayMode.css | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java index 6b91e6ac..bb2d2d12 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java @@ -36,7 +36,7 @@ public class VisualiserBoat extends Boat { /** * The minimum period of time, in milliseconds, between the creation of each track point. */ - private static final long trackPointTimeInterval = 250; + private static final long trackPointTimeInterval = 1000; /** * The number of track points that should be created before fully diminishing the alpha of a given track point. diff --git a/racevisionGame/src/main/resources/css/dayMode.css b/racevisionGame/src/main/resources/css/dayMode.css index d0f62fb7..aa14c68b 100644 --- a/racevisionGame/src/main/resources/css/dayMode.css +++ b/racevisionGame/src/main/resources/css/dayMode.css @@ -52,4 +52,6 @@ -fx-background-color: -fx-mark-highlight-color, rgb(255, 255, 255); } - +#arrowImage { + -fx-image: url("/visualiser/images/arrow.png"); +} From fa26abe10c9750a0f7112fe847898e1d9ac795b1 Mon Sep 17 00:00:00 2001 From: fjc40 Date: Thu, 17 Aug 2017 12:18:17 +1200 Subject: [PATCH 5/7] Minor tidy. --- .../main/java/visualiser/model/ResizableRaceCanvas.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 986c778d..a26c467e 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -200,10 +200,10 @@ public class ResizableRaceCanvas extends ResizableCanvas { * @param coordinate coordinate the text appears * @param timeToNextMark The time until the boat reaches the next mark. * @param timeSinceLastMark The time since the boat passed the last mark. - * @param paint The color of the text. + * @param textPaint The color of the text. * @param fontSize The size of the font. */ - private void drawText(String name, String abbrev, double speed, GraphCoordinate coordinate, String timeToNextMark, String timeSinceLastMark, Paint paint, double fontSize) { + private void drawText(String name, String abbrev, double speed, GraphCoordinate coordinate, String timeToNextMark, String timeSinceLastMark, Paint textPaint, double fontSize) { //The text to draw. Built during the function. String text = ""; @@ -251,7 +251,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.save(); - gc.setStroke(paint); + gc.setStroke(textPaint); + gc.setFill(textPaint); gc.setFont(new Font(gc.getFont().getName(), fontSize)); //Draw text. From 62f400b924fec1dc0f5ae5ffdda69326f2a1de2f Mon Sep 17 00:00:00 2001 From: fjc40 Date: Thu, 17 Aug 2017 12:56:11 +1200 Subject: [PATCH 6/7] Trackpoint line color fades out. --- .../visualiser/model/ResizableRaceCanvas.java | 49 +++++++++++-------- .../java/visualiser/model/VisualiserBoat.java | 2 +- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index a26c467e..00830c42 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -428,7 +428,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { double endPointDiameter = 12; //Line. - drawLine(wakeFrom, wakeTo, boat.getColor(), lineWidth); + drawLine(wakeFrom, wakeTo, Color.DARKBLUE, lineWidth); //Draw end-point. drawCircle(wakeTo, endPointDiameter, Color.BLACK); @@ -712,35 +712,44 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Check that track points are enabled. if (this.annoPath) { - gc.save(); + List trackPoints = new ArrayList<>(boat.getTrack()); - gc.setLineWidth(3); + if (trackPoints.size() > 2 ) { - //Apply the boat color. - gc.setFill(boat.getColor()); - gc.setStroke(boat.getColor()); + gc.save(); - List trackPoints = new ArrayList<>(boat.getTrack()); + gc.setLineWidth(3); - double[] xPoints = new double[trackPoints.size()]; - double[] yPoints = new double[trackPoints.size()]; - int index = 0; - //Copy trackpoint locations to x/y arrays. - for (TrackPoint point : trackPoints) { + //Draw a line between each adjacent pair of track points. + for (int i = 0; i < trackPoints.size() - 1; i++) { - //Convert the GPSCoordinate to a screen coordinate. - GraphCoordinate scaledCoordinate = this.map.convertGPS(point.getCoordinate()); + //Convert the GPSCoordinate to a screen coordinate. + GraphCoordinate scaledCoordinate1 = this.map.convertGPS(trackPoints.get(i).getCoordinate()); + GraphCoordinate scaledCoordinate2 = this.map.convertGPS(trackPoints.get(i + 1).getCoordinate()); - xPoints[index] = ((double)scaledCoordinate.getX()); - yPoints[index] = ((double)scaledCoordinate.getY()); + double alpha = trackPoints.get(i).getAlpha(); + Paint fadedPaint = new Color( + boat.getColor().getRed(), + boat.getColor().getGreen(), + boat.getColor().getBlue(), + alpha ); - index++; - } + //Apply the faded boat color. + gc.setFill(fadedPaint); + gc.setStroke(fadedPaint); - gc.strokePolyline(xPoints, yPoints, xPoints.length); + gc.strokeLine( + scaledCoordinate1.getX(), + scaledCoordinate1.getY(), + scaledCoordinate2.getX(), + scaledCoordinate2.getY() ); + } - gc.restore(); + + gc.restore(); + + } } } diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java index bb2d2d12..9f0a72e4 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java @@ -41,7 +41,7 @@ public class VisualiserBoat extends Boat { /** * The number of track points that should be created before fully diminishing the alpha of a given track point. */ - private static final int trackPointLimit = 10; + private static final int trackPointLimit = 50; /** From 2656efcb4db6b609dcea24e8628126bae2221bad Mon Sep 17 00:00:00 2001 From: fjc40 Date: Thu, 17 Aug 2017 13:30:10 +1200 Subject: [PATCH 7/7] Marks are a bit darker. Wake no longer has circle at end. --- .../src/main/java/visualiser/model/ResizableRaceCanvas.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index f812412e..1c17b540 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -431,7 +431,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { drawLine(wakeFrom, wakeTo, Color.DARKBLUE, lineWidth); //Draw end-point. - drawCircle(wakeTo, endPointDiameter, Color.BLACK); + //drawCircle(wakeTo, endPointDiameter, Color.BLACK); } @@ -461,7 +461,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { double diameter = 10; //Draw. - drawCircle(mark1, diameter, Color.LIMEGREEN); + drawCircle(mark1, diameter, Color.DARKGREEN); }