using System; using System.Collections.Generic; using System.Numerics; using Sirenix.OdinInspector; using UnityEngine; namespace AlicizaX.AnimationFlow.Runtime { public enum EState { None, Enter, Running, Exit, } [System.Serializable] public class EntryNode : ActionNode { [LabelText("循环次数")] public int LoopCount = 1; // 控制流程循环的次数 [LabelText("入口名称")] public string Name; // 节点名称(可以是技能名称、关卡名称等) } [System.Serializable] public abstract partial class ActionNode { [HideInInspector] public float elapsedTime; [HideInInspector] [SerializeReference] [SerializeField] public List Childs = new List(); // 邻接节点(图中的边) [HideInInspector] public EState State; /// /// 该类型是否允许接受输入口 /// /// public virtual bool HasInputPort() { return true; } /// /// 是否有多输入口 /// /// public virtual bool MultiInputPort() { return true; } /// /// 是否有输出口 /// /// public virtual bool HasOutPort() { return true; } /// /// 是否有多输出口 /// /// public virtual bool MultiOutPort() { return true; } /// /// 持续时间 /// /// public virtual float Duration() { return 0; } /// /// 前置条件 如果满足 则进入下一分支 /// /// public virtual bool Condition() { return elapsedTime >= Duration(); } public virtual bool HasSubTitle() { return false; } public virtual string SubTitle() { return null; } /// /// 效验通过 编辑器使用 /// /// public virtual bool Valid() { return true; } public virtual void OnInit() { } public virtual void OnEnter() { } public virtual void OnExit() { } public virtual void OnUpdate(float dt) { } public virtual void OnInterrupt() { } public virtual void OnReset() { } public void Reset() { elapsedTime = 0; State = EState.None; } } }