Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/UIWidgets/Animations.cs
2026-02-21 16:45:37 +08:00

123 lines
3.9 KiB
C#

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<LayoutElement>() ?? rectTransform.gameObject.AddComponent<LayoutElement>();
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<LayoutElement>() ?? rectTransform.gameObject.AddComponent<LayoutElement>();
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;
}
}
}
}