예제 #1
0
    void OnTriggerEnter(Collider other)
    {
        int i = 0;

        foreach (Collider clipCol in clips)
        {
            if (other == clipCol)
            {
                GameObject clipObj = other.transform.parent.gameObject;
                if (currentClip == clipObj || oldClip == clipObj)
                {
                    continue;
                }
                VRTK.VRTK_InteractableObject interaction = clipObj.GetComponent <VRTK.VRTK_InteractableObject>();
                if (!interaction.IsGrabbed())
                {
                    continue;
                }
                if (!isEmpty && onlyChangeClipIfViewmasterEmpty)
                {
                    continue;
                }
                viewHandler.SetClip(i);
                SetClip(clipObj, other);
                break;
            }
            i++;
        }
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        switch (tutorialStage)
        {
        case 0:
            if (!voiceoverSource.isPlaying)
            {
                tank.countdownActive = true;
                AdvanceStage();
            }
            break;

        case 1:
            if (!voiceoverSource.isPlaying && tank.crankL != 0 && tank.crankR != 0)
            {
                AdvanceStage();
            }
            break;

        case 2:
            if (shovel_interactable.IsGrabbed())
            {
                AdvanceStage();
            }
            break;

        case 3:
            if (shovel.coalAmount > 0)
            {
                AdvanceStage();
                door.popDoor();
            }
            break;

        case 4:
            if (tank.fuel > 0.2f)
            {
                AdvanceStage();
                door.UnPopDoor();
                tank.fuel += 0.7f;
            }
            break;

        case 5:
            if (!voiceoverSource.isPlaying)
            {
                AdvanceStage();
            }
            break;

        case 6:
            if (!voiceoverSource.isPlaying)
            {
                AdvanceStage();
            }
            break;
        }
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        Vector3 currAngle        = transform.rotation.eulerAngles;
        float   degreesDifferent = Mathf.Abs(Quaternion.Angle(transform.rotation, neutralPos));

        if (degreesDifferent < threshold && !lever.IsGrabbed())
        {
            transform.rotation = neutralPos;
        }
    }
예제 #4
0
    void Update()
    {
        Debug.Log(scriptInteractable.isDroppable);

        //On check si la tour est grabbée
        if (scriptInteractable.IsGrabbed())
        {
            //on la scale avec la distance de l'objet pointdeRefScale
            float distance = (transform.position - pointDeRefScale.transform.position).magnitude;
            float norm     = (distance - minimumDistance) / (maximumDistance - minimumDistance);
            norm = Mathf.Clamp01(norm);

            Vector3 minScale = Vector3.one * maximumDistanceScale;
            Vector3 maxScale = Vector3.one * minimumDistanceScale;


            transform.localScale = Vector3.Lerp(maxScale, minScale, norm);
        }

        if (scriptInteractable.IsGrabbed() == false && inTrash)
        {
            Destroy(gameObject);
        }
    }
예제 #5
0
    // Update is called once per frame
    void Update()
    {
        if (company != null)
        {
            if (objectHandler.IsGrabbed())
            {
                if (!showsInfo)
                {
                    showsInfo = true;
                    if (companyInfo == null)
                    {
                        companyInfo = Instantiate(companyInfoPrefab);
                        ConfigureCompanyInfo();

                    } else
                    {
                        companyInfo.active = true;
                    }
                    // TODO: Maybe play some sound?
                }
                // Clamp info on top of Star
                companyInfo.transform.position = GetComponent<Transform>().position + new Vector3(0, 0.2f, 0);
                companyInfo.transform.LookAt(Camera.main.gameObject.transform.position);
            } else
            {
                if (companyInfo != null)
                {
                    if (showsInfo)
                    {
                        showsInfo = false;
                        companyInfo.active = false;
                    }
                }
            }
        }
    }
예제 #6
0
 protected virtual bool ValidUnsnap(VRTK_InteractableObject interactableObjectCheck)
 {
     return(interactableObjectCheck.IsGrabbed() || ((snapType != SnapTypes.UseJoint || !float.IsInfinity(GetComponent <Joint>().breakForce)) && interactableObjectCheck.validDrop == VRTK_InteractableObject.ValidDropTypes.DropAnywhere));
 }
예제 #7
0
        protected virtual void StartUseAction(Transform target)
        {
            pointerInteractableObject = target.GetComponent <VRTK_InteractableObject>();
            bool cannotUseBecauseNotGrabbed = (pointerInteractableObject && pointerInteractableObject.useOnlyIfGrabbed && !pointerInteractableObject.IsGrabbed());

            if (interactUse != null && PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed && pointerInteractableObject.usingState == 0)
            {
                pointerInteractableObject.StartUsing(interactUse);
                pointerInteractableObject.usingState++;
            }
        }
예제 #8
0
        protected virtual void OnTriggerEnter(Collider collider)
        {
            GameObject colliderInteractableObject       = TriggerStart(collider);
            VRTK_InteractableObject touchedObjectScript = (touchedObject != null ? touchedObject.GetComponent <VRTK_InteractableObject>() : null);

            //If the new collider is not part of the existing touched object (and the object isn't being grabbed) then start touching the new object
            if (touchedObject != null && colliderInteractableObject != null && touchedObject != colliderInteractableObject && touchedObjectScript != null && !touchedObjectScript.IsGrabbed())
            {
                ForceStopTouching();
                triggerIsColliding = true;
            }
        }
예제 #9
0
        protected virtual void AttemptUseObject()
        {
            GameObject touchedObject = (interactTouch != null ? interactTouch.GetTouchedObject() : null);

            if (touchedObject == null)
            {
                touchedObject = GetFromGrab();
            }

            if (touchedObject != null && interactTouch != null && interactTouch.IsObjectInteractable(touchedObject))
            {
                VRTK_InteractableObject interactableObjectScript = touchedObject.GetComponent <VRTK_InteractableObject>();

                if (interactableObjectScript != null && interactableObjectScript.useOnlyIfGrabbed && !interactableObjectScript.IsGrabbed())
                {
                    return;
                }

                UseInteractedObject(touchedObject);
                if (usingObject != null && !IsObjectHoldOnUse(usingObject))
                {
                    SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1);
                }
            }
        }
예제 #10
0
    void Update()
    {
        // calcul de la progression du fondu au noir
        float oldProgression = blackoutProgression;

        if (viewmasterObject.IsGrabbed())
        {
            float distance = 999;
            foreach (Transform anchorPoint in viewmasterObjectAnchors)
            {
                distance = Mathf.Min(distance, Vector3.Distance(anchorPoint.position, Camera.main.transform.position));
            }
            float range = maxDistance - minDistance;
            blackoutProgression = (distance - minDistance) / range;
        }
        else
        {
            blackoutProgression += Time.deltaTime;
        }
        blackoutProgression = Mathf.Clamp(blackoutProgression, 0, 1);
        Color matCol = blackoutMesh.material.color;

        matCol.a = 1 - blackoutProgression * .9f;
        blackoutMesh.material.color = matCol;

        renderCam.enabled = blackoutProgression <= 1;
        if (blackoutProgression < 1 && oldProgression >= 1)
        {
            // calcul de la position de l'image en fonction de la tête du joueur
            portraitOrientation.localPosition = renderCam.transform.localPosition + new Vector3(0, -.1f, 0);
            portraitOrientation.localRotation = Quaternion.Euler(
                portraitOrientation.localEulerAngles.x,
                renderCam.transform.localEulerAngles.y,
                portraitOrientation.localEulerAngles.z);
            // désactivation TP
            teleportHandler.enabled = false;
        }
        else if (blackoutProgression >= 1 && oldProgression < 1)
        {
            teleportHandler.enabled = true;
        }

        // calcul de la progression du fondu de l'image
        if (blackoutProgression <= 0)
        {
            canvasProgression += Time.deltaTime;
        }
        else
        {
            canvasProgression -= Time.deltaTime * 7;
        }

        canvasProgression    = Mathf.Clamp(canvasProgression, 0, 1);
        portraitsGroup.alpha = canvasProgression;

        if (blackoutProgression <= 0)
        {
            float angleBetweenPictures = 30;
            if (currentClip != null)
            {
                angleBetweenPictures = 180f / currentClip.images.Length;
            }
            // float angleBetweenPictures = 30; // à n'utiliser que si l'autre n'est pas assez intuitif

            GameObject grabbingObj = viewmasterObject.GetGrabbingObject();
            if (grabbingObj != null)
            {
                VRTK.VRTK_ControllerEvents eventCtrl = grabbingObj.GetComponent <VRTK.VRTK_ControllerEvents>();
                lastControllerActions = grabbingObj.GetComponent <VRTK.VRTK_ControllerActions>();
                if (eventCtrl != null)
                {
                    // on est en train de visionner l'image, on récupère la manette en train de tenir le VM afin de récupérer les swipes sur le pavé tactile
                    eventCtrl.axisFidelity = 5;
                    bool wasPressing = pressingButton;
                    pressingButton = eventCtrl.IsButtonPressed(VRTK.VRTK_ControllerEvents.ButtonAlias.Touchpad_Touch);
                    if (pressingButton && !wasPressing)
                    {
                        lastRotation = eventCtrl.GetTouchpadAxisAngle();
                    }
                    float trigger = eventCtrl.GetTriggerAxis();
                    if (trigger != 1)
                    {
                        ignoreTrigger = false;
                    }
                    if (trigger == 1 && !ignoreTrigger)
                    {
                        ignoreTrigger         = true;
                        autoMoveToNextPicture = true;
                        StartCoroutine(TriggerHapticCoroutine());
                    }
                    if (pressingButton && trigger == 0 && false)
                    {
                        float oldPortraitRotation = currentPortraitRotation;
                        // en train de faire un swipe
                        float currentPadRotation = eventCtrl.GetTouchpadAxisAngle();
                        if (lastRotation - currentPadRotation < 180 && lastRotation - currentPadRotation > -180)
                        {
                            currentPortraitRotation += (lastRotation - currentPadRotation) * rotateSensitivity;
                        }
                        if (lastControllerActions != null && ((int)(currentPadRotation) / 35) != ((int)(lastRotation) / 35))
                        {
                            lastControllerActions.TriggerHapticPulse(.05f);
                        }
                        if (currentPortraitRotation > angleBetweenPictures / 2 && oldPortraitRotation < angleBetweenPictures / 2)
                        {
                            StartCoroutine(TriggerHapticCoroutine());
                        }
                        if (currentPortraitRotation < -angleBetweenPictures / 2 && oldPortraitRotation > -angleBetweenPictures / 2)
                        {
                            StartCoroutine(TriggerHapticCoroutine());
                        }
                        lastRotation = currentPadRotation;
                    }
                }
            }

            if (!pressingButton || autoMoveToNextPicture)
            {
                if (autoMoveToNextPicture)
                {
                    currentPortraitRotation += Time.deltaTime * (angleBetweenPictures + .01f - currentPortraitRotation) * 10;
                }
                else
                {
                    // retour à l'image la plus proche
                    if (currentPortraitRotation > angleBetweenPictures / 2)
                    {
                        currentPortraitRotation += Time.deltaTime * (angleBetweenPictures + .01f - currentPortraitRotation) * 10;
                    }
                    else if (currentPortraitRotation < -angleBetweenPictures / 2)
                    {
                        currentPortraitRotation += Time.deltaTime * -(angleBetweenPictures + .01f + currentPortraitRotation) * 10;
                    }
                    else
                    {
                        currentPortraitRotation -= Time.deltaTime * currentPortraitRotation * 10;
                    }
                }
            }

            if (currentPortraitRotation > angleBetweenPictures)
            {
                currentPortraitRotation -= angleBetweenPictures;
                nextImage();
            }
            if (currentPortraitRotation < -angleBetweenPictures)
            {
                currentPortraitRotation += angleBetweenPictures;
                previousImage();
            }

            // rotation de l'image
            leftImageTransform.transform.localRotation      = Quaternion.Euler(0, 0, currentPortraitRotation);
            rightImageTransform.transform.localRotation     = Quaternion.Euler(0, 0, currentPortraitRotation);
            leftImageTransformNext.transform.localRotation  = Quaternion.Euler(0, 0, currentPortraitRotation + angleBetweenPictures);
            leftImageTransformPrev.transform.localRotation  = Quaternion.Euler(0, 0, currentPortraitRotation - angleBetweenPictures);
            rightImageTransformNext.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation + angleBetweenPictures);
            rightImageTransformPrev.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation - angleBetweenPictures);
        }
        else
        {
            // rotation du disque du grabbable, pas de la vue.

            GameObject grabbingObj = viewmasterObject.GetGrabbingObject();
            if (grabbingObj != null)
            {
                VRTK.VRTK_ControllerEvents eventCtrl = grabbingObj.GetComponent <VRTK.VRTK_ControllerEvents>();
                lastControllerActions = grabbingObj.GetComponent <VRTK.VRTK_ControllerActions>();
                if (eventCtrl != null)
                {
                    // on est en train de visionner l'image, on récupère la manette en train de tenir le VM afin de récupérer les swipes sur le pavé tactile
                    eventCtrl.axisFidelity = 5;
                    bool wasPressing = pressingButton;
                    pressingButton = eventCtrl.IsButtonPressed(VRTK.VRTK_ControllerEvents.ButtonAlias.Touchpad_Touch);
                    if (pressingButton && !wasPressing)
                    {
                        lastRotation = eventCtrl.GetTouchpadAxisAngle();
                    }
                    if (pressingButton && false)
                    {
                        // en train de faire un swipe
                        float currentPadRotation = eventCtrl.GetTouchpadAxisAngle();
                        if (lastRotation - currentPadRotation < 180 && lastRotation - currentPadRotation > -180)
                        {
                            currentClipRotation += (lastRotation - currentPadRotation) * rotateSensitivity;
                        }
                        if (lastControllerActions != null && ((int)(currentPadRotation) / 275) != ((int)(lastRotation) / 275))
                        {
                            triggerAnimator.SetTrigger("Trigger");
                        }
                        lastRotation = currentPadRotation;

                        viewmasterGrabbableClipRotation.transform.localRotation = Quaternion.Euler(currentClipRotation, 0, 0);
                    }
                }
            }
        }
    }
        private void StartUseAction(Transform target)
        {
            interactableObject = target.GetComponent<VRTK_InteractableObject>();
            bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed());

            if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed)
            {
                interactableObject.StartUsing(gameObject);
            }
        }
예제 #12
0
        protected virtual bool FloorIsGrabbedObject(RaycastHit collidedObj)
        {
            VRTK_InteractableObject obj = collidedObj.transform.GetComponent <VRTK_InteractableObject>();

            return(obj && obj.IsGrabbed());
        }
예제 #13
0
 protected virtual bool ValidSnapObject(VRTK_InteractableObject interactableObjectCheck, bool grabState, bool checkGrabState = true)
 {
     return(interactableObjectCheck != null && (!checkGrabState || interactableObjectCheck.IsGrabbed() == grabState) && !VRTK_PolicyList.Check(interactableObjectCheck.gameObject, validObjectListPolicy));
 }
예제 #14
0
        private void StartUseAction(Transform target)
        {
            interactableObject = target.GetComponent <VRTK_InteractableObject>();
            bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed());

            if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed)
            {
                if (lastUsed != target)
                {
                    Events.OnStartUse_UIObject(target);
                    lastUsed = target;
                }
                // interactableObject.StartUsing(gameObject);
            }
        }
예제 #15
0
 public bool IsHeld()
 {
     return(interact.IsGrabbed());
 }
예제 #16
0
        protected virtual void PointerIn()
        {
            // 射线没有击中任何东西则返回
            if (!enabled || !pointerContactTarget)
            {
                return;
            }

            // 回调委托给自己的事件
            OnDestinationMarkerEnter(SetDestinationMarkerEvent(pointerContactDistance, pointerContactTarget, destinationPosition, controllerIndex));

            // 获取被击中物体的VRTK_InteractableObject脚本,如果不能交互则获取不到,为null
            interactableObject = pointerContactTarget.GetComponent <VRTK_InteractableObject>();

            // 判断这个物体的交互方式,如果此物体只有被抓取才能交互则为true
            bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed());

            //使用物体
            if (interactableObject && interactableObject.pointerActivatesUseAction && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed)
            {
                interactableObject.StartUsing(gameObject);
            }
        }
예제 #17
0
 // Token: 0x0600156C RID: 5484 RVA: 0x00075F7C File Offset: 0x0007417C
 public virtual void ToggleControllerOnUse(bool showController, GameObject usingObject, GameObject ignoredObject)
 {
     if (this.hideControllerOnUse)
     {
         VRTK_InteractableObject vrtk_InteractableObject = (ignoredObject != null) ? ignoredObject.GetComponentInParent <VRTK_InteractableObject>() : null;
         if (showController && ((!this.grabControllerShow && vrtk_InteractableObject && vrtk_InteractableObject.IsGrabbed(null)) || (!this.touchControllerShow && vrtk_InteractableObject && vrtk_InteractableObject.IsTouched())))
         {
             return;
         }
         this.ToggleController(showController, usingObject, ignoredObject, this.hideDelayOnUse);
         if (showController)
         {
             this.OnVisibleOnUse(this.SetEventPayload(usingObject, ignoredObject));
             return;
         }
         this.OnHiddenOnUse(this.SetEventPayload(usingObject, ignoredObject));
     }
 }
예제 #18
0
        private void StartUseAction(Transform target)
        {
            interactableObject = target.GetComponent <VRTK_InteractableObject>();
            bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed());

            if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed && interactableObject.usingState == 0)
            {
                interactableObject.StartUsing(controller.gameObject);
                interactableObject.usingState++;
            }
        }
예제 #19
0
        // Token: 0x060016BB RID: 5819 RVA: 0x0007AA4A File Offset: 0x00078C4A
        protected virtual IEnumerator AutoGrab()
        {
            yield return(new WaitForEndOfFrame());

            this.interactTouch = ((this.interactTouch != null) ? this.interactTouch : base.GetComponentInParent <VRTK_InteractTouch>());
            this.interactGrab  = ((this.interactGrab != null) ? this.interactGrab : base.GetComponentInParent <VRTK_InteractGrab>());
            if (this.interactTouch == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, new object[]
                {
                    "VRTK_ObjectAutoGrab",
                    "VRTK_InteractTouch",
                    "interactTouch",
                    "the same or parent"
                }));
            }
            if (this.interactGrab == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, new object[]
                {
                    "VRTK_ObjectAutoGrab",
                    "VRTK_InteractGrab",
                    "interactGrab",
                    "the same or parent"
                }));
            }
            if (this.objectToGrab == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.NOT_DEFINED, new object[]
                {
                    "objectToGrab"
                }));
                yield break;
            }
            while (this.interactGrab.controllerAttachPoint == null)
            {
                yield return(true);
            }
            bool disableWhenIdle = this.objectToGrab.disableWhenIdle;

            if (this.objectIsPrefab)
            {
                this.objectToGrab.disableWhenIdle = false;
            }
            VRTK_InteractableObject vrtk_InteractableObject = this.objectToGrab;

            if (this.alwaysCloneOnEnable)
            {
                this.ClearPreviousClone();
            }
            if (!this.interactGrab.GetGrabbedObject())
            {
                if (this.cloneGrabbedObject)
                {
                    if (this.previousClonedObject == null)
                    {
                        vrtk_InteractableObject   = Object.Instantiate <VRTK_InteractableObject>(this.objectToGrab);
                        this.previousClonedObject = vrtk_InteractableObject;
                    }
                    else
                    {
                        vrtk_InteractableObject = this.previousClonedObject;
                    }
                }
                if (vrtk_InteractableObject.isGrabbable && !vrtk_InteractableObject.IsGrabbed(null))
                {
                    vrtk_InteractableObject.transform.position = base.transform.position;
                    this.interactTouch.ForceStopTouching();
                    this.interactTouch.ForceTouch(vrtk_InteractableObject.gameObject);
                    this.interactGrab.AttemptGrab();
                    this.OnObjectAutoGrabCompleted();
                }
            }
            this.objectToGrab.disableWhenIdle       = disableWhenIdle;
            vrtk_InteractableObject.disableWhenIdle = disableWhenIdle;
            yield break;
        }
        protected virtual IEnumerator AutoGrab()
        {
            yield return(new WaitForEndOfFrame());

            interactTouch = (interactTouch != null ? interactTouch : GetComponentInParent <VRTK_InteractTouch>());
            interactGrab  = (interactGrab != null ? interactGrab : GetComponentInParent <VRTK_InteractGrab>());

            if (interactTouch == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractTouch", "interactTouch", "the same or parent"));
            }

            if (interactGrab == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractGrab", "interactGrab", "the same or parent"));
            }

            if (objectToGrab == null)
            {
                VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.NOT_DEFINED, "objectToGrab"));
                yield break;
            }

            while (interactGrab.controllerAttachPoint == null)
            {
                yield return(true);
            }

            bool grabbableObjectDisableState = objectToGrab.disableWhenIdle;

            if (objectIsPrefab)
            {
                objectToGrab.disableWhenIdle = false;
            }

            VRTK_InteractableObject grabbableObject = objectToGrab;

            if (alwaysCloneOnEnable)
            {
                ClearPreviousClone();
            }

            if (!interactGrab.GetGrabbedObject())
            {
                if (cloneGrabbedObject)
                {
                    if (previousClonedObject == null)
                    {
                        grabbableObject      = Instantiate(objectToGrab);
                        previousClonedObject = grabbableObject;
                    }
                    else
                    {
                        grabbableObject = previousClonedObject;
                    }
                }

                if (grabbableObject.isGrabbable && !grabbableObject.IsGrabbed())
                {
                    grabbableObject.transform.position = transform.position;
                    interactTouch.ForceStopTouching();
                    interactTouch.ForceTouch(grabbableObject.gameObject);
                    interactGrab.AttemptGrab();
                    OnObjectAutoGrabCompleted();
                }
            }
            objectToGrab.disableWhenIdle    = grabbableObjectDisableState;
            grabbableObject.disableWhenIdle = grabbableObjectDisableState;
        }
예제 #21
0
        protected virtual void PointerIn()
        {
            if (!enabled || !pointerContactTarget)
            {
                return;
            }

            OnDestinationMarkerEnter(SetDestinationMarkerEvent(pointerContactDistance, pointerContactTarget, destinationPosition, controllerIndex));

            interactableObject = pointerContactTarget.GetComponent <VRTK_InteractableObject>();
            bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed());

            if (interactableObject && interactableObject.pointerActivatesUseAction && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed)
            {
                interactableObject.StartUsing(gameObject);
            }
        }
 protected virtual void RegrabUndroppableObject()
 {
     if (undroppableGrabbedObject != null)
     {
         VRTK_InteractableObject undroppableGrabbedObjectScript = undroppableGrabbedObject.GetComponent <VRTK_InteractableObject>();
         if (interactTouch != null && undroppableGrabbedObjectScript != null && !undroppableGrabbedObjectScript.IsGrabbed())
         {
             undroppableGrabbedObject.SetActive(true);
             interactTouch.ForceTouch(undroppableGrabbedObject);
             AttemptGrab();
         }
     }
     else
     {
         undroppableGrabbedObject = null;
     }
 }
예제 #23
0
        // Token: 0x060015ED RID: 5613 RVA: 0x00077A28 File Offset: 0x00075C28
        protected virtual void OnTriggerEnter(Collider collider)
        {
            GameObject gameObject = this.TriggerStart(collider);
            VRTK_InteractableObject vrtk_InteractableObject = (this.touchedObject != null) ? this.touchedObject.GetComponent <VRTK_InteractableObject>() : null;

            if (this.touchedObject != null && gameObject != null && this.touchedObject != gameObject && vrtk_InteractableObject != null && !vrtk_InteractableObject.IsGrabbed(null))
            {
                base.CancelInvoke("ResetTriggerRumble");
                this.ResetTriggerRumble();
                this.ForceStopTouching();
                this.triggerIsColliding = true;
            }
        }