GeWuYou e972d926a7 feat(ui): 添加UI过渡动画系统
添加了完整的UI过渡动画功能,包括:
- 新增UiTransitionAnimation枚举定义各种动画类型
- 扩展IUiRouter接口支持动画策略参数
- 新增IUiTransition接口定义动画播放契约
- 新增UiAnimationPolicy类配置动画行为
- 实现God
2026-01-20 09:36:59 +08:00

92 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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