using System;
using System.Threading;
using UnityEngine;

public static class Util
{
    /// 특정 시간(초) 후에 액션을 실행
    public static async Awaitable RunDelayed(float delay, Action action, CancellationToken token = default)
    {
        try
        {
            // 유니티 전용 비동기 대기
            await Awaitable.WaitForSecondsAsync(delay, token);

            // 함수 실행
            action?.Invoke();
        }
        catch (OperationCanceledException)
        {
            // 취소되었을 때의 처리 (필요 시)
        }
    }

    /// 다음 프레임에 액션을 실행
    public static async Awaitable RunNextFrame(Action action, CancellationToken token = default)
    {
        try
        {
            await Awaitable.EndOfFrameAsync(token);
            action?.Invoke();
        }
        catch (OperationCanceledException) { }
    }

    public static float NormalizeAngle(float angle)
    {
        while (angle > 180)
            angle -= 360;
        while (angle < -180)
            angle += 360;
        return angle;
    }
}
