using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; using Valve.VR; public class SteamVR_TestController : MonoBehaviour { public SteamVR_TestController() { EVRButtonId[] array = new EVRButtonId[4]; RuntimeHelpers.InitializeArray(array, fieldof(.$field-8236C0CC36A2E3B682228FAF16E4A74BE79F3DE1).FieldHandle); this.buttonIds = array; this.axisIds = new EVRButtonId[] { EVRButtonId.k_EButton_Axis0, EVRButtonId.k_EButton_Axis1 }; base..ctor(); } private void OnDeviceConnected(params object[] args) { int num = (int)args[0]; CVRSystem system = OpenVR.System; if (system == null || system.GetTrackedDeviceClass((uint)num) != ETrackedDeviceClass.Controller) { return; } bool flag = (bool)args[1]; if (flag) { Debug.Log(string.Format("Controller {0} connected.", num)); this.PrintControllerStatus(num); this.controllerIndices.Add(num); } else { Debug.Log(string.Format("Controller {0} disconnected.", num)); this.PrintControllerStatus(num); this.controllerIndices.Remove(num); } } private void OnEnable() { SteamVR_Utils.Event.Listen("device_connected", new SteamVR_Utils.Event.Handler(this.OnDeviceConnected)); } private void OnDisable() { SteamVR_Utils.Event.Remove("device_connected", new SteamVR_Utils.Event.Handler(this.OnDeviceConnected)); } private void PrintControllerStatus(int index) { SteamVR_Controller.Device device = SteamVR_Controller.Input(index); Debug.Log("index: " + device.index); Debug.Log("connected: " + device.connected); Debug.Log("hasTracking: " + device.hasTracking); Debug.Log("outOfRange: " + device.outOfRange); Debug.Log("calibrating: " + device.calibrating); Debug.Log("uninitialized: " + device.uninitialized); Debug.Log("pos: " + device.transform.pos); Debug.Log("rot: " + device.transform.rot.eulerAngles); Debug.Log("velocity: " + device.velocity); Debug.Log("angularVelocity: " + device.angularVelocity); int deviceIndex = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost, ETrackedDeviceClass.Controller, 0); int deviceIndex2 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost, ETrackedDeviceClass.Controller, 0); Debug.Log((deviceIndex != deviceIndex2) ? ((deviceIndex != index) ? "right" : "left") : "first"); } private void Update() { foreach (int num in this.controllerIndices) { SteamVR_Overlay instance = SteamVR_Overlay.instance; if (instance && this.point && this.pointer) { SteamVR_Utils.RigidTransform transform = SteamVR_Controller.Input(num).transform; this.pointer.transform.localPosition = transform.pos; this.pointer.transform.localRotation = transform.rot; SteamVR_Overlay.IntersectionResults intersectionResults = default(SteamVR_Overlay.IntersectionResults); bool flag = instance.ComputeIntersection(transform.pos, transform.rot * Vector3.forward, ref intersectionResults); if (flag) { this.point.transform.localPosition = intersectionResults.point; this.point.transform.localRotation = Quaternion.LookRotation(intersectionResults.normal); } } else { foreach (EVRButtonId evrbuttonId in this.buttonIds) { if (SteamVR_Controller.Input(num).GetPressDown(evrbuttonId)) { Debug.Log(evrbuttonId + " press down"); } if (SteamVR_Controller.Input(num).GetPressUp(evrbuttonId)) { Debug.Log(evrbuttonId + " press up"); if (evrbuttonId == EVRButtonId.k_EButton_Axis1) { SteamVR_Controller.Input(num).TriggerHapticPulse(500, EVRButtonId.k_EButton_Axis0); this.PrintControllerStatus(num); } } if (SteamVR_Controller.Input(num).GetPress(evrbuttonId)) { Debug.Log(evrbuttonId); } } foreach (EVRButtonId evrbuttonId2 in this.axisIds) { if (SteamVR_Controller.Input(num).GetTouchDown(evrbuttonId2)) { Debug.Log(evrbuttonId2 + " touch down"); } if (SteamVR_Controller.Input(num).GetTouchUp(evrbuttonId2)) { Debug.Log(evrbuttonId2 + " touch up"); } if (SteamVR_Controller.Input(num).GetTouch(evrbuttonId2)) { Vector2 axis = SteamVR_Controller.Input(num).GetAxis(evrbuttonId2); Debug.Log("axis: " + axis); } } } } } private List controllerIndices = new List(); private EVRButtonId[] buttonIds; private EVRButtonId[] axisIds; public Transform point; public Transform pointer; }