Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }