From 951a7263096b2084a7653b1fc26a00ac4c718511 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Thu, 18 May 2017 20:56:42 +1200 Subject: [PATCH] The line chart now has series which display on it. Need to get the right data to display on the linechart when it updates. #story[952] --- .../seng302/controllers/CanvasController.java | 15 ++++++++---- .../controllers/RaceViewController.java | 23 +++++++++++++++---- src/main/java/seng302/models/Yacht.java | 12 ---------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 9a2a9797..aaea906b 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -22,10 +22,7 @@ import seng302.models.parsers.XMLParser.RaceXMLObject.Limit; import seng302.models.parsers.packets.BoatPositionPacket; import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.PriorityBlockingQueue; /** @@ -104,7 +101,13 @@ public class CanvasController { gc.restore(); fitMarksToCanvas(); + Timer t = new Timer(); + t.schedule(new TimerTask() { + @Override + public void run() { + } + },1000); // TODO: 1/05/17 wmu16 - Change this call to now draw the marks as from the xml drawBoats(); timer = new AnimationTimer() { @@ -125,6 +128,10 @@ public class CanvasController { long elapsedNanosPerFrame = elapsedNanos / frameTimes.length ; Double frameRate = 1_000_000_000.0 / elapsedNanosPerFrame ; drawFps(frameRate.intValue()); + System.out.println(elapsedNanos); + if (elapsedNanos % 10 == 0) { + raceViewController.updateSparkLine(); + } } // TODO: 1/05/17 cir27 - Make the RaceObjects update on the actual delay. diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 577f985f..61ada899 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -67,6 +67,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel private Timeline timerTimeline; private Race race; private Stage stage; + private ArrayList> sparklineData = new ArrayList<>(); + private int time; private int index = 0; @@ -95,6 +97,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel selectAnnotationBtn.setOnAction(event -> { loadSelectAnnotationView(); }); + time = 0; } /** @@ -185,12 +188,24 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel private void initializeSparkline(){ raceSparkLine.setTitle("Boat Positions"); for (Yacht yacht: startingBoats){ - if (raceSparkLine.getData().contains(yacht.getSparklinePosition())) { - raceSparkLine.getData().remove(yacht.getSparklinePosition()); - } - raceSparkLine.getData().add(yacht.getSparklinePosition()); + XYChart.Series yachtData = new XYChart.Series<>(); + yachtData.getData().add(new XYChart.Data<>(Integer.toString(time), Double.parseDouble(yacht.getPosition()))); + sparklineData.add(yachtData); System.out.println("Here"); } + for (Series spark: + sparklineData){ + raceSparkLine.getData().add(spark); + + } + } + + public void updateSparkLine(){ + for (int i = 0; i < startingBoats.size();i++){ + sparklineData.get(i).getData().add(new XYChart.Data<>(Integer.toString(time),Double.parseDouble(startingBoats.get(i).getPosition()))); + System.out.println("Here"); + } + time++; } /** diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/models/Yacht.java index 2c2ff186..5777fc25 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/models/Yacht.java @@ -2,7 +2,6 @@ package seng302.models; import java.util.concurrent.ConcurrentLinkedQueue; import javafx.scene.chart.XYChart; -import javafx.scene.chart.XYChart.Data; import javafx.scene.chart.XYChart.Series; import javafx.scene.paint.Color; @@ -40,8 +39,6 @@ public class Yacht { // Mark rounding private Long markRoundingTime; - // Used for sparkline - private XYChart.Series sparklinePosition; /** * Used in EventTest and RaceTest. @@ -64,8 +61,6 @@ public class Yacht { this.velocity = boatVelocity; this.shortName = shortName; this.sourceID = id; - this.sparklinePosition = new XYChart.Series<>(); - this.sparklinePosition.setName(boatName); index = 0; dataQ1 = new ConcurrentLinkedQueue<>(); @@ -78,8 +73,6 @@ public class Yacht { this.shortName = shortName; this.boatName = boatName; this.country = country; - this.sparklinePosition = new XYChart.Series<>(); - this.sparklinePosition.setName(boatName); index = 0; dataQ1 = new ConcurrentLinkedQueue<>(); } @@ -162,7 +155,6 @@ public class Yacht { try { if (Integer.parseInt(position) != Integer.parseInt(this.position)){ dataQ1.add(Integer.parseInt(position)); - sparklinePosition.getData().add(new XYChart.Data<>(index++, dataQ1.remove())); System.out.println("new position found for " + boatName + " in position " + position + " old(" + this.position + ")"); } } catch (NumberFormatException e) { @@ -195,10 +187,6 @@ public class Yacht { this.markRoundingTime = markRoundingTime; } - public Series getSparklinePosition() { - return sparklinePosition; - } - @Override public String toString() { return boatName;