private void OnHandInteractionStateChanged(GameObject target, PalmState fromState, PalmState toState)
        {
            if (!_stereoCameraObjectOutline)
            {
                _stereoCameraObjectOutline = GameObject.FindObjectOfType <StereoCameraObjectOutline>();
                if (!_stereoCameraObjectOutline)
                {
                    return;
                }
            }

            InteractionObjectOutlineSettings settings = target.GetComponent <InteractionObjectOutlineSettings>();

            if (settings)
            {
                OutlineObjectVisualDecorator decorator = target.GetComponent <OutlineObjectVisualDecorator>();
                if (!decorator)
                {
                    decorator           = target.AddComponent <OutlineObjectVisualDecorator>();
                    decorator.hideFlags = HideFlags.HideInInspector;
                }

                //Add or remove based on the event
                decorator.ChangeColorBasedOnState(toState);
                if (toState == PalmState.Idle)
                {
                    _stereoCameraObjectOutline.RemoveOutlinedObject(decorator);
                }
                else if ((toState == PalmState.Hovering || toState == PalmState.Grabbing) && fromState == PalmState.Idle)
                {
                    _stereoCameraObjectOutline.AddOutlinedObject(decorator);
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Adds an object to be outlined.
 /// </summary>
 /// <param name="decorator"></param>
 internal void AddOutlinedObject(OutlineObjectVisualDecorator decorator)
 {
     if (_decorators.Contains(decorator))
     {
         return;
     }
     _decorators.Add(decorator);
     DrawOutline(decorator);
 }
Пример #3
0
 /// <summary>
 /// Removes an object from those to be outlined.
 /// </summary>
 /// <param name="decorator"></param>
 internal void RemoveOutlinedObject(OutlineObjectVisualDecorator decorator)
 {
     if (_decorators.Remove(decorator))
     {
         _renderCommands.Clear();
         foreach (var dec in _decorators)
         {
             DrawOutline(dec);
         }
     }
 }
Пример #4
0
        private void DrawOutline(OutlineObjectVisualDecorator decorator)
        {
            List <GameObject> objectsToOutline = decorator.GetObjectsToDecorate();

            foreach (var go in objectsToOutline)
            {
                Renderer renderer = go.GetComponent <Renderer>();
                if (renderer)
                {
                    for (int i = 0; i < renderer.sharedMaterials.Length; ++i)
                    {
                        _renderCommands.DrawRenderer(renderer, decorator.OutlineMaterial, i);
                    }
                }
            }
        }