using System; using UnityEngine; public class UICurveLabel : MonoBehaviour { [SerializeField] private int _magnificationHeight; [SerializeField] private AnimationCurve _animationCurve; private const float HALF_CHARACTER = 0.5f; private float _timeIntervalCharacter; public void Init(string text) { if (text.Length <= 1) { _timeIntervalCharacter = 0f; } else { _timeIntervalCharacter = 1f / (float)(text.Length - 1); } } public float GetTargetCharacterHeight(int inIndex) { return _animationCurve.Evaluate((float)inIndex * _timeIntervalCharacter) * (float)(-_magnificationHeight); } private float GetTargetCharacterAnimationCurveValue(float inTime) { return _animationCurve.Evaluate(inTime * _timeIntervalCharacter); } public Vector2[] SetTargetCharacterRotation(int inIndex, ref float v0x, ref float v0y, ref float v1x, ref float v1y) { Vector2 vector = default(Vector2); Vector2 vector2 = default(Vector2); if (inIndex == 0) { vector.x = 0f; vector.y = GetTargetCharacterAnimationCurveValue(0f); vector2.x = ((float)inIndex + 0.5f) * _timeIntervalCharacter; vector2.y = GetTargetCharacterAnimationCurveValue((float)inIndex + 0.5f); } else { vector.x = ((float)inIndex - 0.5f) * _timeIntervalCharacter; vector.y = GetTargetCharacterAnimationCurveValue((float)inIndex - 0.5f); vector2.x = (float)inIndex * _timeIntervalCharacter; vector2.y = GetTargetCharacterAnimationCurveValue(inIndex); } Vector2 vector3 = vector2 - vector; float num = Mathf.Atan2(vector3.y, vector3.x); float num2 = Mathf.Sin(num); float num3 = Mathf.Cos(num); Vector2 vector4 = new Vector2((v1x + v0x) / 2f, (v1y + v0y) / 2f); Vector2[] array = new Vector2[4]; array[0].x = v0x; array[0].y = v0y; array[1].x = v0x; array[1].y = v1y; array[2].x = v1x; array[2].y = v1y; array[3].x = v1x; array[3].y = v0y; for (int i = 0; i < 4; i++) { float num4 = array[i].x - vector4.x; float num5 = array[i].y - vector4.y; array[i].x = num3 * num4 - num2 * num5; array[i].y = num2 * num4 + num3 * num5; array[i].x += vector4.x; array[i].y += vector4.y; } Vector2[] array2 = new Vector2[4]; if (num < (float)Math.PI / 2f) { return array; } if (num < (float)Math.PI) { array2[0] = array[3]; array2[1] = array[0]; array2[2] = array[1]; array2[3] = array[2]; } else if (num < 4.712389f) { array2[0] = array[2]; array2[1] = array[3]; array2[2] = array[0]; array2[3] = array[1]; } else { array2[0] = array[1]; array2[1] = array[2]; array2[2] = array[3]; array2[3] = array[0]; } for (int j = 0; j < 4; j++) { array[j] = array2[j]; } return array; } }