7#if UNITY_IOS && !UNITY_EDITOR
13namespace Interhaptics.Platforms.IOS
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;
28#region HAPTIC CHARACTERISTICS GETTERS
29 [UnityEngine.Scripting.Preserve]
30 public string DisplayName()
35 [UnityEngine.Scripting.Preserve]
36 public string Description()
41 [UnityEngine.Scripting.Preserve]
42 public string Manufacturer()
47 [UnityEngine.Scripting.Preserve]
48 public string Version()
56 [UnityEngine.Scripting.Preserve]
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")))
62 if (!(UnityEngine.iOS.Device.generation == UnityEngine.iOS.DeviceGeneration.iPhoneSE2Gen))
64 if (HapticManager.DebugSwitch)
66 UnityEngine.Debug.LogError(
"Haptics not supported on this iOS device. " + UnityEngine.iOS.Device.generation +
" " + UnityEngine.iOS.Device.systemVersion);
72 if (HapticManager.DebugSwitch)
74 UnityEngine.Debug.LogError(
"Haptics supported supported on this iOS device. " + UnityEngine.iOS.Device.generation +
" " + UnityEngine.iOS.Device.systemVersion);
78 Core.HAR.AddBodyPart(
Perception.Vibration, hand, 1, 1, 1, SAMPLERATE,
true,
true,
true,
false);
79 if (HapticManager.DebugSwitch)
81 UnityEngine.Debug.Log(
"iOS haptic provider started. " + UnityEngine.iOS.Device.generation +
" " + UnityEngine.iOS.Device.systemVersion);
86 [UnityEngine.Scripting.Preserve]
87 public bool IsPresent()
92 [UnityEngine.Scripting.Preserve]
98 [UnityEngine.Scripting.Preserve]
99 public void RenderHaptics()
101 ulong startingTime = Core.HAR.GetVectorStartingTime(
Perception.Vibration, hand, 0, 0, 0);
103 if (startingTime == lastBufferStartingTime)
109 lastBufferStartingTime = startingTime;
110 double[] outputBufferVibrationAmplitude =
null;
111 double[] outputBufferVibrationFrequency =
null;
112 double[] outputBufferVibrationTransient =
null;
115 int sizeTransientVibration = Core.HAR.GetOutputBufferSize(
Perception.Vibration, hand, 0, 0, 0,
BufferDataType.Transient);
117 if (sizeAmpVibration <= 0 && sizeTransientVibration <= 0)
123 int sizeFreqVibration = Core.HAR.GetOutputBufferSize(
Perception.Vibration, hand, 0, 0, 0,
BufferDataType.Frequency);
126 outputBufferVibrationAmplitude =
new double[sizeAmpVibration];
127 Core.HAR.GetOutputBuffer(outputBufferVibrationAmplitude, sizeAmpVibration,
Perception.Vibration, hand, 0, 0, 0,
BufferDataType.Amplitude);
130 outputBufferVibrationFrequency =
new double[sizeFreqVibration];
131 Core.HAR.GetOutputBuffer(outputBufferVibrationFrequency, sizeFreqVibration,
Perception.Vibration, hand, 0, 0, 0,
BufferDataType.Frequency);
134 outputBufferVibrationTransient =
new double[sizeTransientVibration];
135 Core.HAR.GetOutputBuffer(outputBufferVibrationTransient, sizeTransientVibration,
Perception.Vibration, hand, 0, 0, 0,
BufferDataType.Transient);
137 double EffectLength = sizeAmpVibration / (float)SAMPLERATE;
140 UnityCoreHaptics.
UnityCoreHapticsProxy.PlayHapticsFromJSON(iOSUtilities.BufferToAHAP(outputBufferVibrationAmplitude, outputBufferVibrationFrequency, outputBufferVibrationTransient, EffectLength, (1.0f / (
float)SAMPLERATE)));
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.