using UnityEngine;

namespace MPStudio
{
    public class ElasticScale : MonoBehaviour
    {
        [Header("弹性参数")] public float amplitude = 0.3f; //值越大，缩放变化越明显
        public float frequency = 3f; //值越大，弹动越快
        public float phaseOffset = 0.25f; // 控制X和Y轴动画的时间差

        private Vector3 originalScale;
        private float timer;

        private void Start()
        {
            /*
    0相位差：X和Y轴同时达到最大/最小值（对角拉伸）

    90度相位差：X轴最大时Y轴正常，反之亦然（经典Q弹效果）

    180度相位差：X轴最大时Y轴最小（压扁效果）
             */

            originalScale = transform.localScale;
        }

        private void Update()
        {
            timer += Time.deltaTime;

            // 计算相位差（PI/2 = 90度相位差）
            float phase = phaseOffset * Mathf.PI * 2f;

            float xScale = 1f + amplitude * Mathf.Sin(timer * frequency * 2f * Mathf.PI);
            float yScale = 1f + amplitude * Mathf.Cos(timer * frequency * 2f * Mathf.PI + phase);

            transform.localScale = new Vector3(
                originalScale.x * xScale,
                originalScale.y * yScale,
                originalScale.z
            );
        }
    }
}