IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
SteamVR_TestController.cs
1 //======= Copyright (c) Valve Corporation, All rights reserved. ===============
2 //
3 // Purpose: Test SteamVR_Controller support.
4 //
5 //=============================================================================
6 
7 using UnityEngine;
8 using System.Collections.Generic;
9 using Valve.VR;
10 
11 public class SteamVR_TestController : MonoBehaviour
12 {
13  List<int> controllerIndices = new List<int>();
14 
15  private void OnDeviceConnected(int index, bool connected)
16  {
17  var system = OpenVR.System;
18  if (system == null || system.GetTrackedDeviceClass((uint)index) != ETrackedDeviceClass.Controller)
19  return;
20 
21  if (connected)
22  {
23  Debug.Log(string.Format("Controller {0} connected.", index));
24  PrintControllerStatus(index);
25  controllerIndices.Add(index);
26  }
27  else
28  {
29  Debug.Log(string.Format("Controller {0} disconnected.", index));
30  PrintControllerStatus(index);
31  controllerIndices.Remove(index);
32  }
33  }
34 
35  void OnEnable()
36  {
37  SteamVR_Events.DeviceConnected.Listen(OnDeviceConnected);
38  }
39 
40  void OnDisable()
41  {
42  SteamVR_Events.DeviceConnected.Remove(OnDeviceConnected);
43  }
44 
45  void PrintControllerStatus(int index)
46  {
47  var device = SteamVR_Controller.Input(index);
48  Debug.Log("index: " + device.index);
49  Debug.Log("connected: " + device.connected);
50  Debug.Log("hasTracking: " + device.hasTracking);
51  Debug.Log("outOfRange: " + device.outOfRange);
52  Debug.Log("calibrating: " + device.calibrating);
53  Debug.Log("uninitialized: " + device.uninitialized);
54  Debug.Log("pos: " + device.transform.pos);
55  Debug.Log("rot: " + device.transform.rot.eulerAngles);
56  Debug.Log("velocity: " + device.velocity);
57  Debug.Log("angularVelocity: " + device.angularVelocity);
58 
59  var l = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);
60  var r = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
61  Debug.Log((l == r) ? "first" : (l == index) ? "left" : "right");
62  }
63 
64  EVRButtonId[] buttonIds = new EVRButtonId[] {
65  EVRButtonId.k_EButton_ApplicationMenu,
66  EVRButtonId.k_EButton_Grip,
67  EVRButtonId.k_EButton_SteamVR_Touchpad,
68  EVRButtonId.k_EButton_SteamVR_Trigger
69  };
70 
71  EVRButtonId[] axisIds = new EVRButtonId[] {
72  EVRButtonId.k_EButton_SteamVR_Touchpad,
73  EVRButtonId.k_EButton_SteamVR_Trigger
74  };
75 
76  public Transform point, pointer;
77 
78  void Update()
79  {
80  foreach (var index in controllerIndices)
81  {
82  var overlay = SteamVR_Overlay.instance;
83  if (overlay && point && pointer)
84  {
85  var t = SteamVR_Controller.Input(index).transform;
86  pointer.transform.localPosition = t.pos;
87  pointer.transform.localRotation = t.rot;
88 
89  var results = new SteamVR_Overlay.IntersectionResults();
90  var hit = overlay.ComputeIntersection(t.pos, t.rot * Vector3.forward, ref results);
91  if (hit)
92  {
93  point.transform.localPosition = results.point;
94  point.transform.localRotation = Quaternion.LookRotation(results.normal);
95  }
96 
97  continue;
98  }
99 
100  foreach (var buttonId in buttonIds)
101  {
102  if (SteamVR_Controller.Input(index).GetPressDown(buttonId))
103  Debug.Log(buttonId + " press down");
104  if (SteamVR_Controller.Input(index).GetPressUp(buttonId))
105  {
106  Debug.Log(buttonId + " press up");
107  if (buttonId == EVRButtonId.k_EButton_SteamVR_Trigger)
108  {
109  SteamVR_Controller.Input(index).TriggerHapticPulse();
110  PrintControllerStatus(index);
111  }
112  }
113  if (SteamVR_Controller.Input(index).GetPress(buttonId))
114  Debug.Log(buttonId);
115  }
116 
117  foreach (var buttonId in axisIds)
118  {
119  if (SteamVR_Controller.Input(index).GetTouchDown(buttonId))
120  Debug.Log(buttonId + " touch down");
121  if (SteamVR_Controller.Input(index).GetTouchUp(buttonId))
122  Debug.Log(buttonId + " touch up");
123  if (SteamVR_Controller.Input(index).GetTouch(buttonId))
124  {
125  var axis = SteamVR_Controller.Input(index).GetAxis(buttonId);
126  Debug.Log("axis: " + axis);
127  }
128  }
129  }
130  }
131 }
132