public void AddRenderer(Renderer renderer, AffordanceVisibilityDefinition definition) { foreach (var material in renderer.sharedMaterials) { AddMaterialData(material, default(VRControl), renderer, null, definition); } }
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; }
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); } }
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); }
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); } }
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; }
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); }
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); } } }
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; } } }