From 3af15b2b95a82e7480d46910099b7e1d535b4493 Mon Sep 17 00:00:00 2001 From: Zhi You Tan Date: Tue, 2 May 2017 18:02:44 +1200 Subject: [PATCH] Updated wind direction on race view controller so it responds to the stream. #story[818] --- .../controllers/RaceViewController.java | 21 +++++++++++++++---- .../seng302/models/parsers/StreamParser.java | 12 +++++++++++ .../java/seng302/server/ServerThread.java | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 8468376d..6112be11 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -69,11 +69,11 @@ public class RaceViewController extends Thread{ includedCanvasController.initializeCanvas(); initializeTimer(); initializeSettings(); - + initialiseWindDirection(); //set wind direction!!!!!!! can't find another place to put my code --haoming - double windDirection = new ConfigParser("/config/config.xml").getWindDirection(); - windDirectionText.setText(String.format("%.1f°", windDirection)); - windArrowText.setRotate(windDirection); +// double windDirection = new ConfigParser("/config/config.xml").getWindDirection(); +// windDirectionText.setText(String.format("%.1f°", windDirection)); +// windArrowText.setRotate(windDirection); includedCanvasController.timer.start(); } @@ -145,6 +145,19 @@ public class RaceViewController extends Thread{ timerTimeline.playFromStart(); } + private void initialiseWindDirection() { + Timeline windDirTimeline = new Timeline(); + windDirTimeline.setCycleCount(Timeline.INDEFINITE); + windDirTimeline.getKeyFrames().add( + new KeyFrame(Duration.seconds(1), + event -> { + windDirectionText.setText(String.format("%.1f°", StreamParser.getWindDirection())); + windArrowText.setRotate(StreamParser.getWindDirection()); + }) + ); + windDirTimeline.playFromStart(); + } + /** * Generates time line for each boat, and stores time time into timelineInfos hash map */ diff --git a/src/main/java/seng302/models/parsers/StreamParser.java b/src/main/java/seng302/models/parsers/StreamParser.java index e2efd773..ff520e8a 100644 --- a/src/main/java/seng302/models/parsers/StreamParser.java +++ b/src/main/java/seng302/models/parsers/StreamParser.java @@ -39,6 +39,7 @@ public class StreamParser extends Thread{ private static boolean streamStatus = false; private static long timeSinceStart = -1; private static List boats = new ArrayList<>(); + private static double windDirection = 0; /** * Used to initialise the thread name and stream parser object so a thread can be executed @@ -194,6 +195,8 @@ public class StreamParser extends Thread{ timeSinceStart = timeTillStart; } long windDir = bytesToLong(Arrays.copyOfRange(payload,18,20)); + double windDirFactor = 0x4000 / 90; //0x4000 is 90 degrees, 0x8000 is 180 degrees, etc... + windDirection = windDir / windDirFactor; long windSpeed = bytesToLong(Arrays.copyOfRange(payload,20,22)); int noBoats = payload[22]; int raceType = payload[23]; @@ -487,5 +490,14 @@ public class StreamParser extends Thread{ public static XMLParser getXmlObject() { return xmlObject; } + + /** + * returns the wind direction in degrees + * + * @return a double wind direction value + */ + public static double getWindDirection() { + return windDirection; + } } diff --git a/src/main/java/seng302/server/ServerThread.java b/src/main/java/seng302/server/ServerThread.java index e4e5a84a..804ee5f5 100644 --- a/src/main/java/seng302/server/ServerThread.java +++ b/src/main/java/seng302/server/ServerThread.java @@ -265,7 +265,7 @@ public class ServerThread implements Runnable, Observer { for (Boat b : ((Simulator) o).getBoats()){ try { Message m = new BoatLocationMessage(b.getSourceID(), 1, b.getLat(), - b.getLng(), b.getHeadingCorner().getBearingToNextCorner(), + b.getLng(), b.getLastPassedCorner().getBearingToNextCorner(), ((long) b.getSpeed())); server.send(m); } catch (IOException e) {