// Token: 0x060056F2 RID: 22258 RVA: 0x001DEEF4 File Offset: 0x001DD2F4 public override void GenerateHapticEvent(VRCTracking.ID id, float duration, float amplitude, float frequency) { CVRSystem system = OpenVR.System; if (system == null) { return; } ETrackedControllerRole unDeviceType = ETrackedControllerRole.Invalid; if (id != VRCTracking.ID.HandTracker_LeftWrist) { if (id == VRCTracking.ID.HandTracker_RightWrist) { unDeviceType = ETrackedControllerRole.RightHand; } } else { unDeviceType = ETrackedControllerRole.LeftHand; } uint trackedDeviceIndexForControllerRole = system.GetTrackedDeviceIndexForControllerRole(unDeviceType); if (trackedDeviceIndexForControllerRole < 0u || trackedDeviceIndexForControllerRole >= 16u) { return; } VRCTrackingSteam.HapticWave hapticWave = default(VRCTrackingSteam.HapticWave); hapticWave.controllerIndex = trackedDeviceIndexForControllerRole; hapticWave.duration = duration; hapticWave.strength = Mathf.Clamp01(amplitude); hapticWave.frequency = frequency; if (this.currentHapticLoop[(int)((UIntPtr)hapticWave.controllerIndex)] != null) { base.StopCoroutine(this.currentHapticLoop[(int)((UIntPtr)hapticWave.controllerIndex)]); } this.currentHapticLoop[(int)((UIntPtr)hapticWave.controllerIndex)] = base.StartCoroutine("HapticLoop", hapticWave); }
// Token: 0x060056EC RID: 22252 RVA: 0x001DEAD0 File Offset: 0x001DCED0 private IEnumerator HapticLoop(VRCTrackingSteam.HapticWave wave) { float timeElapsed = 0f; float cycleWait = 0.005f; float pulseLengthUSec = wave.strength * 3998f + 1f; float pulseLength = pulseLengthUSec / 1000000f; float period = 0.5f / wave.frequency; if (period < pulseLength + cycleWait) { period = pulseLength + cycleWait; } else { cycleWait = period - pulseLength; } while (timeElapsed < wave.duration * 0.5f) { float cycleStart = Time.unscaledTime; float cycleTime = 0f; SteamVR_Controller.Input((int)wave.controllerIndex).TriggerHapticPulse((ushort)Mathf.RoundToInt(pulseLengthUSec), EVRButtonId.k_EButton_Axis0); while (cycleTime < period) { yield return(null); float measuredDelta = Time.unscaledTime - cycleStart; cycleTime += measuredDelta; timeElapsed += measuredDelta; cycleStart = Time.unscaledTime; } } this.currentHapticLoop[(int)((UIntPtr)wave.controllerIndex)] = null; yield return(null); yield break; }