diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java index 476d4309..97f1896d 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java @@ -92,10 +92,12 @@ public class RaceController extends Controller { @Override public void initialize(URL location, ResourceBundle resources) { + KeyFactory keyFactory = KeyFactory.getFactory(); + // Initialise keyboard handler race.addEventFilter(KeyEvent.KEY_PRESSED, event -> { String codeString = event.getCode().toString(); - ControlKey controlKey = KeyFactory.getKey(codeString); + ControlKey controlKey = keyFactory.getKey(codeString); if(controlKey != null) { try { controllerClient.sendKey(controlKey); diff --git a/racevisionGame/src/main/java/visualiser/gameController/InputChecker.java b/racevisionGame/src/main/java/visualiser/gameController/InputChecker.java index 19361b32..34a7d544 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/InputChecker.java +++ b/racevisionGame/src/main/java/visualiser/gameController/InputChecker.java @@ -20,10 +20,12 @@ public class InputChecker { * @param scene Scene the controller is to run in parallel with. */ public void runWithScene(Scene scene){ + KeyFactory keyFactory = KeyFactory.getFactory(); + scene.setOnKeyPressed(event -> { String codeString = event.getCode().toString(); if (!currentlyActiveKeys.containsKey(codeString)) { - ControlKey controlKey = KeyFactory.getKey(codeString); + ControlKey controlKey = keyFactory.getKey(codeString); if (controlKey != null) { controlKey.onAction(); System.out.println(controlKey.toString() + " is Pressed."); @@ -34,7 +36,7 @@ public class InputChecker { scene.setOnKeyReleased(event -> { String codeString = event.getCode().toString(); - ControlKey controlKey = KeyFactory.getKey(codeString); + ControlKey controlKey = keyFactory.getKey(codeString); if (controlKey != null) { controlKey.onRelease(); System.out.println(controlKey.toString() + " is Released."); @@ -46,7 +48,7 @@ public class InputChecker { @Override public void handle(long now) { for (String key: currentlyActiveKeys.keySet()){ - ControlKey controlKey = KeyFactory.getKey(key); + ControlKey controlKey = keyFactory.getKey(key); if (controlKey != null){ controlKey.onHold(); System.out.println(controlKey.toString() + " is Held."); diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/ControlKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/ControlKey.java index 7f067fb1..1af6b4d8 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/ControlKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/ControlKey.java @@ -8,16 +8,13 @@ import javafx.scene.input.KeyCode; public abstract class ControlKey { private String name; - private KeyCode keyCode; /** * Constructor for Control * @param name name of the key - * @param keyCode key code for the key */ - public ControlKey(String name, KeyCode keyCode){ + public ControlKey(String name){ this.name = name; - this.keyCode = keyCode; } /** diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/DownWindKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/DownWindKey.java index 3f36bf08..03be1c3f 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/DownWindKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/DownWindKey.java @@ -1,7 +1,5 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; - /** * Key to send downwind packet to server */ @@ -9,12 +7,11 @@ public class DownWindKey extends ControlKey { /** * Constructor for Control + * @param name name of the key * - * @param name name of the key - * @param keyCode key code for the key */ - public DownWindKey(String name, KeyCode keyCode) { - super(name, keyCode); + public DownWindKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java index 70e9c670..ef1368f0 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java @@ -1,36 +1,51 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; +import java.util.HashMap; +import java.util.Map; /** * Factory for creating Keys, these could be predefined in the future. */ public class KeyFactory { + /** + * Retrieve command given key + */ + private Map keyState; + + /** + * Singleton instance to enforce consistent key state + */ + private static KeyFactory theFactory = new KeyFactory(); + + /** + * Singleton constructor for key state, set up initial state of each action. + */ + private KeyFactory() { + this.keyState = new HashMap<>(); + keyState.put("Z", new ZoomInKey("Zoom In")); + keyState.put("X", new ZoomOutKey("Zoom Out")); + keyState.put("SPACE", new VMGKey("VMG")); + keyState.put("SHIFT", new SailsToggleKey("Toggle Sails")); + keyState.put("ENTER", new TackGybeKey("Tack/Gybe")); + keyState.put("PAGE_UP", new UpWindKey("Upwind")); + keyState.put("PAGE_DOWN", new DownWindKey("Downwind")); + } + + /** + * Get singleton instance of KeyFactory to interact with key state + * @return automatically constructed KeyFactory + */ + public static KeyFactory getFactory() { + return theFactory; + } /** * Get the Control Key in charge of a key press * @param key key pressed (String value of KeyCode) * @return the Control Key behaviour of the key pressed. */ - public static ControlKey getKey(String key){ - switch(key){ - case "Z": - return new ZoomInKey("Z", KeyCode.Z); - case "X": - return new ZoomOutKey("X", KeyCode.X); - case "SPACE": - return new VMGKey("SPACE", KeyCode.SPACE); - case "SHIFT": - return new SailsToggleKey("SHIFT", KeyCode.SHIFT); - case "ENTER": - return new TackGybeKey("ENTER", KeyCode.ENTER); - case "PAGE_UP": - return new UpWindKey("PAGE_UP", KeyCode.PAGE_UP); - case "PAGE_DOWN": - return new DownWindKey("PAGE_DOWN", KeyCode.PAGE_DOWN); - default: - return null; - } + public ControlKey getKey(String key){ + return keyState.get(key); } } diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java index f8a4278d..0a0c43d1 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/SailsToggleKey.java @@ -1,7 +1,5 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; - /** * Key to toggle the sails */ @@ -9,12 +7,11 @@ public class SailsToggleKey extends ControlKey { /** * Constructor for Control + * @param name name of the key * - * @param name name of the key - * @param keyCode key code for the key */ - public SailsToggleKey(String name, KeyCode keyCode) { - super(name, keyCode); + public SailsToggleKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/TackGybeKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/TackGybeKey.java index 8e2e424c..6bd91b47 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/TackGybeKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/TackGybeKey.java @@ -1,7 +1,5 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; - /** * key to toggle between tacking and gybing */ @@ -9,12 +7,11 @@ public class TackGybeKey extends ControlKey { /** * Constructor for Control + * @param name name of the key * - * @param name name of the key - * @param keyCode key code for the key */ - public TackGybeKey(String name, KeyCode keyCode) { - super(name, keyCode); + public TackGybeKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/UpWindKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/UpWindKey.java index 0744f8df..b7465683 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/UpWindKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/UpWindKey.java @@ -1,7 +1,5 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; - /** * Key to go upwind */ @@ -9,12 +7,11 @@ public class UpWindKey extends ControlKey { /** * Constructor for Control + * @param name name of the key * - * @param name name of the key - * @param keyCode key code for the key */ - public UpWindKey(String name, KeyCode keyCode) { - super(name, keyCode); + public UpWindKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/VMGKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/VMGKey.java index a9a15695..bd2cd16f 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/VMGKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/VMGKey.java @@ -11,10 +11,9 @@ public class VMGKey extends ControlKey{ * Constructor for Control * * @param name name of the key - * @param keyCode key code for the key */ - public VMGKey(String name, KeyCode keyCode) { - super(name, keyCode); + public VMGKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomInKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomInKey.java index 0d990a54..35b6ce94 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomInKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomInKey.java @@ -7,8 +7,8 @@ import javafx.scene.input.KeyCode; */ public class ZoomInKey extends ControlKey { - public ZoomInKey(String name, KeyCode keyCode) { - super(name, keyCode); + public ZoomInKey(String name) { + super(name); } @Override diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomOutKey.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomOutKey.java index 62289847..6da2210c 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomOutKey.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/ZoomOutKey.java @@ -1,7 +1,5 @@ package visualiser.gameController.Keys; -import javafx.scene.input.KeyCode; - /** * Key to zoom out of the game. */ @@ -9,12 +7,11 @@ public class ZoomOutKey extends ControlKey{ /** * Constructor for Control + * @param name name of the key * - * @param name name of the key - * @param keyCode key code for the key */ - public ZoomOutKey(String name, KeyCode keyCode) { - super(name, keyCode); + public ZoomOutKey(String name) { + super(name); } @Override