91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 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);
 | |
|         }
 | |
| 
 | |
|         //注册Esc按钮对所有游戏窗口的操作
 | |
|         RegisterGameKeyCode(CONTROLLER.OPTION_HOTKEY_MENU_SYSTEM__CLOSE_ALL_WINDOW, function(Flag) {
 | |
|             //按下的时候
 | |
|             if (Flag == 1) {
 | |
|                 //遍历窗口队列 如果可见则调用Show
 | |
|                 for (local i = 0; i< _SYS_WINDOW_LIST_.len(); i++) {
 | |
|                     local Window = _SYS_WINDOW_LIST_[i];
 | |
|                     if (typeof Window == "Game_Window") {
 | |
|                         Window.OnEsc();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         });
 | |
|     }
 | |
|     //系统对游戏的输入
 | |
|     function SystemInput(Code, Type) {
 | |
|         SetKeyCode(Code, Type);
 | |
|     }
 | |
| 
 | |
|     //设定键码状态
 | |
|     function SetKeyCode(Code, Status) {
 | |
|         this.KeyCode[Code] = Status;
 | |
| 
 | |
|         //只遍历有回调的键码
 | |
|         foreach(RCode, Callback in GameKeyCodeCallback) {
 | |
|             if (RCode == Code) {
 | |
|                 Callback(Status);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //获取键码状态
 | |
|     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);
 | |
|         //     }
 | |
|         // }
 | |
|     }
 | |
| } |