diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index 6cb86211..f44d0e7e 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -129,6 +129,7 @@ public class RaceController extends Controller { raceMap.widthProperty().bind(canvasBase.widthProperty()); raceMap.heightProperty().bind(canvasBase.heightProperty()); raceMap.setBoats(boats); + raceMap.drawBoats(); raceMap.drawRaceMap(); raceMap.setVisible(true); diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index c6891e72..cc55458a 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -7,15 +7,9 @@ import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.transform.Rotate; import seng302.Constants; -import seng302.GPSCoordinate; import seng302.GraphCoordinate; import seng302.RaceMap; -import java.awt.*; -import java.awt.geom.Rectangle2D; -import java.util.ArrayList; -import java.util.Random; - /** * This creates a JavaFX Canvas that is fills it's parent. * Cannot be downsized. @@ -50,15 +44,6 @@ public class ResizableRaceCanvas extends Canvas { this(null); } - /** - * Sets the RaceMap that the RaceCanvas is to be displaying for. - * - * @param map - */ - public void setMap(RaceMap map) { - this.map = map; - } - /** * Displays the mark of a race as a circle. * @@ -74,6 +59,20 @@ public class ResizableRaceCanvas extends Canvas { gc.fillOval(graphCoordinate.getX() - (d/2), graphCoordinate.getY() - (d/2), d, d); } + public void displayBoat(BoatInRace boat, double angle) { + GraphCoordinate pos = this.map.convertGPS(boat.getCurrentPosition()); + Paint paint = boat.getColour(); + + double[] x = {pos.getX() - 6, pos.getX(), pos.getX() + 6}; + double[] y = {pos.getY() + 12, pos.getY() - 12, pos.getY() + 12}; + gc.setFill(paint); + + gc.save(); + rotate(angle, pos.getX(), pos.getY()); + gc.fillPolygon(x, y, 3); + gc.restore(); + } + /** * Displays a line on the map with rectangles on the starting and ending point of the line. * @@ -92,20 +91,6 @@ public class ResizableRaceCanvas extends Canvas { gc.strokeLine(graphCoordinateA.getX(), graphCoordinateA.getY(), graphCoordinateB.getX(), graphCoordinateB.getY()); } - /** - * Display a point on the Canvas - * - * @param graphCoordinate Coordinate that the point is to be displayed at. - * @param paint Colour that the boat is to be coloured. - * @see GraphCoordinate - * @see Paint - * @see Color - */ - public void displayPoint(GraphCoordinate graphCoordinate, Paint paint) { - gc.setFill(paint); - gc.fillOval(graphCoordinate.getX(), graphCoordinate.getY(), 10, 10); - } - /** * Displays an arrow on the Canvas * @@ -168,10 +153,6 @@ public class ResizableRaceCanvas extends Canvas { //System.out.println("Race Map Canvas Width: "+ width + ", Height:" + height); this.map = new RaceMap(32.278, -64.863, 32.320989, -64.821, (int) width, (int) height); - if (map == null) { - return; - } - //finish line gc.setLineWidth(2); GraphCoordinate finishLineCoord1 = this.map.convertGPS(Constants.finishLineMarker1); @@ -192,16 +173,6 @@ public class ResizableRaceCanvas extends Canvas { displayLine(startline1, startline2, Color.GREEN); - - if (boats != null) { - for (BoatInRace boat : boats) { - if (boat != null) { - displayMark(this.map.convertGPS(boat.getCurrentPosition()), boat.getColour()); - displayText(boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); - } - } - } - //display wind direction arrow - specify origin point and angle displayArrow(new GraphCoordinate(500, 20), 100); } @@ -210,26 +181,16 @@ public class ResizableRaceCanvas extends Canvas { if (boats != null) { for (BoatInRace boat : boats) { if (boat != null && !boat.getCurrentLeg().getName().equals("Finish")) { + displayBoat(boat, boat.calculateHeading()); GraphCoordinate wakeFrom = this.map.convertGPS(boat.getCurrentPosition()); GraphCoordinate wakeTo = this.map.convertGPS(boat.getWake()); displayLine(wakeFrom, wakeTo, boat.getColour()); } + else displayBoat(boat, 0); + displayText(boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); } } } - /** - * Draws a boat at a certain GPSCoordinate - * - * @param colour Colour to colour boat. - * @param gpsCoordinates GPScoordinate that the boat is to be drawn at. - * @see GPSCoordinate - * @see Color - */ - public void drawBoat(Color colour, GPSCoordinate gpsCoordinates) { - GraphCoordinate graphCoordinate = this.map.convertGPS(gpsCoordinates); - //System.out.println("DrawingBoat" + gpsCoordinates.getLongitude()); - displayPoint(graphCoordinate, colour); - } /** * Set the Canvas to resizable. @@ -262,4 +223,15 @@ public class ResizableRaceCanvas extends Canvas { public double prefHeight(double height) { return getHeight(); } + + public void drawBoats() { + if (boats != null) { + for (BoatInRace boat : boats) { + if (boat != null) { + displayBoat(boat, 0); + displayText(boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); + } + } + } + } }