예제 #1
0
        private void ButtonDown(XRButtonDatum buttonDatum, XRInteractionEventReceiver receiver)
        {
//            if (_entered.Count > 0)
//            {
//                MovementInteraction.SetOverrideDampTarget(_auxTransform);
//            }
        }
예제 #2
0
        private void SendButtonHoldEvents(Collider targetCollider, XRButtonDatum datum)
        {
            GetInteractions(targetCollider, _recyclableInteractions);
            bool holdOccured = false;

            for (int i = 0; i < _recyclableInteractions.Count; ++i)
            {
                if (_recyclableInteractions[i].enabled &&
                    _recyclableInteractions[i].RecievesInput(datum.InputName) &&
                    _tagMask.CompareTags(_recyclableInteractions[i].gameObject))
                {
                    _recyclableInteractions[i].OnButtonHold(datum);
                    holdOccured = true;
                }
            }

            if (holdOccured && _dragHaptics)
            {
                _accumulatedDelta += datum.PressColliderPositionChildedToControllerDelta.magnitude;
                if (_accumulatedDelta > _dragTickSteps)
                {
                    _accumulatedDelta = 0;
                    ParentUserController.FireHapticKey("DragTick");
                }
            }
        }
예제 #3
0
        private void SendButtonUpEvents(Collider targetCollider, XRButtonDatum datum)
        {
            GetInteractions(targetCollider, _recyclableInteractions);
            bool releaseOccured = false;

            for (int i = 0; i < _recyclableInteractions.Count; ++i)
            {
                if (_recyclableInteractions[i].enabled &&
                    _recyclableInteractions[i].RecievesInput(datum.InputName) &&
                    _tagMask.CompareTags(_recyclableInteractions[i].gameObject))
                {
                    _recyclableInteractions[i].OnButtonUp(datum);
                    releaseOccured = true;
                }
            }

            if (releaseOccured)
            {
                if (_enterExitPressReleaseHaptics)
                {
                    ParentUserController.FireHapticKey("Release");
                }

                if (ButtonHeldCount == 0 && _soloCondition == SoloCondition.InteractorPressedOnInteraction)
                {
                    ParentUserController.SetSoloState(true, this);
                }
            }
        }
 private void ButtonDown(XRButtonDatum buttonDatum, XRInteractionEventReceiver receiver)
 {
     if (receiver.HeldButtons.Count == 1)
     {
         Detach();
     }
 }
 private void ButtonUp(XRButtonDatum buttonDatum, XRInteractionEventReceiver receiver)
 {
     if (_entered.Count > 0 && null == _attachedTo)
     {
         AttachTo(_entered[0]);
     }
 }
예제 #6
0
 public override void OnButtonDown(XRButtonDatum proximityButtonDatum)
 {
     if (proximityButtonDatum.InputName == _holdingButton)
     {
         _holding = true;
     }
 }
예제 #7
0
        private void OnButtonUp(XRInputName inputName)
        {
            //button up may get fired when this interactor is disabled
            //so which buttons are held, and have been released
            //must be checked so UnButtonUp does not get called twice
            XRButtonDatum datum = GetButtonDatum(inputName);

            if (_heldButtons.Contains(datum))
            {
                _heldButtons.Remove(datum);
                ButtonHeldCount--;

                if (null != datum.PressCollider)
                {
                    SendButtonUpEvents(datum.PressCollider, datum);
                    datum.ButtonUp();
                }

                if (ButtonHeldCount == 0)
                {
                    _events.LastButtonUp.Invoke(datum);
                }

                _events.ButtonUp.Invoke(datum);
            }
        }
        private void ButtonHold(XRButtonDatum buttonDatum)
        {
            Vector2 newOffset = _lineMaterial.mainTextureOffset;

            newOffset.x -= Time.deltaTime * _lineScrollMultiplier;
            _lineMaterial.mainTextureOffset = newOffset;

            _lineRenderer.positionCount = _flexLaserInteractor.StepCount;
            for (int i = 0; i < _flexLaserInteractor.StepCount; ++i)
            {
                _lineRenderer.SetPosition(i, _flexLaserInteractor.StepPoints[i]);
            }

            _teleportTargetInstance.transform.position = buttonDatum.ParentInteractor.CurrentHitRay.origin;
            _teleportTargetInstance.transform.up       = buttonDatum.ParentInteractor.CurrentHitRay.direction;

            if (IsCurrentInteractorPositionValid())
            {
                _lineRenderer.startColor      = _validStartColor;
                _lineRenderer.endColor        = _validEndColor;
                _teleportTargetMaterial.color = _validEndColor;
            }
            else
            {
                _lineRenderer.startColor      = _invalidStartColor;
                _lineRenderer.endColor        = _invalidEndColor;
                _teleportTargetMaterial.color = _invalidEndColor;
            }
        }
예제 #9
0
 private void ButtonHold(XRButtonDatum datum)
 {
     if (datum.InputName == _visualizeButtonPressHitRay && _hoverState == HoverState.Press)
     {
         _hitTargetInstance.transform.position = datum.RayHitChildedToPressGameObject.origin;
         _hitTargetInstance.transform.up       = datum.RayHitChildedToPressGameObject.direction;
     }
 }
예제 #10
0
 public override void OnButtonUp(XRButtonDatum proximityButtonDatum)
 {
     base.OnButtonUp(proximityButtonDatum);
     if (proximityButtonDatum.OverPressSurface())
     {
         _clicked.Invoke(proximityButtonDatum, this);
     }
 }
 private void ButtonDown(XRButtonDatum buttonDatum)
 {
     if (_teleportButton == buttonDatum.InputName)
     {
         _lineRenderer.enabled = true;
         _teleportTargetInstance.gameObject.SetActive(true);
     }
 }
        public virtual void OnButtonDown(XRButtonDatum buttonDatum)
        {
            _heldButtons.Add(buttonDatum);
            if (_heldButtons.Count == 1 && _hoveringCoroutine == null)
            {
                _hoveringCoroutine = StartCoroutine(HoveringCoroutine());
            }

            _events.ButtonDown.Invoke(buttonDatum, this);
        }
예제 #13
0
 private void ButtonUp(XRButtonDatum buttonDatum, XRInteractionEventReceiver receiver)
 {
     if (receiver.HeldButtons.Count == 0)
     {
         for (int i = 0; i < _lineRenderers.Length; ++i)
         {
             _lineRenderers[i].enabled = false;
         }
     }
 }
예제 #14
0
 private void ButtonDown(XRButtonDatum datum, XRInteractionEventReceiver receiver)
 {
     if (receiver.HeldButtons.Count == 1)
     {
         if (null != _guideVisual)
         {
             _guideVisual.gameObject.SetActive(false);
         }
         _drawHighlight = false;
     }
 }
예제 #15
0
 private void ButtonDown(XRButtonDatum datum)
 {
     if (datum.InputName == _visualizeButtonPressHitRay && datum.PressCollider != null)
     {
         _hoverState = HoverState.Press;
         _hitTargetMaterial.color = _pressEndColor;
         _hitTargetInstance.transform.localScale = new Vector3(
             _hitTargetScale * 1.5f,
             _hitTargetScale * 1.5f,
             _hitTargetScale * 1.5f);
     }
 }
예제 #16
0
 public override void OnButtonDown(XRButtonDatum buttonDatum)
 {
     base.OnButtonDown(buttonDatum);
     if (HeldButtons.Count == 1)
     {
         if (null != AttachedRigidbody)
         {
             AttachedRigidbody.isKinematic = true;
             AttachedRigidbody.useGravity  = false;
         }
     }
 }
예제 #17
0
        public override void OnButtonUp(XRButtonDatum proximityButtonDatum)
        {
            if (proximityButtonDatum.InputName == _holdingButton)
            {
                _holding = false;
            }

            if (_holding && proximityButtonDatum.InputName == _fireButton)
            {
                Instantiate(_instantiationPrefab, _spawnLocation.position, _spawnLocation.rotation);
            }
        }
예제 #18
0
 private void ButtonUp(XRButtonDatum datum, XRInteractionEventReceiver receiver)
 {
     if (receiver.HeldButtons.Count == 0)
     {
         if (null != _guideVisual && !Completed)
         {
             _guideVisual.gameObject.SetActive(true);
         }
         _drawHighlight = true;
         _grabCount++;
     }
 }
예제 #19
0
        private void OnButtonHold(XRInputName inputName)
        {
            XRButtonDatum datum = GetButtonDatum(inputName);

            if (null != datum.PressCollider)
            {
                datum.ButtonHold();
                SendButtonHoldEvents(datum.PressCollider, datum);
            }

            _events.ButtonHold.Invoke(datum);
        }
예제 #20
0
 private void ButtonUp(XRButtonDatum datum)
 {
     if (datum.InputName == _visualizeButtonPressHitRay && _hoverState == HoverState.Press)
     {
         _hoverState = HoverState.Hover;
         _hitTargetMaterial.color = _hoverEndColor;
         _hitTargetInstance.transform.localScale = new Vector3(
             _hitTargetScale,
             _hitTargetScale,
             _hitTargetScale);
     }
 }
        private void ButtonUp(XRButtonDatum buttonDatum)
        {
            if (_teleportButton == buttonDatum.InputName)
            {
                _lineRenderer.enabled = false;
                _teleportTargetInstance.gameObject.SetActive(false);

                if (IsCurrentInteractorPositionValid())
                {
                    _userRoot.TweenTranslation(TranslationToTarget());
                }
            }
        }
 private void ButtonUp(XRButtonDatum datum, XRInteractionEventReceiver receiver)
 {
     if (_states[ButtonToChiralityIndex(datum)] == HoverState.Press &&
         _interactionEventReceiver.enabled &&
         _interactionEventReceiver.HoveringInteractors.Contains(datum.ParentInteractor))
     {
         _states[ButtonToChiralityIndex(datum)] = HoverState.Hover;
     }
     else
     {
         _states[ButtonToChiralityIndex(datum)] = HoverState.Empty;
     }
 }
        public virtual void OnButtonUp(XRButtonDatum buttonDatum)
        {
            _heldButtons.Remove(buttonDatum);
            if (_hoveringInteractors.Count == 0 && _heldButtons.Count == 0)
            {
                if (null != _hoveringCoroutine)
                {
                    StopCoroutine(_hoveringCoroutine);
                }
                _hoveringCoroutine = null;
            }

            _events.ButtonUp.Invoke(buttonDatum, this);
        }
 private void ButtonUp(XRButtonDatum datum, XRInteractionEventReceiver receiver)
 {
     if (receiver.HeldButtons.Count == 0 && Activated)
     {
         if (null != _toolGuideVisual && !Completed)
         {
             _toolGuideVisual.gameObject.SetActive(true);
         }
         if (null != _torqueGuideVisual)
         {
             _torqueGuideVisual.gameObject.SetActive(false);
         }
         _drawToolHighlight = true;
     }
 }
        private void SetHighlightPositions(int index)
        {
            XRPhysicsInteractor interactor = _interactionEventReceiver.GetHoveringInteractor((Chirality)index + 1);
            XRButtonDatum       datum      = _interactionEventReceiver.GetHeldButton((Chirality)index + 1);

            if (null != datum)
            {
                _highlightMaterial.SetVector(
                    HighlightPropertyNames[index],
                    datum.RayHitChildedToPressGameObject.origin);
            }
            else if (null != interactor)
            {
                _highlightMaterial.SetVector(
                    HighlightPropertyNames[index],
                    interactor.CurrentSourceRay.origin);
            }
        }
예제 #26
0
        public override void OnButtonUp(XRButtonDatum buttonDatum)
        {
            base.OnButtonUp(buttonDatum);

            if (HeldButtons.Count == 0)
            {
                _setToInitialKinematicWhenNearInputTarget = false;
                if (null != AttachedRigidbody && null == _overrideDampTarget)
                {
                    AttachedRigidbody.isKinematic     = _initialIsKinematic || RetainIsKinematic;
                    AttachedRigidbody.useGravity      = _initialRigidyUseGravity;
                    AttachedRigidbody.velocity        = _moveVelocity;
                    AttachedRigidbody.angularVelocity = new Vector3(
                        _rotateVelocity.x * Mathf.Deg2Rad,
                        _rotateVelocity.y * Mathf.Deg2Rad,
                        _rotateVelocity.z * Mathf.Deg2Rad);
                }
            }
        }
예제 #27
0
        private void OnButtonDown(XRInputName inputName)
        {
            ButtonHeldCount++;
            XRButtonDatum datum = GetButtonDatum(inputName);

            _heldButtons.Add(datum);

            if (CanInteractWithCurrentGameObject())
            {
                datum.ButtonDown(CurrentCollider, CurrentHitRay);
                SendButtonDownEvents(CurrentCollider, datum);
            }

            if (ButtonHeldCount == 1)
            {
                _events.FirstButtonDown.Invoke(datum);
            }

            _events.ButtonDown.Invoke(datum);
        }
예제 #28
0
 public override void OnButtonUp(XRButtonDatum buttonDatum)
 {
     base.OnButtonUp(buttonDatum);
 }
예제 #29
0
 public override void OnButtonDown(XRButtonDatum buttonDatum)
 {
     base.OnButtonDown(buttonDatum);
     _priorAngle = YAngle();
     _deltaAngle = 0;
 }
예제 #30
0
 private void ButtonDown(XRButtonDatum buttonDatum, XRInteractionEventReceiver receiver)
 {
 }