using UnityEngine; using UnityEngine.InputSystem; namespace HeneGames.Airplane { /// /// Reads flight controls via the Input System (works when the project uses the new Input System). /// Falls back to legacy Input when the old backend is enabled. /// internal static class SimpleAirplaneInput { public static float Horizontal => ReadAxis("Horizontal", ReadHorizontalKeyboard); public static float Vertical => ReadAxis("Vertical", ReadVerticalKeyboard); public static bool YawLeft => IsPressed(Key.Q, KeyCode.Q); public static bool YawRight => IsPressed(Key.E, KeyCode.E); public static bool Turbo => IsPressed(Key.LeftShift, KeyCode.LeftShift); public static bool GetKeyDown(KeyCode keyCode) { var keyboard = Keyboard.current; if (keyboard != null && TryMapKey(keyCode, out Key key)) return keyboard[key].wasPressedThisFrame; #if ENABLE_LEGACY_INPUT_MANAGER return Input.GetKeyDown(keyCode); #else return false; #endif } public static bool GetKey(KeyCode keyCode) { var keyboard = Keyboard.current; if (keyboard != null && TryMapKey(keyCode, out Key key)) return keyboard[key].isPressed; #if ENABLE_LEGACY_INPUT_MANAGER return Input.GetKey(keyCode); #else return false; #endif } private static float ReadAxis(string axisName, System.Func readKeyboard) { var keyboard = Keyboard.current; if (keyboard != null) { float value = readKeyboard(); if (value != 0f) return value; } #if ENABLE_LEGACY_INPUT_MANAGER return Input.GetAxisRaw(axisName); #else return 0f; #endif } private static float ReadHorizontalKeyboard() { var keyboard = Keyboard.current; float value = 0f; if (keyboard.aKey.isPressed || keyboard.leftArrowKey.isPressed) value -= 1f; if (keyboard.dKey.isPressed || keyboard.rightArrowKey.isPressed) value += 1f; return value; } private static float ReadVerticalKeyboard() { var keyboard = Keyboard.current; float value = 0f; if (keyboard.sKey.isPressed || keyboard.downArrowKey.isPressed) value -= 1f; if (keyboard.wKey.isPressed || keyboard.upArrowKey.isPressed) value += 1f; return value; } private static bool IsPressed(Key inputSystemKey, KeyCode legacyKey) { var keyboard = Keyboard.current; if (keyboard != null && keyboard[inputSystemKey].isPressed) return true; #if ENABLE_LEGACY_INPUT_MANAGER return Input.GetKey(legacyKey); #else return false; #endif } private static bool TryMapKey(KeyCode keyCode, out Key key) { switch (keyCode) { case KeyCode.Space: key = Key.Space; return true; case KeyCode.LeftShift: key = Key.LeftShift; return true; case KeyCode.RightShift: key = Key.RightShift; return true; case KeyCode.Q: key = Key.Q; return true; case KeyCode.E: key = Key.E; return true; case KeyCode.W: key = Key.W; return true; case KeyCode.A: key = Key.A; return true; case KeyCode.S: key = Key.S; return true; case KeyCode.D: key = Key.D; return true; case KeyCode.UpArrow: key = Key.UpArrow; return true; case KeyCode.DownArrow: key = Key.DownArrow; return true; case KeyCode.LeftArrow: key = Key.LeftArrow; return true; case KeyCode.RightArrow: key = Key.RightArrow; return true; default: key = Key.None; return false; } } } }