Interhaptics SDK for Unity 1.6
Loading...
Searching...
No Matches
MetaQuestProvider.cs
Go to the documentation of this file.
1/* ​
2* Copyright (c) 2023 Go Touch VR SAS. All rights reserved. ​
3* ​
4*/
5
6#if ENABLE_METAQUEST && (UNITY_EDITOR || UNITY_ANDROID || UNITY_STANDALONE_WIN)
7using UnityEngine;
8
10
11
12[assembly: UnityEngine.Scripting.AlwaysLinkAssembly]
13[assembly: UnityEngine.Scripting.Preserve]
15{
16
17 public sealed class MetaQuestProvider : IHapticProvider
18 {
19
20#region HAPTIC CHARACTERISTICS FIELDS
21 private const string DISPLAY_NAME = "Meta Quest";
22 private const string DESCRIPTION = "XR controller for Meta Quest";
23 private const string MANUFACTURER = "Meta";
24 private const string VERSION = "1.0";
25#endregion
26
27#region HAPTIC CHARACTERISTICS GETTERS
28 [UnityEngine.Scripting.Preserve]
29 public string DisplayName()
30 {
31 return DISPLAY_NAME;
32 }
33
34 [UnityEngine.Scripting.Preserve]
35 public string Description()
36 {
37 return DESCRIPTION;
38 }
39
40 [UnityEngine.Scripting.Preserve]
41 public string Manufacturer()
42 {
43 return MANUFACTURER;
44 }
45
46 [UnityEngine.Scripting.Preserve]
47 public string Version()
48 {
49 return VERSION;
50 }
51#endregion
52
53#region PROVIDER LOOP
54 [UnityEngine.Scripting.Preserve]
55 public bool Init()
56 {
57 if (UnityEngine.XR.InputDevices.GetDeviceAtXRNode(UnityEngine.XR.XRNode.Head) == null)
58 {
59 return false;
60 }
61
62 Core.HAR.AddBodyPart(Perception.Vibration, BodyPartID.Bp_Left_palm, 1, 1, 1, 500, false, false, false, true);
63 Core.HAR.AddBodyPart(Perception.Vibration, BodyPartID.Bp_Right_palm, 1, 1, 1, 500, false, false, false, true);
64 if (HapticManager.DebugSwitch)
65 {
66 UnityEngine.Debug.Log("Meta Quest haptic provider started.");
67 }
68 return true;
69 }
70
71 [UnityEngine.Scripting.Preserve]
72 public bool IsPresent()
73 {
74 UnityEngine.XR.HapticCapabilities caps = new UnityEngine.XR.HapticCapabilities();
75 bool isPresent = UnityEngine.XR.InputDevices.GetDeviceAtXRNode(UnityEngine.XR.XRNode.LeftHand).TryGetHapticCapabilities(out caps);
76 isPresent |= UnityEngine.XR.InputDevices.GetDeviceAtXRNode(UnityEngine.XR.XRNode.RightHand).TryGetHapticCapabilities(out caps);
77 return isPresent;
78 }
79
80 [UnityEngine.Scripting.Preserve]
81 public bool Clean()
82 {
83 return true;
84 }
85
86 [UnityEngine.Scripting.Preserve]
87 public void RenderHaptics()
88 {
89 double[] outputBuffer;
90 int size = Core.HAR.GetOutputBufferSize(Perception.Vibration, BodyPartID.Bp_Left_palm, 0, 0, 0, BufferDataType.PCM);
91 if (size > 0)
92 {
93 outputBuffer = new double[size];
94 Core.HAR.GetOutputBuffer(outputBuffer, size, Perception.Vibration, BodyPartID.Bp_Left_palm, 0, 0, 0, BufferDataType.PCM);
95 UnityXRHapticAbstraction.VibrateLeft(Time.realtimeSinceStartup - Time.time, outputBuffer);
96 }
97 else
98 {
99 UnityXRHapticAbstraction.VibrateLeft(Time.realtimeSinceStartup - Time.time, null);
100 }
101
102 size = Core.HAR.GetOutputBufferSize(Perception.Vibration, BodyPartID.Bp_Right_palm, 0, 0, 0, BufferDataType.PCM);
103 if (size > 0)
104 {
105 outputBuffer = new double[size];
106 Core.HAR.GetOutputBuffer(outputBuffer, size, Perception.Vibration, BodyPartID.Bp_Right_palm, 0, 0, 0, BufferDataType.PCM);
107 UnityXRHapticAbstraction.VibrateRight(Time.realtimeSinceStartup - Time.time, outputBuffer);
108 }
109 else
110 {
111 UnityXRHapticAbstraction.VibrateRight(Time.realtimeSinceStartup - Time.time, null);
112 }
113 }
114#endregion
115
116 }
117
118}
119#endif
BufferDataType
Enumeration for types of haptic buffer data.
BodyPartID
Enumeration for identifying different body parts for haptic effects.
Perception
Enumeration for different types of haptic perceptions.