DOF/sqr/User/Controller/ObjectController.nut

103 lines
2.7 KiB
Plaintext
Raw Normal View History

2024-12-25 11:35:29 +08:00
/*
文件名:ObjectController.nut
路径:User/Controller/ObjectController.nut
创建日期:2024-12-21 14:16
文件用途:
*/
//输入指令集
class InputInstructionSpecial {
//指令表
InstructionArray = null;
//指令等待帧数
WaitFrame = null;
//动态数据
DynamicData = null;
constructor(gInstructionArray, gWaitFrame) {
this.InstructionArray = gInstructionArray;
this.WaitFrame = gWaitFrame;
DynamicData = {
CurrentIndex = 0,
Time = 0
};
}
//指令集更新
function OnUpdate(Dt) {
//比对值
local Match = false;
//获取最新的按键键值
}
}
class Object_Controller {
//控制对象
Parent = null;
//控制器是否启用
Enabled = true;
constructor(gParent) {
this.Parent = gParent.weakref();
Move_Instruction_Horizontal = [];
Move_Instruction_Vertical = [];
}
//启用控制器
function Enable() {
this.Enabled = true;
}
//关闭控制器
function Disable() {
this.Enabled = false;
}
//横向移动方向List
Move_Instruction_Horizontal = null;
//纵向移动方向List
Move_Instruction_Vertical = null;
//检查按键与移动方向
function CheckMove(Key, Flag, Buffer) {
//上 0 下 1 左 2 右 3
local Move_Index = Buffer.find(Flag);
if (Input.GetGameKeyCode(Key)) {
if (Move_Index == null) Buffer.push(Flag);
} else {
if (Move_Index != null) Buffer.remove(Move_Index);
}
}
//方向移动控制
function MoveControl(Dt) {
//上 0 下 1 左 2 右 3
CheckMove("OPTION_HOTKEY_MOVE_UP", 0, Move_Instruction_Vertical);
CheckMove("OPTION_HOTKEY_MOVE_DOWN", 1, Move_Instruction_Vertical);
CheckMove("OPTION_HOTKEY_MOVE_LEFT", 2, Move_Instruction_Horizontal);
CheckMove("OPTION_HOTKEY_MOVE_RIGHT", 3, Move_Instruction_Horizontal);
//获取横向移动方向
local Move_Horizontal = Move_Instruction_Horizontal.len() ? Move_Instruction_Horizontal.top() : null;
//获取纵向移动方向
local Move_Vertical = Move_Instruction_Vertical.len() ? Move_Instruction_Vertical.top() : null;
local X = 0, Y = 0;
if (Move_Horizontal == 2) X = -1;
else if (Move_Horizontal == 3) X = 1;
if (Move_Vertical == 0) Y = -1;
else if (Move_Vertical == 1) Y = 1;
//至少有一个方向才会调用
Parent.Move(Dt, X, Y);
}
//控制器更新
function OnUpdate(Dt) {
if (!this.Enabled) return;
//方向移动控制
MoveControl(Dt);
}
}