com.alicizax.unity.animatio.../Runtime/Core/Node/ActionNode.cs

141 lines
2.9 KiB
C#
Raw Normal View History

2025-02-07 16:05:13 +08:00
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<ActionNode> Childs = new List<ActionNode>(); // 邻接节点(图中的边)
[HideInInspector] public EState State;
/// <summary>
/// 该类型是否允许接受输入口
/// </summary>
/// <returns></returns>
public virtual bool HasInputPort()
{
return true;
}
/// <summary>
/// 是否有多输入口
/// </summary>
/// <returns></returns>
public virtual bool MultiInputPort()
{
return true;
}
/// <summary>
/// 是否有输出口
/// </summary>
/// <returns></returns>
public virtual bool HasOutPort()
{
return true;
}
/// <summary>
/// 是否有多输出口
/// </summary>
/// <returns></returns>
public virtual bool MultiOutPort()
{
return true;
}
/// <summary>
/// 持续时间
/// </summary>
/// <returns></returns>
public virtual float Duration()
{
return 0;
}
/// <summary>
/// 前置条件 如果满足 则进入下一分支
/// </summary>
/// <returns></returns>
public virtual bool Condition()
{
return elapsedTime >= Duration();
}
public virtual bool HasSubTitle()
{
return false;
}
public virtual string SubTitle()
{
return null;
}
/// <summary>
/// 效验通过 编辑器使用
/// </summary>
/// <returns></returns>
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;
}
}
}