protected virtual void SnapObject(Collider collider) { VRTK_InteractableObject ioCheck = ValidSnapObject(collider.gameObject, false); //If the item is in a snappable position and this drop zone isn't snapped and the collider is a valid interactable object if (willSnap && !isSnapped && ioCheck) { //Only snap it to the drop zone if it's not already in a drop zone if (!ioCheck.IsInSnapDropZone()) { if (highlightObject != null) { //Turn off the drop zone highlighter highlightObject.SetActive(false); } Vector3 newLocalScale = GetNewLocalScale(ioCheck); if (transitionInPlace != null) { StopCoroutine(transitionInPlace); } isSnapped = true; currentSnappedObject = ioCheck.gameObject; transitionInPlace = StartCoroutine(UpdateTransformDimensions(ioCheck, highlightContainer, newLocalScale, snapDuration)); ioCheck.ToggleSnapDropZone(this, true); } } //Force reset isSnapped if the item is grabbed but isSnapped is still true isSnapped = (isSnapped && ioCheck && ioCheck.IsGrabbed() ? false : isSnapped); }
protected virtual void InteractableObjectGrabbed(object sender, InteractableObjectEventArgs e) { VRTK_InteractableObject grabbedInteractableObject = sender as VRTK_InteractableObject; if (!grabbedInteractableObject.IsInSnapDropZone()) { CheckCanSnap(grabbedInteractableObject); } }
protected override void SnapObject(Collider collider) { VRTK_InteractableObject ioCheck = ValidSnapObject(collider.gameObject, false); //If the item is in a snappable position and this drop zone isn't snapped and the collider is a valid interactable object if (willSnap && !isSnapped && ioCheck != null) { //Only snap it to the drop zone if it's not already in a drop zone if (!ioCheck.IsInSnapDropZone()) { if (highlightObject != null) { //Turn off the drop zone highlighter highlightObject.SetActive(false); } Vector3 newLocalScale = GetNewLocalScale(ioCheck); if (transitionInPlace != null) { StopCoroutine(transitionInPlace); } isSnapped = true; currentSnappedObject = ioCheck.gameObject; if (cloneNewOnUnsnap) { CreatePermanentClone(); } DisableClothCol(); transitionInPlace = StartCoroutine(UpdateTransformDimensions(ioCheck, highlightContainer, newLocalScale, snapDuration)); ioCheck.ToggleSnapDropZone(this, true); transform.parent.GetComponent <ProceduralSnap>().UpdateSnapCount(); //ioCheck.GetComponent<ClothUtensilCounter>().isSnapped = true; } } //Force reset isSnapped if the item is grabbed but isSnapped is still true isSnapped = (isSnapped && ioCheck && ioCheck.IsGrabbed() ? false : isSnapped); wasSnapped = false; }
protected virtual void SnapObject(VRTK_InteractableObject interactableObjectCheck) { //If the item is in a snappable position and this drop zone isn't snapped and the collider is a valid interactable object if (willSnap && !isSnapped && ValidSnapObject(interactableObjectCheck, false)) { //Only snap it to the drop zone if it's not already in a drop zone if (!interactableObjectCheck.IsInSnapDropZone()) { if (highlightObject != null) { //Turn off the drop zone highlighter SetHighlightObjectActive(false); } Vector3 newLocalScale = GetNewLocalScale(interactableObjectCheck); if (transitionInPlaceRoutine != null) { StopCoroutine(transitionInPlaceRoutine); } isSnapped = true; currentSnappedObject = interactableObjectCheck; if (cloneNewOnUnsnap) { CreatePermanentClone(); } if (gameObject.activeInHierarchy) { transitionInPlaceRoutine = StartCoroutine(UpdateTransformDimensions(interactableObjectCheck, highlightContainer, newLocalScale, snapDuration)); } interactableObjectCheck.ToggleSnapDropZone(this, true); } } //Force reset isSnapped if the item is grabbed but isSnapped is still true isSnapped = (isSnapped && interactableObjectCheck != null && interactableObjectCheck.IsGrabbed() ? false : isSnapped); willSnap = !isSnapped; wasSnapped = false; }