From 332722e0991ccecc7414605cc900e6f7d91996f8 Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Mon, 25 Sep 2017 13:48:03 +1300 Subject: [PATCH] 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; }