|
|
@@ -13,6 +13,23 @@ function _handle_init(){
|
|
|
global.current_priority = _max_priority
|
|
|
}
|
|
|
|
|
|
+/// @desc Get gamepad and maintain a list through Async System events... Well, ungracefully.
|
|
|
+function _gamepad_get(){
|
|
|
+ if (!variable_global_exists("gamepads_list")) global.gamepads_list = [];
|
|
|
+ if (async_load[? "event_type"] == "gamepad discovered")
|
|
|
+ {
|
|
|
+ var _pad = async_load[? "pad_index"];
|
|
|
+ gamepad_set_axis_deadzone(_pad, 0.1);
|
|
|
+ array_push(global.gamepads_list, _pad);
|
|
|
+ }
|
|
|
+ else if (async_load[? "event_type"] == "gamepad lost")
|
|
|
+ {
|
|
|
+ var _pad = async_load[? "pad_index"];
|
|
|
+ var _index = array_get_index(global.gamepads_list, _pad);
|
|
|
+ array_delete(global.gamepads_list, _index, 1);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/// @desc 尝试对按键进行消费
|
|
|
/// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
|
|
|
/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
@@ -75,6 +92,68 @@ function _kcr(_key, _priority = 0) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+/// @desc Get the first gamepad
|
|
|
+function _firstpad(){
|
|
|
+ if (variable_global_exists("gamepads_list") && array_length(global.gamepads_list) > 0) {
|
|
|
+ return global.gamepads_list[0];
|
|
|
+ }
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
+/// @desc 优雅地检测此帧某给定手柄按键是否被按住
|
|
|
+/// @desc 使用{HandleName}.gc()而非此函数
|
|
|
+/// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
+function _gc(_id, _priority = 0)
|
|
|
+{
|
|
|
+ var _pad = _firstpad();
|
|
|
+ if (_try_input_consume(_id, _priority) && gamepad_button_check(_pad, _id)) {
|
|
|
+ //判定成功则对按键进行消费
|
|
|
+ global.input_consumed[$ string(_id)] = true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+/// @desc 优雅地检测此帧某给定手柄按键是否被按住
|
|
|
+/// @desc 使用{HandleName}.gcp()而非此函数
|
|
|
+/// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
+function _gcp( _id, _priority = 0) {
|
|
|
+ var _pad = _firstpad();
|
|
|
+ if (_try_input_consume(_id, _priority) && gamepad_button_check_pressed(_pad, _id)) {
|
|
|
+ //判定成功则对按键进行消费
|
|
|
+ global.input_consumed[$ string(_id)] = true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+/// @desc 优雅地检测此帧某给定手柄按键是否被松开
|
|
|
+/// @desc 使用{HandleName}.gcr()而非此函数
|
|
|
+/// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
+function _gcr(_id, _priority = 0) {
|
|
|
+ var _pad = _firstpad();
|
|
|
+ if (_try_input_consume(_id, _priority) && gamepad_button_check_released(_pad, _id)) {
|
|
|
+ //判定成功则对按键进行消费
|
|
|
+ global.input_consumed[$ string(_id)] = true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+/// @desc 不优雅地检测此帧 gamepad axis
|
|
|
+/// @desc 使用{HandleName}.ga()而非此函数
|
|
|
+/// @param {Constant.VirtualKey|Real} _id 检测的手柄 axis
|
|
|
+/// @param {Constant.Real} _priority 当前句柄的优先级
|
|
|
+function _ga(_id, _priority = 0) {
|
|
|
+ var _pad = _firstpad();
|
|
|
+ if (_try_input_consume(_id, _priority)) {
|
|
|
+ //判定成功则对 axis 进行消费
|
|
|
+ //global.input_consumed[$ string(_id)] = true;
|
|
|
+ return gamepad_axis_value(_pad, _id);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
function input_handle(_reg_name, _priority) constructor {
|
|
|
reg_name = _reg_name;
|
|
|
priority = _priority;
|
|
|
@@ -108,6 +187,39 @@ function input_handle(_reg_name, _priority) constructor {
|
|
|
if (!active) return false;
|
|
|
return _kcr(_key, self.priority);
|
|
|
}
|
|
|
+
|
|
|
+ /// @desc 优雅地检测此帧某给定手柄按键是否被按住
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
+ /// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+ static gc = function(_id) {
|
|
|
+ if (!active) return false;
|
|
|
+ // 自动将自己的 priority 传给底层函数
|
|
|
+ return _gc(_id, self.priority);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// @desc 优雅地检测此帧某给定手柄按键是否被按住
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
+ /// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+ static gcp = function(_id) {
|
|
|
+ if (!active) return false;
|
|
|
+ return _gcp(_id, self.priority);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// @desc 优雅地检测此帧某给定手柄按键是否被松开
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
+ /// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+ static gcr = function(_id) {
|
|
|
+ if (!active) return false;
|
|
|
+ return _gcr(_id, self.priority);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// @desc 不优雅地检测此帧某给定手柄按键是否被松开
|
|
|
+ /// @desc priority继承自其句柄
|
|
|
+ /// @param {Constant.VirtualKey|Real} _id 检测的手柄按键
|
|
|
+ static ga = function(_id) {
|
|
|
+ if (!active) return false;
|
|
|
+ return _ga(_id, self.priority);
|
|
|
+ }
|
|
|
|
|
|
/// @desc 注销当前句柄
|
|
|
static destroy = function() {
|
|
|
@@ -138,13 +250,17 @@ function input_handle_find(_reg_name) {
|
|
|
/// @desc 创建空句柄
|
|
|
function create_dummy_handle(){
|
|
|
global.handle_dummy = {
|
|
|
- kc: function() { return false; },
|
|
|
- kcp: function() { return false; },
|
|
|
- kcr: function() { return false; },
|
|
|
- destroy: function() { },
|
|
|
- active: false,
|
|
|
- priority: -9999
|
|
|
-};
|
|
|
+ kc: function() { return false; },
|
|
|
+ kcp: function() { return false; },
|
|
|
+ kcr: function() { return false; },
|
|
|
+ gc: function() { return false; },
|
|
|
+ gcp: function() { return false; },
|
|
|
+ gcr: function() { return false; },
|
|
|
+ ga: function() { return false; },
|
|
|
+ destroy: function() { },
|
|
|
+ active: false,
|
|
|
+ priority: -9999
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
/// @desc 自动化注册句柄,核心部分等效于 _new_handle = new input_handle(_reg_name, _priority)
|