From f4cb1a3ac4fdb4397750793400cfa807b462c74f Mon Sep 17 00:00:00 2001 From: Joseph Date: Tue, 5 Sep 2017 12:40:34 +1200 Subject: [PATCH] Made ObserverCommands and made racestate an observable. ObserverCommands observes the race passes in the params. #story[1196] --- .../src/main/java/mock/model/MockRace.java | 6 ++++++ .../src/main/java/mock/model/RaceLogic.java | 4 ++++ .../mock/model/commandFactory/Command.java | 2 ++ .../model/commandFactory/ObserverCommand.java | 20 +++++++++++++++++++ .../model/commandFactory/SailsCommand.java | 14 ++++++++----- .../model/commandFactory/TackGybeCommand.java | 13 +++++++----- .../mock/model/commandFactory/VMGCommand.java | 14 ++++++++----- .../model/commandFactory/WindCommand.java | 14 ++++++++----- .../src/main/java/shared/model/RaceState.java | 3 ++- 9 files changed, 69 insertions(+), 21 deletions(-) create mode 100644 racevisionGame/src/main/java/mock/model/commandFactory/ObserverCommand.java diff --git a/racevisionGame/src/main/java/mock/model/MockRace.java b/racevisionGame/src/main/java/mock/model/MockRace.java index f606c29d..e69db01e 100644 --- a/racevisionGame/src/main/java/mock/model/MockRace.java +++ b/racevisionGame/src/main/java/mock/model/MockRace.java @@ -743,4 +743,10 @@ public class MockRace extends RaceState { } + /** + * Made public, so race logic can control it + */ + public void setChanged() { + super.setChanged(); + } } diff --git a/racevisionGame/src/main/java/mock/model/RaceLogic.java b/racevisionGame/src/main/java/mock/model/RaceLogic.java index d1ef39e0..977bd8d6 100644 --- a/racevisionGame/src/main/java/mock/model/RaceLogic.java +++ b/racevisionGame/src/main/java/mock/model/RaceLogic.java @@ -185,6 +185,10 @@ public class RaceLogic implements RunnableWithFramePeriod, Observer { previousFrameTime = currentTime; } + // Notify Observers + race.setChanged(); + race.notifyObservers(); + waitForFramePeriod(previousFrameTime, currentTime, 50); previousFrameTime = currentTime; } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/Command.java b/racevisionGame/src/main/java/mock/model/commandFactory/Command.java index e0486114..421d5b32 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/Command.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/Command.java @@ -3,6 +3,8 @@ package mock.model.commandFactory; import mock.model.MockBoat; import mock.model.MockRace; +import java.util.Observer; + /** * Allows RaceLogic to control MockRace state according to the Command pattern */ diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/ObserverCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/ObserverCommand.java new file mode 100644 index 00000000..a9ca9209 --- /dev/null +++ b/racevisionGame/src/main/java/mock/model/commandFactory/ObserverCommand.java @@ -0,0 +1,20 @@ +package mock.model.commandFactory; + +import mock.model.MockBoat; +import mock.model.MockRace; + +import java.util.Observer; + +/** + * Command that can observe the race + */ +public abstract class ObserverCommand implements Command, Observer { + MockRace race; + MockBoat boat; + + public ObserverCommand(MockRace race, MockBoat boat) { + this.race = race; + this.boat = boat; + race.addObserver(this); + } +} diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java index 7d620a42..bfb752ea 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/SailsCommand.java @@ -3,14 +3,13 @@ package mock.model.commandFactory; import mock.model.MockBoat; import mock.model.MockRace; -public class SailsCommand implements Command { - private MockRace race; - private MockBoat boat; +import java.util.Observable; + +public class SailsCommand extends ObserverCommand { private boolean sailsOut; public SailsCommand(MockRace race, MockBoat boat, Boolean sailsOut) { - this.race = race; - this.boat = boat; + super(race, boat); this.sailsOut = sailsOut; } @@ -18,4 +17,9 @@ public class SailsCommand implements Command { public void execute() { this.boat.setSailsOut(this.sailsOut); } + + @Override + public void update(Observable o, Object arg) { + + } } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java index d0b0584b..28ace831 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/TackGybeCommand.java @@ -4,12 +4,12 @@ import mock.model.MockBoat; import mock.model.MockRace; import shared.model.Bearing; +import java.util.Observable; + /** * Command class for tacking and gybing */ -public class TackGybeCommand implements Command { - private MockRace race; - private MockBoat boat; +public class TackGybeCommand extends ObserverCommand { /** * Constructor for class @@ -17,8 +17,7 @@ public class TackGybeCommand implements Command { * @param boat mock boat to update */ public TackGybeCommand(MockRace race, MockBoat boat) { - this.race = race; - this.boat = boat; + super(race, boat); } @Override @@ -49,5 +48,9 @@ public class TackGybeCommand implements Command { return phi > 180 ? 360 - phi : phi; } + @Override + public void update(Observable o, Object arg) { + + } } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java index 39469cf8..45f666ec 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/VMGCommand.java @@ -3,12 +3,12 @@ package mock.model.commandFactory; import mock.model.MockBoat; import mock.model.MockRace; +import java.util.Observable; + /** * Command class for autoVMG */ -public class VMGCommand implements Command { - private MockRace race; - private MockBoat boat; +public class VMGCommand extends ObserverCommand { /** * Constructor for class @@ -16,8 +16,7 @@ public class VMGCommand implements Command { * @param boat mock boat to update */ public VMGCommand(MockRace race, MockBoat boat) { - this.race = race; - this.boat = boat; + super(race, boat); } @Override @@ -28,4 +27,9 @@ public class VMGCommand implements Command { boat.setAutoVMG(true); } } + + @Override + public void update(Observable o, Object arg) { + + } } diff --git a/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java b/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java index 530bf5bc..138ccff0 100644 --- a/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java +++ b/racevisionGame/src/main/java/mock/model/commandFactory/WindCommand.java @@ -4,17 +4,16 @@ import mock.model.MockBoat; import mock.model.MockRace; import shared.model.Bearing; +import java.util.Observable; + /** * Created by connortaylorbrown on 4/08/17. */ -public class WindCommand implements Command { - private MockRace race; - private MockBoat boat; +public class WindCommand extends ObserverCommand { private int direction; public WindCommand(MockRace race, MockBoat boat, boolean upwind) { - this.race = race; - this.boat = boat; + super(race, boat); this.direction = upwind? -1 : 1; } @@ -34,4 +33,9 @@ public class WindCommand implements Command { boat.setBearing(Bearing.fromDegrees(heading + offset)); } + + @Override + public void update(Observable o, Object arg) { + + } } diff --git a/racevisionGame/src/main/java/shared/model/RaceState.java b/racevisionGame/src/main/java/shared/model/RaceState.java index 48361da2..e755ba80 100644 --- a/racevisionGame/src/main/java/shared/model/RaceState.java +++ b/racevisionGame/src/main/java/shared/model/RaceState.java @@ -13,6 +13,7 @@ import shared.dataInput.RegattaDataSource; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Observable; /** @@ -20,7 +21,7 @@ import java.util.List; * This is a base class inherited by {@link mock.model.MockRace} and {@link visualiser.model.VisualiserRaceState}. * Has a course, state, wind, boundaries, etc.... Boats are added by inheriting classes (see {@link Boat}, {@link mock.model.MockBoat}, {@link visualiser.model.VisualiserBoat}. */ -public abstract class RaceState { +public abstract class RaceState extends Observable{