235 lines
6.4 KiB
C#
235 lines
6.4 KiB
C#
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<ButtonDefinition> oculusButtons = new List<ButtonDefinition>();
|
|
|
|
public List<ButtonDefinition> viveButtons = new List<ButtonDefinition>();
|
|
|
|
public List<ButtonDefinition> wmrButtons = new List<ButtonDefinition>();
|
|
|
|
public List<ButtonDefinition> indexButtons = new List<ButtonDefinition>();
|
|
|
|
public List<ButtonDefinition> oculusSButtons = new List<ButtonDefinition>();
|
|
|
|
public List<ButtonDefinition> cosmosButtons = new List<ButtonDefinition>();
|
|
}
|
|
|
|
private static VRInputManager instance;
|
|
|
|
public List<ActionDefinition> actionDefinitions = new List<ActionDefinition>();
|
|
|
|
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<ButtonDefinition> 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<ButtonDefinition> 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<ButtonDefinition> 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<ButtonDefinition> 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<ButtonDefinition> 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);
|
|
}
|
|
}
|
|
}
|