using System; using System.Collections.Generic; using BitStrap; using UnityEngine; public class VRInputManager : MonoBehaviour { [Serializable] public class ButtonDefinition { public OVRInput.Controller controller = OVRInput.Controller.RTouch; public OVRInput.Button button; public OVRInput.Axis2D axis; public bool xAxis = true; public bool touchpadPress; public OVRInput.Controller GetController() { if (VRControllersManager.Instance.IsLeftHanded()) { return (controller != OVRInput.Controller.LTouch) ? OVRInput.Controller.LTouch : OVRInput.Controller.RTouch; } return controller; } } [Serializable] public class ActionDefinition { public string actionName = string.Empty; public List oculusButtons = new List(); public List viveButtons = new List(); public List wmrButtons = new List(); public List indexButtons = new List(); public List oculusSButtons = new List(); public List cosmosButtons = new List(); } private static VRInputManager instance; public List actionDefinitions = new List(); private static int k; public static float axisDeadzone = 0.1f; public static VRInputManager Instance { get { return instance; } } private VRInputManager() { } private void Awake() { if (instance == null) { instance = this; UnityEngine.Object.DontDestroyOnLoad(base.gameObject); } else { UnityEngine.Object.DestroyImmediate(base.gameObject); } } private void Start() { } public static List GetCurrentButtonDefinitions(ActionDefinition actionDefinition) { if (VRManager.GetControllerType(false) == OVRInput.OpenVRController.ViveController || VRManager.GetControllerType(true) == OVRInput.OpenVRController.ViveController) { return actionDefinition.viveButtons; } if (VRManager.GetControllerType(false) == OVRInput.OpenVRController.WindowsMRController || VRManager.GetControllerType(true) == OVRInput.OpenVRController.WindowsMRController) { return actionDefinition.wmrButtons; } if (VRManager.GetControllerType(false) == OVRInput.OpenVRController.OculusTouch || VRManager.GetControllerType(true) == OVRInput.OpenVRController.OculusTouch) { return actionDefinition.oculusButtons; } if (VRManager.GetControllerType(false) == OVRInput.OpenVRController.IndexController || VRManager.GetControllerType(true) == OVRInput.OpenVRController.IndexController) { return actionDefinition.indexButtons; } if (VRManager.GetControllerType(false) == OVRInput.OpenVRController.CosmosController || VRManager.GetControllerType(true) == OVRInput.OpenVRController.CosmosController) { return actionDefinition.cosmosButtons; } return actionDefinition.viveButtons; } public static float GetAxis(string axisName) { ActionDefinition actionDefinition = Instance.FindAction(axisName); if (actionDefinition == null) { return 0f; } List currentButtonDefinitions = GetCurrentButtonDefinitions(actionDefinition); float num = 0f; num = ((!currentButtonDefinitions[0].xAxis) ? OVRInput.Get(currentButtonDefinitions[0].axis, currentButtonDefinitions[0].GetController()).y : OVRInput.Get(currentButtonDefinitions[0].axis, currentButtonDefinitions[0].GetController()).x); if (Mathf.Abs(num) < axisDeadzone) { num = 0f; } return num; } public static float GetAxisRaw(string axisName) { return GetAxis(axisName); } public static bool GetButton(string buttonName) { ActionDefinition actionDefinition = Instance.FindAction(buttonName); if (actionDefinition == null) { return false; } List currentButtonDefinitions = GetCurrentButtonDefinitions(actionDefinition); for (k = 0; k < currentButtonDefinitions.Count; k++) { if (currentButtonDefinitions[k].touchpadPress) { if (OVRInput.Get(OVRInput.Button.PrimaryThumbstick, currentButtonDefinitions[k].GetController()) && OVRInput.Get(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } else if (OVRInput.Get(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } return false; } public static bool GetButtonDown(string buttonName) { ActionDefinition actionDefinition = Instance.FindAction(buttonName); if (actionDefinition == null) { return false; } List currentButtonDefinitions = GetCurrentButtonDefinitions(actionDefinition); for (k = 0; k < currentButtonDefinitions.Count; k++) { if (currentButtonDefinitions[k].touchpadPress) { if (OVRInput.GetDown(OVRInput.Button.PrimaryThumbstick, currentButtonDefinitions[k].GetController()) && OVRInput.Get(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } else if (OVRInput.GetDown(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } return false; } public static bool GetButtonUp(string buttonName) { ActionDefinition actionDefinition = Instance.FindAction(buttonName); if (actionDefinition == null) { return false; } List currentButtonDefinitions = GetCurrentButtonDefinitions(actionDefinition); for (k = 0; k < currentButtonDefinitions.Count; k++) { if (currentButtonDefinitions[k].touchpadPress) { if (OVRInput.GetUp(OVRInput.Button.PrimaryThumbstick, currentButtonDefinitions[k].GetController()) && OVRInput.Get(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } else if (OVRInput.GetUp(currentButtonDefinitions[k].button, currentButtonDefinitions[k].GetController())) { return true; } } return false; } public static void StopVibration() { OVRInput.SetControllerVibration(0f, 0f); } public ActionDefinition FindAction(string actionName) { for (k = 0; k < actionDefinitions.Count; k++) { if (actionDefinitions[k].actionName == actionName) { return actionDefinitions[k]; } } return null; } [Button] public void CopyCosmosMapping() { for (k = 0; k < actionDefinitions.Count; k++) { actionDefinitions[k].cosmosButtons.Clear(); actionDefinitions[k].cosmosButtons.AddRange(actionDefinitions[k].oculusButtons); } } }