103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.7 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; | ||
|  |     //检查按键与移动方向 | ||
|  |     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); | ||
|  |     } | ||
|  | } |