You've already forked taptap2024_GJ_chidouren
init
This commit is contained in:
116
Packages/com.xfkj.xffsm@357f537fea/Runtime/FSMStateNode.cs
Normal file
116
Packages/com.xfkj.xffsm@357f537fea/Runtime/FSMStateNode.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XFFSM
|
||||
{
|
||||
/// <summary>
|
||||
/// 状态节点
|
||||
/// </summary>
|
||||
public class FSMStateNode
|
||||
{
|
||||
#region 字段
|
||||
/// <summary>
|
||||
/// 状态数据
|
||||
/// </summary>
|
||||
public FSMStateNodeData data;
|
||||
internal RuntimeFSMControllerInstance instance;
|
||||
private List<FSMState> states = new List<FSMState>();
|
||||
|
||||
internal string lastState;
|
||||
internal string nextState;
|
||||
/// <summary>
|
||||
/// 是否正在执行中
|
||||
/// </summary>
|
||||
internal bool isRuning = false;
|
||||
|
||||
internal bool isFirstEnter = true;
|
||||
|
||||
[Tooltip("当前状态名称Hash,可通过方法Animator.StringToHash()转换!")]
|
||||
public int nameHash;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 方法
|
||||
internal FSMStateNode(FSMStateNodeData data,RuntimeFSMControllerInstance instance)
|
||||
{
|
||||
this.data = data;
|
||||
this.instance = instance;
|
||||
nameHash = Animator.StringToHash(data.name);
|
||||
|
||||
states.Clear();
|
||||
foreach (var item in this.data.StateScripts)
|
||||
{
|
||||
Type type = AssemblyTools.GetType(item.className);
|
||||
FSMState state = null;
|
||||
if (type != null)
|
||||
state = Activator.CreateInstance(type) as FSMState;
|
||||
|
||||
if (state != null)
|
||||
{
|
||||
state.controller = instance.FSMController;
|
||||
state.userData = instance.FSMController.userData;
|
||||
state.currentStateInfo = this;
|
||||
states.Add(state);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal void OnEnter()
|
||||
{
|
||||
isRuning = true;
|
||||
foreach (var item in this.states)
|
||||
{
|
||||
item.lastState = lastState;
|
||||
item.nextState = nextState;
|
||||
|
||||
if (isFirstEnter)
|
||||
item.OnCreate(); // 调用 OnCreate 的方法
|
||||
|
||||
item.OnEnter();
|
||||
}
|
||||
|
||||
isFirstEnter = false;
|
||||
}
|
||||
|
||||
internal void OnExit()
|
||||
{
|
||||
foreach (var item in this.states)
|
||||
{
|
||||
item.lastState = lastState;
|
||||
item.nextState = nextState;
|
||||
item.OnExit();
|
||||
}
|
||||
isRuning = false;
|
||||
}
|
||||
|
||||
internal void OnUpdate()
|
||||
{
|
||||
foreach (var item in this.states)
|
||||
{
|
||||
item.OnUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnFixedUpdate()
|
||||
{
|
||||
foreach (var item in this.states)
|
||||
{
|
||||
item.OnFixedUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnLateUpdate()
|
||||
{
|
||||
foreach (var item in this.states)
|
||||
{
|
||||
item.OnLateUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user