DNF_DEV_SQR
This commit is contained in:
85
Game/StateMachine/StateMachine.nut
Normal file
85
Game/StateMachine/StateMachine.nut
Normal file
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
文件名:StateMachine.nut
|
||||
路径:Game/StateMachine/StateMachine.nut
|
||||
创建日期:2025-10-03 02:11
|
||||
文件用途:
|
||||
*/
|
||||
|
||||
class StateMachine {
|
||||
//状态注册表
|
||||
StatusRegistry = null;
|
||||
|
||||
constructor() {
|
||||
if (getroottable().rawin("__StateMachine__")) {
|
||||
// 防止重复实例化
|
||||
throw "StateMachine 不能重复实例化!";
|
||||
}
|
||||
//初始化状态注册表
|
||||
StatusRegistry = {};
|
||||
foreach(JobIndex in getconsttable().CHARACTERJOB) {
|
||||
StatusRegistry[JobIndex] <- {};
|
||||
}
|
||||
}
|
||||
|
||||
// 静态方法:获取唯一实例
|
||||
function GetInstance() {
|
||||
if (!getroottable().rawin("__StateMachine__")) {
|
||||
// 首次调用时创建实例
|
||||
getroottable()["__StateMachine__"] <- StateMachine();
|
||||
}
|
||||
return getroottable()["__StateMachine__"];
|
||||
}
|
||||
|
||||
//注册状态
|
||||
function RegisterState(Job, StateName, StateIndex) {
|
||||
StatusRegistry[Job][StateIndex] <- {
|
||||
StateName = StateName,
|
||||
StateIndex = StateIndex
|
||||
}
|
||||
print("注册了状态" + StateName + ",状态索引为" + StateIndex);
|
||||
}
|
||||
|
||||
//获取状态信息
|
||||
function GetStateInfo(Job, State) {
|
||||
return StatusRegistry[Job][State];
|
||||
}
|
||||
}
|
||||
|
||||
function StateMachine_checkCanChangeState(C_Object, Job, State) {
|
||||
//获取状态信息
|
||||
local StateInfo = StateMachine.GetInstance().GetStateInfo(Job, State);
|
||||
//判断是否有 检查能否切换状态函数
|
||||
local FuncName = "checkCanChangeState_" + StateInfo.StateName;
|
||||
if (getroottable().rawin(FuncName)) {
|
||||
return getroottable()[FuncName](CharacterObject(C_Object));
|
||||
} else {
|
||||
error("没有找到" + FuncName + "函数");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function StateMachine_SetState(C_Object, Job, State) {
|
||||
//获取状态信息
|
||||
local StateInfo = StateMachine.GetInstance().GetStateInfo(Job, State);
|
||||
//判断是否有 设置状态函数
|
||||
local FuncName = "SetState_" + StateInfo.StateName;
|
||||
if (getroottable().rawin(FuncName)) {
|
||||
getroottable()[FuncName](CharacterObject(C_Object));
|
||||
} else {
|
||||
error("没有找到" + FuncName + "函数");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function StateMachine_ProcState(C_Object, Job, State, DeltaTime) {
|
||||
//获取状态信息
|
||||
local StateInfo = StateMachine.GetInstance().GetStateInfo(Job, State);
|
||||
//判断是否有 设置状态函数
|
||||
local FuncName = "ProcState_" + StateInfo.StateName;
|
||||
if (getroottable().rawin(FuncName)) {
|
||||
getroottable()[FuncName](CharacterObject(C_Object), DeltaTime);
|
||||
} else {
|
||||
error("没有找到" + FuncName + "函数");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user