Merge branch 'sprint4_master' into noDependencyArrow

# Conflicts:
#	mock/src/main/java/seng302/Model/Race.java
#	network/src/main/java/seng302/Networking/Messages/RaceStatus.java
#	visualiser/src/main/java/seng302/Controllers/RaceController.java
#	visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java
#	visualiser/src/main/resources/scenes/race.fxml
This commit is contained in:
Joseph Gardner
2017-05-22 15:28:53 +12:00
46 changed files with 3347 additions and 547 deletions
@@ -12,9 +12,7 @@ import seng302.Mock.StreamedCourse;
import seng302.RaceDataSource;
import seng302.RaceMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
/**
* This creates a JavaFX Canvas that is fills it's parent.
@@ -33,6 +31,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
private List<Color> colours;
private final List<Marker> markers;
private final RaceDataSource raceData;
private Map<Integer, Color> boatColours = new HashMap<>();
private Node arrow;
public ResizableRaceCanvas(RaceDataSource raceData) {
@@ -57,6 +56,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
*/
public void setBoats(List<Boat> boats) {
this.boats = boats;
mapBoatColours();
}
@@ -286,27 +286,27 @@ public class ResizableRaceCanvas extends ResizableCanvas {
* Draws boats while race in progress, when leg heading is set.
*/
private void updateBoats() {
int currentColour = 0;
if (boats != null) {
if (boatColours.size() < boats.size()) mapBoatColours();
for (Boat boat : boats) {
boolean finished = boat.getCurrentLeg().getName().equals("Finish") || boat.getCurrentLeg().getName().equals("DNF");
boolean isStart = boat.isStarted();
int sourceID = boat.getSourceID();
if (!finished && isStart) {
displayBoat(boat, boat.getHeading(), colours.get(currentColour));
displayBoat(boat, boat.getHeading(), boatColours.get(sourceID));
GraphCoordinate wakeFrom = this.map.convertGPS(boat.getCurrentPosition());
GraphCoordinate wakeTo = this.map.convertGPS(boat.getWake());
displayLine(wakeFrom, wakeTo, colours.get(currentColour));
displayLine(wakeFrom, wakeTo, boatColours.get(sourceID));
} else if (!isStart) {
displayBoat(boat, boat.getHeading(), colours.get(currentColour));
displayBoat(boat, boat.getHeading(), boatColours.get(sourceID));
} else {
displayBoat(boat, 0, colours.get(currentColour));
displayBoat(boat, 0, boatColours.get(sourceID));
}
if (raceAnno)
displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition()));
//TODO this needs to be fixed.
drawTrack(boat, colours.get(currentColour));
currentColour = (currentColour + 1) % colours.size();
drawTrack(boat, boatColours.get(sourceID));
}
}
}
@@ -314,6 +314,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
/**
* Draws all track points for a given boat. Colour is set by boat, opacity by track point.
* @param boat whose track is displayed
* @param colour The color to use for the track.
* @see seng302.Model.TrackPoint
*/
private void drawTrack(Boat boat, Color colour) {
@@ -344,4 +345,14 @@ public class ResizableRaceCanvas extends ResizableCanvas {
this.arrow = arrow;
}
}
private void mapBoatColours() {
int currentColour = 0;
for (Boat boat : boats) {
if (!boatColours.containsKey(boat.getSourceID())) {
boatColours.put(boat.getSourceID(), colours.get(currentColour));
}
currentColour = (currentColour + 1) % colours.size();
}
}
}