using BitStrap; using UnityEngine; public class VRBoatWheel : MonoBehaviour { public Transform holdTransform; public Transform rotateParent; public float holdDistanceStart = 0.5f; public float holdDistanceStop = 0.8f; public Renderer wheelModel; [ReadOnly] public float currentWheelRotation; [ReadOnly] public float prevWheelRotation; public float maxWheelRotation = 90f; public bool isHolding; public OVRInput.Controller holdingController; public Transform tempRotationPosition; public float tempRotationAngle; [ReadOnly] public float startRotationAngle; private void Start() { } public float MakeUpdate() { if (!VRManager.Instance.IsVRDriveBoat()) { return 0f; } float num = Vector3.Distance(holdTransform.position, VRControllersManager.Instance.GetVRController(OVRInput.Controller.LTouch).boatWheelTransform.position); float num2 = Vector3.Distance(holdTransform.position, VRControllersManager.Instance.GetVRController(OVRInput.Controller.RTouch).boatWheelTransform.position); bool flag = false; if (isHolding) { if ((holdingController != OVRInput.Controller.LTouch || !(num < holdDistanceStop) || !OVRInput.Get(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.LTouch)) && (holdingController != OVRInput.Controller.RTouch || !(num2 < holdDistanceStop) || !OVRInput.Get(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.RTouch))) { UtilitiesInput.SetVibration(0, holdingController == VRControllersManager.Instance.GetPrimaryController(), 0.2f, 0.15f); holdingController = OVRInput.Controller.None; isHolding = false; rotateParent.localEulerAngles = new Vector3(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, 0f); startRotationAngle = (tempRotationAngle = (prevWheelRotation = 0f)); } } else if (num < holdDistanceStart && OVRInput.Get(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.LTouch)) { holdingController = OVRInput.Controller.LTouch; isHolding = true; flag = true; UtilitiesInput.SetVibration(0, VRControllersManager.Instance.IsLeftHanded(), 0.3f, 0.2f); } else if (num2 < holdDistanceStart && OVRInput.Get(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.RTouch)) { holdingController = OVRInput.Controller.RTouch; isHolding = true; flag = true; UtilitiesInput.SetVibration(0, !VRControllersManager.Instance.IsLeftHanded(), 0.3f, 0.2f); } if ((bool)wheelModel) { wheelModel.materials[(wheelModel.materials.Length > 1) ? 1 : 0].color = ((!isHolding) ? Color.white : Color.yellow); } if (isHolding) { Transform boatWheelTransform = VRControllersManager.Instance.GetVRController(holdingController).boatWheelTransform; boatWheelTransform.parent = holdTransform; Vector3 localPosition = boatWheelTransform.localPosition; boatWheelTransform.parent = VRControllersManager.Instance.GetVRController(holdingController).gameplayTransformsParent.transform; localPosition.z = 0f; if ((bool)tempRotationPosition) { tempRotationPosition.localPosition = localPosition; } tempRotationAngle = Utilities.GetVectorAngle(localPosition); } if (flag) { startRotationAngle = tempRotationAngle; } if (isHolding) { currentWheelRotation = startRotationAngle - tempRotationAngle; if (currentWheelRotation > 180f) { currentWheelRotation -= 360f; } else if (currentWheelRotation < -180f) { currentWheelRotation += 360f; } rotateParent.localEulerAngles = new Vector3(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, currentWheelRotation); if ((currentWheelRotation > 90f && prevWheelRotation < -90f) || (currentWheelRotation < -90f && prevWheelRotation > 90f)) { currentWheelRotation = prevWheelRotation; } else { prevWheelRotation = currentWheelRotation; } return currentWheelRotation / maxWheelRotation; } return 0f; } }