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); + } + + } }