From 332722e0991ccecc7414605cc900e6f7d91996f8 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Mon, 25 Sep 2017 13:48:03 +1300 Subject: [PATCH 1/2] Attempt to fix sails in / out colliding issue. Going to test on dev for a better visual representation. #story[1297] --- .../src/main/java/mock/model/MockRace.java | 13 +++++++------ .../mock/model/commandFactory/SailsCommand.java | 6 +++--- .../mock/model/commandFactory/TackGybeCommand.java | 2 +- .../java/mock/model/commandFactory/VMGCommand.java | 2 +- .../java/mock/model/commandFactory/WindCommand.java | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/racevisionGame/src/main/java/mock/model/MockRace.java b/racevisionGame/src/main/java/mock/model/MockRace.java index 9ede32d1..d7112f47 100644 --- a/racevisionGame/src/main/java/mock/model/MockRace.java +++ b/racevisionGame/src/main/java/mock/model/MockRace.java @@ -61,7 +61,7 @@ public class MockRace extends RaceState { */ private Polars polars; - private ActiveObserverCommand activeObserverCommand; + private Map activeObserverCommands; private long racePreStartTime = Constants.RacePreStartTime; @@ -82,7 +82,7 @@ public class MockRace extends RaceState { this.setRaceDataSource(raceDataSource); this.setRegattaDataSource(regattaDataSource); - this.activeObserverCommand = new ActiveObserverCommand(); + this.activeObserverCommands = new HashMap<>(); this.polars = polars; this.scaleFactor = timeScale; @@ -127,6 +127,7 @@ public class MockRace extends RaceState { getRaceDataSource().getParticipants().add(sourceID); this.boats.add(mockBoat); + this.activeObserverCommands.put(boat.getSourceID(), new ActiveObserverCommand()); getRaceDataSource().incrementSequenceNumber(); @@ -711,11 +712,11 @@ public class MockRace extends RaceState { super.setChanged(); } - public void addVelocityCommand(ObserverCommand c) { - this.activeObserverCommand.changeVelocityCommand(this, c); + public void addVelocityCommand(ObserverCommand c, int boatId) { + this.activeObserverCommands.get(boatId).changeVelocityCommand(this, c); } - public void addAngularCommand(ObserverCommand c) { - this.activeObserverCommand.changeAngularCommand(this, c); + public void addAngularCommand(ObserverCommand c, int boatId) { + this.activeObserverCommands.get(boatId).changeAngularCommand(this, c); } } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java index ac4877c4..d26f794c 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java @@ -13,7 +13,7 @@ public class SailsCommand extends ObserverCommand { public SailsCommand(MockRace race, MockBoat boat, boolean sailsOut) { super(race, boat); - race.addVelocityCommand(this); + race.addVelocityCommand(this, boat.getSourceID()); this.sailsOut = sailsOut; } @@ -38,10 +38,10 @@ public class SailsCommand extends ObserverCommand { double acceleration = 0.5; if(sailsOut && boat.getCurrentSpeed() < goalVelocity) { - boat.setCurrentSpeed(Math.min(goalVelocity, boat.getCurrentSpeed() + acceleration)); + if (!boat.isColliding()) boat.setCurrentSpeed(Math.min(goalVelocity, boat.getCurrentSpeed() + acceleration)); } else if (!sailsOut && boat.getCurrentSpeed() > goalVelocity) { // Apply deceleration to strictly 0 speed - boat.setCurrentSpeed(Math.max(0, boat.getCurrentSpeed() - acceleration)); + if (!boat.isColliding()) boat.setCurrentSpeed(Math.max(0, boat.getCurrentSpeed() - acceleration)); } else { // Release boat from SailsCommand control if(sailsOut) boat.setVelocityDefault(true); diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java index e10ee74a..78142da2 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java @@ -22,7 +22,7 @@ public class TackGybeCommand extends ObserverCommand { */ public TackGybeCommand(MockRace race, MockBoat boat) { super(race, boat); - race.addAngularCommand(this); + race.addAngularCommand(this, boat.getSourceID()); } @Override diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java index 812f833a..fa4e7d69 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java @@ -24,7 +24,7 @@ public class VMGCommand extends ObserverCommand { */ public VMGCommand(MockRace race, MockBoat boat) { super(race, boat); - race.addAngularCommand(this); + race.addAngularCommand(this, boat.getSourceID()); } @Override diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java index 85eec091..af2e422b 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java @@ -20,7 +20,7 @@ public class WindCommand extends ObserverCommand { */ public WindCommand(MockRace race, MockBoat boat, boolean upwind) { super(race, boat); - race.addAngularCommand(this); + race.addAngularCommand(this, boat.getSourceID()); this.direction = upwind? -1 : 1; } From 7d789c04bb588fd4b7d8401d795954f085bf2180 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Mon, 25 Sep 2017 14:07:29 +1300 Subject: [PATCH 2/2] Fixed sails out / colliding issue. #story[1297] --- .../commandFactory/CollisionCommand.java | 1 + .../model/commandFactory/SailsCommand.java | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/CollisionCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/CollisionCommand.java index 52ec2b34..901ac860 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/CollisionCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/CollisionCommand.java @@ -36,6 +36,7 @@ public class CollisionCommand extends ObserverCommand { @Override public void update(Observable o, Object arg) { if(GPSCoordinate.calculateDistanceMeters(boat.getPosition(), startingPosition) < distance) { + boat.setVelocityDefault(false); boat.setPosition(GPSCoordinate.calculateNewPosition(boat.getPosition(), 3, azimuth)); } else { race.deleteObserver(this); diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java index d26f794c..826e697b 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java @@ -37,15 +37,18 @@ public class SailsCommand extends ObserverCommand { public void update(Observable o, Object arg) { double acceleration = 0.5; - if(sailsOut && boat.getCurrentSpeed() < goalVelocity) { - if (!boat.isColliding()) boat.setCurrentSpeed(Math.min(goalVelocity, boat.getCurrentSpeed() + acceleration)); - } else if (!sailsOut && boat.getCurrentSpeed() > goalVelocity) { - // Apply deceleration to strictly 0 speed - if (!boat.isColliding()) boat.setCurrentSpeed(Math.max(0, boat.getCurrentSpeed() - acceleration)); - } else { - // Release boat from SailsCommand control - if(sailsOut) boat.setVelocityDefault(true); - race.deleteObserver(this); + if (!boat.isColliding()) { + boat.setVelocityDefault(false); + if (sailsOut && boat.getCurrentSpeed() < goalVelocity) { + boat.setCurrentSpeed(Math.min(goalVelocity, boat.getCurrentSpeed() + acceleration)); + } else if (!sailsOut && boat.getCurrentSpeed() > goalVelocity) { + // Apply deceleration to strictly 0 speed + boat.setCurrentSpeed(Math.max(0, boat.getCurrentSpeed() - acceleration)); + } else { + // Release boat from SailsCommand control + if (sailsOut) boat.setVelocityDefault(true); + race.deleteObserver(this); + } } } }