| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  |     //最终角色移动方向 | 
					
						
							|  |  |  |     MoveFlag = DIRECTION.NONE; | 
					
						
							| 
									
										
										
										
											2024-12-25 11:35:29 +08:00
										 |  |  |     //检查按键与移动方向 | 
					
						
							|  |  |  |     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; | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // 根据 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); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-25 11:35:29 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //控制器更新 | 
					
						
							|  |  |  |     function OnUpdate(Dt) { | 
					
						
							|  |  |  |         if (!this.Enabled) return; | 
					
						
							|  |  |  |         //方向移动控制 | 
					
						
							|  |  |  |         MoveControl(Dt); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |