2
0

Operator.hx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package arm;
  2. import iron.system.Input;
  3. class Operator {
  4. public static var ops = new Map<String, Dynamic>();
  5. public static function register(name: String, call: Dynamic) {
  6. ops[name] = call;
  7. }
  8. public static function run(name: String) {
  9. if (ops[name] != null) ops[name]();
  10. }
  11. public static function update() {
  12. if (Input.getMouse().startedAny() || Input.getKeyboard().startedAny()) {
  13. for (op in Reflect.fields(Config.keymap)) {
  14. if (shortcut(Reflect.field(Config.keymap, op))) run(op);
  15. }
  16. }
  17. }
  18. public static function shortcut(s: String, type = ShortcutStarted): Bool {
  19. if (s == "") return false;
  20. var mouse = Input.getMouse();
  21. var kb = Input.getKeyboard();
  22. var shift = s.indexOf("shift") >= 0;
  23. var ctrl = s.indexOf("ctrl") >= 0;
  24. var alt = s.indexOf("alt") >= 0;
  25. var flag = shift == kb.down("shift") &&
  26. ctrl == kb.down("control") &&
  27. alt == kb.down("alt");
  28. if (s.indexOf("+") > 0) {
  29. s = s.substr(s.lastIndexOf("+") + 1);
  30. if (s == "number") return flag;
  31. }
  32. else if (shift || ctrl || alt) return flag;
  33. var key = (s == "left" || s == "right" || s == "middle") ?
  34. // Mouse
  35. (type == ShortcutDown ? mouse.down(s) : mouse.started(s)) :
  36. // Keyboard
  37. (type == ShortcutRepeat ? kb.repeat(s) : type == ShortcutDown ? kb.down(s) : type == ShortcutReleased ? kb.released(s) : kb.started(s));
  38. return flag && key;
  39. }
  40. }
  41. @:enum abstract ShortcutType(Int) from Int to Int {
  42. var ShortcutStarted = 0;
  43. var ShortcutRepeat = 1;
  44. var ShortcutDown = 2;
  45. var ShortcutReleased = 3;
  46. }