@codexo/exojs 0.7.11 → 0.7.13

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 (492) hide show
  1. package/CHANGELOG.md +442 -0
  2. package/dist/esm/animation/Tween.d.ts +60 -1
  3. package/dist/esm/animation/Tween.js +60 -1
  4. package/dist/esm/animation/Tween.js.map +1 -1
  5. package/dist/esm/animation/TweenManager.d.ts +10 -0
  6. package/dist/esm/animation/TweenManager.js +10 -0
  7. package/dist/esm/animation/TweenManager.js.map +1 -1
  8. package/dist/esm/animation/types.d.ts +15 -0
  9. package/dist/esm/animation/types.js +6 -0
  10. package/dist/esm/animation/types.js.map +1 -1
  11. package/dist/esm/audio/AbstractMedia.d.ts +11 -0
  12. package/dist/esm/audio/AbstractMedia.js +10 -0
  13. package/dist/esm/audio/AbstractMedia.js.map +1 -1
  14. package/dist/esm/audio/AudioAnalyser.d.ts +21 -0
  15. package/dist/esm/audio/AudioAnalyser.js +16 -0
  16. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  17. package/dist/esm/audio/AudioBus.d.ts +37 -0
  18. package/dist/esm/audio/AudioBus.js +36 -0
  19. package/dist/esm/audio/AudioBus.js.map +1 -1
  20. package/dist/esm/audio/AudioFilter.d.ts +7 -0
  21. package/dist/esm/audio/AudioFilter.js +6 -0
  22. package/dist/esm/audio/AudioFilter.js.map +1 -1
  23. package/dist/esm/audio/AudioListener.d.ts +19 -0
  24. package/dist/esm/audio/AudioListener.js +11 -0
  25. package/dist/esm/audio/AudioListener.js.map +1 -1
  26. package/dist/esm/audio/AudioManager.d.ts +37 -0
  27. package/dist/esm/audio/AudioManager.js +37 -0
  28. package/dist/esm/audio/AudioManager.js.map +1 -1
  29. package/dist/esm/audio/BeatDetector.d.ts +21 -0
  30. package/dist/esm/audio/BeatDetector.js +21 -0
  31. package/dist/esm/audio/BeatDetector.js.map +1 -1
  32. package/dist/esm/audio/Media.d.ts +11 -0
  33. package/dist/esm/audio/Music.d.ts +12 -0
  34. package/dist/esm/audio/Music.js +12 -0
  35. package/dist/esm/audio/Music.js.map +1 -1
  36. package/dist/esm/audio/Sound.d.ts +25 -0
  37. package/dist/esm/audio/Sound.js +18 -0
  38. package/dist/esm/audio/Sound.js.map +1 -1
  39. package/dist/esm/audio/audio-context.d.ts +48 -0
  40. package/dist/esm/audio/audio-context.js +48 -5
  41. package/dist/esm/audio/audio-context.js.map +1 -1
  42. package/dist/esm/audio/filters/ChorusFilter.d.ts +5 -0
  43. package/dist/esm/audio/filters/ChorusFilter.js +4 -0
  44. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
  45. package/dist/esm/audio/filters/CompressorFilter.d.ts +12 -0
  46. package/dist/esm/audio/filters/CompressorFilter.js +11 -0
  47. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
  48. package/dist/esm/audio/filters/DelayFilter.d.ts +11 -0
  49. package/dist/esm/audio/filters/DelayFilter.js +10 -0
  50. package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
  51. package/dist/esm/audio/filters/DuckingFilter.d.ts +13 -0
  52. package/dist/esm/audio/filters/DuckingFilter.js +12 -0
  53. package/dist/esm/audio/filters/DuckingFilter.js.map +1 -1
  54. package/dist/esm/audio/filters/EqualizerFilter.d.ts +20 -0
  55. package/dist/esm/audio/filters/EqualizerFilter.js +40 -0
  56. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
  57. package/dist/esm/audio/filters/GranularFilter.d.ts +6 -0
  58. package/dist/esm/audio/filters/GranularFilter.js +6 -0
  59. package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
  60. package/dist/esm/audio/filters/HighpassFilter.d.ts +10 -0
  61. package/dist/esm/audio/filters/HighpassFilter.js +9 -0
  62. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
  63. package/dist/esm/audio/filters/LowpassFilter.d.ts +10 -0
  64. package/dist/esm/audio/filters/LowpassFilter.js +9 -0
  65. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
  66. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +2 -0
  67. package/dist/esm/audio/filters/PitchShiftFilter.js +2 -0
  68. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
  69. package/dist/esm/audio/filters/ReverbFilter.d.ts +12 -0
  70. package/dist/esm/audio/filters/ReverbFilter.js +11 -0
  71. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
  72. package/dist/esm/audio/filters/VocoderFilter.d.ts +11 -0
  73. package/dist/esm/audio/filters/VocoderFilter.js +11 -0
  74. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
  75. package/dist/esm/audio/filters/WorkletFilter.d.ts +6 -1
  76. package/dist/esm/audio/filters/WorkletFilter.js +6 -1
  77. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
  78. package/dist/esm/core/Application.d.ts +66 -1
  79. package/dist/esm/core/Application.js +68 -6
  80. package/dist/esm/core/Application.js.map +1 -1
  81. package/dist/esm/core/Bounds.d.ts +23 -0
  82. package/dist/esm/core/Bounds.js +23 -0
  83. package/dist/esm/core/Bounds.js.map +1 -1
  84. package/dist/esm/core/Clock.d.ts +21 -0
  85. package/dist/esm/core/Clock.js +21 -0
  86. package/dist/esm/core/Clock.js.map +1 -1
  87. package/dist/esm/core/Color.d.ts +35 -0
  88. package/dist/esm/core/Color.js +35 -0
  89. package/dist/esm/core/Color.js.map +1 -1
  90. package/dist/esm/core/Scene.d.ts +76 -0
  91. package/dist/esm/core/Scene.js +83 -0
  92. package/dist/esm/core/Scene.js.map +1 -1
  93. package/dist/esm/core/SceneManager.d.ts +62 -0
  94. package/dist/esm/core/SceneManager.js +51 -2
  95. package/dist/esm/core/SceneManager.js.map +1 -1
  96. package/dist/esm/core/SceneNode.d.ts +31 -0
  97. package/dist/esm/core/SceneNode.js +31 -0
  98. package/dist/esm/core/SceneNode.js.map +1 -1
  99. package/dist/esm/core/Signal.d.ts +44 -0
  100. package/dist/esm/core/Signal.js +39 -0
  101. package/dist/esm/core/Signal.js.map +1 -1
  102. package/dist/esm/core/Time.d.ts +21 -0
  103. package/dist/esm/core/Time.js +21 -0
  104. package/dist/esm/core/Time.js.map +1 -1
  105. package/dist/esm/core/Timer.d.ts +7 -0
  106. package/dist/esm/core/Timer.js +7 -0
  107. package/dist/esm/core/Timer.js.map +1 -1
  108. package/dist/esm/core/capabilities.d.ts +12 -0
  109. package/dist/esm/core/capabilities.js +12 -0
  110. package/dist/esm/core/capabilities.js.map +1 -1
  111. package/dist/esm/core/types.d.ts +37 -0
  112. package/dist/esm/core/utils.d.ts +48 -0
  113. package/dist/esm/core/utils.js +48 -0
  114. package/dist/esm/core/utils.js.map +1 -1
  115. package/dist/esm/debug/BoundingBoxesLayer.d.ts +8 -0
  116. package/dist/esm/debug/BoundingBoxesLayer.js +8 -0
  117. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
  118. package/dist/esm/debug/DebugLayer.d.ts +16 -3
  119. package/dist/esm/debug/DebugLayer.js +11 -3
  120. package/dist/esm/debug/DebugLayer.js.map +1 -1
  121. package/dist/esm/debug/DebugOverlay.d.ts +11 -0
  122. package/dist/esm/debug/DebugOverlay.js +8 -2
  123. package/dist/esm/debug/DebugOverlay.js.map +1 -1
  124. package/dist/esm/debug/HitTestLayer.d.ts +9 -0
  125. package/dist/esm/debug/HitTestLayer.js +9 -0
  126. package/dist/esm/debug/HitTestLayer.js.map +1 -1
  127. package/dist/esm/debug/PerformanceLayer.d.ts +17 -1
  128. package/dist/esm/debug/PerformanceLayer.js +18 -0
  129. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  130. package/dist/esm/debug/PointerStackLayer.d.ts +8 -0
  131. package/dist/esm/debug/PointerStackLayer.js +11 -3
  132. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  133. package/dist/esm/index.js +6 -5
  134. package/dist/esm/index.js.map +1 -1
  135. package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
  136. package/dist/esm/input/ArcadeStickGamepadMapping.js +25 -19
  137. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
  138. package/dist/esm/input/GameCubeGamepadMapping.d.ts +9 -0
  139. package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
  140. package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
  141. package/dist/esm/input/Gamepad.d.ts +181 -31
  142. package/dist/esm/input/Gamepad.js +307 -108
  143. package/dist/esm/input/Gamepad.js.map +1 -1
  144. package/dist/esm/input/GamepadAxis.d.ts +120 -0
  145. package/dist/esm/input/GamepadAxis.js +106 -0
  146. package/dist/esm/input/GamepadAxis.js.map +1 -0
  147. package/dist/esm/input/GamepadButton.d.ts +110 -0
  148. package/dist/esm/input/GamepadButton.js +99 -0
  149. package/dist/esm/input/GamepadButton.js.map +1 -0
  150. package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
  151. package/dist/esm/input/GamepadDefinitions.js +44 -1
  152. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  153. package/dist/esm/input/GamepadMapping.d.ts +42 -8
  154. package/dist/esm/input/GamepadMapping.js +46 -5
  155. package/dist/esm/input/GamepadMapping.js.map +1 -1
  156. package/dist/esm/input/GamepadPromptLayouts.d.ts +35 -2
  157. package/dist/esm/input/GamepadPromptLayouts.js +43 -18
  158. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
  159. package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +13 -0
  160. package/dist/esm/input/GenericDualAnalogGamepadMapping.js +62 -43
  161. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
  162. package/dist/esm/input/GestureRecognizer.d.ts +11 -2
  163. package/dist/esm/input/GestureRecognizer.js +11 -2
  164. package/dist/esm/input/GestureRecognizer.js.map +1 -1
  165. package/dist/esm/input/InputBinding.d.ts +74 -0
  166. package/dist/esm/input/InputBinding.js +100 -0
  167. package/dist/esm/input/InputBinding.js.map +1 -0
  168. package/dist/esm/input/InputManager.d.ts +100 -21
  169. package/dist/esm/input/InputManager.js +248 -90
  170. package/dist/esm/input/InputManager.js.map +1 -1
  171. package/dist/esm/input/InteractionEvent.d.ts +13 -0
  172. package/dist/esm/input/InteractionEvent.js +8 -0
  173. package/dist/esm/input/InteractionEvent.js.map +1 -1
  174. package/dist/esm/input/InteractionManager.d.ts +34 -5
  175. package/dist/esm/input/InteractionManager.js +46 -17
  176. package/dist/esm/input/InteractionManager.js.map +1 -1
  177. package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +17 -3
  178. package/dist/esm/input/JoyConLeftGamepadMapping.js +42 -3
  179. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
  180. package/dist/esm/input/JoyConRightGamepadMapping.d.ts +17 -3
  181. package/dist/esm/input/JoyConRightGamepadMapping.js +38 -3
  182. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
  183. package/dist/esm/input/PlayStationGamepadMapping.d.ts +8 -0
  184. package/dist/esm/input/PlayStationGamepadMapping.js +8 -0
  185. package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
  186. package/dist/esm/input/Pointer.d.ts +106 -71
  187. package/dist/esm/input/Pointer.js +93 -71
  188. package/dist/esm/input/Pointer.js.map +1 -1
  189. package/dist/esm/input/SteamControllerGamepadMapping.d.ts +8 -0
  190. package/dist/esm/input/SteamControllerGamepadMapping.js +8 -0
  191. package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
  192. package/dist/esm/input/SteamDeckGamepadMapping.d.ts +18 -0
  193. package/dist/esm/input/SteamDeckGamepadMapping.js +76 -0
  194. package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -0
  195. package/dist/esm/input/SwitchProGamepadMapping.d.ts +9 -0
  196. package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
  197. package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
  198. package/dist/esm/input/XboxGamepadMapping.d.ts +8 -0
  199. package/dist/esm/input/XboxGamepadMapping.js +8 -0
  200. package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
  201. package/dist/esm/input/index.d.ts +7 -4
  202. package/dist/esm/input/types.d.ts +17 -73
  203. package/dist/esm/input/types.js +18 -77
  204. package/dist/esm/input/types.js.map +1 -1
  205. package/dist/esm/math/AbstractVector.d.ts +83 -0
  206. package/dist/esm/math/AbstractVector.js +83 -0
  207. package/dist/esm/math/AbstractVector.js.map +1 -1
  208. package/dist/esm/math/Circle.d.ts +32 -0
  209. package/dist/esm/math/Circle.js +34 -2
  210. package/dist/esm/math/Circle.js.map +1 -1
  211. package/dist/esm/math/CircleLike.d.ts +1 -0
  212. package/dist/esm/math/Collision.d.ts +39 -0
  213. package/dist/esm/math/Collision.js +5 -0
  214. package/dist/esm/math/Collision.js.map +1 -1
  215. package/dist/esm/math/Ellipse.d.ts +11 -0
  216. package/dist/esm/math/Ellipse.js +18 -2
  217. package/dist/esm/math/Ellipse.js.map +1 -1
  218. package/dist/esm/math/EllipseLike.d.ts +3 -0
  219. package/dist/esm/math/Flags.d.ts +31 -0
  220. package/dist/esm/math/Flags.js +31 -0
  221. package/dist/esm/math/Flags.js.map +1 -1
  222. package/dist/esm/math/Interval.d.ts +15 -0
  223. package/dist/esm/math/Interval.js +15 -0
  224. package/dist/esm/math/Interval.js.map +1 -1
  225. package/dist/esm/math/Line.d.ts +17 -1
  226. package/dist/esm/math/Line.js +17 -1
  227. package/dist/esm/math/Line.js.map +1 -1
  228. package/dist/esm/math/LineLike.d.ts +1 -0
  229. package/dist/esm/math/Matrix.d.ts +44 -3
  230. package/dist/esm/math/Matrix.js +44 -3
  231. package/dist/esm/math/Matrix.js.map +1 -1
  232. package/dist/esm/math/ObservableSize.d.ts +7 -0
  233. package/dist/esm/math/ObservableSize.js +7 -0
  234. package/dist/esm/math/ObservableSize.js.map +1 -1
  235. package/dist/esm/math/ObservableVector.d.ts +9 -0
  236. package/dist/esm/math/ObservableVector.js +9 -0
  237. package/dist/esm/math/ObservableVector.js.map +1 -1
  238. package/dist/esm/math/PointLike.d.ts +1 -0
  239. package/dist/esm/math/PolarVector.d.ts +15 -0
  240. package/dist/esm/math/PolarVector.js +16 -1
  241. package/dist/esm/math/PolarVector.js.map +1 -1
  242. package/dist/esm/math/Polygon.d.ts +20 -0
  243. package/dist/esm/math/Polygon.js +20 -0
  244. package/dist/esm/math/Polygon.js.map +1 -1
  245. package/dist/esm/math/PolygonLike.d.ts +4 -0
  246. package/dist/esm/math/Quadtree.d.ts +40 -3
  247. package/dist/esm/math/Quadtree.js +39 -3
  248. package/dist/esm/math/Quadtree.js.map +1 -1
  249. package/dist/esm/math/Random.d.ts +25 -0
  250. package/dist/esm/math/Random.js +25 -0
  251. package/dist/esm/math/Random.js.map +1 -1
  252. package/dist/esm/math/Rectangle.d.ts +15 -0
  253. package/dist/esm/math/Rectangle.js +17 -2
  254. package/dist/esm/math/Rectangle.js.map +1 -1
  255. package/dist/esm/math/RectangleLike.d.ts +1 -0
  256. package/dist/esm/math/Segment.d.ts +7 -0
  257. package/dist/esm/math/Segment.js +7 -0
  258. package/dist/esm/math/Segment.js.map +1 -1
  259. package/dist/esm/math/ShapeLike.d.ts +6 -0
  260. package/dist/esm/math/Size.d.ts +9 -0
  261. package/dist/esm/math/Size.js +9 -0
  262. package/dist/esm/math/Size.js.map +1 -1
  263. package/dist/esm/math/Vector.d.ts +16 -0
  264. package/dist/esm/math/Vector.js +16 -0
  265. package/dist/esm/math/Vector.js.map +1 -1
  266. package/dist/esm/math/collision-detection.d.ts +47 -1
  267. package/dist/esm/math/collision-detection.js +228 -17
  268. package/dist/esm/math/collision-detection.js.map +1 -1
  269. package/dist/esm/math/collision-primitives.d.ts +23 -0
  270. package/dist/esm/math/collision-primitives.js +23 -0
  271. package/dist/esm/math/collision-primitives.js.map +1 -1
  272. package/dist/esm/math/geometry.d.ts +42 -0
  273. package/dist/esm/math/geometry.js +37 -0
  274. package/dist/esm/math/geometry.js.map +1 -1
  275. package/dist/esm/math/utils.d.ts +41 -0
  276. package/dist/esm/math/utils.js +41 -0
  277. package/dist/esm/math/utils.js.map +1 -1
  278. package/dist/esm/particles/Particle.d.ts +37 -0
  279. package/dist/esm/particles/Particle.js +37 -0
  280. package/dist/esm/particles/Particle.js.map +1 -1
  281. package/dist/esm/particles/ParticleProperties.d.ts +15 -0
  282. package/dist/esm/particles/ParticleSystem.d.ts +69 -0
  283. package/dist/esm/particles/ParticleSystem.js +69 -0
  284. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  285. package/dist/esm/particles/affectors/ColorAffector.d.ts +13 -0
  286. package/dist/esm/particles/affectors/ColorAffector.js +13 -0
  287. package/dist/esm/particles/affectors/ColorAffector.js.map +1 -1
  288. package/dist/esm/particles/affectors/ForceAffector.d.ts +11 -0
  289. package/dist/esm/particles/affectors/ForceAffector.js +11 -0
  290. package/dist/esm/particles/affectors/ForceAffector.js.map +1 -1
  291. package/dist/esm/particles/affectors/ParticleAffector.d.ts +13 -0
  292. package/dist/esm/particles/affectors/ScaleAffector.d.ts +10 -0
  293. package/dist/esm/particles/affectors/ScaleAffector.js +10 -0
  294. package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -1
  295. package/dist/esm/particles/affectors/TorqueAffector.d.ts +11 -0
  296. package/dist/esm/particles/affectors/TorqueAffector.js +11 -0
  297. package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -1
  298. package/dist/esm/particles/emitters/ParticleEmitter.d.ts +13 -0
  299. package/dist/esm/particles/emitters/ParticleOptions.d.ts +16 -0
  300. package/dist/esm/particles/emitters/ParticleOptions.js +16 -0
  301. package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -1
  302. package/dist/esm/particles/emitters/UniversalEmitter.d.ts +23 -0
  303. package/dist/esm/particles/emitters/UniversalEmitter.js +23 -0
  304. package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -1
  305. package/dist/esm/rendering/CallbackRenderPass.d.ts +12 -0
  306. package/dist/esm/rendering/CallbackRenderPass.js +12 -0
  307. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  308. package/dist/esm/rendering/Container.d.ts +43 -0
  309. package/dist/esm/rendering/Container.js +43 -0
  310. package/dist/esm/rendering/Container.js.map +1 -1
  311. package/dist/esm/rendering/Drawable.d.ts +22 -0
  312. package/dist/esm/rendering/Drawable.js +22 -0
  313. package/dist/esm/rendering/Drawable.js.map +1 -1
  314. package/dist/esm/rendering/RenderBackend.d.ts +13 -0
  315. package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
  316. package/dist/esm/rendering/RenderBackendType.js +4 -0
  317. package/dist/esm/rendering/RenderBackendType.js.map +1 -1
  318. package/dist/esm/rendering/RenderNode.d.ts +18 -0
  319. package/dist/esm/rendering/RenderNode.js +18 -0
  320. package/dist/esm/rendering/RenderNode.js.map +1 -1
  321. package/dist/esm/rendering/RenderPass.d.ts +8 -0
  322. package/dist/esm/rendering/RenderStats.d.ts +19 -0
  323. package/dist/esm/rendering/RenderStats.js +7 -0
  324. package/dist/esm/rendering/RenderStats.js.map +1 -1
  325. package/dist/esm/rendering/RenderTarget.d.ts +17 -0
  326. package/dist/esm/rendering/RenderTarget.js +17 -0
  327. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  328. package/dist/esm/rendering/RenderTargetPass.d.ts +11 -0
  329. package/dist/esm/rendering/RenderTargetPass.js +7 -0
  330. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  331. package/dist/esm/rendering/Renderer.d.ts +15 -0
  332. package/dist/esm/rendering/RendererRegistry.d.ts +7 -0
  333. package/dist/esm/rendering/RendererRegistry.js +7 -0
  334. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  335. package/dist/esm/rendering/View.d.ts +67 -2
  336. package/dist/esm/rendering/View.js +57 -0
  337. package/dist/esm/rendering/View.js.map +1 -1
  338. package/dist/esm/rendering/filters/BlurFilter.d.ts +9 -0
  339. package/dist/esm/rendering/filters/BlurFilter.js +8 -0
  340. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
  341. package/dist/esm/rendering/filters/ColorFilter.d.ts +7 -0
  342. package/dist/esm/rendering/filters/ColorFilter.js +7 -0
  343. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
  344. package/dist/esm/rendering/filters/Filter.d.ts +23 -0
  345. package/dist/esm/rendering/filters/Filter.js +20 -0
  346. package/dist/esm/rendering/filters/Filter.js.map +1 -1
  347. package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +5 -0
  348. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +5 -0
  349. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -1
  350. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +5 -0
  351. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -0
  352. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  353. package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
  354. package/dist/esm/rendering/mesh/Mesh.js +2 -0
  355. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  356. package/dist/esm/rendering/primitives/Graphics.d.ts +34 -0
  357. package/dist/esm/rendering/primitives/Graphics.js +34 -0
  358. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  359. package/dist/esm/rendering/shader/Shader.d.ts +36 -0
  360. package/dist/esm/rendering/shader/Shader.js +26 -0
  361. package/dist/esm/rendering/shader/Shader.js.map +1 -1
  362. package/dist/esm/rendering/shader/ShaderAttribute.d.ts +13 -0
  363. package/dist/esm/rendering/shader/ShaderAttribute.js +13 -0
  364. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
  365. package/dist/esm/rendering/shader/ShaderUniform.d.ts +27 -0
  366. package/dist/esm/rendering/shader/ShaderUniform.js +28 -1
  367. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
  368. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +38 -0
  369. package/dist/esm/rendering/sprite/AnimatedSprite.js +36 -0
  370. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  371. package/dist/esm/rendering/sprite/Sprite.d.ts +56 -0
  372. package/dist/esm/rendering/sprite/Sprite.js +56 -0
  373. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  374. package/dist/esm/rendering/sprite/Spritesheet.d.ts +25 -0
  375. package/dist/esm/rendering/sprite/Spritesheet.js +20 -0
  376. package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
  377. package/dist/esm/rendering/text/Text.d.ts +2 -0
  378. package/dist/esm/rendering/text/Text.js +2 -0
  379. package/dist/esm/rendering/text/Text.js.map +1 -1
  380. package/dist/esm/rendering/text/TextStyle.d.ts +29 -0
  381. package/dist/esm/rendering/text/TextStyle.js +24 -0
  382. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  383. package/dist/esm/rendering/text/types.d.ts +1 -0
  384. package/dist/esm/rendering/texture/RenderTexture.d.ts +16 -0
  385. package/dist/esm/rendering/texture/RenderTexture.js +16 -0
  386. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
  387. package/dist/esm/rendering/texture/Sampler.d.ts +23 -0
  388. package/dist/esm/rendering/texture/Sampler.js +13 -0
  389. package/dist/esm/rendering/texture/Sampler.js.map +1 -1
  390. package/dist/esm/rendering/texture/Texture.d.ts +30 -0
  391. package/dist/esm/rendering/texture/Texture.js +30 -0
  392. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  393. package/dist/esm/rendering/types.d.ts +29 -0
  394. package/dist/esm/rendering/types.js +29 -0
  395. package/dist/esm/rendering/types.js.map +1 -1
  396. package/dist/esm/rendering/utils.d.ts +20 -0
  397. package/dist/esm/rendering/utils.js +10 -0
  398. package/dist/esm/rendering/utils.js.map +1 -1
  399. package/dist/esm/rendering/video/Video.d.ts +35 -1
  400. package/dist/esm/rendering/video/Video.js +36 -2
  401. package/dist/esm/rendering/video/Video.js.map +1 -1
  402. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +7 -0
  403. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -0
  404. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  405. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +13 -0
  406. package/dist/esm/rendering/webgl2/WebGl2Backend.js +13 -0
  407. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  408. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +8 -0
  409. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +8 -0
  410. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
  411. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +35 -0
  412. package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -5
  413. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  414. package/dist/esm/resources/AbstractAssetFactory.d.ts +20 -0
  415. package/dist/esm/resources/AbstractAssetFactory.js +20 -0
  416. package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
  417. package/dist/esm/resources/AssetFactory.d.ts +26 -0
  418. package/dist/esm/resources/AssetManifest.d.ts +45 -0
  419. package/dist/esm/resources/AssetManifest.js +25 -0
  420. package/dist/esm/resources/AssetManifest.js.map +1 -1
  421. package/dist/esm/resources/CacheFirstStrategy.d.ts +15 -0
  422. package/dist/esm/resources/CacheFirstStrategy.js +19 -4
  423. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
  424. package/dist/esm/resources/CacheStore.d.ts +23 -0
  425. package/dist/esm/resources/CacheStrategy.d.ts +28 -0
  426. package/dist/esm/resources/Database.d.ts +45 -0
  427. package/dist/esm/resources/FactoryRegistry.d.ts +28 -0
  428. package/dist/esm/resources/FactoryRegistry.js +24 -0
  429. package/dist/esm/resources/FactoryRegistry.js.map +1 -1
  430. package/dist/esm/resources/IndexedDbDatabase.d.ts +22 -1
  431. package/dist/esm/resources/IndexedDbDatabase.js +21 -0
  432. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  433. package/dist/esm/resources/IndexedDbStore.d.ts +20 -0
  434. package/dist/esm/resources/IndexedDbStore.js +12 -0
  435. package/dist/esm/resources/IndexedDbStore.js.map +1 -1
  436. package/dist/esm/resources/Loader.d.ts +172 -0
  437. package/dist/esm/resources/Loader.js +129 -37
  438. package/dist/esm/resources/Loader.js.map +1 -1
  439. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +11 -0
  440. package/dist/esm/resources/NetworkOnlyStrategy.js +16 -3
  441. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
  442. package/dist/esm/resources/factories/BinaryFactory.d.ts +13 -0
  443. package/dist/esm/resources/factories/BinaryFactory.js +13 -0
  444. package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
  445. package/dist/esm/resources/factories/FontFactory.d.ts +37 -0
  446. package/dist/esm/resources/factories/FontFactory.js +26 -0
  447. package/dist/esm/resources/factories/FontFactory.js.map +1 -1
  448. package/dist/esm/resources/factories/ImageFactory.d.ts +26 -2
  449. package/dist/esm/resources/factories/ImageFactory.js +19 -0
  450. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  451. package/dist/esm/resources/factories/JsonFactory.d.ts +13 -0
  452. package/dist/esm/resources/factories/JsonFactory.js +13 -0
  453. package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
  454. package/dist/esm/resources/factories/MusicFactory.d.ts +36 -0
  455. package/dist/esm/resources/factories/MusicFactory.js +44 -4
  456. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  457. package/dist/esm/resources/factories/SoundFactory.d.ts +29 -0
  458. package/dist/esm/resources/factories/SoundFactory.js +18 -0
  459. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  460. package/dist/esm/resources/factories/SvgFactory.d.ts +19 -0
  461. package/dist/esm/resources/factories/SvgFactory.js +19 -0
  462. package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
  463. package/dist/esm/resources/factories/TextFactory.d.ts +11 -0
  464. package/dist/esm/resources/factories/TextFactory.js +11 -0
  465. package/dist/esm/resources/factories/TextFactory.js.map +1 -1
  466. package/dist/esm/resources/factories/TextureFactory.d.ts +27 -2
  467. package/dist/esm/resources/factories/TextureFactory.js +20 -0
  468. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  469. package/dist/esm/resources/factories/VideoFactory.d.ts +37 -0
  470. package/dist/esm/resources/factories/VideoFactory.js +48 -5
  471. package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
  472. package/dist/esm/resources/factories/VttFactory.d.ts +18 -0
  473. package/dist/esm/resources/factories/VttFactory.js +104 -3
  474. package/dist/esm/resources/factories/VttFactory.js.map +1 -1
  475. package/dist/esm/resources/factories/WasmFactory.d.ts +16 -0
  476. package/dist/esm/resources/factories/WasmFactory.js +16 -0
  477. package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
  478. package/dist/esm/resources/utils.d.ts +10 -0
  479. package/dist/esm/resources/utils.js +10 -0
  480. package/dist/esm/resources/utils.js.map +1 -1
  481. package/dist/exo.esm.js +4673 -745
  482. package/dist/exo.esm.js.map +1 -1
  483. package/package.json +8 -8
  484. package/dist/esm/input/GamepadChannels.d.ts +0 -39
  485. package/dist/esm/input/GamepadChannels.js +0 -45
  486. package/dist/esm/input/GamepadChannels.js.map +0 -1
  487. package/dist/esm/input/GamepadControl.d.ts +0 -15
  488. package/dist/esm/input/GamepadControl.js +0 -29
  489. package/dist/esm/input/GamepadControl.js.map +0 -1
  490. package/dist/esm/input/Input.d.ts +0 -28
  491. package/dist/esm/input/Input.js +0 -68
  492. package/dist/esm/input/Input.js.map +0 -1
@@ -1,151 +1,350 @@
1
1
  import { Signal } from '../core/Signal.js';
2
2
  import { ChannelOffset, ChannelSize } from './types.js';
3
+ import { InputBinding } from './InputBinding.js';
3
4
 
5
+ /**
6
+ * One of four stable gamepad slots. Lives for the entire `Application`
7
+ * lifetime even when no physical pad is attached — a "mailbox" that
8
+ * physical hardware moves into and out of.
9
+ *
10
+ * Subscribe to {@link onConnect} / {@link onDisconnect} for hardware
11
+ * lifecycle, {@link onButtonDown} / {@link onButtonUp} / {@link onAxisChange}
12
+ * for granular per-event notifications, or call {@link onTrigger} /
13
+ * {@link onActive} / {@link onStart} / {@link onStop} to register
14
+ * stateful {@link InputBinding}s pinned to this slot.
15
+ *
16
+ * Listeners survive disconnect/reconnect cycles — a binding registered when
17
+ * the slot was empty will automatically activate when a pad connects.
18
+ */
4
19
  class Gamepad {
20
+ /** Fires when a physical pad connects to this slot. */
5
21
  onConnect = new Signal();
22
+ /** Fires when the physical pad in this slot disconnects. */
6
23
  onDisconnect = new Signal();
7
- onUpdate = new Signal();
8
- indexValue;
9
- channelsValue;
10
- channelOffset;
11
- mappingValue;
12
- browserGamepad = null;
13
- info = {
14
- name: 'Generic Gamepad',
15
- label: 'Generic Gamepad',
16
- vendorId: null,
17
- productId: null,
18
- productKey: null,
19
- };
20
- constructor(indexOrGamepad, channels, mappingOrDefinition) {
21
- const isBrowserGamepad = typeof indexOrGamepad !== 'number';
22
- const gamepad = isBrowserGamepad ? indexOrGamepad : null;
23
- const index = isBrowserGamepad ? indexOrGamepad.index : indexOrGamepad;
24
- this.indexValue = index;
25
- this.channelsValue = channels;
26
- this.channelOffset = ChannelOffset.Gamepads + (index * ChannelSize.Gamepad);
27
- this.mappingValue = gamepad
28
- ? mappingOrDefinition.mapping
29
- : mappingOrDefinition;
30
- if (gamepad) {
31
- const definition = mappingOrDefinition;
32
- this.setInfo({
33
- name: definition.name,
34
- label: definition.descriptor.label,
35
- vendorId: definition.descriptor.vendorId,
36
- productId: definition.descriptor.productId,
37
- productKey: definition.descriptor.productKey,
38
- });
39
- this.connect(gamepad);
40
- }
24
+ /** Fires for every button transition from inactive to active. */
25
+ onButtonDown = new Signal();
26
+ /** Fires for every button transition from active to inactive. */
27
+ onButtonUp = new Signal();
28
+ /** Fires whenever an axis crosses its activation threshold. */
29
+ onAxisChange = new Signal();
30
+ /**
31
+ * Fires when this slot's physical pad has been replaced by a previously
32
+ * higher-numbered slot's pad, after a `'compact'`-strategy disconnect.
33
+ * Dispatched with the source slot index the pad came from. Listeners
34
+ * remain attached and the channel buffer is preserved across the move.
35
+ */
36
+ onPadReassigned = new Signal();
37
+ _slot;
38
+ _channels;
39
+ _bindings = new Set();
40
+ _detacher = { detach: (binding) => { this._bindings.delete(binding); } };
41
+ _channelOffset;
42
+ _mapping = null;
43
+ _info = null;
44
+ _browserGamepad = null;
45
+ constructor(slot, channels) {
46
+ this._slot = slot;
47
+ this._channels = channels;
48
+ this._channelOffset = ChannelOffset.Gamepads + (slot * ChannelSize.Gamepad);
41
49
  }
42
- get mapping() {
43
- return this.mappingValue;
50
+ /** This pad's stable slot (0..3). */
51
+ get slot() {
52
+ return this._slot;
53
+ }
54
+ /** `true` while a physical pad is attached to this slot. */
55
+ get connected() {
56
+ return this._browserGamepad !== null;
44
57
  }
45
- set mapping(mapping) {
46
- this.mappingValue = mapping;
58
+ /** The active mapping, or `null` when disconnected. */
59
+ get mapping() {
60
+ return this._mapping;
47
61
  }
62
+ /** The {@link GamepadMappingFamily}, or `null` when disconnected. */
48
63
  get mappingFamily() {
49
- return this.mappingValue.family;
64
+ return this._mapping?.family ?? null;
50
65
  }
51
- get channels() {
52
- return this.channelsValue;
66
+ /** Identity metadata, or `null` when disconnected. */
67
+ get info() {
68
+ return this._info;
53
69
  }
54
- get gamepad() {
55
- return this.browserGamepad;
70
+ /** The underlying browser gamepad object, or `null` when disconnected. */
71
+ get browserGamepad() {
72
+ return this._browserGamepad;
56
73
  }
57
- get index() {
58
- return this.indexValue;
74
+ /**
75
+ * Browser-assigned hardware index from `navigator.getGamepads()` (i.e.
76
+ * `Gamepad.index`), or `null` when no pad is attached. Stable for the
77
+ * lifetime of a single physical connection but may change across
78
+ * disconnect/reconnect. Low-level escape hatch for advanced consumers
79
+ * that need to correlate slots with the raw browser API; prefer
80
+ * {@link slot} for stable per-application pad identity.
81
+ */
82
+ get internalIndex() {
83
+ return this._browserGamepad?.index ?? null;
59
84
  }
60
- get connected() {
61
- return this.browserGamepad !== null;
85
+ /** `true` when the connected pad supports rumble via the Web Gamepad API. */
86
+ get canVibrate() {
87
+ return this._browserGamepad?.vibrationActuator != null;
62
88
  }
63
- get name() {
64
- return this.info.name;
89
+ /**
90
+ * Returns `true` when this pad's mapping declares the requested channel.
91
+ * Use to gate listener registration on optional hardware (e.g. Joy-Con
92
+ * solo lacks a right stick — `pad.hasChannel(GamepadAxis.RightStickX)`
93
+ * returns `false`).
94
+ */
95
+ hasChannel(channel) {
96
+ return this._mapping?.hasChannel(channel) ?? false;
65
97
  }
66
- get label() {
67
- return this.info.label;
98
+ /**
99
+ * Trigger a rumble effect on this pad. Resolves when the effect finishes.
100
+ * Silent no-op when the pad is disconnected or the platform does not
101
+ * support haptic feedback. Use {@link canVibrate} to detect support.
102
+ */
103
+ async vibrate(options) {
104
+ const actuator = this._browserGamepad?.vibrationActuator;
105
+ if (!actuator?.playEffect) {
106
+ return;
107
+ }
108
+ await actuator.playEffect('dual-rumble', {
109
+ duration: options.duration,
110
+ weakMagnitude: options.weakMagnitude ?? 1,
111
+ strongMagnitude: options.strongMagnitude ?? 1,
112
+ startDelay: options.startDelay ?? 0,
113
+ });
114
+ }
115
+ /** Stop any active rumble on this pad. Silent no-op when unsupported. */
116
+ stopVibration() {
117
+ this._browserGamepad?.vibrationActuator?.reset?.();
118
+ }
119
+ /**
120
+ * Register a callback fired once when any of `channels` becomes active.
121
+ * Listener survives disconnect/reconnect; call `.unbind()` on the
122
+ * returned {@link InputBinding} to detach.
123
+ */
124
+ onStart(channel, callback, options) {
125
+ const binding = this._createBinding(channel, options);
126
+ binding.onStart.add(callback);
127
+ return binding;
68
128
  }
69
- get vendorId() {
70
- return this.info.vendorId;
129
+ /**
130
+ * Register a callback fired every frame while any of `channels` is active.
131
+ * Receives the channel value (0..1 for buttons, -1..1 for bipolar axes).
132
+ */
133
+ onActive(channel, callback, options) {
134
+ const binding = this._createBinding(channel, options);
135
+ binding.onActive.add(callback);
136
+ return binding;
71
137
  }
72
- get productId() {
73
- return this.info.productId;
138
+ /** Register a callback fired once when all of `channels` become inactive. */
139
+ onStop(channel, callback, options) {
140
+ const binding = this._createBinding(channel, options);
141
+ binding.onStop.add(callback);
142
+ return binding;
74
143
  }
75
- get productKey() {
76
- return this.info.productKey;
144
+ /**
145
+ * Register a callback fired when the input is released within
146
+ * {@link InputBindingOptions.threshold} ms of activation (a "tap").
147
+ */
148
+ onTrigger(channel, callback, options) {
149
+ const binding = this._createBinding(channel, options);
150
+ binding.onTrigger.add(callback);
151
+ return binding;
77
152
  }
78
- setInfo(info) {
79
- this.info = info;
80
- return this;
153
+ /**
154
+ * Attach a physical browser gamepad to this slot. Called by
155
+ * {@link InputManager} on connect.
156
+ *
157
+ * @internal
158
+ */
159
+ _bind(gamepad, definition) {
160
+ this._browserGamepad = gamepad;
161
+ this._mapping = definition.mapping;
162
+ this._info = {
163
+ name: definition.name,
164
+ label: definition.descriptor.label,
165
+ vendorId: definition.descriptor.vendorId,
166
+ productId: definition.descriptor.productId,
167
+ productKey: definition.descriptor.productKey,
168
+ };
169
+ this.onConnect.dispatch();
81
170
  }
82
- connect(gamepad) {
83
- const wasConnected = this.connected;
84
- this.browserGamepad = gamepad;
85
- if (!wasConnected) {
86
- this.onConnect.dispatch(this);
171
+ /**
172
+ * Detach the physical gamepad and clear its channels.
173
+ *
174
+ * @internal
175
+ */
176
+ _unbind() {
177
+ if (this._browserGamepad === null) {
178
+ return;
87
179
  }
88
- return this;
180
+ this._clearMappedChannels();
181
+ this._browserGamepad = null;
182
+ this._mapping = null;
183
+ this._info = null;
184
+ this.onDisconnect.dispatch();
89
185
  }
90
- disconnect() {
91
- if (this.connected) {
92
- this.browserGamepad = null;
93
- this.clearMappedChannels();
94
- this.onDisconnect.dispatch(this);
186
+ /**
187
+ * Detach the physical gamepad and clear channels without firing
188
+ * {@link onDisconnect}. Used by {@link InputManager} during the compact
189
+ * slot-shift to silently vacate a slot before another pad shifts into
190
+ * its place; the disconnect signal is fired separately on the slot that
191
+ * ends up empty after compaction.
192
+ *
193
+ * @internal
194
+ */
195
+ _silentUnbind() {
196
+ if (this._browserGamepad === null) {
197
+ return;
95
198
  }
96
- return this;
199
+ this._clearMappedChannels();
200
+ this._browserGamepad = null;
201
+ this._mapping = null;
202
+ this._info = null;
97
203
  }
204
+ /**
205
+ * Dispatch this slot's {@link onDisconnect} signal without altering its
206
+ * state. Used by {@link InputManager} after a compact-mode shift, when a
207
+ * slot has already been emptied by {@link _rebindFrom} and now needs to
208
+ * notify subscribers that its mailbox is no longer occupied.
209
+ *
210
+ * @internal
211
+ */
212
+ _dispatchDisconnect() {
213
+ this.onDisconnect.dispatch();
214
+ }
215
+ /**
216
+ * Reassign this slot to take over another slot's physical gamepad without
217
+ * firing the full disconnect / connect cycle. Used by {@link InputManager}
218
+ * when the `'compact'` slot strategy shuffles pads after a disconnect.
219
+ *
220
+ * @internal
221
+ */
222
+ _rebindFrom(other) {
223
+ const gamepad = other._browserGamepad;
224
+ const mapping = other._mapping;
225
+ const info = other._info;
226
+ this._clearMappedChannels();
227
+ other._clearMappedChannels();
228
+ other._browserGamepad = null;
229
+ other._mapping = null;
230
+ other._info = null;
231
+ this._browserGamepad = gamepad;
232
+ this._mapping = mapping;
233
+ this._info = info;
234
+ }
235
+ /**
236
+ * Sample the browser gamepad's current state and write transformed values
237
+ * into the shared channel buffer, dispatching transition events when
238
+ * channel activity crosses thresholds. Called once per frame by the
239
+ * engine's input loop. No-op when disconnected.
240
+ *
241
+ * @internal
242
+ */
98
243
  update() {
99
- if (this.browserGamepad === null) {
100
- return this;
244
+ if (this._browserGamepad === null || this._mapping === null) {
245
+ this._updateBindings();
246
+ return;
101
247
  }
102
- const channels = this.channelsValue;
103
- const { buttons: gamepadButtons, axes: gamepadAxes } = this.browserGamepad;
104
- for (const control of this.mappingValue.buttons) {
105
- const offsetChannel = this.resolveChannelOffset(control.channel);
106
- if (control.index < gamepadButtons.length) {
107
- const value = control.transformValue(gamepadButtons[control.index].value) || 0;
108
- if (channels[offsetChannel] !== value) {
109
- channels[offsetChannel] = value;
110
- this.onUpdate.dispatch(control.channel, value, this);
111
- }
248
+ const channels = this._channels;
249
+ const { buttons: rawButtons, axes: rawAxes } = this._browserGamepad;
250
+ for (const button of this._mapping.buttons) {
251
+ if (button.index >= rawButtons.length) {
252
+ continue;
253
+ }
254
+ const offset = this._resolveOffset(button.channel);
255
+ const previous = channels[offset];
256
+ const value = button.transformValue(rawButtons[button.index].value) || 0;
257
+ if (previous === value) {
258
+ continue;
259
+ }
260
+ channels[offset] = value;
261
+ if (previous === 0 && value !== 0) {
262
+ this.onButtonDown.dispatch(button, value);
263
+ }
264
+ else if (previous !== 0 && value === 0) {
265
+ this.onButtonUp.dispatch(button, value);
112
266
  }
113
267
  }
114
- for (const control of this.mappingValue.axes) {
115
- const offsetChannel = this.resolveChannelOffset(control.channel);
116
- if (control.index < gamepadAxes.length) {
117
- const value = control.transformValue(gamepadAxes[control.index]) || 0;
118
- if (channels[offsetChannel] !== value) {
119
- channels[offsetChannel] = value;
120
- this.onUpdate.dispatch(control.channel, value, this);
121
- }
268
+ for (const axis of this._mapping.axes) {
269
+ if (axis.index >= rawAxes.length) {
270
+ continue;
271
+ }
272
+ const offset = this._resolveOffset(axis.channel);
273
+ const previous = channels[offset];
274
+ const value = axis.transformValue(rawAxes[axis.index]) || 0;
275
+ if (previous === value) {
276
+ continue;
122
277
  }
278
+ channels[offset] = value;
279
+ this.onAxisChange.dispatch(axis, value);
123
280
  }
124
- return this;
125
- }
126
- clearChannels() {
127
- this.clearMappedChannels();
128
- return this;
281
+ this._updateBindings();
129
282
  }
283
+ /**
284
+ * Tear down this gamepad slot. Called on application shutdown.
285
+ */
130
286
  destroy() {
131
- this.disconnect();
132
- this.clearMappedChannels();
287
+ for (const binding of Array.from(this._bindings)) {
288
+ binding.unbind();
289
+ }
290
+ this._bindings.clear();
291
+ this._unbind();
133
292
  this.onConnect.destroy();
134
293
  this.onDisconnect.destroy();
135
- this.onUpdate.destroy();
294
+ this.onButtonDown.destroy();
295
+ this.onButtonUp.destroy();
296
+ this.onAxisChange.destroy();
297
+ this.onPadReassigned.destroy();
136
298
  }
299
+ /**
300
+ * Convert a slot-relative channel value to its absolute index in the
301
+ * shared channel buffer for this slot.
302
+ */
137
303
  resolveChannelOffset(channel) {
138
- return this.channelOffset + (channel ^ ChannelOffset.Gamepads);
304
+ return this._resolveOffset(channel);
305
+ }
306
+ /**
307
+ * Static counterpart to {@link Gamepad.resolveChannelOffset} — resolves
308
+ * an absolute channel-buffer offset for a given slot index without
309
+ * requiring a Gamepad instance.
310
+ */
311
+ static resolveChannelOffset(slot, channel) {
312
+ return ChannelOffset.Gamepads + (slot * ChannelSize.Gamepad) + (channel ^ ChannelOffset.Gamepads);
139
313
  }
140
- static resolveChannelOffset(gamepadIndex, channel) {
141
- return ChannelOffset.Gamepads + (gamepadIndex * ChannelSize.Gamepad) + (channel ^ ChannelOffset.Gamepads);
314
+ _resolveOffset(channel) {
315
+ return this._channelOffset + (channel ^ ChannelOffset.Gamepads);
142
316
  }
143
- clearMappedChannels() {
144
- for (const control of this.mappingValue.buttons) {
145
- this.channelsValue[this.resolveChannelOffset(control.channel)] = 0;
317
+ _clearMappedChannels() {
318
+ if (this._mapping === null) {
319
+ return;
146
320
  }
147
- for (const control of this.mappingValue.axes) {
148
- this.channelsValue[this.resolveChannelOffset(control.channel)] = 0;
321
+ for (const button of this._mapping.buttons) {
322
+ this._channels[this._resolveOffset(button.channel)] = 0;
323
+ }
324
+ for (const axis of this._mapping.axes) {
325
+ this._channels[this._resolveOffset(axis.channel)] = 0;
326
+ }
327
+ }
328
+ _createBinding(channel, options = {}) {
329
+ const list = Array.isArray(channel) ? channel : [channel];
330
+ const resolved = list.map((c) => this._resolveExternalChannel(c));
331
+ const binding = new InputBinding(resolved, options, this._detacher);
332
+ this._bindings.add(binding);
333
+ return binding;
334
+ }
335
+ _resolveExternalChannel(channel) {
336
+ // Keyboard channels are global (no slot offset). Gamepad channels
337
+ // need slot-aware translation. Any channel value within the
338
+ // gamepad-section maps through this pad's slot offset; others
339
+ // (Keyboard, Pointer) pass through as-is.
340
+ if (channel >= ChannelOffset.Gamepads && channel < ChannelOffset.Gamepads + ChannelSize.Category) {
341
+ return this._resolveOffset(channel);
342
+ }
343
+ return channel;
344
+ }
345
+ _updateBindings() {
346
+ for (const binding of this._bindings) {
347
+ binding.update(this._channels);
149
348
  }
150
349
  }
151
350
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Gamepad.js","sources":["../../../../src/input/Gamepad.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Gamepad.js","sources":["../../../../src/input/Gamepad.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ declare const gamepadAxisChannelBrand: unique symbol;
2
+ /**
3
+ * Branded literal-union type identifying a canonical analog axis-style
4
+ * gamepad input channel. Members are absolute offsets into the engine's
5
+ * shared {@link Float32Array} input channel buffer (relative to slot 0):
6
+ * the 32 slots reserved for a gamepad slot's axis section, computed as
7
+ * `ChannelOffset.Gamepads + 32..63` (544..575 with the default layout).
8
+ *
9
+ * The 24 named axes (sticks split + signed aggregates + dual touchpad XY +
10
+ * 4 auxiliary bipolar) cover offsets 32..55; offsets 56..63 are reserved
11
+ * for forward-compat / custom-mapping use and remain part of this type so
12
+ * custom `GamepadMapping` subclasses can address them without casting.
13
+ *
14
+ * The brand keeps the type system from confusing axis channels with
15
+ * {@link GamepadButtonChannel} or raw `number`s during mapping authoring.
16
+ * User code does not construct values of this type directly — read them
17
+ * from the {@link GamepadAxis} namespace (`GamepadAxis.LeftStickLeft`, ...).
18
+ *
19
+ * @internal
20
+ */
21
+ export type GamepadAxisChannel = (544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575) & {
22
+ readonly [gamepadAxisChannelBrand]: void;
23
+ };
24
+ /** Construction options for a {@link GamepadAxis}. */
25
+ export interface GamepadAxisOptions {
26
+ /** Negate the raw value before further processing. Default `false`. */
27
+ invert?: boolean;
28
+ /**
29
+ * Convert from bipolar [-1, +1] to unipolar [0, 1] via `(v + 1) / 2`.
30
+ * Used for direction-split channels where each direction reads 0..1.
31
+ * Default `false`.
32
+ */
33
+ normalize?: boolean;
34
+ /**
35
+ * Activation threshold (deadzone). After the invert/normalize pipeline,
36
+ * any value at or below this reads as 0. Default 0.2.
37
+ */
38
+ threshold?: number;
39
+ /**
40
+ * Skip the deadzone clamp. Used for aggregate signed channels
41
+ * (`LeftStickX`, `LeftStickY`, ...) that need to preserve the full
42
+ * [-1, +1] range and apply their own deadzone client-side.
43
+ * Default `false`.
44
+ */
45
+ bipolar?: boolean;
46
+ }
47
+ /**
48
+ * Single mappable analog axis on a physical gamepad. Holds the raw browser
49
+ * `Gamepad.axes[]` index, the canonical channel the value is written to, and
50
+ * the transform pipeline applied each frame by {@link transformValue}.
51
+ *
52
+ * Direction-split axis channels (e.g. `LeftStickLeft`, `LeftStickRight`)
53
+ * live in the 0..1 range — set `invert: true` on the negative half so it
54
+ * reads positive when pushed in its direction.
55
+ *
56
+ * Aggregate channels (e.g. `LeftStickX`, `LeftStickY`) live in the full
57
+ * -1..1 range — set `bipolar: true` to preserve sign through the pipeline.
58
+ *
59
+ * The static namespace exports (`GamepadAxis.LeftStickLeft`,
60
+ * `.LeftStickX`, ...) carry the canonical channel offsets used to address
61
+ * each axis.
62
+ */
63
+ export declare class GamepadAxis {
64
+ readonly index: number;
65
+ readonly channel: GamepadAxisChannel;
66
+ readonly invert: boolean;
67
+ readonly normalize: boolean;
68
+ readonly threshold: number;
69
+ readonly bipolar: boolean;
70
+ constructor(index: number, channel: GamepadAxisChannel, options?: GamepadAxisOptions);
71
+ /**
72
+ * Apply the axis transform pipeline to a raw browser axis value
73
+ * (typically `Gamepad.axes[i]`, in -1..1).
74
+ *
75
+ * Pipeline: clamp to [-1, 1] → optional invert → optional normalize to
76
+ * [0, 1] → bipolar passthrough OR deadzone (returns 0 when the absolute
77
+ * value is at or below `threshold`).
78
+ */
79
+ transformValue(value: number): number;
80
+ }
81
+ /**
82
+ * Channel-identifier constants. The axis section starts after the 32-slot
83
+ * button block: 24 named axes (offsets 32..55) plus 8 reserved slots
84
+ * (offsets 56..63).
85
+ */
86
+ export declare namespace GamepadAxis {
87
+ const LeftStickLeft: GamepadAxisChannel;
88
+ const LeftStickRight: GamepadAxisChannel;
89
+ const LeftStickUp: GamepadAxisChannel;
90
+ const LeftStickDown: GamepadAxisChannel;
91
+ const RightStickLeft: GamepadAxisChannel;
92
+ const RightStickRight: GamepadAxisChannel;
93
+ const RightStickUp: GamepadAxisChannel;
94
+ const RightStickDown: GamepadAxisChannel;
95
+ /** Signed left-stick X axis (-1..1). Negative = left, positive = right. */
96
+ const LeftStickX: GamepadAxisChannel;
97
+ /** Signed left-stick Y axis (-1..1). Negative = up (screen-up), positive = down. */
98
+ const LeftStickY: GamepadAxisChannel;
99
+ /** Signed right-stick X axis (-1..1). */
100
+ const RightStickX: GamepadAxisChannel;
101
+ /** Signed right-stick Y axis (-1..1). */
102
+ const RightStickY: GamepadAxisChannel;
103
+ /** Primary touchpad X (0..1, left to right). PlayStation, Steam Deck (left pad), Steam Controller. */
104
+ const TouchpadX: GamepadAxisChannel;
105
+ /** Primary touchpad Y (0..1, top to bottom). */
106
+ const TouchpadY: GamepadAxisChannel;
107
+ /** Secondary touchpad X (0..1). Steam Deck (right pad), other dual-touchpad hardware. */
108
+ const Touchpad2X: GamepadAxisChannel;
109
+ /** Secondary touchpad Y (0..1). */
110
+ const Touchpad2Y: GamepadAxisChannel;
111
+ const AuxiliaryAxis0Negative: GamepadAxisChannel;
112
+ const AuxiliaryAxis0Positive: GamepadAxisChannel;
113
+ const AuxiliaryAxis1Negative: GamepadAxisChannel;
114
+ const AuxiliaryAxis1Positive: GamepadAxisChannel;
115
+ const AuxiliaryAxis2Negative: GamepadAxisChannel;
116
+ const AuxiliaryAxis2Positive: GamepadAxisChannel;
117
+ const AuxiliaryAxis3Negative: GamepadAxisChannel;
118
+ const AuxiliaryAxis3Positive: GamepadAxisChannel;
119
+ }
120
+ export {};