diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml deleted file mode 100644 index 5352bdf8..00000000 --- a/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/racevisionGame/src/main/java/mock/model/MockRace.java b/racevisionGame/src/main/java/mock/model/MockRace.java index e14220f3..e88307be 100644 --- a/racevisionGame/src/main/java/mock/model/MockRace.java +++ b/racevisionGame/src/main/java/mock/model/MockRace.java @@ -346,7 +346,7 @@ public class MockRace extends Race { this.updateEstimatedTime(boat); } - + checkPosition(boat, totalElapsedMilliseconds); } private void newOptimalVMG(MockBoat boat) { @@ -688,6 +688,7 @@ public class MockRace extends Race { } + public List getCompoundMarks() { return compoundMarks; } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java b/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java index fba06cb5..b7a150f2 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/CommandFactory.java @@ -13,7 +13,7 @@ public class CommandFactory { * @param race to receive command * @param boat to receive command in race * @param action number to select command - * @return + * @return command object corresponding to action */ public static Command createCommand(MockRace race, MockBoat boat, BoatActionEnum action) { switch(action) { diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java index 8dcf1c48..50023719 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java @@ -2,34 +2,49 @@ package mock.model.commandFactory; import mock.model.MockBoat; import mock.model.MockRace; +import shared.model.Bearing; /** - * Created by David on 2/08/2017. + * Command class for tacking and gybing */ public class TackGybeCommand implements Command { private MockRace race; private MockBoat boat; + /** + * Constructor for class + * @param race mock race + * @param boat mock boat to update + */ public TackGybeCommand(MockRace race, MockBoat boat) { this.race = race; this.boat = boat; } - //The refactoring of MockRace will require changes to be made @Override public void execute() { + double boatAngle = boat.getBearing().degrees(); + double windAngle =race.getWindDirection().degrees(); + double differenceAngle = calcDistance(boatAngle, windAngle); + double angleA = windAngle + differenceAngle; + double angleB = windAngle - differenceAngle; + if(angleA % 360 == boatAngle){ + boat.setBearing(Bearing.fromDegrees(angleB)); + } else { + boat.setBearing(Bearing.fromDegrees(angleA)); + } + } - boat.setAutoVMG(false); - - /*VMG newVMG = boat.getPolars().calculateVMG( - race.getWindDirection(), - race.getWindSpeed(), - boat.calculateBearingToNextMarker(), - Bearing.fromDegrees(0d), - Bearing.fromDegrees(359.99999d)); - VMG boatVMG = new VMG(boat.getCurrentSpeed(), boat.getBearing()); - if(race.improvesVelocity(boatVMG, newVMG, boat.calculateBearingToNextMarker())){ - boat.setVMG(newVMG); - }*/ + /** + * Method to calculate smallest angle between 2 angles + * @param degreeA first angle degree + * @param degreeB second angle degree + * @return the calculated smallest angle + */ + public double calcDistance(double degreeA, double degreeB){ + double phi = Math.abs(degreeB - degreeA) % 360; + return phi > 180 ? 360 - phi : phi; } + } + diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java index 1a1eeda5..8c7d2043 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java @@ -4,27 +4,30 @@ import mock.model.MockBoat; import mock.model.MockRace; /** - * Created by David on 2/08/2017. + * Command class for autoVMG */ public class VMGCommand implements Command { private MockRace race; private MockBoat boat; + /** + * Constructor for class + * @param race mock race + * @param boat mock boat to update + */ public VMGCommand(MockRace race, MockBoat boat) { this.race = race; this.boat = boat; } - //The refactoring of MockRace will require changes to be made @Override public void execute() { - boat.setAutoVMG(true); - /*VMG newVMG = boat.getPolars().calculateVMG( - race.getWindDirection(), - race.getWindSpeed(), - boat.calculateBearingToNextMarker(), - Bearing.fromDegrees(0d), - Bearing.fromDegrees(359.99999d)); - boat.setVMG(newVMG);*/ + if (boat.getAutoVMG()){ + boat.setAutoVMG(false); + System.out.println("Auto VMG off!"); + } else { + boat.setAutoVMG(true); + System.out.println("Auto VMG on!"); + } } } diff --git a/racevisionGame/src/main/java/visualiser/gameController/ControllerServer.java b/racevisionGame/src/main/java/visualiser/gameController/ControllerServer.java index dbbca586..7317e70a 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/ControllerServer.java +++ b/racevisionGame/src/main/java/visualiser/gameController/ControllerServer.java @@ -30,19 +30,15 @@ public class ControllerServer extends Observable implements Runnable { * Last received boat action */ private BoatActionEnum action; - /** - * - */ - private RaceLogic rc; /** * Initialise server-side controller with live client socket * @param socket to client + * @param race logic loop observing controls */ - public ControllerServer(Socket socket, RaceLogic rc) { + public ControllerServer(Socket socket, RaceLogic race) { this.socket = socket; - this.rc = rc; - this.addObserver(rc); + this.addObserver(race); try { this.inputStream = new DataInputStream(this.socket.getInputStream()); } catch (IOException e) {