Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/VRInputManager.cs
2026-02-21 16:45:37 +08:00

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);
}
}
}