2
0

operator.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. let operator_ops: map_t<string, ()=>void> = map_create();
  2. function operator_register(name: string, call: ()=>void) {
  3. map_set(operator_ops, name, call);
  4. }
  5. function operator_run(name: string) {
  6. if (map_get(operator_ops, name) != null) {
  7. let cb: ()=>void = map_get(operator_ops, name);
  8. cb();
  9. }
  10. }
  11. function operator_update() {
  12. if (mouse_started_any() || keyboard_started_any()) {
  13. let keys: string[] = map_keys(config_keymap);
  14. for (let i: i32 = 0; i < keys.length; ++i) {
  15. let op: string = keys[i];
  16. if (operator_shortcut(map_get(config_keymap, op))) {
  17. operator_run(op);
  18. }
  19. }
  20. }
  21. }
  22. function operator_shortcut(s: string, type: shortcut_type_t = shortcut_type_t.STARTED): bool {
  23. if (s == "") {
  24. return false;
  25. }
  26. let shift: bool = string_index_of(s, "shift") >= 0;
  27. let ctrl: bool = string_index_of(s, "ctrl") >= 0;
  28. let alt: bool = string_index_of(s, "alt") >= 0;
  29. let flag: bool = shift == keyboard_down("shift") && ctrl == keyboard_down("control") && alt == keyboard_down("alt");
  30. if (string_index_of(s, "+") > 0) {
  31. s = substring(s, string_last_index_of(s, "+") + 1, s.length);
  32. if (s == "number") {
  33. return flag;
  34. }
  35. }
  36. else if (shift || ctrl || alt) {
  37. return flag;
  38. }
  39. let key: bool = false;
  40. if (s == "left" || s == "right" || s == "middle") {
  41. if (type == shortcut_type_t.DOWN) {
  42. key = mouse_down(s);
  43. }
  44. else {
  45. key = mouse_started(s);
  46. }
  47. }
  48. else if (type == shortcut_type_t.REPEAT) {
  49. key = keyboard_repeat(s);
  50. }
  51. else if (type == shortcut_type_t.DOWN) {
  52. key = keyboard_down(s);
  53. }
  54. else if (type == shortcut_type_t.RELEASED) {
  55. key = keyboard_released(s);
  56. }
  57. else {
  58. key = keyboard_started(s);
  59. }
  60. return flag && key;
  61. }
  62. enum shortcut_type_t {
  63. STARTED,
  64. REPEAT,
  65. DOWN,
  66. RELEASED,
  67. }