Files
SoulliesOfficial 649b7a5ddc 更新
2026-05-23 08:27:50 -04:00

94 lines
2.5 KiB
C#
Raw Permalink 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 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)] // 把它显示在最上面
[HideInInspector]
public string eventName;
[Tooltip("是否静默执行该事件(不触发任何反馈)")]
public bool mute = false;
[NonSerialized]
public FuncAnimData parentData;
[NonSerialized]
public RuntimeFuncAnim runtimeFuncAnim;
protected IFuncAnimExecutor character => runtimeFuncAnim?.executor;
protected FuncAnimPayloadBase()
{
}
public virtual void Invoke()
{
}
/// <summary>
/// 创建此 Payload 的独立副本,使其拥有独立的 runtimeFuncAnim 引用。
/// 子类如果包含运行时可变的引用类型字段(如 List应 override 此方法进行深拷贝。
/// </summary>
public virtual FuncAnimPayloadBase DeepClone()
{
return (FuncAnimPayloadBase)MemberwiseClone();
}
public virtual string NameForInspector => GetType().Name;
}
[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);
}
}
}