DNF_DEV_SQR

This commit is contained in:
2025-10-10 12:27:21 +08:00
commit 54854c0915
11 changed files with 320 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
/*
文件名:Move.nut
路径:Game/CharacterScript/Common/Move.nut
创建日期:2025-10-03 02:02
文件用途:角色移动脚本
*/
function checkCanChangeState_Character_Move(obj) {
//获取当前状态
local CurState = obj.GetState();
//得到摇杆的数据 X 和 Y的范围 -1.0 ~ 1.0
local arr = obj.GetVars("_move_data_", "float");
if (fabs(arr[0]) > 0.35 || fabs(arr[1]) > 0.35) {
return true;
} else return false;
}
function SetState_Character_Move(obj) {
//获取移动数据
local arr = obj.GetVars("_move_data_", "float");
//设置人物朝向 摇杆X轴大于0则朝右小于0则朝左
local SetValue = arr[0] > 0 ? 0 : 1;
if (SetValue != obj.GetDirection()) {
if (fabs(arr[0]) > 0.35) obj.SetDirection(SetValue);
//设置动作
obj.SetAction("move");
} else {
if (obj.GetState() != 1) obj.SetAction("move");
}
local Speed = 250;
local Dir = obj.GetDirection();
local Pos = obj.GetPosition();
local XOffset = null;
if (fabs(arr[0]) > 0.35) XOffset = ((arr[0] > 0 ? Speed : -Speed));
else XOffset = 0;
local YOffset = null;
//当摇杆Y轴大于0.35或小于-0.35时设置Y轴偏移量
if (fabs(arr[1]) > 0.35) YOffset = (arr[1] > 0 ? Speed : -Speed);
else YOffset = 0;
obj.SetSpeed(XOffset, YOffset, null);
}
function ProcState_Character_Move(obj, DeltaTime) {
//获取移动数据
local arr = obj.GetVars("_move_data_", "float");
if (arr[0] == 0 && arr[1] == 0) {
obj.SetState(0);
}
}

View File

@@ -0,0 +1,22 @@
/*
文件名:Rest.nut
路径:Game/CharacterScript/Common/Rest.nut
创建日期:2025-10-03 02:02
文件用途:角色站立状态
*/
function checkCanChangeState_Character_Rest(obj) {
return true;
}
function SetState_Character_Rest(obj) {
//设置动作
obj.SetAction("rest");
//设置速度
obj.SetSpeed(0, 0, null);
}
function ProcState_Character_Rest(obj, DeltaTime) {
}

View File

@@ -0,0 +1,25 @@
/*
文件名:ActiveObject.nut
路径:Game/ObjectClass/ActiveObject.nut
创建日期:2025-10-03 02:50
文件用途:
*/
class ActiveObject extends BaseObject {
constructor(Object) {
base.constructor(Object);
}
function SetSpeed(x, y, z) {
local CurSpeed = sq_GetSpeed(C_Object);
if (x == null) x = CurSpeed.x;
if (y == null) y = CurSpeed.y;
if (z == null) z = CurSpeed.z;
sq_SetSpeed(C_Object, x, y, z);
}
function GetSpeed() {
return sq_GetSpeed(C_Object);
}
}

View File

@@ -0,0 +1,32 @@
class BaseObject {
//c++对象指针
C_Object = null;
constructor(Object) {
C_Object = Object;
}
function GetPosition() {
return sq_GetPosition(C_Object);
}
function SetPosition(x, y, z) {
sq_SetPosition(C_Object, x, y, z);
}
function GetVars(Name, Type) {
return sq_GetVars(C_Object, Name, Type);
}
function SetVars(Name, Type, Value) {
sq_SetVars(C_Object, Name, Type, Value);
}
function GetDirection() {
return sq_GetDirection(C_Object);
}
function SetDirection(Dir) {
sq_SetDirection(C_Object, Dir);
}
}

View File

@@ -0,0 +1,23 @@
/*
文件名:CharacterObject.nut
路径:Game/ObjectClass/CharacterObject.nut
创建日期:2025-10-03 02:50
文件用途:
*/
class CharacterObject extends ActiveObject {
constructor(Object) {
base.constructor(Object);
}
function GetState() {
return sq_GetState(C_Object);
}
function SetState(State) {
sq_SetState(C_Object, State);
}
function SetAction(key) {
sq_SetAction(C_Object, key);
}
}

View 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;
}