// 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; } }
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)); } }
protected virtual void StopUseAction() { if (interactUse != null && PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && pointerInteractableObject.IsUsing()) { pointerInteractableObject.StopUsing(interactUse); pointerInteractableObject.usingState = 0; } }
protected virtual void StopUseAction() { if (PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && pointerInteractableObject.IsUsing()) { pointerInteractableObject.StopUsing(controller.gameObject); pointerInteractableObject.usingState = 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)); } }
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; } } }
// 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; } } }
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(); } } } }
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); } } }
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); } }
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); } }
/// <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); } }