buttons.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. function _define_property(obj, key, value) {
  3. if (key in obj) {
  4. Object.defineProperty(obj, key, {
  5. value: value,
  6. enumerable: true,
  7. configurable: true,
  8. writable: true
  9. });
  10. } else {
  11. obj[key] = value;
  12. }
  13. return obj;
  14. }
  15. class Buttons {
  16. getButtons() {
  17. let v = 0;
  18. for (const button of Object.keys(this.pressed)){
  19. // eslint-disable-next-line no-bitwise
  20. v |= 2 ** Number(button);
  21. }
  22. return v;
  23. }
  24. down(keyDef) {
  25. const button = getMouseButtonId(keyDef.button);
  26. if (button in this.pressed) {
  27. this.pressed[button].push(keyDef);
  28. return undefined;
  29. }
  30. this.pressed[button] = [
  31. keyDef
  32. ];
  33. return button;
  34. }
  35. up(keyDef) {
  36. const button = getMouseButtonId(keyDef.button);
  37. if (button in this.pressed) {
  38. this.pressed[button] = this.pressed[button].filter((k)=>k.name !== keyDef.name);
  39. if (this.pressed[button].length === 0) {
  40. // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
  41. delete this.pressed[button];
  42. return button;
  43. }
  44. }
  45. return undefined;
  46. }
  47. constructor(){
  48. _define_property(this, "pressed", {});
  49. }
  50. }
  51. const MouseButton = {
  52. primary: 0,
  53. secondary: 1,
  54. auxiliary: 2,
  55. back: 3,
  56. X1: 3,
  57. forward: 4,
  58. X2: 4
  59. };
  60. function getMouseButtonId(button = 0) {
  61. if (button in MouseButton) {
  62. return MouseButton[button];
  63. }
  64. return Number(button);
  65. }
  66. // On the `MouseEvent.button` property auxiliary and secondary button are flipped compared to `MouseEvent.buttons`.
  67. const MouseButtonFlip = {
  68. 1: 2,
  69. 2: 1
  70. };
  71. function getMouseEventButton(button) {
  72. button = getMouseButtonId(button);
  73. if (button in MouseButtonFlip) {
  74. return MouseButtonFlip[button];
  75. }
  76. return button;
  77. }
  78. exports.Buttons = Buttons;
  79. exports.MouseButton = MouseButton;
  80. exports.MouseButtonFlip = MouseButtonFlip;
  81. exports.getMouseButtonId = getMouseButtonId;
  82. exports.getMouseEventButton = getMouseEventButton;