/// <summary> /// Sets the state the animation should start in. /// </summary> /// <param name="startState">Start state.</param> public void SetStartState(UIAnimationState startState) { m_uiAnimState = startState; }
/// <summary> /// Resets the animation to the specified state. /// </summary> public void ResetToState(UIAnimationState state) { m_uiAnimState = state; switch (m_uiAnimatorType) { case UIAnimatorType.TRANSFORM: default: if (m_animatePosition) { m_transform.position = (state == UIAnimationState.STATE1) ? m_animState1_position : m_animState2_position; } if (m_animateRotation) { m_transform.eulerAngles = (state == UIAnimationState.STATE1) ? m_animState1_rotation : m_animState2_rotation; } if (m_animateScale) { m_transform.localScale = (state == UIAnimationState.STATE1) ? m_animState1_scale : m_animState2_scale; } break; case UIAnimatorType.COLOR: if (m_animateAlpha) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.SetAlpha((state == UIAnimationState.STATE1) ? m_animState1_alpha : m_animState2_alpha); } foreach (Renderer renderer in m_renderers) { renderer.SetAlpha((state == UIAnimationState.STATE1) ? m_animState1_alpha : m_animState2_alpha); } } if (m_animateColor) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.color = (state == UIAnimationState.STATE1) ? m_animState1_color : m_animState2_color; } foreach (Renderer renderer in m_renderers) { renderer.material.color = (state == UIAnimationState.STATE1) ? m_animState1_color : m_animState2_color; } } break; } }
/// <summary> /// Updates the pledge popup animation. /// </summary> private void UpdateUIAnimation(float deltaTime) { if (!IsActive || (m_useAnimSpeed && m_animSpeed == 0.0f)) { return; } switch (m_uiAnimState) { case UIAnimationState.TO_STATE1: // Animate from state 2 to state 1 m_timeSinceAnimStart += deltaTime; if (m_animatePosition) { m_transform.position = Vector3.Lerp(m_animState2_position, m_animState1_position, m_timeSinceAnimStart * m_animSpeed); } if (m_animateRotation) { m_transform.eulerAngles = Vector3.Lerp(m_animState2_rotation, m_animState1_rotation, m_timeSinceAnimStart * m_animSpeed); } if (m_animateScale) { m_transform.localScale = Vector3.Lerp(m_animState2_scale, m_animState1_scale, m_timeSinceAnimStart * m_animSpeed); } if (m_animateAlpha) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.SetAlpha(Mathf.Lerp(m_animState2_alpha, m_animState1_alpha, m_timeSinceAnimStart * m_animSpeed)); } foreach (Renderer renderer in m_renderers) { renderer.SetAlpha(Mathf.Lerp(m_animState2_alpha, m_animState1_alpha, m_timeSinceAnimStart * m_animSpeed)); } } if (m_animateColor) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.color = Color.Lerp(m_animState2_color, m_animState1_color, m_timeSinceAnimStart * m_animSpeed); } foreach (Renderer renderer in m_renderers) { renderer.material.color = Color.Lerp(m_animState2_color, m_animState1_color, m_timeSinceAnimStart * m_animSpeed); } } // Check if animation is done if (m_timeSinceAnimStart > m_animTime) { m_timeSinceAnimStart = 0.0f; m_uiAnimState = UIAnimationState.STATE1; } break; case UIAnimationState.STATE1: // Now in animation state 1 break; case UIAnimationState.TO_STATE2: // Animate from state 1 to state 2 m_timeSinceAnimStart += deltaTime; if (m_animatePosition) { m_transform.position = Vector3.Lerp(m_animState1_position, m_animState2_position, m_timeSinceAnimStart * m_animSpeed); } if (m_animateRotation) { m_transform.eulerAngles = Vector3.Lerp(m_animState1_rotation, m_animState2_rotation, m_timeSinceAnimStart * m_animSpeed); } if (m_animateScale) { m_transform.localScale = Vector3.Lerp(m_animState1_scale, m_animState2_scale, m_timeSinceAnimStart * m_animSpeed); } if (m_animateAlpha) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.SetAlpha(Mathf.Lerp(m_animState1_alpha, m_animState2_alpha, m_timeSinceAnimStart * m_animSpeed)); } foreach (Renderer renderer in m_renderers) { renderer.SetAlpha(Mathf.Lerp(m_animState1_alpha, m_animState2_alpha, m_timeSinceAnimStart * m_animSpeed)); } } if (m_animateColor) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.color = Color.Lerp(m_animState1_color, m_animState2_color, m_timeSinceAnimStart * m_animSpeed); } foreach (Renderer renderer in m_renderers) { renderer.material.color = Color.Lerp(m_animState1_color, m_animState2_color, m_timeSinceAnimStart * m_animSpeed); } } // Check if animation is done if (m_timeSinceAnimStart > m_animTime) { m_timeSinceAnimStart = 0.0f; m_uiAnimState = UIAnimationState.STATE2; } break; case UIAnimationState.STATE2: default: // Now in animation state 2 break; } }
/// <summary> /// Updates the UI animation. /// </summary> private void UpdateUIAnimation(float deltaTime) { if (!IsActive || (m_useAnimSpeed && m_animSpeed == 0.0f)) { return; } // Make sure to use updated values if (m_useAnimSpeed && m_animTime == UNASSIGNED_VALUE) { // s = d/t, t = d/s -> Animation time = amount to lerp / animation speed if (m_lerpAmount != UNASSIGNED_VALUE) { m_animTime = m_lerpAmount / m_animSpeed; } // If lerp amount is unassigned, i.e. start and end values have not been set, return else { return; } } switch (m_uiAnimState) { case UIAnimationState.TO_STATE1: // Animate from state 2 to state 1 m_timeSinceAnimStart += deltaTime; float percentToState1 = (m_animTime != 0.0f) ? (m_timeSinceAnimStart / m_animTime) : 1.0f; if (m_animatePosition) { Vector3 newPos = Vector3.Lerp(m_animState2_position, m_animState1_position, percentToState1); if (m_animateLocal) { m_transform.localPosition = newPos; } else { m_transform.position = newPos; } } if (m_animateRotation) { Vector3 newRot = Vector3.Lerp(m_animState2_rotation, m_animState1_rotation, percentToState1); if (m_animateLocal) { m_transform.localEulerAngles = newRot; } else { m_transform.eulerAngles = newRot; } } if (m_animateScale) { m_transform.localScale = Vector3.Lerp(m_animState2_scale, m_animState1_scale, percentToState1); } if (m_animateAlpha) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.SetAlpha(Mathf.Lerp(m_animState2_alpha, m_animState1_alpha, percentToState1)); } foreach (Renderer renderer in m_renderers) { renderer.SetAlpha(Mathf.Lerp(m_animState2_alpha, m_animState1_alpha, percentToState1)); } } if (m_animateColor) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.color = Color.Lerp(m_animState2_color, m_animState1_color, percentToState1); } foreach (Renderer renderer in m_renderers) { renderer.material.color = Color.Lerp(m_animState2_color, m_animState1_color, percentToState1); } } if (m_animateFontSize) { m_textMesh.fontSize = (int)Mathf.Lerp(m_animState2_fontSize, m_animState1_fontSize, percentToState1); } // Check if animation is done if (m_timeSinceAnimStart > m_animTime) { m_timeSinceAnimStart = 0.0f; m_uiAnimState = UIAnimationState.STATE1; } break; case UIAnimationState.STATE1: // Now in animation state 1 break; case UIAnimationState.TO_STATE2: // Animate from state 1 to state 2 m_timeSinceAnimStart += deltaTime; float percentToState2 = (m_animTime != 0.0f) ? (m_timeSinceAnimStart / m_animTime) : 1.0f; if (m_animatePosition) { Vector3 newPos = Vector3.Lerp(m_animState1_position, m_animState2_position, percentToState2); if (m_animateLocal) { m_transform.localPosition = newPos; } else { m_transform.position = newPos; } } if (m_animateRotation) { Vector3 newRot = Vector3.Lerp(m_animState1_rotation, m_animState2_rotation, percentToState2); if (m_animateLocal) { m_transform.localEulerAngles = newRot; } else { m_transform.eulerAngles = newRot; } } if (m_animateScale) { m_transform.localScale = Vector3.Lerp(m_animState1_scale, m_animState2_scale, percentToState2); } if (m_animateAlpha) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.SetAlpha(Mathf.Lerp(m_animState1_alpha, m_animState2_alpha, percentToState2)); } foreach (Renderer renderer in m_renderers) { renderer.SetAlpha(Mathf.Lerp(m_animState1_alpha, m_animState2_alpha, percentToState2)); } } if (m_animateColor) { foreach (SpriteRenderer spriteRenderer in m_spriteRenderers) { spriteRenderer.color = Color.Lerp(m_animState1_color, m_animState2_color, percentToState2); } foreach (Renderer renderer in m_renderers) { renderer.material.color = Color.Lerp(m_animState1_color, m_animState2_color, percentToState2); } } if (m_animateFontSize) { m_textMesh.fontSize = (int)Mathf.Lerp(m_animState1_fontSize, m_animState2_fontSize, percentToState2); } // Check if animation is done if (m_timeSinceAnimStart > m_animTime) { m_timeSinceAnimStart = 0.0f; m_uiAnimState = UIAnimationState.STATE2; } break; case UIAnimationState.STATE2: default: // Now in animation state 2 break; } }