Interhaptics SDK for Unity 1.6
Loading...
Searching...
No Matches
IOSProvider.cs
Go to the documentation of this file.
1
2/* ​
3* Copyright (c) 2023 Go Touch VR SAS. All rights reserved. ​
4* ​
5*/
6
7#if UNITY_IOS && !UNITY_EDITOR
8using UnityEngine;
11using System;
12
13namespace Interhaptics.Platforms.IOS
14{
15
16 public sealed class IOSProvider : IHapticProvider
17 {
18#region HAPTIC CHARACTERISTICS FIELDS
19 private const string DISPLAY_NAME = "iOS";
20 private const string DESCRIPTION = "iOS device";
21 private const string MANUFACTURER = "Apple";
22 private const string VERSION = "1.0";
23 private const int SAMPLERATE = 100;
24 private ulong lastBufferStartingTime = 0;
25 private BodyPartID hand = BodyPartID.Bp_Left_palm;
26#endregion
27
28#region HAPTIC CHARACTERISTICS GETTERS
29 [UnityEngine.Scripting.Preserve]
30 public string DisplayName()
31 {
32 return DISPLAY_NAME;
33 }
34
35 [UnityEngine.Scripting.Preserve]
36 public string Description()
37 {
38 return DESCRIPTION;
39 }
40
41 [UnityEngine.Scripting.Preserve]
42 public string Manufacturer()
43 {
44 return MANUFACTURER;
45 }
46
47 [UnityEngine.Scripting.Preserve]
48 public string Version()
49 {
50 return VERSION;
51 }
52#endregion
53
54#region PROVIDER LOOP
55
56 [UnityEngine.Scripting.Preserve]
57 public bool Init()
58 {
59 if ((UnityEngine.iOS.Device.generation < UnityEngine.iOS.DeviceGeneration.iPhone8) ||
60 (UnityEngine.iOS.Device.systemVersion.CompareTo("13") <= 0) || (UnityEngine.iOS.Device.generation.ToString().Contains("iPad")))
61 {
62 if (!(UnityEngine.iOS.Device.generation == UnityEngine.iOS.DeviceGeneration.iPhoneSE2Gen))
63 {
64 if (HapticManager.DebugSwitch)
65 {
66 UnityEngine.Debug.LogError("Haptics not supported on this iOS device. " + UnityEngine.iOS.Device.generation +" " + UnityEngine.iOS.Device.systemVersion);
67 }
68 //return false;
69 }
70 else
71 {
72 if (HapticManager.DebugSwitch)
73 {
74 UnityEngine.Debug.LogError("Haptics supported supported on this iOS device. " + UnityEngine.iOS.Device.generation +" " + UnityEngine.iOS.Device.systemVersion);
75 }
76 }
77 }
78 Core.HAR.AddBodyPart(Perception.Vibration, hand, 1, 1, 1, SAMPLERATE, true, true, true, false);
79 if (HapticManager.DebugSwitch)
80 {
81 UnityEngine.Debug.Log("iOS haptic provider started. " + UnityEngine.iOS.Device.generation +" " + UnityEngine.iOS.Device.systemVersion);
82 }
83 return true;
84 }
85
86 [UnityEngine.Scripting.Preserve]
87 public bool IsPresent()
88 {
89 return true;
90 }
91
92 [UnityEngine.Scripting.Preserve]
93 public bool Clean()
94 {
95 return true;
96 }
97
98 [UnityEngine.Scripting.Preserve]
99 public void RenderHaptics()
100 {
101 ulong startingTime = Core.HAR.GetVectorStartingTime(Perception.Vibration, hand, 0, 0, 0);
102 //if something to update
103 if (startingTime == lastBufferStartingTime)
104 {
105 return;
106 }
107
109 lastBufferStartingTime = startingTime;
110 double[] outputBufferVibrationAmplitude = null;
111 double[] outputBufferVibrationFrequency = null;
112 double[] outputBufferVibrationTransient = null;
113
114 int sizeAmpVibration = Core.HAR.GetOutputBufferSize(Perception.Vibration, hand, 0, 0, 0, BufferDataType.Amplitude);
115 int sizeTransientVibration = Core.HAR.GetOutputBufferSize(Perception.Vibration, hand, 0, 0, 0, BufferDataType.Transient);
116
117 if (sizeAmpVibration <= 0 && sizeTransientVibration <= 0) //if no amplitude nor transient
118 {
119 return;
120 }
121
122 //if amplitude buffer not null
123 int sizeFreqVibration = Core.HAR.GetOutputBufferSize(Perception.Vibration, hand, 0, 0, 0, BufferDataType.Frequency);
124
125 //getting amplitude haptic data
126 outputBufferVibrationAmplitude = new double[sizeAmpVibration];
127 Core.HAR.GetOutputBuffer(outputBufferVibrationAmplitude, sizeAmpVibration, Perception.Vibration, hand, 0, 0, 0, BufferDataType.Amplitude);
128
129 //getting frequency haptic data
130 outputBufferVibrationFrequency = new double[sizeFreqVibration];
131 Core.HAR.GetOutputBuffer(outputBufferVibrationFrequency, sizeFreqVibration, Perception.Vibration, hand, 0, 0, 0, BufferDataType.Frequency);
132
133 //geting transients haptic data
134 outputBufferVibrationTransient = new double[sizeTransientVibration];
135 Core.HAR.GetOutputBuffer(outputBufferVibrationTransient, sizeTransientVibration, Perception.Vibration, hand, 0, 0, 0, BufferDataType.Transient);
136
137 double EffectLength = sizeAmpVibration / (float)SAMPLERATE;
138
139 //sending haptic data to the device
140 UnityCoreHaptics.UnityCoreHapticsProxy.PlayHapticsFromJSON(iOSUtilities.BufferToAHAP(outputBufferVibrationAmplitude, outputBufferVibrationFrequency, outputBufferVibrationTransient, EffectLength, (1.0f / (float)SAMPLERATE)));
141 }
142 }
143#endregion
144}
145#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.