diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml deleted file mode 100644 index 5352bdf8..00000000 --- a/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index e04c5290..fc458b65 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -34,10 +34,7 @@ import visualiser.gameController.ControllerClient; import visualiser.gameController.Keys.ControlKey; import visualiser.gameController.Keys.KeyFactory; import visualiser.layout.*; -import visualiser.model.Sparkline; -import visualiser.model.VisualiserBoat; -import visualiser.model.VisualiserRaceEvent; -import visualiser.model.VisualiserRaceState; +import visualiser.model.*; import visualiser.utils.GPSConverter; import java.io.IOException; @@ -65,6 +62,8 @@ public class RaceViewController extends Controller { private String keyToPress; private View3D view3D; private ObservableList viewSubjects; + private ResizableRaceCanvas raceCanvas; + private boolean mapToggle = true; /** * Arrow pointing to next mark in third person @@ -78,6 +77,7 @@ public class RaceViewController extends Controller { // note: it says it's not used but it is! do not remove :) private @FXML ArrowController arrowController; private @FXML GridPane canvasBase; + private @FXML GridPane canvasBase1; private @FXML SplitPane racePane; private @FXML StackPane arrowPane; private @FXML Label timer; @@ -111,6 +111,7 @@ public class RaceViewController extends Controller { tutorialCheck(); initKeypressHandler(); initialiseRaceVisuals(); + initialiseRaceCanvas(); } /** @@ -146,6 +147,9 @@ public class RaceViewController extends Controller { // tab key if (codeString.equals("TAB")){toggleTable();} + //map key + if (codeString.equals("M")){bigMap();} + // any key pressed ControlKey controlKey = keyFactory.getKey(codeString); if(controlKey != null) { @@ -610,6 +614,8 @@ public class RaceViewController extends Controller { e.printStackTrace(); } } else { + raceCanvas.drawRace(); + boatInfoTable.sort(); } @@ -737,4 +743,48 @@ public class RaceViewController extends Controller { } } + /** + * Initialises the map + */ + private void initialiseRaceCanvas() { + + //Create canvas. + raceCanvas = new ResizableRaceCanvas(raceState); + + //Set properties. + raceCanvas.setMouseTransparent(true); + raceCanvas.widthProperty().bind(canvasBase1.widthProperty()); + raceCanvas.heightProperty().bind(canvasBase1.heightProperty()); + + //Draw it and show it. + raceCanvas.draw(); + raceCanvas.setVisible(true); + + //Add to scene. + canvasBase1.getChildren().add(0, raceCanvas); + } + + private void bigMap(){ + if (mapToggle){ + raceCanvas.widthProperty().bind(canvasBase.widthProperty()); + raceCanvas.heightProperty().bind(canvasBase.heightProperty()); + + raceCanvas.setFullScreen(true); + raceCanvas.setOpacity(0.6); + + canvasBase1.getChildren().remove(raceCanvas); + canvasBase.getChildren().add(1, raceCanvas); + + }else{ + raceCanvas.widthProperty().bind(canvasBase1.widthProperty()); + raceCanvas.heightProperty().bind(canvasBase1.heightProperty()); + + raceCanvas.setFullScreen(false); + + canvasBase.getChildren().remove(raceCanvas); + canvasBase1.getChildren().add(0, raceCanvas); + } + mapToggle = !mapToggle; + } + } diff --git a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java index 4fc39b30..822addbc 100644 --- a/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java +++ b/racevisionGame/src/main/java/visualiser/model/ResizableRaceCanvas.java @@ -6,13 +6,11 @@ import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.text.Font; import javafx.scene.transform.Rotate; -import network.Messages.Enums.BoatStatusEnum; import shared.dataInput.RaceDataSource; import shared.enums.RoundingType; import shared.model.*; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; /** @@ -44,13 +42,15 @@ public class ResizableRaceCanvas extends ResizableCanvas { private VisualiserRaceState raceState; - private boolean annoName = true; + private boolean annoName = false; private boolean annoAbbrev = true; - private boolean annoSpeed = true; + private boolean annoSpeed = false; private boolean annoPath = true; - private boolean annoEstTime = true; - private boolean annoTimeSinceLastMark = true; - private boolean annoGuideLine = false; + private boolean annoEstTime = false; + private boolean annoTimeSinceLastMark = false; + private boolean annoGuideLine = true; + + private boolean isFullScreen = false; @@ -293,7 +293,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { List boats = new ArrayList<>(raceState.getBoats()); //Sort to ensure we draw boats in consistent order. - boats.sort(Comparator.comparingInt(Boat::getSourceID)); +// boats.sort(Comparator.comparingInt(Boat::getSourceID)); //Current draw order: // track points @@ -302,29 +302,29 @@ public class ResizableRaceCanvas extends ResizableCanvas { // text //Track points. - for (VisualiserBoat boat : boats) { - drawTrack(boat); - } + if (isFullScreen){ + 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); + //Text. + for (VisualiserBoat boat : boats) { + drawBoatText(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); - } - - } /** @@ -364,9 +364,9 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.fillPolygon(x, y, x.length); gc.restore(); - if (boat.getSourceID() == ThisBoat.getInstance().getSourceID()) { - drawSails(boat); - } +// if (boat.getSourceID() == ThisBoat.getInstance().getSourceID()) { +// drawSails(boat); +// } } /** @@ -605,7 +605,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Prepare to draw. gc.setLineWidth(1); - gc.setFill(Color.AQUA); + gc.setFill(Color.DEEPSKYBLUE); //Calculate the screen coordinates of the boundary. @@ -645,19 +645,23 @@ public class ResizableRaceCanvas extends ResizableCanvas { //Race boundary. drawBoundary(); - //Guiding Line - if (annoGuideLine){ + //rounding lines + if (isFullScreen){ + drawRoundingLines(); drawRaceLine(); } + //Guiding Line +// if (annoGuideLine){ +// drawRaceLine(); +// } + //Boats. drawBoats(); //Marks. drawMarks(); - //TEMP - drawRoundingLines(); } @@ -752,7 +756,8 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.save(); gc.setLineWidth(2); - gc.setStroke(Color.MEDIUMAQUAMARINE); + gc.setStroke(getLineColor(legs.get(index))); + gc.beginPath(); gc.moveTo(startPath.getX(), startPath.getY()); @@ -772,7 +777,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { gc.save(); gc.setLineWidth(2); - gc.setStroke(Color.MEDIUMAQUAMARINE); + gc.setStroke(getLineColor(legs.get(index))); gc.beginPath(); gc.moveTo(startPath.getX(), startPath.getY()); @@ -788,6 +793,21 @@ public class ResizableRaceCanvas extends ResizableCanvas { } } + private Color getLineColor(Leg leg) { + for (VisualiserBoat boat : raceState.getBoats()) { + if (boat.isClientBoat()) { + if (boat.getCurrentLeg() == leg) { + return Color.ORANGE; + } else { + return Color.MEDIUMAQUAMARINE; + } + }else{ + return Color.MEDIUMAQUAMARINE; + } + } + return Color.MEDIUMAQUAMARINE; + } + private void drawArrowHead(GPSCoordinate start, GPSCoordinate end){ GraphCoordinate lineStart = this.map.convertGPS(start); @@ -862,6 +882,11 @@ public class ResizableRaceCanvas extends ResizableCanvas { } + public boolean isFullScreen() { + return isFullScreen; + } - + public void setFullScreen(boolean fullScreen) { + isFullScreen = fullScreen; + } } diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java index 1184197c..f5ce109b 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserBoat.java @@ -137,6 +137,9 @@ public class VisualiserBoat extends Boat { //Update the nextValidTime for the next track point. nextValidTime = currentTimeMilli + trackPointTimeInterval; + if (track.size() > trackPointLimit) { + track.remove(0); + } } } diff --git a/racevisionGame/src/main/resources/visualiser/scenes/newRaceView.fxml b/racevisionGame/src/main/resources/visualiser/scenes/newRaceView.fxml index 76195416..bc0d8dfd 100644 --- a/racevisionGame/src/main/resources/visualiser/scenes/newRaceView.fxml +++ b/racevisionGame/src/main/resources/visualiser/scenes/newRaceView.fxml @@ -79,23 +79,23 @@ -