using System.Collections; using UnityEngine; using UnityEngine.UI; namespace UIWidgets { public static class Animations { public static IEnumerator Rotate(RectTransform rectTransform, float time = 0.5f, float start_angle = 0f, float end_angle = 90f) { if (rectTransform != null) { Vector3 start_rotarion = rectTransform.rotation.eulerAngles; float end_time = Time.time + time; while (Time.time <= end_time) { float rotation_x = Mathf.Lerp(start_angle, end_angle, 1f - (end_time - Time.time) / time); rectTransform.rotation = Quaternion.Euler(rotation_x, start_rotarion.y, start_rotarion.z); yield return null; } rectTransform.rotation = Quaternion.Euler(start_rotarion); } } public static IEnumerator RotateZ(RectTransform rectTransform, float time = 0.5f, float start_angle = 0f, float end_angle = 90f) { if (rectTransform != null) { Vector3 start_rotarion = rectTransform.rotation.eulerAngles; float end_time = Time.time + time; while (Time.time <= end_time) { rectTransform.rotation = Quaternion.Euler(z: Mathf.Lerp(start_angle, end_angle, 1f - (end_time - Time.time) / time), x: start_rotarion.x, y: start_rotarion.y); yield return null; } rectTransform.rotation = Quaternion.Euler(start_rotarion); } } public static IEnumerator Collapse(RectTransform rectTransform, float time = 0.5f, bool isHorizontal = false) { if (!(rectTransform != null)) { yield break; } Vector2 size = rectTransform.rect.size; LayoutElement layoutElement = rectTransform.GetComponent() ?? rectTransform.gameObject.AddComponent(); if (size.x == 0f || size.y == 0f) { size = new Vector2(layoutElement.preferredWidth, layoutElement.preferredHeight); } float end_time = Time.time + time; while (Time.time <= end_time) { if (isHorizontal) { float num = Mathf.Lerp(size.x, 0f, 1f - (end_time - Time.time) / time); rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num); layoutElement.preferredWidth = num; } else { float num2 = Mathf.Lerp(size.y, 0f, 1f - (end_time - Time.time) / time); rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num2); layoutElement.preferredHeight = num2; } yield return null; } if (isHorizontal) { rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x); layoutElement.preferredWidth = size.x; } else { rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y); layoutElement.preferredHeight = size.y; } } public static IEnumerator Open(RectTransform rectTransform, float time = 0.5f, bool isHorizontal = false) { if (!(rectTransform != null)) { yield break; } Vector2 size = rectTransform.rect.size; LayoutElement layoutElement = rectTransform.GetComponent() ?? rectTransform.gameObject.AddComponent(); if (size.x == 0f || size.y == 0f) { size = new Vector2(layoutElement.preferredWidth, layoutElement.preferredHeight); } float end_time = Time.time + time; while (Time.time <= end_time) { if (isHorizontal) { float num = Mathf.Lerp(0f, size.x, 1f - (end_time - Time.time) / time); rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num); layoutElement.preferredWidth = num; } else { float num2 = Mathf.Lerp(0f, size.y, 1f - (end_time - Time.time) / time); rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num2); layoutElement.preferredHeight = num2; } yield return null; } if (isHorizontal) { rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x); layoutElement.preferredWidth = size.x; } else { rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y); layoutElement.preferredHeight = size.y; } } } }