From 5d8380be8dfd0929ea2e2724dc2d1434932f0de8 Mon Sep 17 00:00:00 2001 From: fjc40 Date: Thu, 25 May 2017 12:35:57 +1200 Subject: [PATCH] Mock.Race: Boats now tack only every 15 seconds (see tackPeriod variable). Also doesn't attempt to calculate VMG (expensive operation) if it won't be used. --- mock/src/main/java/seng302/Model/Race.java | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index d46840f5..ed6c5a4d 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -66,7 +66,7 @@ public class Race implements Runnable { * Frame periods are multiplied by this to get the amount of time a single frame represents. * E.g., frame period = 20ms, scale = 5, frame represents 20 * 5 = 100ms, and so boats are simulated for 100ms, even though only 20ms actually occurred. */ - private int scaleFactor = 30; + private int scaleFactor = 15; /** * The race ID of the course. @@ -587,23 +587,30 @@ public class Race implements Runnable { boat.moveForwards(distanceTravelledMeters, updatePeriodMilliseconds * this.scaleFactor); - //Calculate the boat's bearing bounds, to ensure that it doesn't go out of the course. - Bearing[] bearingBounds = this.calculateBearingBounds(boat); + //Only get a new VMG if the boat will go outside the course, or X seconds have elapsed. + boolean willStayInsideCourse = this.checkBearingInsideCourse(boat.getBearing(), boat.getCurrentPosition()); + long tackPeriod = 15000; + if (!willStayInsideCourse || (boat.getTimeSinceTackChange() > tackPeriod)) { + //Calculate the boat's bearing bounds, to ensure that it doesn't go out of the course. + Bearing[] bearingBounds = this.calculateBearingBounds(boat); - //Calculate the new VMG. - VMG newVMG = this.calculateVMG(boat, bearingBounds); + //Calculate the new VMG. + VMG newVMG = this.calculateVMG(boat, bearingBounds); - //If the new vmg improves velocity, use it. - if (improvesVelocity(boat, newVMG)) { - boat.setVMG(newVMG); - } else { - //We also need to use the new VMG if our current bearing will take us out of the course. - if (!this.checkBearingInsideCourse(boat.getBearing(), boat.getCurrentPosition())) { + + //If the new vmg improves velocity, use it. + if (improvesVelocity(boat, newVMG)) { boat.setVMG(newVMG); - } + } else { + //We also need to use the new VMG if our current bearing will take us out of the course. + if (!willStayInsideCourse) { + boat.setVMG(newVMG); + } + + } }