131 lines
3.6 KiB
Plaintext
131 lines
3.6 KiB
Plaintext
/*
|
|
文件名: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;
|
|
//最终角色移动方向
|
|
MoveFlag = DIRECTION.NONE;
|
|
//检查按键与移动方向
|
|
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;
|
|
|
|
// 根据 X 和 Y 赋值给 MoveFlagBuf
|
|
local MoveFlagBuf;
|
|
if (X == 0 && Y == -1) {
|
|
MoveFlagBuf = DIRECTION.UP;
|
|
} else if (X == 0 && Y == 1) {
|
|
MoveFlagBuf = DIRECTION.DOWN;
|
|
} else if (X == -1 && Y == 0) {
|
|
MoveFlagBuf = DIRECTION.LEFT;
|
|
} else if (X == 1 && Y == 0) {
|
|
MoveFlagBuf = DIRECTION.RIGHT;
|
|
} else if (X == -1 && Y == -1) {
|
|
MoveFlagBuf = DIRECTION.UP_LEFT;
|
|
} else if (X == 1 && Y == -1) {
|
|
MoveFlagBuf = DIRECTION.UP_RIGHT;
|
|
} else if (X == -1 && Y == 1) {
|
|
MoveFlagBuf = DIRECTION.DOWN_LEFT;
|
|
} else if (X == 1 && Y == 1) {
|
|
MoveFlagBuf = DIRECTION.DOWN_RIGHT;
|
|
} else {
|
|
MoveFlagBuf = DIRECTION.NONE;
|
|
}
|
|
|
|
if (MoveFlagBuf != this.MoveFlag) {
|
|
this.MoveFlag = MoveFlagBuf;
|
|
|
|
TOWN_PACKET.SendTownMoveStatePacket(this.Parent.X, this.Parent.Y, this.MoveFlag);
|
|
}
|
|
}
|
|
|
|
//控制器更新
|
|
function OnUpdate(Dt) {
|
|
if (!this.Enabled) return;
|
|
//方向移动控制
|
|
MoveControl(Dt);
|
|
}
|
|
} |