diff --git a/visualiser/src/main/java/seng302/Controllers/RaceController.java b/visualiser/src/main/java/seng302/Controllers/RaceController.java index 106a0089..4b53cd2d 100644 --- a/visualiser/src/main/java/seng302/Controllers/RaceController.java +++ b/visualiser/src/main/java/seng302/Controllers/RaceController.java @@ -3,6 +3,9 @@ package seng302.Controllers; import javafx.collections.ObservableList; import javafx.fxml.FXML; +import javafx.scene.chart.LineChart; +import javafx.scene.chart.NumberAxis; +import javafx.scene.chart.XYChart; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import seng302.Mock.StreamedRace; @@ -22,6 +25,7 @@ public class RaceController extends Controller { //user saved data for annotation display private ArrayList presetAnno; + private Integer sparkLineNumber = 0; private ResizableRaceCanvas raceMap; private ResizableRaceMap raceBoundaries; @FXML SplitPane race; @@ -41,6 +45,9 @@ public class RaceController extends Controller { @FXML TableColumn boatTeamColumn; @FXML TableColumn boatMarkColumn; @FXML TableColumn boatSpeedColumn; + @FXML LineChart sparklineChart; + @FXML NumberAxis xAxis; + @FXML NumberAxis yAxis; /** * Updates the ResizableRaceCanvas (raceMap) with most recent data @@ -75,6 +82,7 @@ public class RaceController extends Controller { @Override public void initialize(URL location, ResourceBundle resources) { + createSparkLine(); //listener for fps showFPS.selectedProperty().addListener((ov, old_val, new_val) -> { if (showFPS.isSelected()) { @@ -85,6 +93,34 @@ public class RaceController extends Controller { }); } + private void createSparkLine(){ + // TODO replace for loop with boatsInRace + int [] boats = {1, 2, 3, 4, 5, 6}; + // set a line for each boat + for (int i=0; i series = new XYChart.Series(); + series.getData().add(new XYChart.Data(0, i+1)); + sparklineChart.getData().add(series); + } + + // reverse Y axis order (0 at top) and set axis height/width + // TODO change lower bound to boatsInRace + 1 + yAxis.setLowerBound(boats.length+1); + yAxis.setUpperBound(0); + yAxis.setAutoRanging(false); + xAxis.setAutoRanging(false); + + // hide axis ticks and labels + sparklineChart.getXAxis().setTickLabelsVisible(false); + sparklineChart.getYAxis().setTickLabelsVisible(false); + sparklineChart.getXAxis().setTickMarkVisible(false); + sparklineChart.getYAxis().setTickMarkVisible(false); + sparklineChart.getXAxis(). + lookup(".axis-minor-tick-mark").setVisible(false); + sparklineChart.getYAxis(). + lookup(".axis-minor-tick-mark").setVisible(false); + } + /** * Initializes and runs the race, based on the user's chosen scale factor * Currently uses an example racecourse @@ -163,6 +199,24 @@ public class RaceController extends Controller { }); } + public void updateSparkline(){ + // TODO replace for loops with correct boats + int [] startingBoats = {1, 2, 3, 4, 5, 6}; + int [] boatsInRace = {1, 2, 3, 4, 5, 6}; + + sparkLineNumber ++; + for (int i=0; i + (sparkLineNumber, j+1)); + } + } + } + xAxis.setUpperBound(sparkLineNumber); + } + /** * Set up boat annotations */ diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index 2ca0fd5c..17bbb8eb 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -189,6 +189,7 @@ public class StreamedRace implements Runnable { public void handle(long arg0) { if (boatsFinished < startingBoats.size()) { boatsFinished = 0; + controller.updateSparkline(); totalTimeElapsed = System.currentTimeMillis() - timeRaceStarted; for (Boat boat : startingBoats) { diff --git a/visualiser/src/main/resources/scenes/race.fxml b/visualiser/src/main/resources/scenes/race.fxml index 7ab63046..39828525 100644 --- a/visualiser/src/main/resources/scenes/race.fxml +++ b/visualiser/src/main/resources/scenes/race.fxml @@ -1,19 +1,22 @@ + + + + - + + - + - + @@ -24,28 +27,13 @@ - - - - - -