From d2e08fa8e11ed1ccf77d40ffc44435acc82fb3af Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Wed, 3 May 2017 20:36:43 +1200 Subject: [PATCH 1/3] Added boat velocity to information provided by mock #story[778] --- mock/src/main/java/seng302/MockOutput.java | 7 +++++-- mock/src/main/java/seng302/Model/Race.java | 4 ++-- .../java/seng302/Networking/Utils/BoatLocationMessage.java | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/mock/src/main/java/seng302/MockOutput.java b/mock/src/main/java/seng302/MockOutput.java index 4093e692..79418d1d 100644 --- a/mock/src/main/java/seng302/MockOutput.java +++ b/mock/src/main/java/seng302/MockOutput.java @@ -86,8 +86,11 @@ public class MockOutput implements Runnable /** * Used to give the mocOutput information about boat location to be made into a message and sent */ - public synchronized void parseBoatLocation(int sourceID, double lat, double lon, double heading){ - BoatLocationMessage boatLocationMessage = new BoatLocationMessage(sourceID, lat, lon, boatLocationSequenceNumber, heading); + public synchronized void parseBoatLocation(int sourceID, double lat, double lon, double heading, double speed){ + + int newSpeed = (int) Math.round((speed * Constants.KnotsToMetersPerSecondConversionFactor * 1000)); + + BoatLocationMessage boatLocationMessage = new BoatLocationMessage(sourceID, lat, lon, boatLocationSequenceNumber, heading, newSpeed); //iterates the sequence number boatLocationSequenceNumber++; diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index fafb81e8..ed01c3ea 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -125,7 +125,7 @@ public class Race implements Runnable { for (int i = 0; i < startingBoats.size(); i++) { Boat boat = startingBoats.get((i + boatOffset) % startingBoats.size()); if (boat != null) { - mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading()); + mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading(), boat.getScaledVelocity()); boatStatusMessages.add(new BoatStatusMessage(boat.getSourceID(), boat.getCurrentLeg().getLegNumber() >= 0 ? BoatStatus.RACING : BoatStatus.DNF, boat.getCurrentLeg().getLegNumber())); } @@ -194,7 +194,7 @@ public class Race implements Runnable { updatePosition(boat, Math.round(1000 / lastFPS) > 20 ? 15 : Math.round(1000 / lastFPS)); checkPosition(boat, totalTimeElapsed); } - mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading()); + mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading(), boat.getScaledVelocity()); boatStatusMessages.add(new BoatStatusMessage(boat.getSourceID(), boat.getCurrentLeg().getLegNumber() >= 0 ? BoatStatus.RACING : BoatStatus.DNF, boat.getCurrentLeg().getLegNumber())); } else { diff --git a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java index 17b8d6a1..f5d66680 100644 --- a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java +++ b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java @@ -150,7 +150,7 @@ public class BoatLocationMessage extends AC35Data this.rudderAngle = rudderAngle; } - public BoatLocationMessage(int sourceID, double lat, double lon, long sequenceNumber, double heading) { + public BoatLocationMessage(int sourceID, double lat, double lon, long sequenceNumber, double heading, int boatSpeed) { super(MessageType.BOATLOCATION); this.messageVersionNumber = (byte) 1; @@ -164,7 +164,7 @@ public class BoatLocationMessage extends AC35Data this.heading = convertHeadingDoubleToInt(heading); this.pitch = 0; this.roll = 0; - this.boatSpeed = 0; + this.boatSpeed = boatSpeed; this.boatCOG = 0; this.boatSOG = 0; this.apparentWindSpeed = 0; From 7c59632c4104256a1e406cad2749e0fd22895a57 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Wed, 3 May 2017 20:48:37 +1200 Subject: [PATCH 2/3] Fixes to get race running - Had an incorrect if else statement that was preventing race from running #story[778] --- mock/src/main/java/seng302/Model/Event.java | 2 +- mock/src/main/java/seng302/Model/Race.java | 20 +++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/mock/src/main/java/seng302/Model/Event.java b/mock/src/main/java/seng302/Model/Event.java index 5f1facaf..4009500e 100644 --- a/mock/src/main/java/seng302/Model/Event.java +++ b/mock/src/main/java/seng302/Model/Event.java @@ -43,7 +43,7 @@ public class Event { System.out.println("Sending Boat"); sendBoatData(); - Race newRace = new Race(raceDataSource, 3, mockOutput); + Race newRace = new Race(raceDataSource, 15, mockOutput); new Thread((newRace)).start(); } diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index ed01c3ea..06bd387d 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -112,46 +112,40 @@ public class Race implements Runnable { long currentTime = System.currentTimeMillis(); long startTime = currentTime + (PRERACE_TIME / scaleFactor); long minutes; - long currentTimeInSeconds; - long remainingSeconds; long hours; long timeLeft; @Override public void handle(long arg0) { timeLeft = startTime - currentTime; + System.out.println(timeLeft); ArrayList boatStatusMessages = new ArrayList<>(); //For each boat, we update it's position, and generate a BoatLocationMessage. for (int i = 0; i < startingBoats.size(); i++) { Boat boat = startingBoats.get((i + boatOffset) % startingBoats.size()); if (boat != null) { - mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading(), boat.getScaledVelocity()); + mockOutput.parseBoatLocation(boat.getSourceID(), boat.getCurrentPosition().getLatitude(), boat.getCurrentPosition().getLongitude(), boat.getHeading(), 0); boatStatusMessages.add(new BoatStatusMessage(boat.getSourceID(), boat.getCurrentLeg().getLegNumber() >= 0 ? BoatStatus.RACING : BoatStatus.DNF, boat.getCurrentLeg().getLegNumber())); } } boatOffset = (boatOffset + 1) % (startingBoats.size()); - - - if (timeLeft <= 60000/scaleFactor) { + if (timeLeft <= 60000/scaleFactor && timeLeft > 0) { RaceStatus raceStatus = new RaceStatus(System.currentTimeMillis(), raceId, 2, 2, boatStatusMessages); mockOutput.parseRaceStatus(raceStatus); } else if (timeLeft <= 0) { countdownFinish = true; - stop(); if (runRace) { simulateRace(); } - } else { + System.out.println("Stopping"); + stop(); + } + else { RaceStatus raceStatus = new RaceStatus(System.currentTimeMillis(), raceId, 1, 2, boatStatusMessages); mockOutput.parseRaceStatus(raceStatus); - currentTimeInSeconds = (timeLeft * scaleFactor) / 1000; - minutes = currentTimeInSeconds / 60; - remainingSeconds = currentTimeInSeconds % 60; - hours = minutes / 60; - minutes = minutes % 60; } currentTime = System.currentTimeMillis(); } From b9901a252a44631022f6e1cfa0688db681b761ed Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Wed, 3 May 2017 21:01:30 +1200 Subject: [PATCH 3/3] Moved speed conversion to BoatMessage class #story[778] --- mock/src/main/java/seng302/MockOutput.java | 4 +--- mock/src/main/java/seng302/Model/Race.java | 4 +--- .../java/seng302/Networking/Utils/BoatLocationMessage.java | 4 ++-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/mock/src/main/java/seng302/MockOutput.java b/mock/src/main/java/seng302/MockOutput.java index 79418d1d..f5ee2e4c 100644 --- a/mock/src/main/java/seng302/MockOutput.java +++ b/mock/src/main/java/seng302/MockOutput.java @@ -88,9 +88,7 @@ public class MockOutput implements Runnable */ public synchronized void parseBoatLocation(int sourceID, double lat, double lon, double heading, double speed){ - int newSpeed = (int) Math.round((speed * Constants.KnotsToMetersPerSecondConversionFactor * 1000)); - - BoatLocationMessage boatLocationMessage = new BoatLocationMessage(sourceID, lat, lon, boatLocationSequenceNumber, heading, newSpeed); + BoatLocationMessage boatLocationMessage = new BoatLocationMessage(sourceID, lat, lon, boatLocationSequenceNumber, heading, speed); //iterates the sequence number boatLocationSequenceNumber++; diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index 06bd387d..848172d7 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -32,7 +32,7 @@ public class Race implements Runnable { protected int boatsFinished = 0; protected long totalTimeElapsed; protected int scaleFactor; - protected int PRERACE_TIME = 180000; //time in milliseconds to pause during pre-race. At the moment, 3 minutes + protected int PRERACE_TIME = 180; //time in milliseconds to pause during pre-race. At the moment, 3 minutes protected boolean countdownFinish = false; protected boolean runRace = true; private int lastFPS = 20; @@ -202,8 +202,6 @@ public class Race implements Runnable { } }.start(); } - - public void initialiseBoats() { Leg officialStart = legs.get(0); String name = officialStart.getName(); diff --git a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java index f5d66680..4f236747 100644 --- a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java +++ b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java @@ -150,7 +150,7 @@ public class BoatLocationMessage extends AC35Data this.rudderAngle = rudderAngle; } - public BoatLocationMessage(int sourceID, double lat, double lon, long sequenceNumber, double heading, int boatSpeed) { + public BoatLocationMessage(int sourceID, double lat, double lon, long sequenceNumber, double heading, double boatSpeed) { super(MessageType.BOATLOCATION); this.messageVersionNumber = (byte) 1; @@ -164,7 +164,7 @@ public class BoatLocationMessage extends AC35Data this.heading = convertHeadingDoubleToInt(heading); this.pitch = 0; this.roll = 0; - this.boatSpeed = boatSpeed; + this.boatSpeed = convertBoatSpeedDoubleToInt(boatSpeed); this.boatCOG = 0; this.boatSOG = 0; this.apparentWindSpeed = 0;