141 lines
2.9 KiB
C#
141 lines
2.9 KiB
C#
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;
|
|
}
|
|
}
|
|
} |