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/InGameLobbyController.java b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java
index 63112e33..d31cbddb 100644
--- a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java
+++ b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java
@@ -26,6 +26,7 @@ import shared.model.Boat;
import visualiser.app.App;
import visualiser.gameController.ControllerClient;
import visualiser.layout.SeaSurface;
+import visualiser.layout.Shockwave;
import visualiser.layout.Subject3D;
import visualiser.layout.View3D;
import visualiser.model.VisualiserBoat;
@@ -175,6 +176,15 @@ public class InGameLobbyController extends Controller {
playerBoatToSet.setPitch(20);
+ if (boat.isClientBoat()) {
+ Shockwave boatHighlight = new Shockwave(10);
+ boatHighlight.getMesh().setMaterial(new PhongMaterial(new Color(1, 1, 0, 0.1)));
+ boatHighlight.setX(subject.getPosition().getX());
+ boatHighlight.setY(subject.getPosition().getY());
+ boatHighlight.setZ(subject.getPosition().getZ());
+ subjects.add(boatHighlight);
+ subject.getMesh().toFront();
+ }
AnimationTimer rotate = new AnimationTimer() {
@Override
@@ -246,7 +256,7 @@ public class InGameLobbyController extends Controller {
public void handle(long arg0) {
//Get the current race status.
RaceStatusEnum raceStatus = visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum();
-
+
//Try catch for getting interval times
try {
long interval = ChronoUnit.MILLIS.between(visualiserRaceEvent.getVisualiserRaceState().getRaceClock().getCurrentTime(), visualiserRaceEvent.getVisualiserRaceState().getRaceClock().getStartingTime());
diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java
index e04c5290..9d96e2b6 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) {
@@ -297,8 +301,25 @@ public class RaceViewController extends Controller {
viewSubjects.add(markModel);
}
+
+ for (VisualiserBoat boat: race.getVisualiserRaceState().getBoats()) {
+ if (boat.isClientBoat()) {
+ Shockwave boatHighlight = new Shockwave(10);
+ boatHighlight.getMesh().setMaterial(new PhongMaterial(new Color(1, 1, 0, 0.1)));
+ viewSubjects.add(boatHighlight);
+ AnimationTimer highlightTrack = new AnimationTimer() {
+ @Override
+ public void handle(long now) {
+ boatHighlight.setX(gpsConverter.convertGPS(boat.getPosition()).getX());
+ boatHighlight.setZ(gpsConverter.convertGPS(boat.getPosition()).getY());
+ }
+ };
+ highlightTrack.start();
+ }
+ }
+
// Position and add each boat to view
- for(VisualiserBoat boat: race.getVisualiserRaceState().getBoats()) {
+ for (VisualiserBoat boat: race.getVisualiserRaceState().getBoats()) {
MeshView mesh;
if(boat.getSourceID() == race.getVisualiserRaceState().getPlayerBoatID()) {
mesh = new MeshView(importer.getImport());
@@ -610,6 +631,8 @@ public class RaceViewController extends Controller {
e.printStackTrace();
}
} else {
+ raceCanvas.drawRace();
+
boatInfoTable.sort();
}
@@ -737,4 +760,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/layout/Shockwave.java b/racevisionGame/src/main/java/visualiser/layout/Shockwave.java
index efdb0c5d..37daf6b3 100644
--- a/racevisionGame/src/main/java/visualiser/layout/Shockwave.java
+++ b/racevisionGame/src/main/java/visualiser/layout/Shockwave.java
@@ -13,5 +13,6 @@ public class Shockwave extends Subject3D {
super(new Cylinder(radius,0),0);
getMesh().getTransforms().add(new Rotate(-90, Rotate.X_AXIS));
getMesh().setMaterial(new PhongMaterial(new Color(0,0,0,0)));
+ getMesh().setMouseTransparent(true);
}
}
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 @@
-