Example #1
0
        /// <summary>
        /// It saves the reference to objects passed as arguments for later use.
        /// </summary>
        /// <param name="isRight">Whether this picker is for right hand.</param>
        /// <param name="triggerColliderModel">The trigger collider hand model.</param>
        /// <param name="palmCenterTransform">Transform of the palm center.</param>
        /// <param name="handControllerSettings">Hand controller settings that allow modification.</param>
        public void AttachHandController(bool isRight, UnityHandModel triggerColliderModel,
                                         Transform palmCenterTransform, IHandControllerSettings handControllerSettings)
        {
            if (triggerColliderModel == null)
            {
                Debug.LogError("Trigger collider model is null");
                return;
            }
            int n = triggerColliderModel.Fingers.Length;

            for (int i = 0; i < n; i++)
            {
                UnityFingerModel fingerModel          = triggerColliderModel.Fingers[i];
                IFingerTriggerColliderManager manager =
                    fingerModel.Finger.GetComponent <IFingerTriggerColliderManager>();
                if (manager == null)
                {
                    Debug.LogErrorFormat("Unable to find trigger collider manager on finger {0}", i);
                }
                _fingerTriggers[i] = manager;
            }
            PalmCenter         = palmCenterTransform;
            _handRootTransform = triggerColliderModel.HandRootTransform;
            _initialized       = true;
            FindSnapper(isRight, _handRootTransform, palmCenterTransform, handControllerSettings);
            FindTriggeringTouchableManager(triggerColliderModel.Hand);
        }
Example #2
0
        /// <summary>
        /// Update touched object's color if needed.
        /// </summary>
        private void UpdateTouchedObjectColor()
        {
            _touchableSet.Clear();
            int n = _fingerTriggers.Length;

            // Collect all objects touched with finger colliders.
            for (int i = 0; i < n; i++)
            {
                IFingerTriggerColliderManager fingerTrigger = _fingerTriggers[i];
                if (fingerTrigger == null)
                {
                    Debug.LogError("Finger trigger is null.");
                    return;
                }
                HashSet <ITouchableForceFeedback> fingerTouchableSet;
                if (fingerTrigger.CheckTouching(out fingerTouchableSet))
                {
                    _touchableSet.UnionWithCast(fingerTouchableSet);
                }
            }
            // Collect all objects touched by picking prediction indicator.
            if (_pickingPredictionIndicatorManager != null)
            {
                HashSet <ITouchableForceFeedback> triggeringTouchable =
                    _pickingPredictionIndicatorManager.GetTriggeringObject();
                _touchableSet.UnionWithCast(triggeringTouchable);
            }
            // Update color.
            _colorModifier.UpdateTouchedObjectColor(_touchableSet);
        }