Interaction.gml 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. global.input_consumed = {};
  2. if !(variable_global_exists("handle_priority")) global.handle_priority = [1]
  3. var _max_priority = 0;
  4. for(var i = 0; i < array_length(global.handle_priority); i++){
  5. _max_priority = max(_max_priority, global.handle_priority[i])
  6. }
  7. global.current_priority = _max_priority
  8. /// @desc 尝试对按键进行消费
  9. /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
  10. /// @param {Constant.Real} _priority 当前句柄的优先级
  11. function _try_input_consume(_key, _priority){
  12. //如果低于最高优先级 且 非系统级优先级( -1 ), 则拒绝访问
  13. if(_priority < global.current_priority && _priority != -1) return false;
  14. //同一帧内已经被同级句柄/更高级句柄访问( 消费 ), 则拒绝访问
  15. var _key_id = string(_key);
  16. if (struct_exists(global.input_consumed, _key_id)) return false;
  17. return true;
  18. }
  19. /// @desc 强制消费给定键盘按键
  20. /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
  21. function _force_input_consume(_key){
  22. var _id = key_get_id(_key);
  23. global.input_consumed[$ string(_id)] = true;
  24. }
  25. /// @desc 优雅地检测此帧某给定键盘按键是否被按住
  26. /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
  27. /// @param {Constant.Real} _priority 当前句柄的优先级
  28. function kc(_key, _priority = 0)
  29. {
  30. var _id = key_get_id(_key);
  31. if (_try_input_consume(_id, _priority) && keyboard_check(_id)) {
  32. //判定成功则对按键进行消费
  33. global.input_consumed[$ string(_id)] = true;
  34. return true;
  35. }
  36. return false;
  37. }
  38. /// @desc 优雅地检测此帧某给定键盘按键是否被按下
  39. /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
  40. /// @param {Constant.Real} _priority 当前句柄的优先级
  41. function kcp( _key, _priority = 0) {
  42. var _id = key_get_id(_key);
  43. if (_try_input_consume(_id, _priority) && keyboard_check_pressed(_id)) {
  44. //判定成功则对按键进行消费
  45. global.input_consumed[$ string(_id)] = true;
  46. return true;
  47. }
  48. return false;
  49. }
  50. /// @desc 优雅地检测此帧某给定键盘按键是否被松开
  51. /// @param {Constant.VirtualKey|Real} _key 检测的键盘按键
  52. /// @param {Constant.Real} _priority 当前句柄的优先级
  53. function kcr(_key, _priority = 0) {
  54. var _id = key_get_id(_key);
  55. if (_try_input_consume(_id, _priority) && keyboard_check_released(_id)) {
  56. //判定成功则对按键进行消费
  57. global.input_consumed[$ string(_id)] = true;
  58. return true;
  59. }
  60. return false;
  61. }