80 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名: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);
 | |
|         //     }
 | |
|         // }
 | |
|     }
 | |
| } |