private void OnTriggerEnter(Collider collider)
        {
            HandFeature handFeature = collider.GetComponent <HandFeature>();

            if (handFeature != null && IsAllowedType(handFeature))
            {
                if (_firstHandFeatureEnterEvent != null && _handFeatureList.Count == 0)
                {
                    transform.localScale = Vector3.Scale(transform.localScale, _expandOnEntry);
                    _firstHandFeatureEnterEvent.Invoke(handFeature);
                }
                if (_handFeatureEnterEvent != null)
                {
                    _handFeatureEnterEvent.Invoke(handFeature);
                }

                _handFeatureList.Add(handFeature);

                if (!_twoHandsEntered && HandCount > 1)
                {
                    _twoHandsEntered = true;
                    if (_twoHandEnterEvent != null)
                    {
                        _twoHandEnterEvent.Invoke(this);
                    }
                }
            }
        }
        private void OnHandExit(HandFeature handFeature)
        {
            if (handFeature != null)
            {
                _handFeatureList.Remove(handFeature);
            }

            if (_lastHandFeatureExitEvent != null && HandCount == 0)
            {
                transform.localScale = _initialScale;
                _lastHandFeatureExitEvent.Invoke(handFeature);
            }

            if (_handFeatureExitEvent != null)
            {
                _handFeatureExitEvent.Invoke(handFeature);
            }

            if (_twoHandsEntered && HandCount < 2)
            {
                _twoHandsEntered = false;
                if (_twoHandExitEvent != null)
                {
                    _twoHandExitEvent.Invoke(this);
                }
            }
        }
        private void OnTriggerExit(Collider collider)
        {
            HandFeature handFeature = collider.GetComponent <HandFeature>();

            if (handFeature != null && IsAllowedType(handFeature))
            {
                OnHandExit(handFeature);
            }
        }
        /// <summary>
        /// Determines if HandTrigger contains hand.
        /// </summary>
        /// <param name="handFeature"> HandFeature to find. </param>
        /// <returns> HandFeature if found, otherwise null. </returns>
        public bool ContainsHand(HandFeature handFeature)
        {
            for (int i = 0; i < _handFeatureList.Count; ++i)
            {
                if (_handFeatureList[i] == handFeature)
                {
                    return(true);
                }
            }

            return(false);
        }
        private void OnTriggerExit(Collider collider)
        {
            if (!_triggerWhenDisabled && !enabled)
            {
                return;
            }

            HandFeature handFeature = collider.GetComponent <HandFeature>();

            if (handFeature != null && IsAllowedType(handFeature))
            {
                OnHandExit(handFeature);
            }
        }
        private bool IsAllowedType(HandFeature handFeature)
        {
            switch (_allowedFeatureType)
            {
            case HandFeatureType.Any:
                return(true);

            case HandFeatureType.PalmFeature:
                return(handFeature is CenterHandFeature);

            case HandFeatureType.TopFeature:
                return(handFeature is TopHandFeature);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 private void OnRelease(HandFeature handFeature)
 {
     PlayAudioClip(false);
 }
 private void OnGrab(HandFeature handFeature)
 {
     PlayAudioClip(true);
 }