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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|