|
@@ -1,17 +1,23 @@
|
|
|
-global.input_consumed = {};
|
|
|
|
|
-if !(variable_global_exists("handle_priority")) global.handle_priority = [1]
|
|
|
|
|
|
|
+/// @desc 对句柄进行每帧例行初始化.
|
|
|
|
|
+function _handle_init(){
|
|
|
|
|
+ if (!variable_global_exists("input_handles_list")) global.input_handles_list = [];
|
|
|
|
|
+ global.input_consumed = {};
|
|
|
|
|
|
|
|
-var _max_priority = 0;
|
|
|
|
|
-for(var i = 0; i < array_length(global.handle_priority); i++){
|
|
|
|
|
- _max_priority = max(_max_priority, global.handle_priority[i])
|
|
|
|
|
|
|
+ var _max_priority = 0;
|
|
|
|
|
+ for(var i = 0; i < array_length(global.input_handles_list); i++){
|
|
|
|
|
+ var _ch = global.input_handles_list[i];
|
|
|
|
|
+ if(_ch.active){
|
|
|
|
|
+ _max_priority = max(_max_priority, _ch.priority);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ global.current_priority = _max_priority
|
|
|
}
|
|
}
|
|
|
-global.current_priority = _max_priority
|
|
|
|
|
|
|
|
|
|
/// @desc 尝试对按键进行消费
|
|
/// @desc 尝试对按键进行消费
|
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
function _try_input_consume(_key, _priority){
|
|
function _try_input_consume(_key, _priority){
|
|
|
- //如果低于最高优先级 且 非系统级优先级( -1 ), 则拒绝访问
|
|
|
|
|
|
|
+ //如果低于最高优先级 且 非debugger级优先级( -1 ), 则拒绝访问
|
|
|
if(_priority < global.current_priority && _priority != -1) return false;
|
|
if(_priority < global.current_priority && _priority != -1) return false;
|
|
|
|
|
|
|
|
//同一帧内已经被同级句柄/更高级句柄访问( 消费 ), 则拒绝访问
|
|
//同一帧内已经被同级句柄/更高级句柄访问( 消费 ), 则拒绝访问
|
|
@@ -29,9 +35,10 @@ function _force_input_consume(_key){
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// @desc 优雅地检测此帧某给定键盘按键是否被按住
|
|
/// @desc 优雅地检测此帧某给定键盘按键是否被按住
|
|
|
|
|
+/// @desc 使用{HandleName}.kc()而非此函数
|
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
-function kc(_key, _priority = 0)
|
|
|
|
|
|
|
+function _kc(_key, _priority = 0)
|
|
|
{
|
|
{
|
|
|
var _id = key_get_id(_key);
|
|
var _id = key_get_id(_key);
|
|
|
if (_try_input_consume(_id, _priority) && keyboard_check(_id)) {
|
|
if (_try_input_consume(_id, _priority) && keyboard_check(_id)) {
|
|
@@ -41,10 +48,11 @@ function kc(_key, _priority = 0)
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
-/// @desc 优雅地检测此帧某给定键盘按键是否被按下
|
|
|
|
|
|
|
+/// @desc 优雅地检测此帧某给定键盘按键是否被按住
|
|
|
|
|
+/// @desc 使用{HandleName}.kcp()而非此函数
|
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
-function kcp( _key, _priority = 0) {
|
|
|
|
|
|
|
+function _kcp( _key, _priority = 0) {
|
|
|
var _id = key_get_id(_key);
|
|
var _id = key_get_id(_key);
|
|
|
if (_try_input_consume(_id, _priority) && keyboard_check_pressed(_id)) {
|
|
if (_try_input_consume(_id, _priority) && keyboard_check_pressed(_id)) {
|
|
|
//判定成功则对按键进行消费
|
|
//判定成功则对按键进行消费
|
|
@@ -54,9 +62,10 @@ function kcp( _key, _priority = 0) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
/// @desc 优雅地检测此帧某给定键盘按键是否被松开
|
|
/// @desc 优雅地检测此帧某给定键盘按键是否被松开
|
|
|
|
|
+/// @desc 使用{HandleName}.kcr()而非此函数
|
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
-function kcr(_key, _priority = 0) {
|
|
|
|
|
|
|
+function _kcr(_key, _priority = 0) {
|
|
|
var _id = key_get_id(_key);
|
|
var _id = key_get_id(_key);
|
|
|
if (_try_input_consume(_id, _priority) && keyboard_check_released(_id)) {
|
|
if (_try_input_consume(_id, _priority) && keyboard_check_released(_id)) {
|
|
|
//判定成功则对按键进行消费
|
|
//判定成功则对按键进行消费
|
|
@@ -64,4 +73,52 @@ function kcr(_key, _priority = 0) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function input_handle(_name, _priority) constructor {
|
|
|
|
|
+ name = _name;
|
|
|
|
|
+ priority = _priority;
|
|
|
|
|
+ // 理论上,你不应该修改active来控制启用情况,而是使用标准的注册注销流程
|
|
|
|
|
+ active = true;
|
|
|
|
|
+
|
|
|
|
|
+ if (!variable_global_exists("input_handles_list")) global.input_handles_list = [];
|
|
|
|
|
+ array_push(global.input_handles_list, self);
|
|
|
|
|
+
|
|
|
|
|
+ /// @desc 优雅地检测此帧某给定键盘按键是否被按住
|
|
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
|
|
+ /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
|
|
+ static kc = function(_key) {
|
|
|
|
|
+ if (!active) return false;
|
|
|
|
|
+ // 自动将自己的 priority 传给底层函数
|
|
|
|
|
+ return _kc(_key, self.priority);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// @desc 优雅地检测此帧某给定键盘按键是否被按住
|
|
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
|
|
+ /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
|
|
+ static kcp = function(_key) {
|
|
|
|
|
+ if (!active) return false;
|
|
|
|
|
+ return _kcp(_key, self.priority);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// @desc 优雅地检测此帧某给定键盘按键是否被松开
|
|
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
|
|
+ /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
|
|
+ static kcr = function(_key) {
|
|
|
|
|
+ if (!active) return false;
|
|
|
|
|
+ return _kcr(_key, self.priority);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// @desc 注销当前句柄
|
|
|
|
|
+ static destroy = function() {
|
|
|
|
|
+ if (!variable_global_exists("input_handles_list")) return;
|
|
|
|
|
+
|
|
|
|
|
+ var _len = array_length(global.input_handles_list);
|
|
|
|
|
+ for (var i = 0; i < _len; i++) {
|
|
|
|
|
+ if (global.input_handles_list[i] == self) {
|
|
|
|
|
+ array_delete(global.input_handles_list, i, 1);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|