using GFramework.Game.Abstractions.enums;
namespace GFramework.Game.Abstractions.ui;
///
/// UI动画策略配置
/// 用于配置UI过渡动画的行为
///
public class UiAnimationPolicy
{
///
/// 动画类型
///
public UiTransitionAnimation Animation { get; set; } = UiTransitionAnimation.None;
///
/// 动画持续时间(秒)
///
public float Duration { get; set; } = 0.3f;
///
/// 是否阻塞UI切换(等待动画完成)
///
public bool BlockTransition { get; set; } = false;
///
/// 自定义动画实现(仅当 Animation 为 Custom 时使用)
///
public IUiTransition? CustomTransition { get; set; }
///
/// 缓动函数(可选,用于调整动画曲线)
///
public EasingFunction Easing { get; set; } = EasingFunction.EaseInOut;
///
/// 创建默认策略(无动画)
///
public static UiAnimationPolicy None => new UiAnimationPolicy { Animation = UiTransitionAnimation.None };
///
/// 创建淡入淡出策略
///
/// 持续时间
/// 是否阻塞
public static UiAnimationPolicy Fade(float duration = 0.3f, bool block = false)
=> new UiAnimationPolicy { Animation = UiTransitionAnimation.Fade, Duration = duration, BlockTransition = block };
///
/// 创建滑入策略
///
/// 滑动方向
/// 持续时间
/// 是否阻塞
public static UiAnimationPolicy Slide(UiTransitionAnimation direction, float duration = 0.3f, bool block = false)
=> new UiAnimationPolicy { Animation = direction, Duration = duration, BlockTransition = block };
///
/// 创建缩放策略
///
/// 持续时间
/// 是否阻塞
public static UiAnimationPolicy Scale(float duration = 0.3f, bool block = false)
=> new UiAnimationPolicy { Animation = UiTransitionAnimation.Scale, Duration = duration, BlockTransition = block };
}
///
/// 缓动函数枚举
///
public enum EasingFunction
{
///
/// 线性
///
Linear,
///
/// 缓入
///
EaseIn,
///
/// 缓出
///
EaseOut,
///
/// 缓入缓出
///
EaseInOut
}