Boats no longer change colour during a race and fixed the sparklines for the boats to be in the correct position #story[876]

main
Joseph Gardner 9 years ago
parent 74d3996f6c
commit eba2eb3cd6

@ -10,12 +10,12 @@ import javafx.scene.control.*;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import seng302.Mock.StreamedRace; import seng302.Mock.StreamedRace;
import seng302.Model.*; import seng302.Model.*;
import seng302.VisualiserInput; import seng302.VisualiserInput;
import java.awt.Color;
import java.net.URL; import java.net.URL;
import java.util.*; import java.util.*;
import java.util.List; import java.util.List;
@ -32,7 +32,8 @@ public class RaceController extends Controller {
private Integer sparkLineNumber = 0; private Integer sparkLineNumber = 0;
private ResizableRaceCanvas raceMap; private ResizableRaceCanvas raceMap;
private ResizableRaceMap raceBoundaries; private ResizableRaceMap raceBoundaries;
private ArrayList colours; private ArrayList<String> colours;
private Map<Integer, String> boatColours = new HashMap<>();
@FXML SplitPane race; @FXML SplitPane race;
@FXML CheckBox showFPS; @FXML CheckBox showFPS;
@FXML CheckBox showBoatPath; @FXML CheckBox showBoatPath;
@ -104,14 +105,12 @@ public class RaceController extends Controller {
//int [] boats = {1, 2, 3, 4, 5, 6}; //int [] boats = {1, 2, 3, 4, 5, 6};
// set a line for each boat // set a line for each boat
makeColours(); makeColours();
System.out.println(colours.get(0)); startBoats.addAll(boats);
for (Boat boat : boats){ mapBoatColours();
startBoats.add(boat);
}
for (int i=0; i<startBoats.size(); i++){ for (int i=0; i<startBoats.size(); i++){
Float startPos = ((float)startBoats.size()+1)/2; Float startPos = ((float)startBoats.size()+1)/2;
XYChart.Series<Number, Number> series = new XYChart.Series(); XYChart.Series<Number, Number> series = new XYChart.Series();
series.getData().add(new XYChart.Data(0, startPos)); series.getData().add(new XYChart.Data(0, i + 1));
sparklineChart.getData().add(series); sparklineChart.getData().add(series);
} }
@ -133,6 +132,8 @@ public class RaceController extends Controller {
lookup(".axis-minor-tick-mark").setVisible(false); lookup(".axis-minor-tick-mark").setVisible(false);
sparklineChart.getYAxis(). sparklineChart.getYAxis().
lookup(".axis-minor-tick-mark").setVisible(false); lookup(".axis-minor-tick-mark").setVisible(false);
updateSparkline(boats);
} }
/** /**
@ -214,20 +215,19 @@ public class RaceController extends Controller {
} }
public void updateSparkline(ObservableList<Boat> boatsInRace){ public void updateSparkline(ObservableList<Boat> boatsInRace){
System.out.println(sparklineChart.getData().size());
// TODO replace for loops with correct boats - Done // TODO replace for loops with correct boats - Done
//int [] startingBoats = {1, 2, 3, 4, 5, 6}; //int [] startingBoats = {1, 2, 3, 4, 5, 6};
//int [] boatsInRace = {1, 2, 3, 4, 5, 6}; //int [] boatsInRace = {1, 2, 3, 4, 5, 6};
int colourIndex = 0;
int placingVal = boatsInRace.size(); int placingVal = boatsInRace.size();
//System.out.println(boatsInRace.get(0).toString()); //System.out.println(boatsInRace.get(0).toString());
sparkLineNumber++; sparkLineNumber++;
for (int i=0; i<boatsInRace.size(); i++){ for (int i = boatsInRace.size() - 1; i >= 0; i--){
for (int j=0; j<startBoats.size(); j++){ for (int j = startBoats.size() - 1; j >= 0; j--){
if (boatsInRace.get(i)==startBoats.get(j)){ if (boatsInRace.get(i)==startBoats.get(j)){
sparklineChart.getData().get(j).getData().add(new XYChart.Data<> sparklineChart.getData().get(j).getData().add(new XYChart.Data<>
(sparkLineNumber, placingVal)); (sparkLineNumber, placingVal));
sparklineChart.getData().get(j).getNode().setStyle("-fx-stroke: "+colours.get(colourIndex)+";"); sparklineChart.getData().get(j).getNode().setStyle("-fx-stroke: "+boatColours.get(boatsInRace.get(i).getSourceID())+";");
colourIndex+=1;
placingVal-=1; placingVal-=1;
} }
} }
@ -237,18 +237,28 @@ public class RaceController extends Controller {
private void makeColours() { private void makeColours() {
colours = new ArrayList<>(Arrays.asList( colours = new ArrayList<>(Arrays.asList(
"#8A2BE2", colourToHex(Color.BLUEVIOLET),
"#000000", colourToHex(Color.BLACK),
"#FF0000", colourToHex(Color.RED),
"#FFA500", colourToHex(Color.ORANGE),
"#556B2F", colourToHex(Color.DARKOLIVEGREEN),
"#32CD32", colourToHex(Color.LIMEGREEN),
"#800080", colourToHex(Color.PURPLE),
"#A9A9A9", colourToHex(Color.DARKGRAY),
"#FFFF00" colourToHex(Color.YELLOW)
)); ));
} }
private void mapBoatColours() {
int currentColour = 0;
for (Boat boat : startBoats) {
if (!boatColours.containsKey(boat.getSourceID())) {
boatColours.put(boat.getSourceID(), colours.get(currentColour));
}
currentColour = (currentColour + 1) % colours.size();
}
}
/** /**
* Set up boat annotations * Set up boat annotations
*/ */
@ -299,4 +309,11 @@ public class RaceController extends Controller {
} }
}); });
} }
private String colourToHex(Color color) {
return String.format( "#%02X%02X%02X",
(int)( color.getRed() * 255 ),
(int)( color.getGreen() * 255 ),
(int)( color.getBlue() * 255 ) );
}
} }

@ -76,6 +76,7 @@ public class StreamedRace implements Runnable {
* @param timeElapsed Time that has elapse since the start of the the race. * @param timeElapsed Time that has elapse since the start of the the race.
*/ */
private void checkPosition(Boat boat, long timeElapsed) { private void checkPosition(Boat boat, long timeElapsed) {
boolean legChanged = false;
StreamedCourse raceData = visualiserInput.getCourse(); StreamedCourse raceData = visualiserInput.getCourse();
BoatStatus boatStatusMessage = visualiserInput.getBoatStatusMap().get(boat.getSourceID()); BoatStatus boatStatusMessage = visualiserInput.getBoatStatusMap().get(boat.getSourceID());
if (boatStatusMessage != null) { if (boatStatusMessage != null) {
@ -86,7 +87,7 @@ public class StreamedRace implements Runnable {
if (legNumber >= 1 && legNumber < legs.size()) { if (legNumber >= 1 && legNumber < legs.size()) {
if (boat.getCurrentLeg() != legs.get(legNumber)){ if (boat.getCurrentLeg() != legs.get(legNumber)){
boat.setCurrentLeg(legs.get(legNumber)); boat.setCurrentLeg(legs.get(legNumber));
controller.updateSparkline(startingBoats); legChanged = true;
} }
} }
@ -101,8 +102,11 @@ public class StreamedRace implements Runnable {
//System.out.println("Boat finished"); //System.out.println("Boat finished");
} }
} }
if (legChanged) {
//Update the boat display table in the GUI to reflect the leg change //Update the boat display table in the GUI to reflect the leg change
updatePositions(); updatePositions();
controller.updateSparkline(startingBoats);
}
} }
/** /**

@ -10,9 +10,7 @@ import seng302.Mock.StreamedCourse;
import seng302.RaceDataSource; import seng302.RaceDataSource;
import seng302.RaceMap; import seng302.RaceMap;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
/** /**
* This creates a JavaFX Canvas that is fills it's parent. * This creates a JavaFX Canvas that is fills it's parent.
@ -31,6 +29,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
private List<Color> colours; private List<Color> colours;
private final List<Marker> markers; private final List<Marker> markers;
private final RaceDataSource raceData; private final RaceDataSource raceData;
private Map<Integer, Color> boatColours = new HashMap<>();
public ResizableRaceCanvas(RaceDataSource raceData) { public ResizableRaceCanvas(RaceDataSource raceData) {
super(); super();
@ -54,6 +53,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
*/ */
public void setBoats(List<Boat> boats) { public void setBoats(List<Boat> boats) {
this.boats = boats; this.boats = boats;
mapBoatColours();
} }
@ -276,27 +276,27 @@ public class ResizableRaceCanvas extends ResizableCanvas {
* Draws boats while race in progress, when leg heading is set. * Draws boats while race in progress, when leg heading is set.
*/ */
private void updateBoats() { private void updateBoats() {
int currentColour = 0;
if (boats != null) { if (boats != null) {
if (boatColours.size() < boats.size()) mapBoatColours();
for (Boat boat : boats) { for (Boat boat : boats) {
boolean finished = boat.getCurrentLeg().getName().equals("Finish") || boat.getCurrentLeg().getName().equals("DNF"); boolean finished = boat.getCurrentLeg().getName().equals("Finish") || boat.getCurrentLeg().getName().equals("DNF");
boolean isStart = boat.isStarted(); boolean isStart = boat.isStarted();
int sourceID = boat.getSourceID();
if (!finished && isStart) { 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 wakeFrom = this.map.convertGPS(boat.getCurrentPosition());
GraphCoordinate wakeTo = this.map.convertGPS(boat.getWake()); GraphCoordinate wakeTo = this.map.convertGPS(boat.getWake());
displayLine(wakeFrom, wakeTo, colours.get(currentColour)); displayLine(wakeFrom, wakeTo, boatColours.get(sourceID));
} else if (!isStart) { } else if (!isStart) {
displayBoat(boat, boat.getHeading(), colours.get(currentColour)); displayBoat(boat, boat.getHeading(), boatColours.get(sourceID));
} else { } else {
displayBoat(boat, 0, colours.get(currentColour)); displayBoat(boat, 0, boatColours.get(sourceID));
} }
if (raceAnno) if (raceAnno)
displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition()));
//TODO this needs to be fixed. //TODO this needs to be fixed.
drawTrack(boat, colours.get(currentColour)); drawTrack(boat, boatColours.get(sourceID));
currentColour = (currentColour + 1) % colours.size();
} }
} }
} }
@ -330,4 +330,14 @@ public class ResizableRaceCanvas extends ResizableCanvas {
)); ));
} }
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();
}
}
} }
Loading…
Cancel
Save