buttons.js 2.0 KB

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