/// <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 } } }
/// <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)); }
/// <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)); } }
/// <summary> /// Cancels any currently-playing clips and immediatly plays the specified clip instead. /// </summary> public void Preempt(OVRHapticsClip clip) { m_output.Preempt(clip); }
// Token: 0x060037FE RID: 14334 RVA: 0x0011D208 File Offset: 0x0011B608 public void Queue(OVRHapticsClip clip) { this.m_output.Queue(clip); }
void Start() { hapticsClip = new OVRHapticsClip(audioClip); }
void DevicePulse(OVRHapticsClip hapticsClip) { OVRHaptics.RightChannel.Mix(hapticsClip); OVRHaptics.LeftChannel.Mix(hapticsClip); }
// 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; } } }
public static void Trigger(AudioClip vibrationAudio, OVRInput.Controller controller) { OVRHapticsClip clip = new OVRHapticsClip(vibrationAudio); VibeOnCorrespondingController(clip, controller); }
// Use this for initialization void Start() { source = GetComponent <AudioSource>(); hclip = new OVRHapticsClip(aclip); StartCoroutine(Waiting()); }
//public bool AntBodyTurning = false; void Start() { StartCoroutine("AntennaeController"); StartCoroutine("DoMovementCheck"); biteHapticsClip = new OVRHapticsClip(biteAudioClip); }
//振動用関数 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); }
// Start is called before the first frame update void Start() { clip = new OVRHapticsClip(tapSound); lastTappedTargetID = 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); }
/// <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); }
// Token: 0x060037FD RID: 14333 RVA: 0x0011D1FA File Offset: 0x0011B5FA public void Preempt(OVRHapticsClip clip) { this.m_output.Preempt(clip); }
// Use this for initialization void Start() { thisObj = this; hapticClip = new OVRHapticsClip(audioSource.clip); }
/// <summary> /// Adds the specified clip to play simultaneously to the currently-playing clip(s). /// </summary> public void Mix(OVRHapticsClip clip) { m_output.Mix(clip); }
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; } } } }
/// <summary> /// Enqueues the specified clip to play after any currently-playing clips finish. /// </summary> public void Queue(OVRHapticsClip clip) { m_output.Queue(clip); }
public ClipPlaybackTracker(OVRHapticsClip clip) { Clip = clip; }
// Use this for initialization void Start() { clip = new OVRHapticsClip(1); clip.WriteSample(255); }