Exemplo n.º 1
0
 public void AddRenderer(Renderer renderer, AffordanceVisibilityDefinition definition)
 {
     foreach (var material in renderer.sharedMaterials)
     {
         AddMaterialData(material, default(VRControl), renderer, null, definition);
     }
 }
Exemplo n.º 2
0
                public void AddAffordance(Material material, VRControl control, Renderer renderer,
                                          AffordanceTooltip[] tooltips, AffordanceVisibilityDefinition definition)
                {
                    var key = (int)control;

                    if (m_AffordanceVisibilityStates.ContainsKey(key))
                    {
                        Debug.LogWarning("Multiple affordaces added to " + this + " for " + control);
                    }

                    m_AffordanceVisibilityStates[key] = new VisibilityState(renderer, tooltips, definition, material);

                    switch (definition.visibilityType)
                    {
                    case VisibilityControlType.AlphaProperty:
                        m_OriginalColor = material.GetFloat(definition.alphaProperty) * Color.white;
                        break;

                    case VisibilityControlType.ColorProperty:
                        m_OriginalColor = material.GetColor(definition.colorProperty);
                        break;
                    }

                    m_StartColor   = m_OriginalColor;
                    m_CurrentColor = m_StartColor;
                }
Exemplo n.º 3
0
        void Update()
        {
            var cameraPosition = CameraUtils.GetMainCamera().transform.position;
            var direction      = GetFacingDirection(cameraPosition);

            if (m_FacingDirection != direction)
            {
                m_FacingDirection = direction;
                UpdateFacingDirection(direction);
            }

            AffordanceVisibilityDefinition bodyVisibility = null;

            foreach (var tuple in m_BodyData)
            {
                if (tuple.secondElement.GetVisibility())
                {
                    bodyVisibility = m_AffordanceMap.bodyVisibilityDefinition;
                    break;
                }
            }

            var time = Time.time;

            foreach (var kvp in m_AffordanceData)
            {
                kvp.Value.Update(kvp.Key, time, m_FadeInDuration, m_FadeOutDuration, this, bodyVisibility);
            }

            foreach (var tuple in m_BodyData)
            {
                tuple.secondElement.Update(tuple.firstElement, time, m_FadeInDuration, m_FadeOutDuration, this);
            }
        }
Exemplo n.º 4
0
 public VisibilityState(Renderer renderer, AffordanceTooltip[] tooltips, AffordanceVisibilityDefinition definition, Material material)
 {
     m_Tooltips      = tooltips;
     m_Definition    = definition;
     m_Material      = material;
     m_MaterialIndex = Array.IndexOf(renderer.sharedMaterials, material);
 }
Exemplo n.º 5
0
 public void Update(Renderer renderer, float time, float fadeInDuration, float fadeOutDuration,
                    ProxyNode proxyNode, AffordanceVisibilityDefinition visibilityOverride = null)
 {
     foreach (var kvp in m_MaterialDictionary)
     {
         kvp.Value.Update(renderer, kvp.Key, time, fadeInDuration, fadeOutDuration, proxyNode, visibilityOverride);
     }
 }
Exemplo n.º 6
0
                    public VisibilityState(Renderer renderer, AffordanceTooltip[] tooltips, AffordanceVisibilityDefinition definition, Material material)
                    {
                        m_Tooltips      = tooltips;
                        m_Definition    = definition;
                        m_Material      = material;
                        m_MaterialIndex = Array.IndexOf(renderer.sharedMaterials, material);

                        // Cache delegate versions of SetFloat and SetColor to avoid GC when used in AnimateProperty
                        m_SetFloat = SetFloat;
                        m_SetColor = SetColor;
                    }
Exemplo n.º 7
0
            void AddMaterialData(Material material, VRControl control, Renderer renderer, AffordanceTooltip[] tooltips,
                                 AffordanceVisibilityDefinition definition)
            {
                MaterialData materialData;

                if (!m_MaterialDictionary.TryGetValue(material, out materialData))
                {
                    materialData = new MaterialData();
                    m_MaterialDictionary[material] = materialData;
                }

                materialData.AddAffordance(material, control, renderer, tooltips, definition);
            }
Exemplo n.º 8
0
            public void AddAffordance(Affordance affordance, AffordanceVisibilityDefinition definition)
            {
                var control        = affordance.control;
                var targetMaterial = affordance.material;
                var renderer       = affordance.renderer;
                var tooltips       = affordance.tooltips;

                if (targetMaterial != null)
                {
                    AddMaterialData(targetMaterial, control, renderer, tooltips, definition);
                }
                else
                {
                    foreach (var material in renderer.sharedMaterials)
                    {
                        AddMaterialData(material, control, renderer, tooltips, definition);
                    }
                }
            }
Exemplo n.º 9
0
                public void Update(Renderer renderer, Material material, float time, float fadeInDuration, float fadeOutDuration,
                                   ProxyNode proxyNode, AffordanceVisibilityDefinition visibilityOverride)
                {
                    VisibilityState visibilityState = null;
                    var             definition      = visibilityOverride;
                    var             hideTime        = 0f;

                    if (definition == null)
                    {
                        foreach (var kvp in m_AffordanceVisibilityStates)
                        {
                            var state = kvp.Value;
                            if (state.visible)
                            {
                                if (state.hideTime > hideTime)
                                {
                                    definition      = state.definition;
                                    hideTime        = state.visibleDuration > 0 ? state.hideTime : 0;
                                    visibilityState = state;
                                }
                            }
                        }
                    }

                    var visible = definition != null;

                    if (!visible)
                    {
                        foreach (var kvp in m_AffordanceVisibilityStates)
                        {
                            visibilityState = kvp.Value;
                            definition      = visibilityState.definition;
                            break;
                        }
                    }

                    var fadeDuration = visible ? fadeInDuration : fadeOutDuration;

                    switch (definition.visibilityType)
                    {
                    case VisibilityControlType.AlphaProperty:
                        if (visibilityState == null)
                        {
                            var kvp = new KeyValuePair <Material, string>(material, definition.alphaProperty);
                            if (!m_VisibilityStates.TryGetValue(kvp, out visibilityState))
                            {
                                visibilityState         = new VisibilityState(renderer, null, definition, material);
                                m_VisibilityStates[kvp] = visibilityState;
                            }
                        }

                        TransitionUtils.AnimateProperty(time, visible, ref m_WasVisible, ref m_VisibleChangeTime,
                                                        ref m_CurrentColor.a, ref m_StartColor.a, definition.hiddenColor.a, m_OriginalColor.a,
                                                        fadeDuration, Mathf.Approximately, TransitionUtils.GetPercentage, Mathf.Lerp,
                                                        visibilityState.setFloat, false);
                        break;

                    case VisibilityControlType.ColorProperty:
                        if (visibilityState == null)
                        {
                            var kvp = new KeyValuePair <Material, string>(material, definition.alphaProperty);
                            if (!m_VisibilityStates.TryGetValue(kvp, out visibilityState))
                            {
                                visibilityState         = new VisibilityState(renderer, null, definition, material);
                                m_VisibilityStates[kvp] = visibilityState;
                            }
                        }

                        TransitionUtils.AnimateProperty(time, visible, ref m_WasVisible, ref m_VisibleChangeTime,
                                                        ref m_CurrentColor, ref m_StartColor, definition.hiddenColor, m_OriginalColor,
                                                        fadeDuration, TransitionUtils.Approximately, TransitionUtils.GetPercentage, Color.Lerp,
                                                        visibilityState.setColor, false);
                        break;
                    }

                    if (visible != m_WasVisible)
                    {
                        foreach (var kvp in m_AffordanceVisibilityStates)
                        {
                            visibilityState = kvp.Value;
                            if (visibilityState.definition.visibilityType == VisibilityControlType.MaterialSwap)
                            {
                                renderer.sharedMaterials[visibilityState.materialIndex] =
                                    visible ? material : visibilityState.definition.hiddenMaterial;
                            }
                        }
                    }

                    m_WasVisible = visible;

                    if (visible && hideTime > 0 && Time.time > hideTime)
                    {
                        foreach (var kvp in m_AffordanceVisibilityStates)
                        {
                            visibilityState = kvp.Value;
                            var tooltips = visibilityState.tooltips;
                            if (tooltips != null)
                            {
                                foreach (var tooltip in tooltips)
                                {
                                    if (tooltip)
                                    {
                                        proxyNode.HideTooltip(tooltip, true);
                                    }
                                }
                            }

                            proxyNode.SetHighlight(renderer.gameObject, false);

                            visibilityState.visible = false;
                        }
                    }
                }