/// <summary> /// Plays a transient haptic, signature with more fine control /// </summary> /// <param name="vibrateiOS"></param> /// <param name="iOSIntensity"></param> /// <param name="iOSSharpness"></param> /// <param name="vibrateAndroid"></param> /// <param name="androidIntensity"></param> /// <param name="androidSharpness"></param> /// <param name="vibrateAndroidIfNoSupport"></param> /// <param name="rumble"></param> /// <param name="rumbleLowFrequency"></param> /// <param name="rumbleHighFrequency"></param> /// <param name="controllerID"></param> /// <param name="coroutineSupport"></param> public static void TransientHaptic(bool vibrateiOS, float iOSIntensity, float iOSSharpness, bool vibrateAndroid, float androidIntensity = 1f, float androidSharpness = 1f, bool vibrateAndroidIfNoSupport = false, bool rumble = true, float rumbleLowFrequency = 1f, float rumbleHighFrequency = 1f, int controllerID = -1, MonoBehaviour coroutineSupport = null, bool threaded = true) { if (!_vibrationsActive) { return; } DebugLog("[MMVibrationManager] Transient Haptic"); if (Android() && vibrateAndroid) { if (!MMNVAndroid.AndroidHasAmplitudeControl() && !vibrateAndroidIfNoSupport) { return; } androidIntensity = Remap(androidIntensity, 0f, 1f, 0, 255); MMNVAndroid.AndroidVibrate(100, (int)(androidIntensity)); } else if (iOS() && vibrateiOS) { if ((iOSVersion >= 13) && HapticsSupported()) { MMNViOSCoreHaptics.PlayTransientHapticPattern(iOSIntensity, iOSSharpness, threaded); _hapticsPlayedOnce = true; } else { if (iOSIntensity < 0.3f) { MMNViOS.iOSTriggerHaptics(HapticTypes.LightImpact); } else if ((iOSIntensity >= 0.3f) && (iOSIntensity < 0.6f)) { MMNViOS.iOSTriggerHaptics(HapticTypes.MediumImpact); } else { MMNViOS.iOSTriggerHaptics(HapticTypes.HeavyImpact); } } } if (rumble && (coroutineSupport != null)) { #if MOREMOUNTAINS_NICEVIBRATIONS_RUMBLE MMNVRumble.Rumble(rumbleLowFrequency, rumbleHighFrequency, 0.08f, coroutineSupport, controllerID); #endif } }
/// <summary> /// Plays a transient haptic, a single, short haptic feedback, of the specified intensity and sharpness /// </summary> /// <param name="intensity"></param> /// <param name="sharpness"></param> public static void TransientHaptic(float intensity, float sharpness) { if (!_vibrationsActive) { return; } DebugLog("[MMVibrationManager] Transient Haptic"); if (Android()) { intensity = NiceVibrationsDemoHelpers.Remap(intensity, 0f, 1f, 0, 255); MMNVAndroid.AndroidVibrate(100, (int)(intensity)); } else if (iOS()) { if (iOSVersion >= 13) { MMNViOSCoreHaptics.PlayTransientHapticPattern(intensity, sharpness); } else { if (intensity < 0.3f) { MMNViOS.iOSTriggerHaptics(HapticTypes.LightImpact); } else if ((intensity >= 0.3f) && (intensity < 0.6f)) { MMNViOS.iOSTriggerHaptics(HapticTypes.MediumImpact); } else { MMNViOS.iOSTriggerHaptics(HapticTypes.HeavyImpact); } } } }
/// <summary> /// Triggers a simple vibration /// </summary> public static void Vibrate() { DebugLog("[MMVibrationManager] Vibrate"); if (!_vibrationsActive) { return; } if (Android()) { MMNVAndroid.AndroidVibrate(MediumDuration); } else if (iOS()) { if (iOSVersion >= 13) { MMNViOSCoreHaptics.PlayTransientHapticPattern(0.8f, 0.8f); } else { MMNViOS.iOSTriggerHaptics(HapticTypes.MediumImpact); } } }