Files
Cielonos/Assets/Scripts/SLSUtilities/FunctionalAnimation/FuncAnimPayloadBase.cs

85 lines
2.2 KiB
C#
Raw Normal View History

2025-11-25 08:19:33 -05:00
using System;
using Sirenix.OdinInspector;
using UnityEngine;
namespace SLSUtilities.FunctionalAnimation
{
/// <summary>
/// (全新) 自定义Attribute用于为事件指定一个在时间轴上的颜色
/// </summary>
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class EventColorAttribute : Attribute
{
public Color Color { get; }
public EventColorAttribute(float r, float g, float b, float a = 1.0f)
{
this.Color = new Color(r, g, b, a);
}
}
/// <summary>
/// 所有技能事件负载(Payload)的抽象基类。
/// 技能事件的具体逻辑和参数都定义在它的子类中。
/// </summary>
[Serializable]
public abstract class FuncAnimPayloadBase
{
[Tooltip("在时间轴上显示的事件名称 (如果为空,则显示类名)")]
[PropertyOrder(-1)] // 把它显示在最上面
2026-01-17 11:35:49 -05:00
[HideInInspector]
2025-11-25 08:19:33 -05:00
public string eventName;
2026-04-18 13:57:19 -04:00
[Tooltip("是否静默执行该事件(不触发任何反馈)")]
public bool mute = false;
2025-11-25 08:19:33 -05:00
2026-01-17 11:35:49 -05:00
[NonSerialized]
public FuncAnimData parentData;
2025-11-25 08:19:33 -05:00
[NonSerialized]
public RuntimeFuncAnim runtimeFuncAnim;
2026-01-17 11:35:49 -05:00
protected IFuncAnimExecutor character => runtimeFuncAnim?.executor;
2025-11-25 08:19:33 -05:00
protected FuncAnimPayloadBase()
{
}
public virtual void Invoke()
{
}
2026-03-20 12:07:44 -04:00
public virtual string NameForInspector => GetType().Name;
2025-11-25 08:19:33 -05:00
}
[Serializable]
public abstract class FuncAnimPayloadBase<T> : FuncAnimPayloadBase
{
public T result;
protected FuncAnimPayloadBase()
{
}
public new virtual T Invoke()
{
return result;
}
}
/// <summary>
/// 一个简单的日志事件,用于调试
/// </summary>
[EventColor(1.0f, 1.0f, 0.2f)]
public class LogEvent : FuncAnimPayloadBase
{
public string message = "Hello World!";
public override void Invoke()
{
Debug.Log(message);
}
}
}