示例#1
0
    // 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);
    }
示例#2
0
    // 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;
    }