Пример #1
0
        // Token: 0x060018DE RID: 6366 RVA: 0x00084848 File Offset: 0x00082A48
        protected virtual void PointerSet()
        {
            if (!base.enabled || !this.destinationSetActive || !this.pointerContactTarget || !this.CanActivate() || this.InvalidConstantBeam())
            {
                return;
            }
            this.activateDelayTimer = Time.time + this.activateDelay;
            VRTK_InteractableObject component = this.pointerContactTarget.GetComponent <VRTK_InteractableObject>();

            if (this.PointerActivatesUseAction(component))
            {
                if (component.IsUsing(null))
                {
                    component.StopUsing(this.controller.gameObject);
                    this.interactableObject.usingState = 0;
                }
                else if (!component.holdButtonToUse)
                {
                    component.StartUsing(this.controller.gameObject);
                    this.interactableObject.usingState++;
                }
            }
            if ((!this.playAreaCursor || !this.playAreaCursor.HasCollided()) && !this.PointerActivatesUseAction(this.interactableObject))
            {
                this.OnDestinationMarkerSet(this.SetDestinationMarkerEvent(this.pointerContactDistance, this.pointerContactTarget, this.pointerContactRaycastHit, this.destinationPosition, this.controllerReference, false, null));
            }
            if (!this.isActive)
            {
                this.destinationSetActive = false;
            }
        }
Пример #2
0
        protected virtual void PointerSet()
        {
            if (!isActive || !pointerContactTarget)
            {
                return;
            }

            VRTK_InteractableObject interactableObject = pointerContactTarget.GetComponent <VRTK_InteractableObject>();

            if (interactableObject && interactableObject.pointerActivatesUseAction)
            {
                if (interactableObject.IsUsing())
                {
                    interactableObject.StopUsing(this.gameObject);
                }
                else if (!interactableObject.holdButtonToUse)
                {
                    interactableObject.StartUsing(this.gameObject);
                }
            }

            if (!playAreaCursorCollided && (interactableObject == null || !interactableObject.pointerActivatesUseAction))
            {
                OnDestinationMarkerSet(SeDestinationMarkerEvent(pointerContactDistance, pointerContactTarget, destinationPosition, controllerIndex));
            }
        }
Пример #3
0
 protected virtual void StopUseAction()
 {
     if (interactUse != null && PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && pointerInteractableObject.IsUsing())
     {
         pointerInteractableObject.StopUsing(interactUse);
         pointerInteractableObject.usingState = 0;
     }
 }
Пример #4
0
 protected virtual void StopUseAction()
 {
     if (PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && pointerInteractableObject.IsUsing())
     {
         pointerInteractableObject.StopUsing(controller.gameObject);
         pointerInteractableObject.usingState = 0;
     }
 }
Пример #5
0
        protected virtual void GrabHighlightObject(object sender, InteractableObjectEventArgs e)
        {
            VRTK_InteractableObject interactableObject = sender as VRTK_InteractableObject;

            if (!interactableObject.IsUsing())
            {
                Highlight(grabHighlight);
                OnInteractObjectHighlighterHighlighted(SetEventArgs(VRTK_InteractableObject.InteractionType.Grab, e.interactingObject));
            }
        }
Пример #6
0
 protected virtual void ControllerUntouchInteractableObject(object sender, ObjectInteractEventArgs e)
 {
     if (e.target != null)
     {
         VRTK_InteractableObject touchedObjectScript = e.target.GetComponent <VRTK_InteractableObject>();
         if (touchedObjectScript != null && !touchedObjectScript.IsUsing() && savedUseButton != VRTK_ControllerEvents.ButtonAlias.Undefined)
         {
             useButton      = savedUseButton;
             savedUseButton = VRTK_ControllerEvents.ButtonAlias.Undefined;
         }
     }
 }
Пример #7
0
 // Token: 0x06001620 RID: 5664 RVA: 0x0007862C File Offset: 0x0007682C
 protected virtual void ControllerUntouchInteractableObject(object sender, ObjectInteractEventArgs e)
 {
     if (e.target != null)
     {
         VRTK_InteractableObject component = e.target.GetComponent <VRTK_InteractableObject>();
         if (component != null && !component.IsUsing(null) && this.savedUseButton != VRTK_ControllerEvents.ButtonAlias.Undefined)
         {
             this.useButton      = this.savedUseButton;
             this.savedUseButton = VRTK_ControllerEvents.ButtonAlias.Undefined;
         }
     }
 }
Пример #8
0
 protected virtual void CheckUse(GameObject interactingObject)
 {
     if (useOnTouchWhen != AutoInteractions.Never && reuseTimer < Time.time)
     {
         VRTK_InteractUse interactUseScript = interactingObject.GetComponentInChildren <VRTK_InteractUse>();
         if (interactUseScript != null && (useOnTouchWhen == AutoInteractions.NoButtonHeld || (useOnTouchWhen == AutoInteractions.ButtonHeld && interactUseScript.IsUseButtonPressed())))
         {
             if (!interactableObject.holdButtonToUse && interactableObject.IsUsing())
             {
                 interactableObject.ForceStopInteracting();
             }
             else
             {
                 interactUseScript.AttemptUse();
             }
         }
     }
 }
Пример #9
0
 protected virtual void InteractableObjectUngrabbed(object sender, InteractableObjectEventArgs e)
 {
     if (IsValidInteractingObject(e.interactingObject, validGrabInteractingObject))
     {
         GameObject grabAffectedObject = (objectToAffect == null ? GetActualController(e.interactingObject) : objectToAffect);
         CancelRoutines(grabAffectedObject);
         if (objectToMonitor.IsUsing())
         {
             VRTK_SharedMethods.AddDictionaryValue(affectingRoutines, grabAffectedObject, StartCoroutine(ToggleStateAfterTime(grabAffectedObject, gameObjectActiveOnUse, rendererVisibleOnUse, ungrabAppearanceDelay, VRTK_InteractableObject.InteractionType.Ungrab)), true);
         }
         else if (objectToMonitor.IsTouched())
         {
             VRTK_SharedMethods.AddDictionaryValue(affectingRoutines, grabAffectedObject, StartCoroutine(ToggleStateAfterTime(grabAffectedObject, gameObjectActiveOnTouch, rendererVisibleOnTouch, ungrabAppearanceDelay, VRTK_InteractableObject.InteractionType.Ungrab)), true);
         }
         else if (objectToMonitor.IsNearTouched())
         {
             VRTK_SharedMethods.AddDictionaryValue(affectingRoutines, grabAffectedObject, StartCoroutine(ToggleStateAfterTime(grabAffectedObject, gameObjectActiveOnNearTouch, rendererVisibleOnNearTouch, ungrabAppearanceDelay, VRTK_InteractableObject.InteractionType.NearTouch)), true);
         }
         else
         {
             VRTK_SharedMethods.AddDictionaryValue(affectingRoutines, grabAffectedObject, StartCoroutine(ToggleStateAfterTime(grabAffectedObject, gameObjectActiveByDefault, rendererVisibleByDefault, ungrabAppearanceDelay, VRTK_InteractableObject.InteractionType.Ungrab)), true);
         }
     }
 }
Пример #10
0
        protected virtual void TogglePointer(bool state)
        {
            if (interactWithObjects)
            {
                objectInteractor.SetActive(state);
            }

            if (playAreaCursor)
            {
                playAreaCursor.SetHeadsetPositionCompensation(headsetPositionCompensation);
                playAreaCursor.ToggleState(state);
            }

            if (!state && PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && interactableObject.IsUsing())
            {
                interactableObject.StopUsing(gameObject);
            }
        }
Пример #11
0
        protected virtual void TogglePointer(bool state)
        {
            var playAreaState = (showPlayAreaCursor ? state : false);

            if (playAreaCursor)
            {
                playAreaCursor.gameObject.SetActive(playAreaState);
            }
            if (!state && PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && interactableObject.IsUsing())
            {
                interactableObject.StopUsing(gameObject);
            }
        }
Пример #12
0
        /// <summary>
        /// 指示线开关的时候要处理play area cursor的显示/消失和物体交互
        /// </summary>
        /// <param name="state">指示线开关状态</param>
        protected virtual void TogglePointer(bool state)
        {
            // 如果play area cursor可用,那么根据射线开,area显示,射线关,area不显示;如果不可用,那么一直为false
            var playAreaState = (showPlayAreaCursor ? state : false);

            if (playAreaCursor)
            {
                playAreaCursor.gameObject.SetActive(playAreaState);
            }
            if (!state && interactableObject && interactableObject.pointerActivatesUseAction && interactableObject.holdButtonToUse && interactableObject.IsUsing())
            {
                //如果射线关闭,停止物体交互
                interactableObject.StopUsing(this.gameObject);
            }
        }