diff --git a/sqr/Core/InputClass/InputClass.nut b/sqr/Core/InputClass/InputClass.nut new file mode 100644 index 0000000..6295ca9 --- /dev/null +++ b/sqr/Core/InputClass/InputClass.nut @@ -0,0 +1,39 @@ +/* +文件名:InputClass.nut +路径:Core/InputClass/InputClass.nut +创建日期:2024-12-21 07:27 +文件用途:输入类 +*/ + +//输入逻辑函数Map +_Game_Input_Func_ <- {}; + +class _Input_ { + constructor() { + _Game_Input_Func_.rawset("SystemInput", SystemInput.bindenv(this)); + // _Game_Logic_Func_.rawset("SystemInput", Proc.bindenv(this)); + getroottable().Input <- this; + } + + //系统对游戏的输入 + function SystemInput(Code, Type) { + + } + + //Proc逻辑 + function Proc(Dt, GameLister) { + + } +} + + +//输入逻辑入口 +function _Yosin_Game_Input_Logic_(Code, Type) { + foreach(Key, Func in _Game_Input_Func_) { + local Ret = Func(Code, Type); + //主体对象释放 删除自己 + if (Ret == -1) { + _Game_Input_Func_.rawdelete(Key); + } + } +} \ No newline at end of file diff --git a/sqr/User/Controller/Controller.nut b/sqr/User/Controller/Controller.nut new file mode 100644 index 0000000..f71dd3e --- /dev/null +++ b/sqr/User/Controller/Controller.nut @@ -0,0 +1,80 @@ +/* +文件名:Controller.nut +路径:User/Controller/Controller.nut +创建日期:2024-12-21 07:31 +文件用途:控制器类 +*/ +class _GameController_ extends _Input_ { + + //最新键码输入 + + + KeyCode = null; + GameKeyCode = null; + GameKeyCodeCallback = null; + + constructor() { + base.constructor(); + GameKeyCodeCallback = {}; + + //建立键码表 按下flag全部为false + this.KeyCode = {}; + foreach(value in getconsttable().KeyCode) { + this.KeyCode.rawset(value, false); + } + + //建立游戏键码表 + this.GameKeyCode = {}; + foreach(Key, Value in getconsttable().CONTROLLER) { + this.GameKeyCode.rawset(Key, Value); + } + } + //系统对游戏的输入 + function SystemInput(Code, Type) { + SetKeyCode(Code, Type); + } + + //设定键码状态 + function SetKeyCode(Code, Status) { + this.KeyCode[Code] = Status; + + //只遍历有回调的键码 + foreach(Code, Callback in GameKeyCodeCallback) { + //是否按下传递不同指令 + if (GetGameKeyCode(Code)) { + Callback(true); + } else { + Callback(false); + } + } + } + + //获取键码状态 + function GetKeyCode(Code) { + return this.KeyCode[Code]; + } + + //获取游戏键码状态 + function GetGameKeyCode(Code) { + if (!(GameKeyCode.rawin(Code))) return false; + return GetKeyCode(GameKeyCode[Code]); + } + + //注册游戏键码回调函数 + function RegisterGameKeyCode(Code, Callback) { + GameKeyCodeCallback[Code] <- Callback; + } + + //Proc逻辑 + function Proc(Dt, GameLister) { + // //只遍历有回调的键码 + // foreach(Code, Callback in GameKeyCodeCallback) { + // //是否按下传递不同指令 + // if (GetGameKeyCode(Code)) { + // Callback(true); + // } else { + // Callback(false); + // } + // } + } +} \ No newline at end of file diff --git a/sqr/User/Controller/ObjectController.nut b/sqr/User/Controller/ObjectController.nut new file mode 100644 index 0000000..83451e1 --- /dev/null +++ b/sqr/User/Controller/ObjectController.nut @@ -0,0 +1,103 @@ +/* +文件名: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); + } +} \ No newline at end of file diff --git a/sqr/User/Stage/LodingStage.nut b/sqr/User/Stage/LodingStage.nut index ed68e91..c125475 100644 --- a/sqr/User/Stage/LodingStage.nut +++ b/sqr/User/Stage/LodingStage.nut @@ -21,6 +21,8 @@ function InitGame() { _FontAssetManager_(); //初始化鼠标 _IMouse_(); + //初始化控制器 + _GameController_(); //预加载 Animation("ui/charactercreate/dust.ani");