Exemple #1
0
        private void Awake()
        {
            FingerGesturesModel parentModel = transform.parent.GetComponent <FingerGesturesModel>();

            if (parentModel && !DirectlyReferenced(parentModel) && !parentModel.extra.Contains(this))
            {
                parentModel.extra.Add(this);
            }
        }
        void UpdateFingerGestureGroup(FingerGesturesModel gestures)
        {
            UpdateGesture(gestures.pinch);
            UpdateGesture(gestures.flex);
            UpdateGesture(gestures.strength);
            UpdateGesture(gestures.palmLine);
            UpdateGesture(gestures.baseRotation);

            gestures.extra.ForEach(g => UpdateGesture(g));
        }
        void InitFingerGesture(FingerGesture gesture, FingerGesturesModel model)
        {
            if (!gesture || !model)
            {
                return;
            }

            gesture.model = model;
            gesture.InitGesture();
        }
Exemple #4
0
        bool DirectlyReferenced(FingerGesturesModel parentModel)
        {
            if (this == parentModel.pinch ||
                this == parentModel.flex ||
                this == parentModel.strength ||
                this == parentModel.palmLine ||
                this == parentModel.baseRotation)
            {
                return(true);
            }

            return(false);
        }
        void InitFingerGestureGroup(FingerGesturesModel gestures, FingerModel model)
        {
            if (gestures && model)
            {
                gestures.finger = model;

                InitFingerGesture(gestures.pinch, gestures);
                InitFingerGesture(gestures.flex, gestures);
                InitFingerGesture(gestures.strength, gestures);
                InitFingerGesture(gestures.palmLine, gestures);
                InitFingerGesture(gestures.baseRotation, gestures);

                gestures.extra.ForEach(g => InitFingerGesture(g, gestures));
            }
        }
Exemple #6
0
 public override sealed void Awake()
 {
     base.Awake();
     model = GetComponent <FingerGesturesModel>();
 }
Exemple #7
0
        public override sealed void FingerLerpUpdate()
        {
            base.FingerLerpUpdate();

            // Lerp
            if (_model.flex.lerp < conf.minFlexLerpToDisablePinch)
            {
                if (_model == _model.parent.thumb)
                {
                    _lerp = 0.0f;

                    for (int f = 0; f < _model.parent.fingers.Count; f++)
                    {
                        FingerGesturesModel finger = _model.parent.fingers[f];

                        if (finger == _model.parent.thumb || finger.pinch == null)
                        {
                            continue;
                        }

                        if (finger.pinch.lerp > _lerp)
                        {
                            _lerp = finger.pinch.lerp;
                        }
                    }
                }
                else
                {
                    minAbsDistance = conf.minPinchRelDistance * _model.finger.hand.totalScale;
                    maxAbsDistance = conf.maxPinchRelDistance * _model.finger.hand.totalScale;

                    distance = Vector3.Distance(_model.finger.tip.transformRef.position, _model.finger.hand.thumb.tip.transformRef.position);

                    _lerp = 1.0f - Mathf.InverseLerp(minAbsDistance, maxAbsDistance, distance);
                }
            }
            else
            {
                _lerp = 0.0f;
            }

            // Gesture intention
            if (providesIntention)
            {
                // Backup previous values
                wasIntentionallyActive = isIntentionallyActive;

                if (isActive)
                {
                    intentionTime = Mathf.Clamp(timeActive, 0.0f, conf.minTimeToIntention);
                }
                else if (intentionTime > 0.0f)
                {
                    intentionTime = Mathf.Clamp(intentionTime - Time.deltaTime, 0.0f, conf.minTimeToIntention);
                }

                _intentionLerp = Mathf.InverseLerp(0.0f, conf.minTimeToIntention, intentionTime);

                _isIntentionallyActive = intentionLerp >= 1.0f;
            }
        }