@jolly-pixel/engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +209 -0
  2. package/dist/actor/Actor.d.ts +39 -0
  3. package/dist/actor/Actor.d.ts.map +1 -0
  4. package/dist/actor/Actor.js +171 -0
  5. package/dist/actor/Actor.js.map +1 -0
  6. package/dist/actor/ActorComponent.d.ts +19 -0
  7. package/dist/actor/ActorComponent.d.ts.map +1 -0
  8. package/dist/actor/ActorComponent.js +30 -0
  9. package/dist/actor/ActorComponent.js.map +1 -0
  10. package/dist/actor/ActorTree.d.ts +31 -0
  11. package/dist/actor/ActorTree.d.ts.map +1 -0
  12. package/dist/actor/ActorTree.js +167 -0
  13. package/dist/actor/ActorTree.js.map +1 -0
  14. package/dist/actor/Signal.d.ts +14 -0
  15. package/dist/actor/Signal.d.ts.map +1 -0
  16. package/dist/actor/Signal.js +38 -0
  17. package/dist/actor/Signal.js.map +1 -0
  18. package/dist/actor/Transform.d.ts +37 -0
  19. package/dist/actor/Transform.d.ts.map +1 -0
  20. package/dist/actor/Transform.js +148 -0
  21. package/dist/actor/Transform.js.map +1 -0
  22. package/dist/actor/index.d.ts +5 -0
  23. package/dist/actor/index.d.ts.map +1 -0
  24. package/dist/actor/index.js +5 -0
  25. package/dist/actor/index.js.map +1 -0
  26. package/dist/adapters/canvas.d.ts +7 -0
  27. package/dist/adapters/canvas.d.ts.map +1 -0
  28. package/dist/adapters/canvas.js +2 -0
  29. package/dist/adapters/canvas.js.map +1 -0
  30. package/dist/adapters/console.d.ts +6 -0
  31. package/dist/adapters/console.d.ts.map +1 -0
  32. package/dist/adapters/console.js +2 -0
  33. package/dist/adapters/console.js.map +1 -0
  34. package/dist/adapters/document.d.ts +14 -0
  35. package/dist/adapters/document.d.ts.map +1 -0
  36. package/dist/adapters/document.js +19 -0
  37. package/dist/adapters/document.js.map +1 -0
  38. package/dist/adapters/eventTarget.d.ts +6 -0
  39. package/dist/adapters/eventTarget.d.ts.map +1 -0
  40. package/dist/adapters/eventTarget.js +2 -0
  41. package/dist/adapters/eventTarget.js.map +1 -0
  42. package/dist/adapters/global.d.ts +8 -0
  43. package/dist/adapters/global.d.ts.map +1 -0
  44. package/dist/adapters/global.js +8 -0
  45. package/dist/adapters/global.js.map +1 -0
  46. package/dist/adapters/index.d.ts +6 -0
  47. package/dist/adapters/index.d.ts.map +1 -0
  48. package/dist/adapters/index.js +6 -0
  49. package/dist/adapters/index.js.map +1 -0
  50. package/dist/adapters/navigator.d.ts +9 -0
  51. package/dist/adapters/navigator.d.ts.map +1 -0
  52. package/dist/adapters/navigator.js +9 -0
  53. package/dist/adapters/navigator.js.map +1 -0
  54. package/dist/adapters/window.d.ts +12 -0
  55. package/dist/adapters/window.d.ts.map +1 -0
  56. package/dist/adapters/window.js +11 -0
  57. package/dist/adapters/window.js.map +1 -0
  58. package/dist/audio/AudioBackground.d.ts +48 -0
  59. package/dist/audio/AudioBackground.d.ts.map +1 -0
  60. package/dist/audio/AudioBackground.js +151 -0
  61. package/dist/audio/AudioBackground.js.map +1 -0
  62. package/dist/audio/AudioLibrary.d.ts +6 -0
  63. package/dist/audio/AudioLibrary.d.ts.map +1 -0
  64. package/dist/audio/AudioLibrary.js +6 -0
  65. package/dist/audio/AudioLibrary.js.map +1 -0
  66. package/dist/audio/AudioManager.d.ts +33 -0
  67. package/dist/audio/AudioManager.d.ts.map +1 -0
  68. package/dist/audio/AudioManager.js +47 -0
  69. package/dist/audio/AudioManager.js.map +1 -0
  70. package/dist/audio/GlobalAudio.d.ts +20 -0
  71. package/dist/audio/GlobalAudio.d.ts.map +1 -0
  72. package/dist/audio/GlobalAudio.js +41 -0
  73. package/dist/audio/GlobalAudio.js.map +1 -0
  74. package/dist/audio/internals/AudioBuffer.d.ts +23 -0
  75. package/dist/audio/internals/AudioBuffer.d.ts.map +1 -0
  76. package/dist/audio/internals/AudioBuffer.js +28 -0
  77. package/dist/audio/internals/AudioBuffer.js.map +1 -0
  78. package/dist/audio/internals/AudioListener.d.ts +5 -0
  79. package/dist/audio/internals/AudioListener.d.ts.map +1 -0
  80. package/dist/audio/internals/AudioListener.js +2 -0
  81. package/dist/audio/internals/AudioListener.js.map +1 -0
  82. package/dist/audio/internals/AudioService.d.ts +19 -0
  83. package/dist/audio/internals/AudioService.d.ts.map +1 -0
  84. package/dist/audio/internals/AudioService.js +36 -0
  85. package/dist/audio/internals/AudioService.js.map +1 -0
  86. package/dist/components/camera/Camera3DControls.d.ts +31 -0
  87. package/dist/components/camera/Camera3DControls.d.ts.map +1 -0
  88. package/dist/components/camera/Camera3DControls.js +79 -0
  89. package/dist/components/camera/Camera3DControls.js.map +1 -0
  90. package/dist/components/index.d.ts +5 -0
  91. package/dist/components/index.d.ts.map +1 -0
  92. package/dist/components/index.js +5 -0
  93. package/dist/components/index.js.map +1 -0
  94. package/dist/components/renderers/index.d.ts +14 -0
  95. package/dist/components/renderers/index.d.ts.map +1 -0
  96. package/dist/components/renderers/index.js +14 -0
  97. package/dist/components/renderers/index.js.map +1 -0
  98. package/dist/components/renderers/model/ModelAnimation.d.ts +21 -0
  99. package/dist/components/renderers/model/ModelAnimation.d.ts.map +1 -0
  100. package/dist/components/renderers/model/ModelAnimation.js +84 -0
  101. package/dist/components/renderers/model/ModelAnimation.js.map +1 -0
  102. package/dist/components/renderers/model/ModelRenderer.d.ts +24 -0
  103. package/dist/components/renderers/model/ModelRenderer.d.ts.map +1 -0
  104. package/dist/components/renderers/model/ModelRenderer.js +49 -0
  105. package/dist/components/renderers/model/ModelRenderer.js.map +1 -0
  106. package/dist/components/renderers/model/loader.d.ts +8 -0
  107. package/dist/components/renderers/model/loader.d.ts.map +1 -0
  108. package/dist/components/renderers/model/loader.js +112 -0
  109. package/dist/components/renderers/model/loader.js.map +1 -0
  110. package/dist/components/renderers/sprite/SpriteAnimation.class.d.ts +33 -0
  111. package/dist/components/renderers/sprite/SpriteAnimation.class.d.ts.map +1 -0
  112. package/dist/components/renderers/sprite/SpriteAnimation.class.js +78 -0
  113. package/dist/components/renderers/sprite/SpriteAnimation.class.js.map +1 -0
  114. package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts +35 -0
  115. package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts.map +1 -0
  116. package/dist/components/renderers/sprite/SpriteRenderer.class.js +76 -0
  117. package/dist/components/renderers/sprite/SpriteRenderer.class.js.map +1 -0
  118. package/dist/components/renderers/text/Text3D.class.d.ts +26 -0
  119. package/dist/components/renderers/text/Text3D.class.d.ts.map +1 -0
  120. package/dist/components/renderers/text/Text3D.class.js +104 -0
  121. package/dist/components/renderers/text/Text3D.class.js.map +1 -0
  122. package/dist/components/renderers/text/TextRenderer.class.d.ts +15 -0
  123. package/dist/components/renderers/text/TextRenderer.class.d.ts.map +1 -0
  124. package/dist/components/renderers/text/TextRenderer.class.js +47 -0
  125. package/dist/components/renderers/text/TextRenderer.class.js.map +1 -0
  126. package/dist/components/renderers/text/loader.d.ts +4 -0
  127. package/dist/components/renderers/text/loader.d.ts.map +1 -0
  128. package/dist/components/renderers/text/loader.js +14 -0
  129. package/dist/components/renderers/text/loader.js.map +1 -0
  130. package/dist/components/renderers/tiled/TileLayer.d.ts +13 -0
  131. package/dist/components/renderers/tiled/TileLayer.d.ts.map +1 -0
  132. package/dist/components/renderers/tiled/TileLayer.js +34 -0
  133. package/dist/components/renderers/tiled/TileLayer.js.map +1 -0
  134. package/dist/components/renderers/tiled/TileMapRenderer.d.ts +15 -0
  135. package/dist/components/renderers/tiled/TileMapRenderer.d.ts.map +1 -0
  136. package/dist/components/renderers/tiled/TileMapRenderer.js +59 -0
  137. package/dist/components/renderers/tiled/TileMapRenderer.js.map +1 -0
  138. package/dist/components/renderers/tiled/TileObject.d.ts +18 -0
  139. package/dist/components/renderers/tiled/TileObject.d.ts.map +1 -0
  140. package/dist/components/renderers/tiled/TileObject.js +59 -0
  141. package/dist/components/renderers/tiled/TileObject.js.map +1 -0
  142. package/dist/components/renderers/tiled/TileSet.d.ts +27 -0
  143. package/dist/components/renderers/tiled/TileSet.d.ts.map +1 -0
  144. package/dist/components/renderers/tiled/TileSet.js +116 -0
  145. package/dist/components/renderers/tiled/TileSet.js.map +1 -0
  146. package/dist/components/renderers/tiled/loader.d.ts +13 -0
  147. package/dist/components/renderers/tiled/loader.d.ts.map +1 -0
  148. package/dist/components/renderers/tiled/loader.js +39 -0
  149. package/dist/components/renderers/tiled/loader.js.map +1 -0
  150. package/dist/components/renderers/tiled/types.d.ts +325 -0
  151. package/dist/components/renderers/tiled/types.d.ts.map +1 -0
  152. package/dist/components/renderers/tiled/types.js +18 -0
  153. package/dist/components/renderers/tiled/types.js.map +1 -0
  154. package/dist/components/script/Behavior.d.ts +16 -0
  155. package/dist/components/script/Behavior.d.ts.map +1 -0
  156. package/dist/components/script/Behavior.js +52 -0
  157. package/dist/components/script/Behavior.js.map +1 -0
  158. package/dist/components/script/BehaviorDecorators.d.ts +29 -0
  159. package/dist/components/script/BehaviorDecorators.d.ts.map +1 -0
  160. package/dist/components/script/BehaviorDecorators.js +47 -0
  161. package/dist/components/script/BehaviorDecorators.js.map +1 -0
  162. package/dist/components/script/BehaviorInitializer.d.ts +15 -0
  163. package/dist/components/script/BehaviorInitializer.d.ts.map +1 -0
  164. package/dist/components/script/BehaviorInitializer.js +103 -0
  165. package/dist/components/script/BehaviorInitializer.js.map +1 -0
  166. package/dist/components/types.d.ts +12 -0
  167. package/dist/components/types.d.ts.map +1 -0
  168. package/dist/components/types.js +3 -0
  169. package/dist/components/types.js.map +1 -0
  170. package/dist/controls/AtomicInput.d.ts +17 -0
  171. package/dist/controls/AtomicInput.d.ts.map +1 -0
  172. package/dist/controls/AtomicInput.js +69 -0
  173. package/dist/controls/AtomicInput.js.map +1 -0
  174. package/dist/controls/CombinedInput.d.ts +54 -0
  175. package/dist/controls/CombinedInput.d.ts.map +1 -0
  176. package/dist/controls/CombinedInput.js +119 -0
  177. package/dist/controls/CombinedInput.js.map +1 -0
  178. package/dist/controls/Input.class.d.ts +93 -0
  179. package/dist/controls/Input.class.d.ts.map +1 -0
  180. package/dist/controls/Input.class.js +334 -0
  181. package/dist/controls/Input.class.js.map +1 -0
  182. package/dist/controls/devices/Gamepad.class.d.ts +98 -0
  183. package/dist/controls/devices/Gamepad.class.d.ts.map +1 -0
  184. package/dist/controls/devices/Gamepad.class.js +275 -0
  185. package/dist/controls/devices/Gamepad.class.js.map +1 -0
  186. package/dist/controls/devices/Mouse.class.d.ts +80 -0
  187. package/dist/controls/devices/Mouse.class.d.ts.map +1 -0
  188. package/dist/controls/devices/Mouse.class.js +260 -0
  189. package/dist/controls/devices/Mouse.class.js.map +1 -0
  190. package/dist/controls/devices/Screen.d.ts +27 -0
  191. package/dist/controls/devices/Screen.d.ts.map +1 -0
  192. package/dist/controls/devices/Screen.js +61 -0
  193. package/dist/controls/devices/Screen.js.map +1 -0
  194. package/dist/controls/devices/Touchpad.class.d.ts +61 -0
  195. package/dist/controls/devices/Touchpad.class.d.ts.map +1 -0
  196. package/dist/controls/devices/Touchpad.class.js +149 -0
  197. package/dist/controls/devices/Touchpad.class.js.map +1 -0
  198. package/dist/controls/devices/index.d.ts +6 -0
  199. package/dist/controls/devices/index.d.ts.map +1 -0
  200. package/dist/controls/devices/index.js +6 -0
  201. package/dist/controls/devices/index.js.map +1 -0
  202. package/dist/controls/devices/keyboard/Keyboard.class.d.ts +37 -0
  203. package/dist/controls/devices/keyboard/Keyboard.class.d.ts.map +1 -0
  204. package/dist/controls/devices/keyboard/Keyboard.class.js +135 -0
  205. package/dist/controls/devices/keyboard/Keyboard.class.js.map +1 -0
  206. package/dist/controls/devices/keyboard/code.d.ts +9 -0
  207. package/dist/controls/devices/keyboard/code.d.ts.map +1 -0
  208. package/dist/controls/devices/keyboard/code.js +13 -0
  209. package/dist/controls/devices/keyboard/code.js.map +1 -0
  210. package/dist/controls/devices/keyboard/transformers/alphabet.d.ts +31 -0
  211. package/dist/controls/devices/keyboard/transformers/alphabet.d.ts.map +1 -0
  212. package/dist/controls/devices/keyboard/transformers/alphabet.js +34 -0
  213. package/dist/controls/devices/keyboard/transformers/alphabet.js.map +1 -0
  214. package/dist/controls/devices/keyboard/transformers/numeric.d.ts +15 -0
  215. package/dist/controls/devices/keyboard/transformers/numeric.d.ts.map +1 -0
  216. package/dist/controls/devices/keyboard/transformers/numeric.js +18 -0
  217. package/dist/controls/devices/keyboard/transformers/numeric.js.map +1 -0
  218. package/dist/controls/types.d.ts +23 -0
  219. package/dist/controls/types.d.ts.map +1 -0
  220. package/dist/controls/types.js +2 -0
  221. package/dist/controls/types.js.map +1 -0
  222. package/dist/index.d.ts +9 -0
  223. package/dist/index.d.ts.map +1 -0
  224. package/dist/index.js +9 -0
  225. package/dist/index.js.map +1 -0
  226. package/dist/systems/FixedTimeStep.d.ts +16 -0
  227. package/dist/systems/FixedTimeStep.d.ts.map +1 -0
  228. package/dist/systems/FixedTimeStep.js +41 -0
  229. package/dist/systems/FixedTimeStep.js.map +1 -0
  230. package/dist/systems/GameInstance.d.ts +30 -0
  231. package/dist/systems/GameInstance.d.ts.map +1 -0
  232. package/dist/systems/GameInstance.js +54 -0
  233. package/dist/systems/GameInstance.js.map +1 -0
  234. package/dist/systems/Scene.d.ts +30 -0
  235. package/dist/systems/Scene.d.ts.map +1 -0
  236. package/dist/systems/Scene.js +91 -0
  237. package/dist/systems/Scene.js.map +1 -0
  238. package/dist/systems/asset/Base.d.ts +18 -0
  239. package/dist/systems/asset/Base.d.ts.map +1 -0
  240. package/dist/systems/asset/Base.js +36 -0
  241. package/dist/systems/asset/Base.js.map +1 -0
  242. package/dist/systems/asset/Manager.d.ts +21 -0
  243. package/dist/systems/asset/Manager.d.ts.map +1 -0
  244. package/dist/systems/asset/Manager.js +68 -0
  245. package/dist/systems/asset/Manager.js.map +1 -0
  246. package/dist/systems/asset/Queue.d.ts +8 -0
  247. package/dist/systems/asset/Queue.d.ts.map +1 -0
  248. package/dist/systems/asset/Queue.js +17 -0
  249. package/dist/systems/asset/Queue.js.map +1 -0
  250. package/dist/systems/asset/Registry.d.ts +17 -0
  251. package/dist/systems/asset/Registry.d.ts.map +1 -0
  252. package/dist/systems/asset/Registry.js +23 -0
  253. package/dist/systems/asset/Registry.js.map +1 -0
  254. package/dist/systems/index.d.ts +9 -0
  255. package/dist/systems/index.d.ts.map +1 -0
  256. package/dist/systems/index.js +8 -0
  257. package/dist/systems/index.js.map +1 -0
  258. package/dist/systems/rendering/GameRenderer.d.ts +18 -0
  259. package/dist/systems/rendering/GameRenderer.d.ts.map +1 -0
  260. package/dist/systems/rendering/GameRenderer.js +3 -0
  261. package/dist/systems/rendering/GameRenderer.js.map +1 -0
  262. package/dist/systems/rendering/RenderStrategy.d.ts +24 -0
  263. package/dist/systems/rendering/RenderStrategy.d.ts.map +1 -0
  264. package/dist/systems/rendering/RenderStrategy.js +38 -0
  265. package/dist/systems/rendering/RenderStrategy.js.map +1 -0
  266. package/dist/systems/rendering/ThreeRenderer.d.ts +48 -0
  267. package/dist/systems/rendering/ThreeRenderer.d.ts.map +1 -0
  268. package/dist/systems/rendering/ThreeRenderer.js +149 -0
  269. package/dist/systems/rendering/ThreeRenderer.js.map +1 -0
  270. package/dist/systems/rendering/index.d.ts +4 -0
  271. package/dist/systems/rendering/index.d.ts.map +1 -0
  272. package/dist/systems/rendering/index.js +3 -0
  273. package/dist/systems/rendering/index.js.map +1 -0
  274. package/dist/utils/createViewHelper.d.ts +5 -0
  275. package/dist/utils/createViewHelper.d.ts.map +1 -0
  276. package/dist/utils/createViewHelper.js +11 -0
  277. package/dist/utils/createViewHelper.js.map +1 -0
  278. package/dist/utils/index.d.ts +4 -0
  279. package/dist/utils/index.d.ts.map +1 -0
  280. package/dist/utils/index.js +4 -0
  281. package/dist/utils/index.js.map +1 -0
  282. package/dist/utils/loadJSON.d.ts +2 -0
  283. package/dist/utils/loadJSON.d.ts.map +1 -0
  284. package/dist/utils/loadJSON.js +15 -0
  285. package/dist/utils/loadJSON.js.map +1 -0
  286. package/dist/utils/path.d.ts +9 -0
  287. package/dist/utils/path.d.ts.map +1 -0
  288. package/dist/utils/path.js +18 -0
  289. package/dist/utils/path.js.map +1 -0
  290. package/package.json +41 -0
@@ -0,0 +1,275 @@
1
+ /* eslint-disable max-params */
2
+ // Import Third-party Dependencies
3
+ import { EventEmitter } from "@posva/event-emitter";
4
+ // Import Internal Dependencies
5
+ import { BrowserNavigatorAdapter, BrowserWindowAdapter } from "../../adapters/index.js";
6
+ /**
7
+ * Standard Gamepad button mapping (W3C Gamepad API specification).
8
+ *
9
+ * This mapping corresponds to a typical Xbox/PlayStation controller layout.
10
+ * Actual button availability may vary by controller model.
11
+ *
12
+ * @see https://w3c.github.io/gamepad/#remapping
13
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/buttons
14
+ */
15
+ export const GamepadButton = {
16
+ // Face buttons (right side)
17
+ // Bottom button (Xbox: A, PlayStation: Cross)
18
+ A: 0,
19
+ // Right button (Xbox: B, PlayStation: Circle)
20
+ B: 1,
21
+ // Left button (Xbox: X, PlayStation: Square)
22
+ X: 2,
23
+ // Top button (Xbox: Y, PlayStation: Triangle)
24
+ Y: 3,
25
+ // Shoulder buttons
26
+ // L1
27
+ LeftBumper: 4,
28
+ // R1
29
+ RightBumper: 5,
30
+ // L2
31
+ LeftTrigger: 6,
32
+ // R2
33
+ RightTrigger: 7,
34
+ // Center buttons
35
+ // Back/Share button
36
+ Select: 8,
37
+ // Start/Options button
38
+ Start: 9,
39
+ // Stick buttons (press down on analog stick)
40
+ // L3
41
+ LeftStick: 10,
42
+ // R3
43
+ RightStick: 11,
44
+ // D-Pad
45
+ DPadUp: 12,
46
+ DPadDown: 13,
47
+ DPadLeft: 14,
48
+ DPadRight: 15,
49
+ // Special buttons (may not be present on all controllers)
50
+ // Xbox and PlayStation button
51
+ Home: 16
52
+ };
53
+ /**
54
+ * Standard Gamepad axis mapping.
55
+ *
56
+ * Axis values range from -1.0 to 1.0.
57
+ * - Negative values: Left/Up
58
+ * - Positive values: Right/Down
59
+ */
60
+ export const GamepadAxis = {
61
+ LeftStickX: 0,
62
+ LeftStickY: 1,
63
+ RightStickX: 2,
64
+ RightStickY: 3
65
+ };
66
+ /**
67
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API
68
+ */
69
+ export class Gamepad extends EventEmitter {
70
+ static MaxGamepads = 4;
71
+ static MaxButtons = 16;
72
+ static MaxAxes = 4;
73
+ #navigatorAdapter;
74
+ #windowAdapter;
75
+ #wasActive = false;
76
+ connectedGamepads = 0;
77
+ buttons = [];
78
+ axes = [];
79
+ autoRepeats = [];
80
+ axisDeadZone = 0.25;
81
+ axisAutoRepeatDelayMs = 500;
82
+ axisAutoRepeatRateMs = 33;
83
+ constructor(options = {}) {
84
+ super();
85
+ const { navigatorAdapter = new BrowserNavigatorAdapter(), windowAdapter = new BrowserWindowAdapter() } = options;
86
+ this.#navigatorAdapter = navigatorAdapter;
87
+ this.#windowAdapter = windowAdapter;
88
+ for (let gamepadIndex = 0; gamepadIndex < Gamepad.MaxGamepads; gamepadIndex++) {
89
+ this.buttons[gamepadIndex] = [];
90
+ this.axes[gamepadIndex] = [];
91
+ this.autoRepeats[gamepadIndex] = null;
92
+ }
93
+ this.reset();
94
+ }
95
+ get wasActive() {
96
+ return this.#wasActive;
97
+ }
98
+ connect() {
99
+ this.#windowAdapter.addEventListener("gamepadconnected", this.onGamepadConnected);
100
+ this.#windowAdapter.addEventListener("gamepaddisconnected", this.onGamepadDisconnected);
101
+ }
102
+ disconnect() {
103
+ this.#windowAdapter.removeEventListener("gamepadconnected", this.onGamepadConnected);
104
+ this.#windowAdapter.removeEventListener("gamepaddisconnected", this.onGamepadDisconnected);
105
+ }
106
+ reset() {
107
+ for (let gamepadIndex = 0; gamepadIndex < Gamepad.MaxGamepads; gamepadIndex++) {
108
+ for (let button = 0; button < Gamepad.MaxButtons; button++) {
109
+ this.buttons[gamepadIndex][button] = {
110
+ isDown: false,
111
+ wasJustPressed: false,
112
+ wasJustReleased: false,
113
+ value: 0
114
+ };
115
+ }
116
+ for (let axes = 0; axes < Gamepad.MaxAxes; axes++) {
117
+ this.axes[gamepadIndex][axes] = {
118
+ wasPositiveJustPressed: false,
119
+ wasPositiveJustAutoRepeated: false,
120
+ wasPositiveJustReleased: false,
121
+ wasNegativeJustPressed: false,
122
+ wasNegativeJustAutoRepeated: false,
123
+ wasNegativeJustReleased: false,
124
+ value: 0
125
+ };
126
+ }
127
+ }
128
+ }
129
+ update() {
130
+ const gamepads = this.#navigatorAdapter.getGamepads();
131
+ if (gamepads === null) {
132
+ return;
133
+ }
134
+ this.#wasActive = false;
135
+ for (let gamepadIndex = 0; gamepadIndex < Gamepad.MaxGamepads; gamepadIndex++) {
136
+ const gamepad = gamepads[gamepadIndex];
137
+ if (gamepad) {
138
+ this.#updateButtons(gamepad, gamepadIndex);
139
+ this.#updateAxes(gamepad, gamepadIndex);
140
+ }
141
+ }
142
+ }
143
+ #updateButtons(gamepad, gamepadIndex) {
144
+ for (let buttonIndex = 0; buttonIndex < this.buttons[gamepadIndex].length; buttonIndex++) {
145
+ if (gamepad.buttons[buttonIndex] === null) {
146
+ continue;
147
+ }
148
+ const button = this.buttons[gamepadIndex][buttonIndex];
149
+ const wasDown = button.isDown;
150
+ const isDown = gamepad.buttons[buttonIndex].pressed;
151
+ button.isDown = isDown;
152
+ button.value = gamepad.buttons[buttonIndex].value;
153
+ button.wasJustPressed = !wasDown && button.isDown;
154
+ button.wasJustReleased = wasDown && !button.isDown;
155
+ if (isDown) {
156
+ this.#wasActive = true;
157
+ }
158
+ }
159
+ }
160
+ #updateAxes(gamepad, gamepadIndex) {
161
+ const now = Date.now();
162
+ for (let stick = 0; stick < 2; stick++) {
163
+ const stickIndex = stick * 2;
164
+ if (!(gamepad.axes[stickIndex] !== null &&
165
+ gamepad.axes[stickIndex + 1] !== null)) {
166
+ continue;
167
+ }
168
+ const axes = [
169
+ this.axes[gamepadIndex][stickIndex],
170
+ this.axes[gamepadIndex][stickIndex + 1]
171
+ ];
172
+ const wasAxisDown = this.#getAxisDownStates(axes);
173
+ this.#updateAxisValues(gamepad, axes, stickIndex);
174
+ const isAxisDown = this.#getAxisDownStates(axes);
175
+ this.#updateAxisStates(axes, wasAxisDown, isAxisDown);
176
+ this.#processCurrentAutoRepeat(gamepadIndex, stickIndex, axes, isAxisDown, now);
177
+ this.#createNewAutoRepeat(gamepadIndex, stickIndex, axes, now);
178
+ if (isAxisDown[0].positive || isAxisDown[0].negative ||
179
+ isAxisDown[1].positive || isAxisDown[1].negative) {
180
+ this.#wasActive = true;
181
+ }
182
+ }
183
+ }
184
+ #getAxisDownStates(axes) {
185
+ const pressedValue = 0.5;
186
+ return [
187
+ { positive: axes[0].value > pressedValue, negative: axes[0].value < -pressedValue },
188
+ { positive: axes[1].value > pressedValue, negative: axes[1].value < -pressedValue }
189
+ ];
190
+ }
191
+ #updateAxisValues(gamepad, axes, stickIndex) {
192
+ const axisLength = Math.sqrt(Math.pow(Math.abs(gamepad.axes[stickIndex]), 2) +
193
+ Math.pow(Math.abs(gamepad.axes[stickIndex + 1]), 2));
194
+ if (axisLength < this.axisDeadZone) {
195
+ axes[0].value = 0;
196
+ axes[1].value = 0;
197
+ }
198
+ else {
199
+ axes[0].value = gamepad.axes[stickIndex];
200
+ axes[1].value = gamepad.axes[stickIndex + 1];
201
+ }
202
+ }
203
+ #updateAxisStates(axes, wasAxisDown, isAxisDown) {
204
+ for (let i = 0; i < 2; i++) {
205
+ const axis = axes[i];
206
+ axis.wasPositiveJustPressed = !wasAxisDown[i].positive && isAxisDown[i].positive;
207
+ axis.wasPositiveJustReleased = wasAxisDown[i].positive && !isAxisDown[i].positive;
208
+ axis.wasPositiveJustAutoRepeated = false;
209
+ axis.wasNegativeJustPressed = !wasAxisDown[i].negative && isAxisDown[i].negative;
210
+ axis.wasNegativeJustReleased = wasAxisDown[i].negative && !isAxisDown[i].negative;
211
+ axis.wasNegativeJustAutoRepeated = false;
212
+ }
213
+ }
214
+ #processCurrentAutoRepeat(gamepadIndex, stick, axes, isAxisDown, now) {
215
+ const currentAutoRepeat = this.autoRepeats[gamepadIndex];
216
+ if (currentAutoRepeat === null) {
217
+ return;
218
+ }
219
+ const axisIndex = currentAutoRepeat.axis - (stick * 2);
220
+ if (axisIndex !== 0 && axisIndex !== 1) {
221
+ return;
222
+ }
223
+ const shouldReleaseAutoRepeat = (currentAutoRepeat.positive && !isAxisDown[axisIndex].positive) ||
224
+ (!currentAutoRepeat.positive && !isAxisDown[axisIndex].negative);
225
+ if (shouldReleaseAutoRepeat) {
226
+ this.autoRepeats[gamepadIndex] = null;
227
+ }
228
+ else if (currentAutoRepeat.time <= now) {
229
+ const autoRepeatedAxis = axes[axisIndex];
230
+ if (currentAutoRepeat.positive) {
231
+ autoRepeatedAxis.wasPositiveJustAutoRepeated = true;
232
+ }
233
+ else {
234
+ autoRepeatedAxis.wasNegativeJustAutoRepeated = true;
235
+ }
236
+ currentAutoRepeat.time = now + this.axisAutoRepeatRateMs;
237
+ }
238
+ }
239
+ #createNewAutoRepeat(gamepadIndex, stick, axes, now) {
240
+ let newAutoRepeat = null;
241
+ if (axes[0].wasPositiveJustPressed ||
242
+ axes[0].wasNegativeJustPressed) {
243
+ newAutoRepeat = {
244
+ axis: stick * 2,
245
+ positive: axes[0].wasPositiveJustPressed,
246
+ time: now + this.axisAutoRepeatDelayMs
247
+ };
248
+ }
249
+ else if (axes[1].wasPositiveJustPressed ||
250
+ axes[1].wasNegativeJustPressed) {
251
+ newAutoRepeat = {
252
+ axis: (stick * 2) + 1,
253
+ positive: axes[1].wasPositiveJustPressed,
254
+ time: now + this.axisAutoRepeatDelayMs
255
+ };
256
+ }
257
+ const currentAutoRepeat = this.autoRepeats[gamepadIndex];
258
+ const shouldSetNewAutoRepeat = newAutoRepeat !== null &&
259
+ (currentAutoRepeat === null ||
260
+ currentAutoRepeat.axis !== newAutoRepeat.axis ||
261
+ currentAutoRepeat.positive !== newAutoRepeat.positive);
262
+ if (shouldSetNewAutoRepeat) {
263
+ this.autoRepeats[gamepadIndex] = newAutoRepeat;
264
+ }
265
+ }
266
+ onGamepadConnected = (event) => {
267
+ this.connectedGamepads++;
268
+ this.emit("connect", event.gamepad);
269
+ };
270
+ onGamepadDisconnected = (event) => {
271
+ this.connectedGamepads--;
272
+ this.emit("disconnect", event.gamepad);
273
+ };
274
+ }
275
+ //# sourceMappingURL=Gamepad.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gamepad.class.js","sourceRoot":"","sources":["../../../src/controls/devices/Gamepad.class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { EventEmitter } from "@posva/event-emitter";
2
+ import { type DocumentAdapter, type CanvasAdapter } from "../../adapters/index.ts";
3
+ import type { InputControl } from "../types.ts";
4
+ import { type TouchPosition } from "./Touchpad.class.ts";
5
+ export interface MouseButtonState {
6
+ isDown: boolean;
7
+ doubleClicked: boolean;
8
+ wasJustPressed: boolean;
9
+ wasJustReleased: boolean;
10
+ }
11
+ /**
12
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button
13
+ */
14
+ export declare const MouseEventButton: {
15
+ readonly left: 0;
16
+ readonly middle: 1;
17
+ readonly right: 2;
18
+ readonly back: 3;
19
+ readonly forward: 4;
20
+ readonly scrollUp: 5;
21
+ readonly scrollDown: 6;
22
+ };
23
+ export type MouseAction = keyof typeof MouseEventButton;
24
+ export type MouseLockState = "locked" | "unlocked";
25
+ export type MouseEvents = {
26
+ lockStateChange: [MouseLockState];
27
+ down: [event: MouseEvent];
28
+ up: [event: MouseEvent];
29
+ move: [event: MouseEvent];
30
+ wheel: [event: WheelEvent];
31
+ };
32
+ export interface MouseOptions {
33
+ canvas: CanvasAdapter;
34
+ documentAdapter?: DocumentAdapter;
35
+ }
36
+ export declare class Mouse extends EventEmitter<MouseEvents> implements InputControl {
37
+ #private;
38
+ /**
39
+ * @see https://github.com/w3c/uievents/issues/181
40
+ */
41
+ static getWheelDelta(event: WheelEvent): [number, number];
42
+ buttons: MouseButtonState[];
43
+ buttonsDown: boolean[];
44
+ newPosition: {
45
+ x: number;
46
+ y: number;
47
+ } | null;
48
+ newDelta: {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ constructor(options: MouseOptions);
53
+ get wasActive(): boolean;
54
+ connect(): void;
55
+ disconnect(): void;
56
+ reset(): void;
57
+ get scrollUp(): boolean;
58
+ get scrollDown(): boolean;
59
+ get position(): {
60
+ x: number;
61
+ y: number;
62
+ };
63
+ get delta(): {
64
+ x: number;
65
+ y: number;
66
+ };
67
+ get locked(): boolean;
68
+ lock(): void;
69
+ unlock(): void;
70
+ synchronizeWithTouch(touch: Touch, buttonValue?: boolean, position?: TouchPosition): void;
71
+ update(): void;
72
+ private onMouseMove;
73
+ private onMouseDown;
74
+ private onMouseUp;
75
+ private onMouseDoubleClick;
76
+ private onMouseWheel;
77
+ private onPointerLockChange;
78
+ private onPointerLockError;
79
+ }
80
+ //# sourceMappingURL=Mouse.class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mouse.class.d.ts","sourceRoot":"","sources":["../../../src/controls/devices/Mouse.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,CAAC,cAAc,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1B,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,KAAM,SAAQ,YAAY,CACrC,WAAW,CACX,YAAW,YAAY;;IACvB;;OAEG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,UAAU,GAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IA6BnB,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjC,WAAW,EAAE,OAAO,EAAE,CAAM;IAG5B,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;KAAE,GAAG,IAAI,CAAQ;IAGrD,QAAQ;;;MAAkB;gBAQxB,OAAO,EAAE,YAAY;IAavB,IAAI,SAAS,YAEZ;IAED,OAAO;IAUP,UAAU;IAUV,KAAK;IAuBL,IAAI,QAAQ,YAEX;IAED,IAAI,UAAU,YAEb;IAED,IAAI,QAAQ;;;MAEX;IAED,IAAI,KAAK;;;MAER;IAED,IAAI,MAAM,YAET;IAED,IAAI;IAUJ,MAAM;IAaN,oBAAoB,CAClB,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,OAAO,EACrB,QAAQ,CAAC,EAAE,aAAa;IAa1B,MAAM;IAqDN,OAAO,CAAC,WAAW,CAwBjB;IAEF,OAAO,CAAC,WAAW,CASjB;IAEF,OAAO,CAAC,SAAS,CAUf;IAEF,OAAO,CAAC,kBAAkB,CAGxB;IAEF,OAAO,CAAC,YAAY,CAQlB;IAEF,OAAO,CAAC,mBAAmB,CAMzB;IAEF,OAAO,CAAC,kBAAkB,CAKxB;CACH"}
@@ -0,0 +1,260 @@
1
+ // Import Third-party Dependencies
2
+ import { EventEmitter } from "@posva/event-emitter";
3
+ // Import Internal Dependencies
4
+ import { BrowserDocumentAdapter } from "../../adapters/index.js";
5
+ import { TouchIdentifier } from "./Touchpad.class.js";
6
+ /**
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button
8
+ */
9
+ export const MouseEventButton = {
10
+ left: 0,
11
+ middle: 1,
12
+ right: 2,
13
+ back: 3,
14
+ forward: 4,
15
+ scrollUp: 5,
16
+ scrollDown: 6
17
+ };
18
+ export class Mouse extends EventEmitter {
19
+ /**
20
+ * @see https://github.com/w3c/uievents/issues/181
21
+ */
22
+ static getWheelDelta(event) {
23
+ const isApple = /^Mac|iPhone|iPod|iPad/i.test(navigator.platform);
24
+ if (isApple) {
25
+ // Note that deltaMode MUST be accessed BEFORE delta* in order to get
26
+ // non-pixel values in Firefox.
27
+ // See https://github.com/w3c/uievents/issues/181
28
+ switch (event.deltaMode) {
29
+ case event.DOM_DELTA_LINE:
30
+ case event.DOM_DELTA_PAGE:
31
+ // Discard the delta value, just take the sign
32
+ return [Math.sign(event.deltaX), Math.sign(-event.deltaY)];
33
+ case event.DOM_DELTA_PIXEL:
34
+ default:
35
+ return [event.deltaX / 120, -event.deltaY / 120];
36
+ }
37
+ }
38
+ else {
39
+ return [
40
+ -event.wheelDeltaX / 120,
41
+ event.wheelDeltaY / 120
42
+ ];
43
+ }
44
+ }
45
+ #canvas;
46
+ #documentAdapter;
47
+ buttons = [];
48
+ buttonsDown = [];
49
+ #position = { x: 0, y: 0 };
50
+ newPosition = null;
51
+ #delta = { x: 0, y: 0 };
52
+ newDelta = { x: 0, y: 0 };
53
+ #scrollDelta = { x: 0, y: 0 };
54
+ #wasActive = false;
55
+ #wantsPointerLock = false;
56
+ #wasPointerLocked = false;
57
+ constructor(options) {
58
+ const { canvas, documentAdapter = new BrowserDocumentAdapter() } = options;
59
+ super();
60
+ this.#canvas = canvas;
61
+ this.#documentAdapter = documentAdapter;
62
+ this.reset();
63
+ }
64
+ get wasActive() {
65
+ return this.#wasActive;
66
+ }
67
+ connect() {
68
+ this.#canvas.addEventListener("mousemove", this.onMouseMove);
69
+ this.#canvas.addEventListener("mousedown", this.onMouseDown);
70
+ this.#canvas.addEventListener("mouseup", this.onMouseUp);
71
+ this.#canvas.addEventListener("dblclick", this.onMouseDoubleClick);
72
+ this.#canvas.addEventListener("wheel", this.onMouseWheel);
73
+ this.#documentAdapter.addEventListener("pointerlockchange", this.onPointerLockChange, false);
74
+ this.#documentAdapter.addEventListener("pointerlockerror", this.onPointerLockError, false);
75
+ }
76
+ disconnect() {
77
+ this.#canvas.removeEventListener("mousemove", this.onMouseMove);
78
+ this.#canvas.removeEventListener("mousedown", this.onMouseDown);
79
+ this.#canvas.removeEventListener("mouseup", this.onMouseUp);
80
+ this.#canvas.removeEventListener("dblclick", this.onMouseDoubleClick);
81
+ this.#canvas.removeEventListener("wheel", this.onMouseWheel);
82
+ this.#documentAdapter.removeEventListener("pointerlockchange", this.onPointerLockChange, false);
83
+ this.#documentAdapter.removeEventListener("pointerlockerror", this.onPointerLockError, false);
84
+ }
85
+ reset() {
86
+ this.#scrollDelta.x = 0;
87
+ this.#scrollDelta.y = 0;
88
+ for (let i = 0; i <= 6; i++) {
89
+ this.buttons[i] = {
90
+ isDown: false,
91
+ doubleClicked: false,
92
+ wasJustPressed: false,
93
+ wasJustReleased: false
94
+ };
95
+ this.buttonsDown[i] = false;
96
+ }
97
+ this.#position.x = 0;
98
+ this.#position.y = 0;
99
+ this.newPosition = null;
100
+ this.#delta.x = 0;
101
+ this.#delta.y = 0;
102
+ this.newDelta.x = 0;
103
+ this.newDelta.y = 0;
104
+ }
105
+ get scrollUp() {
106
+ return this.buttonsDown[MouseEventButton.scrollUp];
107
+ }
108
+ get scrollDown() {
109
+ return this.buttonsDown[MouseEventButton.scrollDown];
110
+ }
111
+ get position() {
112
+ return { x: this.#position.x, y: this.#position.y };
113
+ }
114
+ get delta() {
115
+ return { x: this.#delta.x, y: this.#delta.y };
116
+ }
117
+ get locked() {
118
+ return this.#documentAdapter.pointerLockElement === this.#canvas;
119
+ }
120
+ lock() {
121
+ if (this.#wantsPointerLock) {
122
+ return;
123
+ }
124
+ this.#wantsPointerLock = true;
125
+ this.newDelta.x = 0;
126
+ this.newDelta.y = 0;
127
+ }
128
+ unlock() {
129
+ const isLocked = this.locked;
130
+ if (!isLocked) {
131
+ return;
132
+ }
133
+ this.#wantsPointerLock = false;
134
+ this.#wasPointerLocked = false;
135
+ if (isLocked) {
136
+ this.#documentAdapter.exitPointerLock();
137
+ }
138
+ }
139
+ synchronizeWithTouch(touch, buttonValue, position) {
140
+ if (touch.identifier !== TouchIdentifier.primary) {
141
+ return;
142
+ }
143
+ if (typeof buttonValue === "boolean") {
144
+ this.buttonsDown[MouseEventButton.left] = buttonValue;
145
+ }
146
+ if (position) {
147
+ this.newPosition = position;
148
+ }
149
+ }
150
+ update() {
151
+ this.#wasActive = false;
152
+ const isScrollUp = this.#scrollDelta.y > 0;
153
+ const isScrollDown = this.#scrollDelta.y < 0;
154
+ this.buttonsDown[MouseEventButton.scrollUp] = isScrollUp;
155
+ this.buttonsDown[MouseEventButton.scrollDown] = isScrollDown;
156
+ if (isScrollDown || isScrollUp) {
157
+ this.#wasActive = true;
158
+ }
159
+ if (this.#scrollDelta.x !== 0) {
160
+ this.#scrollDelta.x = 0;
161
+ }
162
+ if (this.#scrollDelta.y !== 0) {
163
+ this.#scrollDelta.y = 0;
164
+ }
165
+ if (this.#wantsPointerLock && this.#wasPointerLocked) {
166
+ this.#delta.x = this.newDelta.x;
167
+ this.#delta.y = this.newDelta.y;
168
+ this.newDelta.x = 0;
169
+ this.newDelta.y = 0;
170
+ }
171
+ else if (this.newPosition === null) {
172
+ this.#delta.x = 0;
173
+ this.#delta.y = 0;
174
+ }
175
+ else {
176
+ this.#delta.x = this.newPosition.x - this.#position.x;
177
+ this.#delta.y = this.newPosition.y - this.#position.y;
178
+ this.#position.x = this.newPosition.x;
179
+ this.#position.y = this.newPosition.y;
180
+ this.newPosition = null;
181
+ }
182
+ for (let i = 0; i < this.buttons.length; i++) {
183
+ const mouseButton = this.buttons[i];
184
+ const wasDown = mouseButton.isDown;
185
+ const isDown = this.buttonsDown[i];
186
+ mouseButton.isDown = isDown;
187
+ mouseButton.wasJustPressed = !wasDown && mouseButton.isDown;
188
+ mouseButton.wasJustReleased = wasDown && !mouseButton.isDown;
189
+ if (isDown) {
190
+ this.#wasActive = true;
191
+ }
192
+ }
193
+ }
194
+ onMouseMove = (event) => {
195
+ event.preventDefault();
196
+ if (this.#wantsPointerLock) {
197
+ if (this.#wasPointerLocked) {
198
+ const delta = { x: 0, y: 0 };
199
+ if (event.movementX !== null) {
200
+ delta.x = event.movementX;
201
+ delta.y = event.movementY;
202
+ }
203
+ this.newDelta.x += delta.x;
204
+ this.newDelta.y += delta.y;
205
+ }
206
+ }
207
+ else {
208
+ const rect = event.target.getBoundingClientRect();
209
+ this.newPosition = {
210
+ x: event.clientX - rect.left,
211
+ y: event.clientY - rect.top
212
+ };
213
+ }
214
+ this.emit("move", event);
215
+ };
216
+ onMouseDown = (event) => {
217
+ event.preventDefault();
218
+ this.#canvas.focus();
219
+ this.buttonsDown[event.button] = true;
220
+ if (this.#wantsPointerLock && !this.#wasPointerLocked) {
221
+ this.#canvas.requestPointerLock();
222
+ }
223
+ this.emit("down", event);
224
+ };
225
+ onMouseUp = (event) => {
226
+ if (this.buttonsDown[event.button]) {
227
+ event.preventDefault();
228
+ }
229
+ this.buttonsDown[event.button] = false;
230
+ if (this.#wantsPointerLock && !this.#wasPointerLocked) {
231
+ this.#canvas.requestPointerLock();
232
+ }
233
+ this.emit("up", event);
234
+ };
235
+ onMouseDoubleClick = (event) => {
236
+ event.preventDefault();
237
+ this.buttons[event.button].doubleClicked = true;
238
+ };
239
+ onMouseWheel = (event) => {
240
+ event.preventDefault();
241
+ const [deltaX, deltaY] = Mouse.getWheelDelta(event);
242
+ this.#scrollDelta = { x: deltaX, y: deltaY };
243
+ this.emit("wheel", event);
244
+ return false;
245
+ };
246
+ onPointerLockChange = () => {
247
+ const isPointerLocked = this.locked;
248
+ if (this.#wasPointerLocked !== isPointerLocked) {
249
+ this.emit("lockStateChange", isPointerLocked ? "locked" : "unlocked");
250
+ this.#wasPointerLocked = isPointerLocked;
251
+ }
252
+ };
253
+ onPointerLockError = () => {
254
+ if (this.#wasPointerLocked) {
255
+ this.emit("lockStateChange", "unlocked");
256
+ this.#wasPointerLocked = false;
257
+ }
258
+ };
259
+ }
260
+ //# sourceMappingURL=Mouse.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mouse.class.js","sourceRoot":"","sources":["../../../src/controls/devices/Mouse.class.ts"],"names":[],"mappings":"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"}