Initial import
This commit is contained in:
140
Assets/Scripts/Hybrid/RTSInputActions.cs
Normal file
140
Assets/Scripts/Hybrid/RTSInputActions.cs
Normal file
@@ -0,0 +1,140 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace EE2Clone.Hybrid
|
||||
{
|
||||
/// <summary>
|
||||
/// MonoBehaviour that reads from the Input System and exposes RTS-specific input state
|
||||
/// for the hybrid camera, selection, and UI systems. This is the bridge between
|
||||
/// Unity's Input System and our ECS command pipeline.
|
||||
/// </summary>
|
||||
public class RTSInputActions : MonoBehaviour
|
||||
{
|
||||
public static RTSInputActions Instance { get; private set; }
|
||||
|
||||
[Header("Input Action References")]
|
||||
[SerializeField] private InputActionAsset inputActions;
|
||||
|
||||
// Camera
|
||||
public Vector2 CameraPan { get; private set; }
|
||||
public float CameraZoom { get; private set; }
|
||||
public float CameraRotate { get; private set; }
|
||||
|
||||
// Selection
|
||||
public bool LeftClickPressed { get; private set; }
|
||||
public bool LeftClickReleased { get; private set; }
|
||||
public bool LeftClickHeld { get; private set; }
|
||||
public bool RightClickPressed { get; private set; }
|
||||
public Vector2 MousePosition { get; private set; }
|
||||
|
||||
// Modifiers
|
||||
public bool ShiftHeld { get; private set; }
|
||||
public bool CtrlHeld { get; private set; }
|
||||
|
||||
// Actions
|
||||
public bool AttackMovePressed { get; private set; }
|
||||
public bool PatrolPressed { get; private set; }
|
||||
public bool StopPressed { get; private set; }
|
||||
public bool DeletePressed { get; private set; }
|
||||
|
||||
// Control groups (0-9)
|
||||
public int ControlGroupPressed { get; private set; } = -1;
|
||||
|
||||
private InputAction _cameraPanAction;
|
||||
private InputAction _cameraZoomAction;
|
||||
private InputAction _cameraRotateAction;
|
||||
private InputAction _leftClickAction;
|
||||
private InputAction _rightClickAction;
|
||||
private InputAction _mousePositionAction;
|
||||
private InputAction _shiftAction;
|
||||
private InputAction _ctrlAction;
|
||||
private InputAction _attackMoveAction;
|
||||
private InputAction _patrolAction;
|
||||
private InputAction _stopAction;
|
||||
private InputAction _deleteAction;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (inputActions == null) return;
|
||||
|
||||
var rtsMap = inputActions.FindActionMap("RTS");
|
||||
if (rtsMap == null)
|
||||
{
|
||||
Debug.LogError("RTS action map not found in Input Actions asset!");
|
||||
return;
|
||||
}
|
||||
|
||||
_cameraPanAction = rtsMap.FindAction("CameraPan");
|
||||
_cameraZoomAction = rtsMap.FindAction("CameraZoom");
|
||||
_cameraRotateAction = rtsMap.FindAction("CameraRotate");
|
||||
_leftClickAction = rtsMap.FindAction("LeftClick");
|
||||
_rightClickAction = rtsMap.FindAction("RightClick");
|
||||
_mousePositionAction = rtsMap.FindAction("MousePosition");
|
||||
_shiftAction = rtsMap.FindAction("Shift");
|
||||
_ctrlAction = rtsMap.FindAction("Ctrl");
|
||||
_attackMoveAction = rtsMap.FindAction("AttackMove");
|
||||
_patrolAction = rtsMap.FindAction("Patrol");
|
||||
_stopAction = rtsMap.FindAction("Stop");
|
||||
_deleteAction = rtsMap.FindAction("Delete");
|
||||
|
||||
rtsMap.Enable();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (inputActions == null) return;
|
||||
var rtsMap = inputActions.FindActionMap("RTS");
|
||||
rtsMap?.Disable();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
CameraPan = _cameraPanAction?.ReadValue<Vector2>() ?? Vector2.zero;
|
||||
CameraZoom = _cameraZoomAction?.ReadValue<float>() ?? 0f;
|
||||
CameraRotate = _cameraRotateAction?.ReadValue<float>() ?? 0f;
|
||||
|
||||
LeftClickPressed = _leftClickAction?.WasPressedThisFrame() ?? false;
|
||||
LeftClickReleased = _leftClickAction?.WasReleasedThisFrame() ?? false;
|
||||
LeftClickHeld = _leftClickAction?.IsPressed() ?? false;
|
||||
RightClickPressed = _rightClickAction?.WasPressedThisFrame() ?? false;
|
||||
|
||||
MousePosition = _mousePositionAction?.ReadValue<Vector2>() ?? Vector2.zero;
|
||||
|
||||
ShiftHeld = _shiftAction?.IsPressed() ?? false;
|
||||
CtrlHeld = _ctrlAction?.IsPressed() ?? false;
|
||||
|
||||
AttackMovePressed = _attackMoveAction?.WasPressedThisFrame() ?? false;
|
||||
PatrolPressed = _patrolAction?.WasPressedThisFrame() ?? false;
|
||||
StopPressed = _stopAction?.WasPressedThisFrame() ?? false;
|
||||
DeletePressed = _deleteAction?.WasPressedThisFrame() ?? false;
|
||||
|
||||
// Control groups (keyboard 0-9)
|
||||
ControlGroupPressed = -1;
|
||||
for (int i = 0; i <= 9; i++)
|
||||
{
|
||||
if (Keyboard.current != null && Keyboard.current[Key.Digit0 + i].wasPressedThisFrame)
|
||||
{
|
||||
ControlGroupPressed = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (Instance == this)
|
||||
Instance = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user