using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Events; public class BuildingInputManager : MonoBehaviour, IListener { public InputEvent buildingConfirmedEvent; public InputEvent buildingMovedEvent; private InputActions input; private VRControlMode currentVRControlMode; void Awake() { input = new InputActions(); EventManager.Instance.AddListener(EVENT_TYPE.ON_VR_CONTROLMODE_SWITCHED, this); } private void OnEnable() { input.BuilderInput.Enable(); // Building Management input.BuilderInput.Confirm.performed += OnBuildingConfirmed; input.BuilderInput.MoveBuilding.performed += OnBuildingMoved; input.BuilderInput.MoveBuilding.canceled += OnBuildingMoved; } private void OnDisable() { // Building Management input.BuilderInput.Confirm.performed -= OnBuildingConfirmed; input.BuilderInput.MoveBuilding.performed -= OnBuildingMoved; input.BuilderInput.MoveBuilding.canceled -= OnBuildingMoved; input.BuilderInput.Disable(); } private void OnBuildingConfirmed(InputAction.CallbackContext ctx) { if (currentVRControlMode == VRControlMode.Advanced && ctx.control.device.description.interfaceName.Contains("XR")) return; buildingConfirmedEvent.Invoke(ctx); } private void OnBuildingMoved(InputAction.CallbackContext ctx) { if (currentVRControlMode == VRControlMode.Advanced && ctx.control.device.description.interfaceName.Contains("XR")) return; buildingMovedEvent.Invoke(ctx); } public void OnEvent<T>(EVENT_TYPE eventType, Component Sender, T param = default) { switch(eventType) { case EVENT_TYPE.ON_VR_CONTROLMODE_SWITCHED: currentVRControlMode = (VRControlMode)(dynamic)param; break; } } }