Skip to content

Commit 3c56e13

Browse files
author
lawwong
committed
Update to v1.9.0
* New Features - Wave VR Plugin v2.1.0 support - Add Oculus Go support (requires Oculus VR plugin) * Improvement - [WaveVRModule] Add 6 DoF Controller Simulator (Experimental) - [More...](https://github.com/ViveSoftware/ViveInputUtility-Unity/wiki/Wave-VR-6-DoF-Controller-Simulator) - [RenderModelHook] Now able to load Wave VR generic controller model - [Example2] Add drop area that using physics collider - [Example3] Make scroll delta tunable from the Editor - [issue#49](#49) - [VIUSettings] Add WVR virtual arms properties - [BindingUI] Make un-recognized device visible in the device view (shown in VIVE device icon) - [issue#51](#51) * Bug Fix - [VRModule] Fix sometimes SteamVRModule activated but not polling any device pose/input
2 parents fde8a9e + 6b508b1 commit 3c56e13

27 files changed

+2650
-354
lines changed

Assets/HTC.UnityPlugin/VRModule/Editor/VRModuleManagerEditor.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ public class ReqMethodInfo
3939
public string[] reqFileNames = null;
4040
public ReqFieldInfo[] reqFields = null;
4141
public ReqMethodInfo[] reqMethods = null;
42+
public Func<SymbolRequirement, bool> validateFunc = null;
4243

43-
private static Dictionary<string, Type> s_foundTypes;
44+
public static Dictionary<string, Type> s_foundTypes;
4445

4546
public static void ResetFoundTypes()
4647
{
@@ -148,6 +149,11 @@ public bool Validate()
148149
}
149150
}
150151

152+
if (validateFunc != null)
153+
{
154+
if (!validateFunc(this)) { return false; }
155+
}
156+
151157
return true;
152158
}
153159
}
@@ -276,6 +282,25 @@ static VRModuleManagerEditor()
276282
},
277283
reqFileNames = new string[] { "wvr.cs" },
278284
});
285+
286+
s_symbolReqList.Add(new SymbolRequirement()
287+
{
288+
symbol = "VIU_WAVEVR_2_1_0_OR_NEWER",
289+
reqTypeNames = new string[] { "wvr.WVR_InputId" },
290+
validateFunc = (req) =>
291+
{
292+
Type wvrInputIdType;
293+
if (SymbolRequirement.s_foundTypes.TryGetValue("wvr.WVR_InputId", out wvrInputIdType) && wvrInputIdType.IsEnum)
294+
{
295+
if (Enum.IsDefined(wvrInputIdType, "WVR_InputId_Alias1_Digital_Trigger"))
296+
{
297+
return true;
298+
}
299+
}
300+
return false;
301+
},
302+
reqFileNames = new string[] { "wvr.cs" },
303+
});
279304

280305
// Obsolete symbol, will be removed in all condition
281306
s_symbolReqList.Add(new SymbolRequirement()

Assets/HTC.UnityPlugin/VRModule/Modules/OculusVRModule.cs

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,48 @@ public override void UpdateDeviceState(IVRModuleDeviceState[] prevState, IVRModu
125125
{
126126
if (!prevState[i].isConnected)
127127
{
128-
currState[i].deviceClass = s_node2class[(int)node];
129-
// FIXME: how to get product id from OVRPlugin?
130-
currState[i].serialNumber = OVRPlugin.productName + " " + node.ToString();
131-
currState[i].modelNumber = OVRPlugin.productName + " " + node.ToString();
132-
currState[i].renderModelName = OVRPlugin.productName + " " + node.ToString();
128+
var ovrProductName = OVRPlugin.productName;
129+
var deviceClass = s_node2class[(int)node];
133130

134-
SetupKnownDeviceModel(currState[i]);
131+
switch (deviceClass)
132+
{
133+
case VRModuleDeviceClass.HMD:
134+
currState[i].deviceModel = VRModuleDeviceModel.OculusHMD;
135+
break;
136+
case VRModuleDeviceClass.TrackingReference:
137+
currState[i].deviceModel = VRModuleDeviceModel.OculusSensor;
138+
break;
139+
case VRModuleDeviceClass.Controller:
140+
switch (ovrProductName)
141+
{
142+
case "Oculus Go":
143+
currState[i].deviceModel = VRModuleDeviceModel.OculusGoController;
144+
break;
145+
case "Gear VR":
146+
currState[i].deviceModel = VRModuleDeviceModel.OculusGearVrController;
147+
break;
148+
case "Oculus Rift":
149+
default:
150+
switch (node)
151+
{
152+
case OVRPlugin.Node.HandLeft:
153+
currState[i].deviceModel = VRModuleDeviceModel.OculusTouchLeft;
154+
break;
155+
case OVRPlugin.Node.HandRight:
156+
default:
157+
currState[i].deviceModel = VRModuleDeviceModel.OculusTouchRight;
158+
break;
159+
}
160+
break;
161+
}
162+
break;
163+
}
164+
165+
currState[i].deviceClass = deviceClass;
166+
// FIXME: how to get device id from OVRPlugin?
167+
currState[i].modelNumber = ovrProductName + " " + deviceClass;
168+
currState[i].renderModelName = ovrProductName + " " + deviceClass;
169+
currState[i].serialNumber = ovrProductName + " " + deviceClass;
135170
}
136171

137172
// update device status
@@ -190,6 +225,43 @@ public override void UpdateDeviceState(IVRModuleDeviceState[] prevState, IVRModu
190225
currState[i].SetAxisValue(VRModuleRawAxis.CapSenseGrip, ctrlState.RHandTrigger);
191226
break;
192227
}
228+
case VRModuleDeviceModel.OculusGoController:
229+
case VRModuleDeviceModel.OculusGearVrController:
230+
switch (node)
231+
{
232+
case OVRPlugin.Node.HandLeft:
233+
{
234+
var ctrlState = OVRPlugin.GetControllerState((uint)OVRPlugin.Controller.LTrackedRemote);
235+
236+
currState[i].SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & (uint)OVRInput.RawButton.LTouchpad) != 0u);
237+
currState[i].SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.Back) != 0u);
238+
currState[i].SetButtonPress(VRModuleRawButton.Trigger, (ctrlState.Buttons & (uint)(OVRInput.RawButton.A | OVRInput.RawButton.LIndexTrigger)) != 0u);
239+
currState[i].SetButtonPress(VRModuleRawButton.DPadLeft, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadLeft) != 0u);
240+
currState[i].SetButtonPress(VRModuleRawButton.DPadUp, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadUp) != 0u);
241+
currState[i].SetButtonPress(VRModuleRawButton.DPadRight, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadRight) != 0u);
242+
currState[i].SetButtonPress(VRModuleRawButton.DPadDown, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadDown) != 0u);
243+
244+
currState[i].SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & (uint)OVRInput.RawTouch.LTouchpad) != 0u);
245+
}
246+
break;
247+
case OVRPlugin.Node.HandRight:
248+
default:
249+
{
250+
var ctrlState = OVRPlugin.GetControllerState((uint)OVRPlugin.Controller.RTrackedRemote);
251+
252+
currState[i].SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & unchecked((uint)OVRInput.RawButton.RTouchpad)) != 0u);
253+
currState[i].SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.Back) != 0u);
254+
currState[i].SetButtonPress(VRModuleRawButton.Trigger, (ctrlState.Buttons & (uint)(OVRInput.RawButton.A | OVRInput.RawButton.RIndexTrigger)) != 0u);
255+
currState[i].SetButtonPress(VRModuleRawButton.DPadLeft, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadLeft) != 0u);
256+
currState[i].SetButtonPress(VRModuleRawButton.DPadUp, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadUp) != 0u);
257+
currState[i].SetButtonPress(VRModuleRawButton.DPadRight, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadRight) != 0u);
258+
currState[i].SetButtonPress(VRModuleRawButton.DPadDown, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadDown) != 0u);
259+
260+
currState[i].SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & unchecked((uint)OVRInput.RawTouch.RTouchpad)) != 0u);
261+
}
262+
break;
263+
}
264+
break;
193265
}
194266
}
195267
else

Assets/HTC.UnityPlugin/VRModule/Modules/SteamVRModule.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public override bool ShouldActiveModule()
3939

4040
public override void OnActivated()
4141
{
42+
// Make sure SteamVR_Render instance exist. It Polls New Poses Event
43+
if (SteamVR_Render.instance == null) { }
44+
4245
var compositor = OpenVR.Compositor;
4346
if (compositor != null)
4447
{

0 commit comments

Comments
 (0)