protected virtual void InternalTriggerHapticPulse(VRTK_ControllerReference controllerReference, float strength, float duration, float pulseInterval) { InternalCancelHapticPulse(controllerReference); float hapticPulseStrength = Mathf.Clamp(strength, 0f, 1f); SDK_ControllerHapticModifiers hapticModifiers = VRTK_SDK_Bridge.GetHapticModifiers(); //TM: added after the SteamVR 2.2 update SDK_SteamVRInputSource inputSource = controllerReference.actual.GetComponent <SDK_SteamVRInputSource>(); SteamVR_Action_Vibration hapticAction = inputSource.HapticAction; Coroutine hapticLoop = StartCoroutine(SimpleHapticPulseRoutine(inputSource, duration * hapticModifiers.durationModifier, hapticPulseStrength, pulseInterval * hapticModifiers.intervalModifier)); VRTK_SharedMethods.AddDictionaryValue(hapticLoopCoroutines, controllerReference, hapticLoop); }
protected virtual IEnumerator SimpleHapticPulseRoutine(SDK_SteamVRInputSource inputSource, float duration, float hapticPulseStrength, float pulseInterval) { if (pulseInterval <= 0) { yield break; } while (duration > 0) { //TM: changed after SteamVR 2.2 update //VRTK_SDK_Bridge.HapticPulse(controllerReference, hapticPulseStrength); inputSource.HapticAction.Execute(0, Mathf.Clamp(duration, 0, 0.78f), pulseInterval, hapticPulseStrength, inputSource.HandType); yield return(new WaitForSeconds(pulseInterval)); duration -= pulseInterval; } }