using System.Collections; using System.Collections.Generic; using BitStrap; using UnityEngine; public class VRControllersManager : MonoBehaviour { private static VRControllersManager instance; public OvrAvatar ovrAvatar; public int textSize = 10; public bool textOutline = true; public bool textFacingCamera = true; public float lineScale = 0.3f; [Header("Hands")] public Transform handRight; public Transform handLeft; [ReadOnly] public bool handsVisible = true; public bool isLeftHanded; [Header("Controllers")] public VRController currentRightController; public VRController currentLeftController; [Space(10f)] public VRController viveRightController; public VRController viveLeftController; public VRController touchRightController; public VRController touchLeftController; public VRController indexRightController; public VRController indexLeftController; public VRController wmrRightController; public VRController wmrLeftController; public VRController touchSRightController; public VRController touchSLeftController; public VRController cosmosRightController; public VRController cosmosLeftController; public List allControllers = new List(); [Header("Test")] public Transform throwObject; public float throwForceMultiplier = 1f; public Transform trackingSpace; public Transform helpLine_01; public Transform helpLine_02; public Transform reelHandTarget; public Transform reelHandHelper; public Transform reelRotateParent; public float handToReelDistanceCatch = 0.3f; public float handToReelDistanceRelease = 0.5f; public float handReelSpeedMultiplier = 1f; public Vector2 handReelSpeedMinMax = Vector2.one; public float handReelNoFishSpeedMultiplier = 1f; public Vector2 handReelNoFishSpeedMinMax = Vector2.one; public float handLineSpeedMultiplier = 1.5f; public FishingReel testReel; public static VRControllersManager Instance { get { return instance; } } private VRControllersManager() { } private void Awake() { if (instance == null) { instance = this; Object.DontDestroyOnLoad(base.gameObject); } else { Object.DestroyImmediate(base.gameObject); } } private void Start() { if (!VRManager.IsVROn()) { base.gameObject.SetActive(false); } else { Initialize(); } } private void Update() { RefreshCurrentControllers(); } private void LateUpdate() { handRight.localPosition = Vector3.zero; handRight.localRotation = Quaternion.identity; handLeft.localPosition = Vector3.zero; handLeft.localRotation = Quaternion.identity; } public IEnumerator WriteControllersDebug() { while (true) { if ((bool)ovrAvatar) { Debug.Log("-- OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch): " + OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch)); Debug.Log("ovrAvatar.transform.position + OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch): " + (ovrAvatar.transform.position + OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch))); if ((bool)ovrAvatar.rightControllerAnchor) { Debug.Log("ovrAvatar.rightControllerAnchor.position: " + ovrAvatar.rightControllerAnchor.position); } if ((bool)ovrAvatar.ControllerRight) { Debug.Log("ovrAvatar.ControllerRight.transform.position: " + ovrAvatar.ControllerRight.transform.position); } } yield return new WaitForSeconds(10f); } } public void Initialize() { allControllers.Add(viveRightController); allControllers.Add(viveLeftController); allControllers.Add(touchRightController); allControllers.Add(touchLeftController); allControllers.Add(wmrRightController); allControllers.Add(wmrLeftController); allControllers.Add(indexRightController); allControllers.Add(indexLeftController); allControllers.Add(touchSRightController); allControllers.Add(touchSLeftController); allControllers.Add(cosmosRightController); allControllers.Add(cosmosLeftController); foreach (VRController allController in allControllers) { allController.transform.localPosition = Vector3.zero; } if (ovrAvatar == null) { ChangeAvatar(VRManager.Instance.ovrAvatar); } } public void ShowHandsQuick(bool show) { foreach (VRController allController in allControllers) { allController.modelParent.SetActive(show && VRManager.Instance.IsControllersInput()); allController.infoParent.SetActive(show && VRManager.Instance.IsControllersInput()); } } public void ShowHands(bool show) { handsVisible = show; ShowHandsQuick(show); } public OVRInput.Controller GetPrimaryController() { return isLeftHanded ? OVRInput.Controller.LTouch : OVRInput.Controller.RTouch; } public OVRInput.Controller GetSecondaryController() { return (!isLeftHanded) ? OVRInput.Controller.LTouch : OVRInput.Controller.RTouch; } public bool IsLeftHanded() { return isLeftHanded; } public void SetLeftHanded(bool leftHand) { isLeftHanded = leftHand; } [Button] public void ToggleLeftHanded() { isLeftHanded = !isLeftHanded; if ((bool)HUDManager.Instance) { HUDManager.Instance.UpdateControls(); } } [Button] public void ChangeAvatar(OvrAvatar avatar) { ovrAvatar = avatar; if ((bool)ovrAvatar) { OVRCameraRig componentInParent = ovrAvatar.GetComponentInParent(); if ((bool)handRight && (bool)componentInParent && (bool)componentInParent.rightHandAnchor) { handRight.parent = ovrAvatar.GetComponentInParent().rightHandAnchor; handRight.localPosition = Vector3.zero; handRight.localRotation = Quaternion.identity; } if ((bool)handLeft && (bool)componentInParent && (bool)componentInParent.leftHandAnchor) { handLeft.parent = ovrAvatar.GetComponentInParent().leftHandAnchor; handLeft.localPosition = Vector3.zero; handLeft.localRotation = Quaternion.identity; } RefreshControllersType(); HideAllInfo(); if (ovrAvatar == VRManager.Instance.ovrAvatar) { Instance.UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.PrimaryIndexTrigger, Utilities.GetTranslation("GUI/BTN_CHOOSE")); Instance.UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.PrimaryIndexTrigger, Utilities.GetTranslation("GUI/BTN_CHOOSE")); } else if ((bool)HUDManager.Instance) { HUDManager.Instance.UpdateControls(); } } } public void RefreshControllersType() { if (!(viveLeftController == null)) { RefreshCurrentControllers(); OVRInput.OpenVRController controllerType = VRManager.GetControllerType(false); OVRInput.OpenVRController controllerType2 = VRManager.GetControllerType(true); viveLeftController.gameObject.SetActive(controllerType == OVRInput.OpenVRController.ViveController); viveRightController.gameObject.SetActive(controllerType2 == OVRInput.OpenVRController.ViveController); touchLeftController.gameObject.SetActive(controllerType == OVRInput.OpenVRController.OculusTouch); touchRightController.gameObject.SetActive(controllerType2 == OVRInput.OpenVRController.OculusTouch); wmrLeftController.gameObject.SetActive(controllerType == OVRInput.OpenVRController.WindowsMRController); wmrRightController.gameObject.SetActive(controllerType2 == OVRInput.OpenVRController.WindowsMRController); indexLeftController.gameObject.SetActive(controllerType == OVRInput.OpenVRController.IndexController); indexRightController.gameObject.SetActive(controllerType2 == OVRInput.OpenVRController.IndexController); touchSLeftController.gameObject.SetActive(false); touchSRightController.gameObject.SetActive(false); cosmosLeftController.gameObject.SetActive(controllerType == OVRInput.OpenVRController.CosmosController); cosmosRightController.gameObject.SetActive(controllerType2 == OVRInput.OpenVRController.CosmosController); } } public void RefreshCurrentControllers() { if ((!(currentLeftController == null) && !(currentRightController == null)) || (OVRInput.GetActiveController() != OVRInput.Controller.Touch && OVRInput.GetActiveController() != OVRInput.Controller.LTouch && OVRInput.GetActiveController() != OVRInput.Controller.RTouch)) { return; } OVRInput.OpenVRController controllerType = VRManager.GetControllerType(false); OVRInput.OpenVRController controllerType2 = VRManager.GetControllerType(true); if (controllerType == OVRInput.OpenVRController.ViveController || controllerType2 == OVRInput.OpenVRController.ViveController) { currentLeftController = viveLeftController; currentRightController = viveRightController; Debug.Log("VRControllersManager Connected ViveController"); } else if (controllerType == OVRInput.OpenVRController.OculusTouch || controllerType2 == OVRInput.OpenVRController.OculusTouch) { currentLeftController = touchLeftController; currentRightController = touchRightController; if (!VRManager.useOculusSDK) { currentLeftController.transform.localPosition = new Vector3(currentLeftController.modelParent.transform.localPosition.x, 0f, currentLeftController.modelParent.transform.localPosition.z); currentLeftController.transform.localEulerAngles = new Vector3(0f - currentLeftController.modelParent.transform.localEulerAngles.x, currentLeftController.transform.localEulerAngles.y, currentLeftController.transform.localEulerAngles.z); currentRightController.transform.localPosition = new Vector3(currentRightController.modelParent.transform.localPosition.x, 0f, currentRightController.modelParent.transform.localPosition.z); currentRightController.transform.localEulerAngles = new Vector3(0f - currentRightController.modelParent.transform.localEulerAngles.x, currentRightController.transform.localEulerAngles.y, currentRightController.transform.localEulerAngles.z); } Debug.Log("VRControllersManager Connected OculusTouch"); } else if (controllerType == OVRInput.OpenVRController.WindowsMRController || controllerType2 == OVRInput.OpenVRController.WindowsMRController) { currentLeftController = wmrLeftController; currentRightController = wmrRightController; Debug.Log("VRControllersManager Connected WindowsMRController"); } else if (controllerType == OVRInput.OpenVRController.IndexController || controllerType2 == OVRInput.OpenVRController.IndexController) { currentLeftController = indexLeftController; currentRightController = indexRightController; Debug.Log("VRControllersManager Connected IndexController"); } else if (controllerType == OVRInput.OpenVRController.OculusTouchS || controllerType2 == OVRInput.OpenVRController.OculusTouchS) { currentLeftController = touchSLeftController; currentRightController = touchSRightController; Debug.Log("VRControllersManager Connected OculusTouchS"); } else if (controllerType == OVRInput.OpenVRController.CosmosController || controllerType2 == OVRInput.OpenVRController.CosmosController) { currentLeftController = cosmosLeftController; currentRightController = cosmosRightController; Debug.Log("VRControllersManager Connected Cosmos"); } else { currentLeftController = viveLeftController; currentRightController = viveRightController; Debug.Log("VRControllersManager Connected Unknown"); } currentLeftController.rodHoldTransform.localScale = new Vector3(-1f, 1f, 1f); currentRightController.fishingNetHoldTransform.localScale = new Vector3(-1f, 1f, 1f); if (!GameController.Instance) { Instance.UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.PrimaryIndexTrigger, Utilities.GetTranslation("GUI/BTN_CHOOSE")); Instance.UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.PrimaryIndexTrigger, Utilities.GetTranslation("GUI/BTN_CHOOSE")); VRManager.Instance.ChangeUIInputStyle(VRManager.UIInputStyle.POINTER); } } [Button] public void ButtonsInfoTest() { UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.PrimaryIndexTrigger, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.PrimaryHandTrigger, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Start, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.One, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Two, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.PrimaryThumbstick, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Up, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Down, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Left, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetPrimaryController(), OVRInput.Button.Right, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.PrimaryIndexTrigger, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.PrimaryHandTrigger, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Start, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.One, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Two, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.PrimaryThumbstick, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Up, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Down, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Left, "Button " + Random.Range(1, 666)); UpdateButtonInfo(GetSecondaryController(), OVRInput.Button.Right, "Button " + Random.Range(1, 666)); } public VRController GetVRController(OVRInput.Controller controller) { return (controller != OVRInput.Controller.LTouch) ? currentRightController : currentLeftController; } public void UpdateButtonInfo(VRInputManager.ActionDefinition actionDefinition, string infoText) { if (actionDefinition != null) { List list = null; list = ((VRManager.GetControllerType(false) != OVRInput.OpenVRController.ViveController && VRManager.GetControllerType(true) != OVRInput.OpenVRController.ViveController) ? ((VRManager.GetControllerType(false) != OVRInput.OpenVRController.OculusTouch && VRManager.GetControllerType(true) != OVRInput.OpenVRController.OculusTouch) ? ((VRManager.GetControllerType(false) != OVRInput.OpenVRController.WindowsMRController && VRManager.GetControllerType(true) != OVRInput.OpenVRController.WindowsMRController) ? ((VRManager.GetControllerType(false) != OVRInput.OpenVRController.IndexController && VRManager.GetControllerType(true) != OVRInput.OpenVRController.IndexController) ? ((VRManager.GetControllerType(false) != OVRInput.OpenVRController.CosmosController && VRManager.GetControllerType(true) != OVRInput.OpenVRController.CosmosController) ? actionDefinition.viveButtons : actionDefinition.cosmosButtons) : actionDefinition.indexButtons) : actionDefinition.wmrButtons) : actionDefinition.oculusButtons) : actionDefinition.viveButtons); if (list != null && list.Count > 0) { UpdateButtonInfo(list[0].GetController(), list[0].button, infoText); } } } public void UpdateButtonInfo(OVRInput.Controller controller, OVRInput.Button button, string infoText) { VRController vRController = GetVRController(controller); if (vRController == null) { Debug.LogError("Controller not found: " + controller); } else { vRController.UpdateInfo(button, infoText); } } public void HideAllInfo() { foreach (VRController allController in allControllers) { allController.HideAllInfo(); } } public void ThrowTestUpdate() { if (OVRInput.GetDown(OVRInput.Button.PrimaryHandTrigger, Instance.GetSecondaryController())) { throwObject.parent = null; throwObject.GetComponent().isKinematic = false; throwObject.GetComponent().AddForce(trackingSpace.rotation * OVRInput.GetLocalControllerVelocity(Instance.GetSecondaryController()) * throwForceMultiplier); throwObject.GetComponent().angularVelocity = OVRInput.GetLocalControllerAngularVelocity(Instance.GetSecondaryController()); } else if (OVRInput.GetDown(OVRInput.Button.PrimaryThumbstick, Instance.GetSecondaryController())) { throwObject.parent = touchLeftController.throwObjectTransform; throwObject.localPosition = Vector3.zero; throwObject.GetComponent().isKinematic = true; throwObject.GetComponent().velocity = Vector3.zero; throwObject.GetComponent().angularVelocity = Vector3.zero; } } public void ReelTestStart() { helpLine_01.parent.parent = reelRotateParent; helpLine_01.parent.localPosition = Vector3.zero; helpLine_01.parent.localEulerAngles = new Vector3(0f, -90f, 0f); } public void ReelTestUpdate() { Transform reelCatchTransform = touchLeftController.reelCatchTransform; float num = Vector3.Distance(helpLine_01.position, reelCatchTransform.position); if (reelHandHelper == null) { reelHandHelper = new GameObject("ReelHandHelper").transform; } reelHandHelper.position = reelCatchTransform.position; reelHandHelper.parent = reelRotateParent; reelHandHelper.localPosition = new Vector3(reelHandHelper.localPosition.x, reelHandHelper.localPosition.y, 0f); helpLine_02.LookAt(reelHandHelper); reelHandHelper.parent = reelCatchTransform; if (num < handToReelDistanceCatch) { helpLine_02.GetComponentInChildren().material.color = Color.yellow; float num2 = 0f - helpLine_02.localEulerAngles.x; if (helpLine_02.localEulerAngles.y < 80f && helpLine_02.localEulerAngles.y > -80f) { num2 = helpLine_02.localEulerAngles.x + 180f; } else if (helpLine_02.localEulerAngles.x > 0f) { num2 = 360f - helpLine_02.localEulerAngles.x; } if (num2 > 360f) { num2 -= 360f; } helpLine_01.parent.parent = reelRotateParent.parent; reelRotateParent.localEulerAngles = new Vector3(0f, 0f, num2); helpLine_01.parent.parent = reelRotateParent; } else { helpLine_02.GetComponentInChildren().material.color = Color.red; } } }