Пример #1
0
    /// <summary>
    /// Creates a clip by mixing the specified clips.
    /// </summary>
    public OVRHapticsClip(OVRHapticsClip a, OVRHapticsClip b)
    {
        int maxCount = a.Count;
        if (b.Count > maxCount)
            maxCount = b.Count;

        Capacity = maxCount;
        Samples = new byte[Capacity * OVRHaptics.Config.SampleSizeInBytes];

        for (int i = 0; i < a.Count || i < b.Count; i++)
        {
            if (OVRHaptics.Config.SampleSizeInBytes == 1)
            {
                byte sample = 0; // TODO support multi-byte samples
                if ((i < a.Count) && (i < b.Count))
                    sample = (byte)(Mathf.Clamp(a.Samples[i] + b.Samples[i], 0, System.Byte.MaxValue)); // TODO support multi-byte samples
                else if (i < a.Count)
                    sample = a.Samples[i]; // TODO support multi-byte samples
                else if (i < b.Count)
                    sample = b.Samples[i]; // TODO support multi-byte samples

                WriteSample(sample); // TODO support multi-byte samples
            }
        }
    }
Пример #2
0
 /// <summary>
 /// Enqueues the specified clip to play after any currently-playing clip finishes.
 /// </summary>
 public void Queue(OVRHapticsClip clip)
 {
     m_pendingClips.Add(new ClipPlaybackTracker(clip));
 }
Пример #3
0
        /// <summary>
        /// Adds the samples from the specified clip to the ones in the currently-playing clip(s).
        /// </summary>
        public void Mix(OVRHapticsClip clip)
        {
            int numClipsToMix = 0;
            int numSamplesToMix = 0;
            int numSamplesRemaining = clip.Count;

            while (numSamplesRemaining > 0 && numClipsToMix < m_pendingClips.Count)
            {
                int numSamplesRemainingInClip = m_pendingClips[numClipsToMix].Clip.Count - m_pendingClips[numClipsToMix].ReadCount;
                numSamplesRemaining -= numSamplesRemainingInClip;
                numSamplesToMix += numSamplesRemainingInClip;
                numClipsToMix++;
            }

            if (numSamplesRemaining > 0)
            {
                numSamplesToMix += numSamplesRemaining;
                numSamplesRemaining = 0;
            }

            if (numClipsToMix > 0)
            {
                OVRHapticsClip mixClip = new OVRHapticsClip(numSamplesToMix);

                OVRHapticsClip a = clip;
                int aReadCount = 0;

                for (int i = 0; i < numClipsToMix; i++)
                {
                    OVRHapticsClip b = m_pendingClips[i].Clip;
                    for(int bReadCount = m_pendingClips[i].ReadCount; bReadCount < b.Count; bReadCount++)
                    {
                        if (OVRHaptics.Config.SampleSizeInBytes == 1)
                        {
                            byte sample = 0; // TODO support multi-byte samples
                            if ((aReadCount < a.Count) && (bReadCount < b.Count))
                            {
                                sample = (byte)(Mathf.Clamp(a.Samples[aReadCount] + b.Samples[bReadCount], 0, System.Byte.MaxValue)); // TODO support multi-byte samples
                                aReadCount++;
                            }
                            else if (bReadCount < b.Count)
                            {
                                sample = b.Samples[bReadCount]; // TODO support multi-byte samples
                            }

                            mixClip.WriteSample(sample); // TODO support multi-byte samples
                        }
                    }
                }

                while (aReadCount < a.Count)
                {
                    if (OVRHaptics.Config.SampleSizeInBytes == 1)
                    {
                        mixClip.WriteSample(a.Samples[aReadCount]); // TODO support multi-byte samples
                    }
                    aReadCount++;
                }

                m_pendingClips[0] = new ClipPlaybackTracker(mixClip);
                for (int i = 1; i < numClipsToMix; i++)
                {
                    m_pendingClips.RemoveAt(1);
                }
            }
            else
            {
                m_pendingClips.Add(new ClipPlaybackTracker(clip));
            }
        }
Пример #4
0
 /// <summary>
 /// Cancels any currently-playing clips and immediatly plays the specified clip instead.
 /// </summary>
 public void Preempt(OVRHapticsClip clip)
 {
     m_output.Preempt(clip);
 }
Пример #5
0
 // Token: 0x060037FE RID: 14334 RVA: 0x0011D208 File Offset: 0x0011B608
 public void Queue(OVRHapticsClip clip)
 {
     this.m_output.Queue(clip);
 }
Пример #6
0
 void Start()
 {
     hapticsClip = new OVRHapticsClip(audioClip);
 }
Пример #7
0
 void DevicePulse(OVRHapticsClip hapticsClip)
 {
     OVRHaptics.RightChannel.Mix(hapticsClip);
     OVRHaptics.LeftChannel.Mix(hapticsClip);
 }
Пример #8
0
 /// <summary>
 /// Enqueues the specified clip to play after any currently-playing clip finishes.
 /// </summary>
 public void Queue(OVRHapticsClip clip)
 {
     m_pendingClips.Add(new ClipPlaybackTracker(clip));
 }
Пример #9
0
    // Update is called once per frame



    private void OnTriggerEnter(Collider other)
    {
        OVRHapticsClip hapticsClip = new OVRHapticsClip(hapticAudioClip);

        if (tag == "rightC")
        {
            OVRHaptics.RightChannel.Preempt(hapticsClip);
        }
        else if (tag == "leftC")
        {
            OVRHaptics.LeftChannel.Preempt(hapticsClip);
        }

        if (other.tag == "yrb")
        {
            blotch.SetBool("isYRB", true);
            bubbles.SetBool("isYRB", true);
            checkers.SetBool("isYRB", true);
            squiggle.SetBool("isYRB", true);

            /*triY.SetBool("isMS", false);
             * triB.SetBool("isMS", false);
             * gridSphere.SetBool("isMS", false);*/
        }
        else if (other.tag == "ms")
        {
            /*triY.SetBool("isMS", true);
             * triB.SetBool("isMS", true);
             * gridSphere.SetBool("isMS", true);*/

            blotch.SetBool("isYRB", false);
            bubbles.SetBool("isYRB", false);
            checkers.SetBool("isYRB", false);
            squiggle.SetBool("isYRB", false);
        }

        if (other.tag == "blotch")
        {
            if (!manager.isBlotch)
            {
                manager.isBlotch = true;
            }
            else
            {
                manager.isBlotch = false;
            }
        }
        if (other.tag == "bubbles")
        {
            if (!manager.isBubbles)
            {
                manager.isBubbles = true;
            }
            else
            {
                manager.isBubbles = false;
            }
        }
        if (other.tag == "checkers")
        {
            if (!manager.isCheckers)
            {
                manager.isCheckers = true;
            }
            else
            {
                manager.isCheckers = false;
            }
        }
        if (other.tag == "squiggle")
        {
            if (!manager.isSquiggle)
            {
                manager.isSquiggle = true;
            }
            else
            {
                manager.isSquiggle = false;
            }
        }
    }
Пример #10
0
    public static void Trigger(AudioClip vibrationAudio, OVRInput.Controller controller)
    {
        OVRHapticsClip clip = new OVRHapticsClip(vibrationAudio);

        VibeOnCorrespondingController(clip, controller);
    }
Пример #11
0
 // Use this for initialization
 void Start()
 {
     source = GetComponent <AudioSource>();
     hclip  = new OVRHapticsClip(aclip);
     StartCoroutine(Waiting());
 }
Пример #12
0
    //public bool AntBodyTurning = false;


    void Start()
    {
        StartCoroutine("AntennaeController");
        StartCoroutine("DoMovementCheck");
        biteHapticsClip = new OVRHapticsClip(biteAudioClip);
    }
Пример #13
0
 //振動用関数
 public void Vibrate_cotroller(OVRHapticsClip Hapticsclip, int cotroller)
 {
     OVRHaptics.Channels[cotroller].Mix(Hapticsclip);
 }
 public void PlayHaptics()
 {
     _Clip = new OVRHapticsClip(hapticsClip);
     OVRHaptics.Channels[1].Queue(_Clip);
 }
Пример #15
0
 // Start is called before the first frame update
 void Start()
 {
     clip = new OVRHapticsClip(tapSound);
     lastTappedTargetID = 0;
 }
Пример #16
0
 /// <summary>
 /// Immediately plays the specified clip without waiting for any currently-playing clip to finish.
 /// </summary>
 public void Preempt(OVRHapticsClip clip)
 {
     m_pendingClips.Clear();
     m_pendingClips.Add(new ClipPlaybackTracker(clip));
 }
 public CRumbleValue(OVRHapticsClip clip)
 {
     waiter = new WaitForSecondsRealtime(clip.Count / _kSampleHz);
 }
Пример #18
0
        /// <summary>
        /// Adds the samples from the specified clip to the ones in the currently-playing clip(s).
        /// </summary>
        public void Mix(OVRHapticsClip clip)
        {
            int numClipsToMix       = 0;
            int numSamplesToMix     = 0;
            int numSamplesRemaining = clip.Count;

            while (numSamplesRemaining > 0 && numClipsToMix < m_pendingClips.Count)
            {
                int numSamplesRemainingInClip = m_pendingClips[numClipsToMix].Clip.Count - m_pendingClips[numClipsToMix].ReadCount;
                numSamplesRemaining -= numSamplesRemainingInClip;
                numSamplesToMix     += numSamplesRemainingInClip;
                numClipsToMix++;
            }

            if (numSamplesRemaining > 0)
            {
                numSamplesToMix    += numSamplesRemaining;
                numSamplesRemaining = 0;
            }

            if (numClipsToMix > 0)
            {
                OVRHapticsClip mixClip = new OVRHapticsClip(numSamplesToMix);

                OVRHapticsClip a          = clip;
                int            aReadCount = 0;

                for (int i = 0; i < numClipsToMix; i++)
                {
                    OVRHapticsClip b = m_pendingClips[i].Clip;
                    for (int bReadCount = m_pendingClips[i].ReadCount; bReadCount < b.Count; bReadCount++)
                    {
                        if (OVRHaptics.Config.SampleSizeInBytes == 1)
                        {
                            byte sample = 0;                             //  support multi-byte samples
                            if ((aReadCount < a.Count) && (bReadCount < b.Count))
                            {
                                sample = (byte)(Mathf.Clamp(a.Samples[aReadCount] + b.Samples[bReadCount], 0, System.Byte.MaxValue));                                 //  support multi-byte samples
                                aReadCount++;
                            }
                            else if (bReadCount < b.Count)
                            {
                                sample = b.Samples[bReadCount];                                 //  support multi-byte samples
                            }

                            mixClip.WriteSample(sample);                             //  support multi-byte samples
                        }
                    }
                }

                while (aReadCount < a.Count)
                {
                    if (OVRHaptics.Config.SampleSizeInBytes == 1)
                    {
                        mixClip.WriteSample(a.Samples[aReadCount]);                         //  support multi-byte samples
                    }
                    aReadCount++;
                }

                m_pendingClips[0] = new ClipPlaybackTracker(mixClip);
                for (int i = 1; i < numClipsToMix; i++)
                {
                    m_pendingClips.RemoveAt(1);
                }
            }
            else
            {
                m_pendingClips.Add(new ClipPlaybackTracker(clip));
            }
        }
 private void TriggerHapticFeedback(XRNode node, OVRHapticsClip clip)
 {
     OVRHaptics.OVRHapticsChannel channel = (node != XRNode.LeftHand) ? OVRHaptics.RightChannel : OVRHaptics.LeftChannel;
     channel.Mix(clip);
 }
 // Start is called before the first frame update
 void Start()
 {
     hapticsClip_lasers = new OVRHapticsClip(audioClip_lasers);
     audioSource        = GetComponent <AudioSource>();
 }
 public void Rumble(XRNode node, OVRHapticsClip clip)
 {
     TriggerHapticFeedback(node, clip);
 }
Пример #22
0
 // Token: 0x060037FD RID: 14333 RVA: 0x0011D1FA File Offset: 0x0011B5FA
 public void Preempt(OVRHapticsClip clip)
 {
     this.m_output.Preempt(clip);
 }
Пример #23
0
 // Use this for initialization
 void Start()
 {
     thisObj    = this;
     hapticClip = new OVRHapticsClip(audioSource.clip);
 }
Пример #24
0
 /// <summary>
 /// Adds the specified clip to play simultaneously to the currently-playing clip(s).
 /// </summary>
 public void Mix(OVRHapticsClip clip)
 {
     m_output.Mix(clip);
 }
Пример #25
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        // Iterate grab candidates and find the closest grabbable candidate
        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            //bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            //if (!canGrab)
            //{
            //    continue;
            //}

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider = grabbable.grabPoints[j];
                // Store the closest grabbable
                Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float   grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        // Disable grab volumes to prevent overlaps
        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                if (closestGrabbable.isFixed)
                {
                    closestGrabbable.grabbedBy.GrabEnd();
                }
                else
                {
                    closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
                }
            }

            m_grabbedObj = closestGrabbable;
            //disable recovering
            m_grabbedObj.GetComponent <wheelAuto>().setRecovering = false;
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            //NEW: Add Haptic Sound
            OVRHapticsClip hapticsClip = new OVRHapticsClip(hapticAudioClip);
            if (m_controller == OVRInput.Controller.LTouch)
            {
                OVRHaptics.LeftChannel.Preempt(hapticsClip);
            }
            else
            {
                OVRHaptics.RightChannel.Preempt(hapticsClip);
            }

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            // Set up offsets for grabbed object desired position relative to hand.
            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }



            if (m_grabbedObj.isFixed)
            {
                OVRCameraRig rig = transform.parent.parent.GetComponent <OVRCameraRig>();


                rig.UpdatedAnchors -= updateAnchor;
                localAvatar         = m_hand.parent;

                OvrAvatar.lockedHand       = m_hand.gameObject;
                OvrAvatar.lockedController = m_controllerPoint.gameObject;

                m_hand.parent            = m_grabbedObj.transform;
                m_controllerPoint.parent = m_grabbedObj.transform;
                rig.UpdatedAnchors      += updateWheel;
            }
            else
            {
                // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high
                // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that
                // is beyond the scope of this demo.
                MoveGrabbedObject(m_lastPos, m_lastRot, true);

                if (m_parentHeldObject)
                {
                    m_grabbedObj.transform.parent = transform;
                }
            }
        }
    }
Пример #26
0
 /// <summary>
 /// Enqueues the specified clip to play after any currently-playing clips finish.
 /// </summary>
 public void Queue(OVRHapticsClip clip)
 {
     m_output.Queue(clip);
 }
Пример #27
0
 /// <summary>
 /// Adds the specified clip to play simultaneously to the currently-playing clip(s).
 /// </summary>
 public void Mix(OVRHapticsClip clip)
 {
     m_output.Mix(clip);
 }
Пример #28
0
 /// <summary>
 /// Immediately plays the specified clip without waiting for any currently-playing clip to finish.
 /// </summary>
 public void Preempt(OVRHapticsClip clip)
 {
     m_pendingClips.Clear();
     m_pendingClips.Add(new ClipPlaybackTracker(clip));
 }
Пример #29
0
 public ClipPlaybackTracker(OVRHapticsClip clip)
 {
     Clip = clip;
 }
Пример #30
0
 public ClipPlaybackTracker(OVRHapticsClip clip)
 {
     Clip = clip;
 }
 // Use this for initialization
 void Start()
 {
     clip = new OVRHapticsClip(1);
     clip.WriteSample(255);
 }