7 public uint controllerIndex;
9 public float padX, padY;
16 public uint controllerIndex;
18 public bool triggerPressed =
false;
19 public bool steamPressed =
false;
20 public bool menuPressed =
false;
21 public bool padPressed =
false;
22 public bool padTouched =
false;
23 public bool gripped =
false;
25 public event ClickedEventHandler MenuButtonClicked;
26 public event ClickedEventHandler MenuButtonUnclicked;
27 public event ClickedEventHandler TriggerClicked;
28 public event ClickedEventHandler TriggerUnclicked;
29 public event ClickedEventHandler SteamClicked;
30 public event ClickedEventHandler PadClicked;
31 public event ClickedEventHandler PadUnclicked;
32 public event ClickedEventHandler PadTouched;
33 public event ClickedEventHandler PadUntouched;
34 public event ClickedEventHandler Gripped;
35 public event ClickedEventHandler Ungripped;
38 protected virtual void Start()
40 if (this.GetComponent<SteamVR_TrackedObject>() == null)
45 if (controllerIndex != 0)
48 if (this.GetComponent<SteamVR_RenderModel>() != null)
55 controllerIndex = (uint)this.GetComponent<SteamVR_TrackedObject>().index;
59 public void SetDeviceIndex(
int index)
61 this.controllerIndex = (uint)index;
66 if (TriggerClicked != null)
67 TriggerClicked(
this, e);
72 if (TriggerUnclicked != null)
73 TriggerUnclicked(
this, e);
78 if (MenuButtonClicked != null)
79 MenuButtonClicked(
this, e);
84 if (MenuButtonUnclicked != null)
85 MenuButtonUnclicked(
this, e);
90 if (SteamClicked != null)
91 SteamClicked(
this, e);
96 if (PadClicked != null)
102 if (PadUnclicked != null)
103 PadUnclicked(
this, e);
108 if (PadTouched != null)
114 if (PadUntouched != null)
115 PadUntouched(
this, e);
126 if (Ungripped != null)
131 protected virtual void Update()
133 var system = OpenVR.System;
134 if (system != null && system.GetControllerState(controllerIndex, ref controllerState, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(
VRControllerState_t))))
136 ulong trigger = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Trigger));
137 if (trigger > 0L && !triggerPressed)
139 triggerPressed =
true;
141 e.controllerIndex = controllerIndex;
142 e.flags = (uint)controllerState.ulButtonPressed;
143 e.padX = controllerState.rAxis0.x;
144 e.padY = controllerState.rAxis0.y;
148 else if (trigger == 0L && triggerPressed)
150 triggerPressed =
false;
152 e.controllerIndex = controllerIndex;
153 e.flags = (uint)controllerState.ulButtonPressed;
154 e.padX = controllerState.rAxis0.x;
155 e.padY = controllerState.rAxis0.y;
156 OnTriggerUnclicked(e);
159 ulong grip = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_Grip));
160 if (grip > 0L && !gripped)
164 e.controllerIndex = controllerIndex;
165 e.flags = (uint)controllerState.ulButtonPressed;
166 e.padX = controllerState.rAxis0.x;
167 e.padY = controllerState.rAxis0.y;
171 else if (grip == 0L && gripped)
175 e.controllerIndex = controllerIndex;
176 e.flags = (uint)controllerState.ulButtonPressed;
177 e.padX = controllerState.rAxis0.x;
178 e.padY = controllerState.rAxis0.y;
182 ulong pad = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Touchpad));
183 if (pad > 0L && !padPressed)
187 e.controllerIndex = controllerIndex;
188 e.flags = (uint)controllerState.ulButtonPressed;
189 e.padX = controllerState.rAxis0.x;
190 e.padY = controllerState.rAxis0.y;
193 else if (pad == 0L && padPressed)
197 e.controllerIndex = controllerIndex;
198 e.flags = (uint)controllerState.ulButtonPressed;
199 e.padX = controllerState.rAxis0.x;
200 e.padY = controllerState.rAxis0.y;
204 ulong menu = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_ApplicationMenu));
205 if (menu > 0L && !menuPressed)
209 e.controllerIndex = controllerIndex;
210 e.flags = (uint)controllerState.ulButtonPressed;
211 e.padX = controllerState.rAxis0.x;
212 e.padY = controllerState.rAxis0.y;
215 else if (menu == 0L && menuPressed)
219 e.controllerIndex = controllerIndex;
220 e.flags = (uint)controllerState.ulButtonPressed;
221 e.padX = controllerState.rAxis0.x;
222 e.padY = controllerState.rAxis0.y;
226 pad = controllerState.ulButtonTouched & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Touchpad));
227 if (pad > 0L && !padTouched)
231 e.controllerIndex = controllerIndex;
232 e.flags = (uint)controllerState.ulButtonPressed;
233 e.padX = controllerState.rAxis0.x;
234 e.padY = controllerState.rAxis0.y;
238 else if (pad == 0L && padTouched)
242 e.controllerIndex = controllerIndex;
243 e.flags = (uint)controllerState.ulButtonPressed;
244 e.padX = controllerState.rAxis0.x;
245 e.padY = controllerState.rAxis0.y;