diff --git a/racevisionGame/src/main/java/mock/model/MockBoat.java b/racevisionGame/src/main/java/mock/model/MockBoat.java index c8c6825b..dde207e3 100644 --- a/racevisionGame/src/main/java/mock/model/MockBoat.java +++ b/racevisionGame/src/main/java/mock/model/MockBoat.java @@ -66,7 +66,6 @@ public class MockBoat extends Boat { //Calculate bearing. Bearing bearing = GPSCoordinate.calculateBearing(currentPosition, nextMarkerPosition); - return bearing; } diff --git a/racevisionGame/src/main/java/mock/model/MockRace.java b/racevisionGame/src/main/java/mock/model/MockRace.java index c14e337f..56fe760a 100644 --- a/racevisionGame/src/main/java/mock/model/MockRace.java +++ b/racevisionGame/src/main/java/mock/model/MockRace.java @@ -383,7 +383,6 @@ public class MockRace extends Race { //Update race time. updateRaceTime(currentTime); - //As long as there is at least one boat racing, we still simulate the race. if (getNumberOfActiveBoats() != 0) { @@ -392,7 +391,6 @@ public class MockRace extends Race { //For each boat, we update its position, and generate a BoatLocationMessage. for (MockBoat boat : boats) { - //If it is still racing, update its position. if (boat.getStatus() == BoatStatusEnum.RACING) { @@ -544,7 +542,7 @@ public class MockRace extends Race { * @param boat The boat to calculate VMG for. * @return VMG for the specified boat. */ - private VMG calculateVMG(MockBoat boat) { + public VMG calculateVMG(MockBoat boat) { //Find the VMG inside these bounds. @@ -563,14 +561,14 @@ public class MockRace extends Race { * @param bearingToDestination The bearing between the boat and its destination. * @return True if the new VMG is improves velocity, false otherwise. */ - private boolean improvesVelocity(VMG currentVMG, VMG potentialVMG, Bearing bearingToDestination) { + public boolean improvesVelocity(VMG currentVMG, VMG potentialVMG, Bearing bearingToDestination) { //Calculates the angle between the boat and its destination. Angle angleBetweenDestAndHeading = Angle.fromDegrees(currentVMG.getBearing().degrees() - bearingToDestination.degrees()); //Calculates the angle between the new VMG and the boat's destination. Angle angleBetweenDestAndNewVMG = Angle.fromDegrees(potentialVMG.getBearing().degrees() - bearingToDestination.degrees()); - + //System.out.println(angleBetweenDestAndHeading.degrees() + ":" + angleBetweenDestAndNewVMG.degrees()); //Calculate the boat's current velocity. double currentVelocity = Math.cos(angleBetweenDestAndHeading.radians()) * currentVMG.getSpeed(); @@ -581,6 +579,7 @@ public class MockRace extends Race { //Return whether or not the new VMG gives better velocity. return vmgVelocity > currentVelocity; + } /** @@ -625,13 +624,16 @@ public class MockRace extends Race { //Move the boat forwards that many meters, and advances its time counters by enough milliseconds. boat.moveForwards(distanceTravelledMeters, updatePeriodMilliseconds * this.scaleFactor); + long tackPeriod = 15000; if (boat.getTimeSinceTackChange() > tackPeriod) { + System.out.println("tack loop"); //Calculate the new VMG. VMG newVMG = this.calculateVMG(boat); //If the new vmg improves velocity, use it. if (improvesVelocity(boat, newVMG)) { + System.out.println("NEW VMG"); boat.setVMG(newVMG); } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java b/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java index 0e21d68c..ace2f3be 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java @@ -1,7 +1,9 @@ package mock.model.commandFactory; import mock.model.MockBoat; +import mock.model.MockRace; public interface CommandFactory { - void runCommand(MockBoat boat); + + void runCommand(MockBoat boat, MockRace race); } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java index 80b1fb23..4f1f848e 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java @@ -1,15 +1,21 @@ package mock.model.commandFactory; import mock.model.MockBoat; +import mock.model.MockRace; +import mock.model.VMG; /** * Created by David on 2/08/2017. */ public class TackGybeCommand implements CommandFactory { - + //The refactoring of MockRace will require changes to be made @Override - public void runCommand(MockBoat boat) { - + public void runCommand(MockBoat boat, MockRace race) { + VMG newVMG = race.calculateVMG(boat); + VMG boatVMG = new VMG(boat.getCurrentSpeed(), boat.getBearing()); + if(race.improvesVelocity(boatVMG, newVMG, boat.calculateBearingToNextMarker())){ + boat.setVMG(newVMG); + } } } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java new file mode 100644 index 00000000..2f0f527d --- /dev/null +++ b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java @@ -0,0 +1,19 @@ +package mock.model.commandFactory; + +import mock.model.MockBoat; +import mock.model.MockRace; +import mock.model.VMG; +import shared.model.Bearing; + +/** + * Created by David on 2/08/2017. + */ +public class VMGCommand implements CommandFactory { + + //The refactoring of MockRace will require changes to be made + @Override + public void runCommand(MockBoat boat, MockRace race) { + VMG newVMG = race.calculateVMG(boat); + boat.setVMG(newVMG); + } +} diff --git a/racevisionGame/src/main/java/shared/model/Constants.java b/racevisionGame/src/main/java/shared/model/Constants.java index 51666bf2..a6fe3844 100644 --- a/racevisionGame/src/main/java/shared/model/Constants.java +++ b/racevisionGame/src/main/java/shared/model/Constants.java @@ -38,7 +38,7 @@ public class Constants { /** * The race pre-start time, in milliseconds. 3 minutes. */ - public static final long RacePreStartTime = 3 * 60 * 1000; + public static final long RacePreStartTime = 1 * 10 * 1000; /**