/// <summary> /// Performs the animated ending of a button's highlighted state /// </summary> IEnumerator EndHighlight() { this.StopCoroutine(ref m_IconHighlightCoroutine); m_IconHighlightCoroutine = StartCoroutine(IconContainerContentsEndHighlight()); var transitionAmount = Time.deltaTime; var originalGradientPair = GetMaterialColors(); var targetGradientPair = normalGradientPair; var currentLocalScale = m_ContentContainer.localScale; var targetScale = m_OriginalContentContainerLocalScale; var highlightDuration = m_EndHighlightDuration > 0f ? m_EndHighlightDuration : 0.01f; // Add sane default if highlight duration is zero while (transitionAmount < highlightDuration) { var shapedTransitionAmount = MathUtilsExt.SmoothInOutLerpFloat(transitionAmount += Time.unscaledDeltaTime / highlightDuration); var transitioningGradientPair = GradientPair.Lerp(originalGradientPair, targetGradientPair, shapedTransitionAmount); SetMaterialColors(transitioningGradientPair); m_ContentContainer.localScale = Vector3.Lerp(currentLocalScale, targetScale, shapedTransitionAmount); yield return(null); } SetMaterialColors(normalGradientPair); m_ContentContainer.localScale = targetScale; m_HighlightCoroutine = null; }
/// <summary> /// Performs the animated beginning of a button's highlighted state /// </summary> IEnumerator BeginHighlight() { this.StopCoroutine(ref m_IconHighlightCoroutine); m_IconHighlightCoroutine = StartCoroutine(IconContainerContentsBeginHighlight()); var transitionAmount = Time.deltaTime; var currentGradientPair = GetMaterialColors(); var targetGradientPair = highlightGradientPair; var currentLocalScale = m_ContentContainer.localScale; var highlightedLocalScale = m_HighlightContentContainerLocalScale; var highlightDuration = m_BeginHighlightDuration; while (transitionAmount < highlightDuration) // Skip while look if user has set the m_BeginHighlightDuration to a value at or below zero { var shapedTransitionAmount = MathUtilsExt.SmoothInOutLerpFloat(transitionAmount += Time.unscaledDeltaTime / highlightDuration); m_ContentContainer.localScale = Vector3.Lerp(currentLocalScale, highlightedLocalScale, shapedTransitionAmount); currentGradientPair = GradientPair.Lerp(currentGradientPair, targetGradientPair, shapedTransitionAmount); SetMaterialColors(currentGradientPair); yield return(null); } SetMaterialColors(targetGradientPair); m_ContentContainer.localScale = highlightedLocalScale; m_HighlightCoroutine = null; }
/// <summary> /// Performs the animated ending of a button's highlighted state /// </summary> IEnumerator EndHighlight() { this.StopCoroutine(ref m_IconHighlightCoroutine); m_IconHighlightCoroutine = StartCoroutine(IconContainerContentsEndHighlight()); const float kTargetTransitionAmount = 1f; var transitionAmount = Time.unscaledDeltaTime; var shapedTransitionAmount = 0f; var currentGradientPair = GetMaterialColors(); var targetGradientPair = normalGradientPair; var currentLocalScale = m_ContentContainer.localScale; var targetScale = m_OriginalContentContainerLocalScale; while (transitionAmount < kTargetTransitionAmount) { transitionAmount += Time.unscaledDeltaTime * 3; shapedTransitionAmount = Mathf.Pow(transitionAmount, 2); currentGradientPair = GradientPair.Lerp(currentGradientPair, targetGradientPair, shapedTransitionAmount); SetMaterialColors(normalGradientPair); m_ContentContainer.localScale = Vector3.Lerp(currentLocalScale, targetScale, shapedTransitionAmount); yield return null; } SetMaterialColors(normalGradientPair); m_ContentContainer.localScale = targetScale; m_HighlightCoroutine = null; }
/// <summary> /// Performs the animated beginning of a button's highlighted state /// </summary> IEnumerator BeginHighlight() { this.StopCoroutine(ref m_IconHighlightCoroutine); m_IconHighlightCoroutine = StartCoroutine(IconContainerContentsBeginHighlight()); const float kTargetTransitionAmount = 1f; var transitionAmount = Time.unscaledDeltaTime; var shapedTransitionAmount = 0f; var currentGradientPair = GetMaterialColors(); var targetGradientPair = highlightGradientPair; var currentLocalScale = m_ContentContainer.localScale; var highlightedLocalScale = new Vector3(m_OriginalContentContainerLocalScale.x, m_OriginalContentContainerLocalScale.y, m_OriginalContentContainerLocalScale.z * m_highlightZScaleMultiplier); while (transitionAmount < kTargetTransitionAmount) { transitionAmount += Time.unscaledDeltaTime * 3; shapedTransitionAmount = Mathf.Pow(transitionAmount, 2); m_ContentContainer.localScale = Vector3.Lerp(currentLocalScale, highlightedLocalScale, shapedTransitionAmount); currentGradientPair = GradientPair.Lerp(currentGradientPair, targetGradientPair, shapedTransitionAmount); SetMaterialColors(currentGradientPair); yield return null; } SetMaterialColors(targetGradientPair); m_ContentContainer.localScale = highlightedLocalScale; m_HighlightCoroutine = null; }
public void Lerp_Interpolates_StartAndEndColors() { var x = new GradientPair(m_ColorA, m_ColorB); var y = new GradientPair(m_ColorC, m_ColorD); var lerped = GradientPair.Lerp(x, y, .1f); Assert.AreEqual(Color.Lerp(x.a, y.a, .1f), lerped.a); Assert.AreEqual(Color.Lerp(x.b, y.b, .1f), lerped.b); }