melonjs 20.7.0 → 20.9.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 (332) hide show
  1. package/README.md +7 -3
  2. package/build/application/application.d.ts +66 -8
  3. package/build/application/application.d.ts.map +1 -1
  4. package/build/application/defaultApplicationSettings.d.ts +6 -0
  5. package/build/application/defaultApplicationSettings.d.ts.map +1 -1
  6. package/build/application/header.d.ts.map +1 -1
  7. package/build/application/resize.d.ts +25 -0
  8. package/build/application/resize.d.ts.map +1 -1
  9. package/build/application/scaleMethods.d.ts +13 -3
  10. package/build/application/scaleMethods.d.ts.map +1 -1
  11. package/build/application/settings.d.ts +144 -5
  12. package/build/application/settings.d.ts.map +1 -1
  13. package/build/audio/audio.d.ts +29 -5
  14. package/build/audio/audio.d.ts.map +1 -1
  15. package/build/audio/autopause.d.ts +36 -0
  16. package/build/audio/autopause.d.ts.map +1 -0
  17. package/build/audio/backend/engine.d.ts +10 -1
  18. package/build/audio/backend/engine.d.ts.map +1 -1
  19. package/build/audio/backend/sound.d.ts +0 -1
  20. package/build/audio/backend/sound.d.ts.map +1 -1
  21. package/build/audio/backend/spatial.d.ts.map +1 -1
  22. package/build/audio/context.d.ts +35 -0
  23. package/build/audio/context.d.ts.map +1 -0
  24. package/build/audio/playback.d.ts.map +1 -1
  25. package/build/audio/procedural.d.ts.map +1 -1
  26. package/build/audio/spatial.d.ts +87 -0
  27. package/build/audio/spatial.d.ts.map +1 -0
  28. package/build/audio/state.d.ts +1 -0
  29. package/build/audio/state.d.ts.map +1 -1
  30. package/build/audio/types.d.ts +46 -6
  31. package/build/audio/types.d.ts.map +1 -1
  32. package/build/camera/camera2d.d.ts.map +1 -1
  33. package/build/camera/camera3d.d.ts +95 -8
  34. package/build/camera/camera3d.d.ts.map +1 -1
  35. package/build/camera/effects/fade_effect.d.ts.map +1 -1
  36. package/build/camera/effects/mask_effect.d.ts.map +1 -1
  37. package/build/camera/effects/shake_effect.d.ts.map +1 -1
  38. package/build/geometries/box3d.d.ts +25 -7
  39. package/build/geometries/box3d.d.ts.map +1 -1
  40. package/build/geometries/ellipse.d.ts +15 -1
  41. package/build/geometries/ellipse.d.ts.map +1 -1
  42. package/build/geometries/line.d.ts +1 -1
  43. package/build/geometries/line.d.ts.map +1 -1
  44. package/build/geometries/point.d.ts +1 -1
  45. package/build/geometries/point.d.ts.map +1 -1
  46. package/build/geometries/polygon.d.ts +15 -1
  47. package/build/geometries/polygon.d.ts.map +1 -1
  48. package/build/geometries/rectangle.d.ts +1 -1
  49. package/build/geometries/rectangle.d.ts.map +1 -1
  50. package/build/geometries/roundrect.d.ts +1 -1
  51. package/build/geometries/roundrect.d.ts.map +1 -1
  52. package/build/geometries/sphere.d.ts +36 -7
  53. package/build/geometries/sphere.d.ts.map +1 -1
  54. package/build/index.d.ts +16 -3
  55. package/build/index.d.ts.map +1 -1
  56. package/build/index.js +38172 -33633
  57. package/build/index.js.map +4 -4
  58. package/build/input/gamepad.d.ts +129 -3
  59. package/build/input/gamepad.d.ts.map +1 -1
  60. package/build/input/pointerevent.d.ts +8 -0
  61. package/build/input/pointerevent.d.ts.map +1 -1
  62. package/build/level/gltf/GLTFModel.d.ts +20 -33
  63. package/build/level/gltf/GLTFModel.d.ts.map +1 -1
  64. package/build/level/gltf/GLTFScene.d.ts +40 -1
  65. package/build/level/gltf/GLTFScene.d.ts.map +1 -1
  66. package/build/level/level.d.ts +35 -0
  67. package/build/level/level.d.ts.map +1 -1
  68. package/build/level/tiled/TMXLayer.d.ts +5 -2
  69. package/build/level/tiled/TMXLayer.d.ts.map +1 -1
  70. package/build/level/tiled/TMXObject.d.ts +0 -1
  71. package/build/level/tiled/TMXObjectFactory.d.ts +3 -2
  72. package/build/level/tiled/TMXObjectFactory.d.ts.map +1 -1
  73. package/build/level/tiled/TMXTile.d.ts +2 -1
  74. package/build/level/tiled/TMXTile.d.ts.map +1 -1
  75. package/build/level/tiled/TMXTileMap.d.ts +7 -4
  76. package/build/level/tiled/TMXTileMap.d.ts.map +1 -1
  77. package/build/level/tiled/TMXTileset.d.ts +1 -1
  78. package/build/level/tiled/TMXTileset.d.ts.map +1 -1
  79. package/build/level/tiled/TMXTilesetGroup.d.ts +5 -0
  80. package/build/level/tiled/TMXTilesetGroup.d.ts.map +1 -1
  81. package/build/level/tiled/factories/shape.d.ts +0 -1
  82. package/build/level/tiled/renderer/TMXHexagonalRenderer.d.ts +6 -5
  83. package/build/level/tiled/renderer/TMXHexagonalRenderer.d.ts.map +1 -1
  84. package/build/level/tiled/renderer/TMXIsometricRenderer.d.ts +5 -0
  85. package/build/level/tiled/renderer/TMXIsometricRenderer.d.ts.map +1 -1
  86. package/build/level/tiled/renderer/TMXObliqueRenderer.d.ts +5 -7
  87. package/build/level/tiled/renderer/TMXObliqueRenderer.d.ts.map +1 -1
  88. package/build/level/tiled/renderer/TMXOrthogonalRenderer.d.ts +5 -0
  89. package/build/level/tiled/renderer/TMXOrthogonalRenderer.d.ts.map +1 -1
  90. package/build/level/tiled/renderer/TMXRenderer.d.ts +19 -4
  91. package/build/level/tiled/renderer/TMXRenderer.d.ts.map +1 -1
  92. package/build/level/tiled/renderer/autodetect.d.ts +0 -4
  93. package/build/level/tiled/renderer/autodetect.d.ts.map +1 -1
  94. package/build/loader/cache.d.ts +220 -0
  95. package/build/loader/cache.d.ts.map +1 -1
  96. package/build/loader/loader.d.ts +20 -340
  97. package/build/loader/loader.d.ts.map +1 -1
  98. package/build/loader/loadingscreen.d.ts +1 -2
  99. package/build/loader/loadingscreen.d.ts.map +1 -1
  100. package/build/loader/parsers/gltf.d.ts +115 -0
  101. package/build/loader/parsers/gltf.d.ts.map +1 -1
  102. package/build/loader/parsers/shader.d.ts +0 -2
  103. package/build/math/color.d.ts +28 -5
  104. package/build/math/color.d.ts.map +1 -1
  105. package/build/math/matrix2d.d.ts +1 -1
  106. package/build/math/matrix2d.d.ts.map +1 -1
  107. package/build/math/matrix3d.d.ts +1 -1
  108. package/build/math/matrix3d.d.ts.map +1 -1
  109. package/build/math/observableVector2d.d.ts +14 -2
  110. package/build/math/observableVector2d.d.ts.map +1 -1
  111. package/build/math/observableVector3d.d.ts +15 -1
  112. package/build/math/observableVector3d.d.ts.map +1 -1
  113. package/build/math/vector2d.d.ts +31 -1
  114. package/build/math/vector2d.d.ts.map +1 -1
  115. package/build/math/vector3d.d.ts +38 -1
  116. package/build/math/vector3d.d.ts.map +1 -1
  117. package/build/math/vertex.d.ts.map +1 -1
  118. package/build/particles/emitter.d.ts.map +1 -1
  119. package/build/particles/particle.d.ts +29 -2
  120. package/build/particles/particle.d.ts.map +1 -1
  121. package/build/particles/settings.d.ts +104 -0
  122. package/build/particles/settings.d.ts.map +1 -1
  123. package/build/physics/adapter.d.ts +9 -1
  124. package/build/physics/adapter.d.ts.map +1 -1
  125. package/build/physics/bounds.d.ts +1 -1
  126. package/build/physics/bounds.d.ts.map +1 -1
  127. package/build/physics/broadphase/octree.d.ts +24 -0
  128. package/build/physics/broadphase/octree.d.ts.map +1 -1
  129. package/build/physics/broadphase/quadtree.d.ts +31 -0
  130. package/build/physics/broadphase/quadtree.d.ts.map +1 -1
  131. package/build/physics/builtin/body.d.ts +17 -2
  132. package/build/physics/builtin/body.d.ts.map +1 -1
  133. package/build/physics/builtin/builtin-adapter.d.ts.map +1 -1
  134. package/build/physics/builtin/detector.d.ts +0 -1
  135. package/build/physics/builtin/detector.d.ts.map +1 -1
  136. package/build/physics/builtin/sat.d.ts +0 -7
  137. package/build/physics/builtin/sat3d.d.ts +46 -0
  138. package/build/physics/builtin/sat3d.d.ts.map +1 -1
  139. package/build/physics/response.d.ts +45 -62
  140. package/build/physics/response.d.ts.map +1 -1
  141. package/build/pool.d.ts +4 -0
  142. package/build/pool.d.ts.map +1 -1
  143. package/build/renderable/collectable.d.ts +6 -1
  144. package/build/renderable/collectable.d.ts.map +1 -1
  145. package/build/renderable/colorlayer.d.ts +17 -4
  146. package/build/renderable/colorlayer.d.ts.map +1 -1
  147. package/build/renderable/container.d.ts +23 -17
  148. package/build/renderable/container.d.ts.map +1 -1
  149. package/build/renderable/entity/entity.d.ts +12 -16
  150. package/build/renderable/entity/entity.d.ts.map +1 -1
  151. package/build/renderable/frameAnimation.d.ts +1 -1
  152. package/build/renderable/groundshadow.d.ts +1 -0
  153. package/build/renderable/groundshadow.d.ts.map +1 -1
  154. package/build/renderable/imagelayer.d.ts +12 -5
  155. package/build/renderable/imagelayer.d.ts.map +1 -1
  156. package/build/renderable/instanced_mesh.d.ts +56 -7
  157. package/build/renderable/instanced_mesh.d.ts.map +1 -1
  158. package/build/renderable/mesh.d.ts +369 -4
  159. package/build/renderable/mesh.d.ts.map +1 -1
  160. package/build/renderable/nineslicesprite.d.ts +3 -13
  161. package/build/renderable/nineslicesprite.d.ts.map +1 -1
  162. package/build/renderable/renderable.d.ts +129 -28
  163. package/build/renderable/renderable.d.ts.map +1 -1
  164. package/build/renderable/sprite.d.ts +7 -20
  165. package/build/renderable/sprite.d.ts.map +1 -1
  166. package/build/renderable/sprite3d.d.ts +31 -16
  167. package/build/renderable/sprite3d.d.ts.map +1 -1
  168. package/build/renderable/text/bitmaptext.d.ts +76 -5
  169. package/build/renderable/text/bitmaptext.d.ts.map +1 -1
  170. package/build/renderable/text/bitmaptextdata.d.ts +1 -5
  171. package/build/renderable/text/bitmaptextdata.d.ts.map +1 -1
  172. package/build/renderable/text/glypheffect.d.ts +44 -0
  173. package/build/renderable/text/glypheffect.d.ts.map +1 -0
  174. package/build/renderable/text/text.d.ts +22 -3
  175. package/build/renderable/text/text.d.ts.map +1 -1
  176. package/build/renderable/text/textmetrics.d.ts +2 -0
  177. package/build/renderable/text/textmetrics.d.ts.map +1 -1
  178. package/build/renderable/trail.d.ts +0 -1
  179. package/build/renderable/trail.d.ts.map +1 -1
  180. package/build/renderable/trail3d.d.ts +174 -0
  181. package/build/renderable/trail3d.d.ts.map +1 -0
  182. package/build/renderable/trigger.d.ts +28 -5
  183. package/build/renderable/trigger.d.ts.map +1 -1
  184. package/build/renderable/ui/panelpaint.d.ts +5 -0
  185. package/build/renderable/ui/panelpaint.d.ts.map +1 -0
  186. package/build/renderable/ui/progressbar.d.ts +192 -0
  187. package/build/renderable/ui/progressbar.d.ts.map +1 -0
  188. package/build/renderable/ui/uibaseelement.d.ts +48 -3
  189. package/build/renderable/ui/uibaseelement.d.ts.map +1 -1
  190. package/build/renderable/ui/uipanel.d.ts +245 -0
  191. package/build/renderable/ui/uipanel.d.ts.map +1 -0
  192. package/build/renderable/ui/uispriteelement.d.ts +19 -3
  193. package/build/renderable/ui/uispriteelement.d.ts.map +1 -1
  194. package/build/renderable/ui/uitextbutton.d.ts +30 -1
  195. package/build/renderable/ui/uitextbutton.d.ts.map +1 -1
  196. package/build/state/state.d.ts.map +1 -1
  197. package/build/system/bootstrap.d.ts.map +1 -1
  198. package/build/system/legacy_pool.d.ts +24 -4
  199. package/build/system/legacy_pool.d.ts.map +1 -1
  200. package/build/system/pool.d.ts +15 -8
  201. package/build/system/pool.d.ts.map +1 -1
  202. package/build/tweens/tween.d.ts +50 -3
  203. package/build/tweens/tween.d.ts.map +1 -1
  204. package/build/video/canvas/canvas_renderer.d.ts +34 -23
  205. package/build/video/canvas/canvas_renderer.d.ts.map +1 -1
  206. package/build/video/effects/blendEffect.d.ts +0 -1
  207. package/build/video/effects/bloom.d.ts +72 -0
  208. package/build/video/effects/bloom.d.ts.map +1 -0
  209. package/build/video/effects/blur.d.ts +3 -2
  210. package/build/video/effects/blur.d.ts.map +1 -1
  211. package/build/video/effects/chromaticAberration.d.ts +3 -2
  212. package/build/video/effects/chromaticAberration.d.ts.map +1 -1
  213. package/build/video/effects/colorMatrix.d.ts +3 -2
  214. package/build/video/effects/colorMatrix.d.ts.map +1 -1
  215. package/build/video/effects/desaturate.d.ts +10 -2
  216. package/build/video/effects/desaturate.d.ts.map +1 -1
  217. package/build/video/effects/dissolve.d.ts +3 -2
  218. package/build/video/effects/dissolve.d.ts.map +1 -1
  219. package/build/video/effects/dropShadow.d.ts +3 -2
  220. package/build/video/effects/dropShadow.d.ts.map +1 -1
  221. package/build/video/effects/flash.d.ts +3 -2
  222. package/build/video/effects/flash.d.ts.map +1 -1
  223. package/build/video/effects/glow.d.ts +3 -2
  224. package/build/video/effects/glow.d.ts.map +1 -1
  225. package/build/video/effects/hologram.d.ts +3 -2
  226. package/build/video/effects/hologram.d.ts.map +1 -1
  227. package/build/video/effects/invert.d.ts +10 -2
  228. package/build/video/effects/invert.d.ts.map +1 -1
  229. package/build/video/effects/outline.d.ts +3 -2
  230. package/build/video/effects/outline.d.ts.map +1 -1
  231. package/build/video/effects/pixelate.d.ts +3 -2
  232. package/build/video/effects/pixelate.d.ts.map +1 -1
  233. package/build/video/effects/radialGradient.d.ts +8 -3
  234. package/build/video/effects/radialGradient.d.ts.map +1 -1
  235. package/build/video/effects/scanline.d.ts +3 -2
  236. package/build/video/effects/scanline.d.ts.map +1 -1
  237. package/build/video/effects/sepia.d.ts +10 -2
  238. package/build/video/effects/sepia.d.ts.map +1 -1
  239. package/build/video/effects/shadereffect.d.ts +10 -4
  240. package/build/video/effects/shadereffect.d.ts.map +1 -1
  241. package/build/video/effects/shine.d.ts +3 -2
  242. package/build/video/effects/shine.d.ts.map +1 -1
  243. package/build/video/effects/tintPulse.d.ts +3 -7
  244. package/build/video/effects/tintPulse.d.ts.map +1 -1
  245. package/build/video/effects/tonemap.d.ts +121 -0
  246. package/build/video/effects/tonemap.d.ts.map +1 -0
  247. package/build/video/effects/vignette.d.ts +3 -2
  248. package/build/video/effects/vignette.d.ts.map +1 -1
  249. package/build/video/effects/wave.d.ts +3 -7
  250. package/build/video/effects/wave.d.ts.map +1 -1
  251. package/build/video/gpu/batcher.d.ts +8 -2
  252. package/build/video/gpu/batcher.d.ts.map +1 -1
  253. package/build/video/gpu/vertexformat.d.ts +26 -0
  254. package/build/video/gpu/vertexformat.d.ts.map +1 -1
  255. package/build/video/gradient.d.ts +1 -1
  256. package/build/video/gradient.d.ts.map +1 -1
  257. package/build/video/renderer.d.ts +111 -7
  258. package/build/video/renderer.d.ts.map +1 -1
  259. package/build/video/renderstate.d.ts +2 -0
  260. package/build/video/renderstate.d.ts.map +1 -1
  261. package/build/video/rendertarget/canvasrendertarget.d.ts +3 -4
  262. package/build/video/rendertarget/canvasrendertarget.d.ts.map +1 -1
  263. package/build/video/rendertarget/render_target_pool.d.ts +0 -1
  264. package/build/video/rendertarget/rendertarget.d.ts +12 -5
  265. package/build/video/rendertarget/rendertarget.d.ts.map +1 -1
  266. package/build/video/rendertarget/webglrendertarget.d.ts +0 -1
  267. package/build/video/rendertarget/webglrendertarget.d.ts.map +1 -1
  268. package/build/video/rendertarget/webgpurendertarget.d.ts +24 -14
  269. package/build/video/rendertarget/webgpurendertarget.d.ts.map +1 -1
  270. package/build/video/texture/atlas.d.ts +2 -1
  271. package/build/video/texture/atlas.d.ts.map +1 -1
  272. package/build/video/texture/cache.d.ts +1 -3
  273. package/build/video/texture/frametexture.d.ts +0 -1
  274. package/build/video/texture/frametexture.d.ts.map +1 -1
  275. package/build/video/texture/noise_texture2d.d.ts +1 -0
  276. package/build/video/texture/noise_texture2d.d.ts.map +1 -1
  277. package/build/video/texture/texture2d.d.ts +6 -0
  278. package/build/video/texture/texture2d.d.ts.map +1 -1
  279. package/build/video/utils/autodetect.d.ts +0 -2
  280. package/build/video/webgl/batchers/batcher.d.ts +0 -9
  281. package/build/video/webgl/batchers/batcher.d.ts.map +1 -1
  282. package/build/video/webgl/batchers/lit_quad_batcher.d.ts +2 -0
  283. package/build/video/webgl/batchers/lit_quad_batcher.d.ts.map +1 -1
  284. package/build/video/webgl/batchers/material_batcher.d.ts +4 -2
  285. package/build/video/webgl/batchers/material_batcher.d.ts.map +1 -1
  286. package/build/video/webgl/batchers/mesh_batcher.d.ts +0 -3
  287. package/build/video/webgl/batchers/mesh_batcher.d.ts.map +1 -1
  288. package/build/video/webgl/batchers/quad_batcher.d.ts +4 -0
  289. package/build/video/webgl/batchers/quad_batcher.d.ts.map +1 -1
  290. package/build/video/webgl/buffer/index.d.ts +0 -1
  291. package/build/video/webgl/buffer/retained_geometry.d.ts +0 -1
  292. package/build/video/webgl/glshader.d.ts +5 -3
  293. package/build/video/webgl/glshader.d.ts.map +1 -1
  294. package/build/video/webgl/renderers/tmxlayer/orthogonal.d.ts +0 -4
  295. package/build/video/webgl/texture/store.d.ts +0 -1
  296. package/build/video/webgl/webgl_renderer.d.ts +63 -24
  297. package/build/video/webgl/webgl_renderer.d.ts.map +1 -1
  298. package/build/video/webgpu/batchers/mesh_batcher.d.ts +0 -3
  299. package/build/video/webgpu/batchers/mesh_batcher.d.ts.map +1 -1
  300. package/build/video/webgpu/batchers/quad_batcher.d.ts +0 -2
  301. package/build/video/webgpu/batchers/quad_batcher.d.ts.map +1 -1
  302. package/build/video/webgpu/batchers/webgpu_batcher.d.ts +0 -2
  303. package/build/video/webgpu/batchers/webgpu_batcher.d.ts.map +1 -1
  304. package/build/video/webgpu/pipeline/cache.d.ts.map +1 -1
  305. package/build/video/webgpu/renderers/tmxlayer/orthogonal.d.ts +0 -2
  306. package/build/video/webgpu/texture/frametexture.d.ts +0 -2
  307. package/build/video/webgpu/texture/frametexture.d.ts.map +1 -1
  308. package/build/video/webgpu/texture/store.d.ts +0 -1
  309. package/build/video/webgpu/webgpu_renderer.d.ts +7 -75
  310. package/build/video/webgpu/webgpu_renderer.d.ts.map +1 -1
  311. package/package.json +2 -2
  312. package/skills/AGENTS.md +1 -1
  313. package/skills/melonjs/SKILL.md +2 -0
  314. package/skills/melonjs-3d/SKILL.md +454 -22
  315. package/skills/melonjs-3d-assets/SKILL.md +111 -10
  316. package/skills/melonjs-audio/SKILL.md +229 -8
  317. package/skills/melonjs-camera-and-drawing/SKILL.md +127 -1
  318. package/skills/melonjs-display-and-scaling/SKILL.md +273 -0
  319. package/skills/melonjs-effects-and-shaders/SKILL.md +341 -29
  320. package/skills/melonjs-events/SKILL.md +8 -6
  321. package/skills/melonjs-input/SKILL.md +147 -7
  322. package/skills/melonjs-math/SKILL.md +313 -0
  323. package/skills/melonjs-particles-and-trails/SKILL.md +189 -13
  324. package/skills/melonjs-performance/SKILL.md +131 -23
  325. package/skills/melonjs-physics/SKILL.md +103 -28
  326. package/skills/melonjs-renderables/SKILL.md +8 -2
  327. package/skills/melonjs-scenes-and-state/SKILL.md +134 -3
  328. package/skills/melonjs-sprites-and-animation/SKILL.md +9 -4
  329. package/skills/melonjs-tilemaps/SKILL.md +40 -12
  330. package/skills/melonjs-ui-and-text/SKILL.md +546 -7
  331. package/build/level/gltf/srgb.d.ts +0 -20
  332. package/build/level/gltf/srgb.d.ts.map +0 -1
@@ -4,7 +4,36 @@ import Container from "../container.js";
4
4
  /**
5
5
  * This is a basic clickable and draggable container which you can use in your game UI.
6
6
  * Use this for example if you want to display a panel that contains text, images or other UI elements.
7
+ *
8
+ * Regions under the pointer are asked in the order they are drawn, topmost
9
+ * first, and the walk carries on downwards until a handler returns `false`. An
10
+ * element that can overlap another one is therefore not opaque until it says
11
+ * so: by default a widget it covers still answers clicks and still lights up on
12
+ * hover. {@link UIBaseElement#onClick}, {@link UIBaseElement#onRelease} and
13
+ * {@link UIBaseElement#onOver} each consume by returning `false`.
7
14
  * @category UI
15
+ * @example
16
+ * // a panel that is opaque to the pointer and comes to the front when picked
17
+ * class Panel extends UIBaseElement {
18
+ * onClick() {
19
+ * this.ancestor.moveToTop(this);
20
+ * return false;
21
+ * }
22
+ * // the frame the pointer crosses in
23
+ * onOver() {
24
+ * return false;
25
+ * }
26
+ * // and every frame after that, when the pointer is already inside and
27
+ * // `onOver` no longer fires
28
+ * onActivateEvent() {
29
+ * super.onActivateEvent();
30
+ * me.input.registerPointerEvent("pointermove", this, () => false);
31
+ * }
32
+ * onDeactivateEvent() {
33
+ * me.input.releasePointerEvent("pointermove", this);
34
+ * super.onDeactivateEvent();
35
+ * }
36
+ * }
8
37
  */
9
38
  export default class UIBaseElement extends Container {
10
39
  /**
@@ -65,12 +94,28 @@ export default class UIBaseElement extends Container {
65
94
  */
66
95
  onMove(_event?: Pointer): void;
67
96
  /**
68
- * function called when the pointer is over the object
97
+ * function called when the pointer is over the object.
98
+ *
99
+ * Fires once, on the frame the pointer crosses into the element. To stay
100
+ * opaque for as long as the pointer rests on it, an element also wants a
101
+ * `"pointermove"` callback registered through
102
+ * {@link input.registerPointerEvent} returning `false`, since by then the
103
+ * pointer is already inside and this no longer runs.
69
104
  * @param _event - the event object
105
+ * @returns return false if we need to stop propagating the event, so that an
106
+ * element covered by this one does not also light up on hover
70
107
  */
71
- onOver(_event?: Pointer): void;
108
+ onOver(_event?: Pointer): boolean | void;
72
109
  /**
73
- * function called when the pointer is leaving the object area
110
+ * function called when the pointer is leaving the object area.
111
+ *
112
+ * Fires when the pointer leaves the element's bounds, and also when it is
113
+ * still inside them but something drawn above has consumed the move, since
114
+ * the pointer is then over that instead.
115
+ *
116
+ * Unlike {@link UIBaseElement#onOver} this one cannot consume the event, on
117
+ * purpose: an element that suppressed its own leave would stay in its hover
118
+ * state after the pointer had gone.
74
119
  * @param _event - the event object
75
120
  */
76
121
  onOut(_event?: Pointer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"uibaseelement.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uibaseelement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IACnD;;;;;OAKG;IACM,QAAQ,UAAQ;IAEzB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAGlB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEjC;;;;;OAKG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;IA+CxD;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAuClC;;;OAGG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9B;;;OAGG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAuB9B;;;OAGG;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAmB7B;;;;OAIG;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBpC;;;OAGG;IACH,MAAM,IAAI,IAAI;CA4Dd"}
1
+ {"version":3,"file":"uibaseelement.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uibaseelement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IACnD;;;;;OAKG;IACM,QAAQ,UAAQ;IAEzB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAGlB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEjC;;;;;OAKG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;IA+CxD;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAuClC;;;OAGG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9B;;;;;;;;;;;OAWG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAuBxC;;;;;;;;;;;OAWG;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAmB7B;;;;OAIG;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBpC;;;OAGG;IACH,MAAM,IAAI,IAAI;CA4Dd"}
@@ -0,0 +1,245 @@
1
+ import type Camera2d from "../../camera/camera2d.ts";
2
+ import type { Matrix3d } from "../../math/matrix3d.ts";
3
+ import type { Vector3d } from "../../math/vector3d.ts";
4
+ import type Renderer from "../../video/renderer.js";
5
+ import type { Paint } from "./panelpaint.ts";
6
+ import UIBaseElement from "./uibaseelement.ts";
7
+ /**
8
+ * Everything {@link UIPanel} takes.
9
+ */
10
+ export interface UIPanelSettings {
11
+ /** the panel's width, in pixels */
12
+ width: number;
13
+ /** the panel's height, in pixels */
14
+ height: number;
15
+ /**
16
+ * The fill behind the children; `null` leaves it transparent.
17
+ *
18
+ * NOT `backgroundColor`, which a `Container` already has and which does
19
+ * something else entirely: that one is handed to `clearColor` and wipes
20
+ * the whole render target, so a panel setting it would repaint the
21
+ * screen. The name here matches {@link ProgressBarSettings} instead.
22
+ */
23
+ fillColor?: Paint | null;
24
+ /** drawn around the edge; `null` for none */
25
+ borderColor?: Paint | null;
26
+ /** how thick that border is */
27
+ borderWidth?: number;
28
+ /** corner radius; `0` is square */
29
+ radius?: number;
30
+ /**
31
+ * How far the panel drifts up and down, in pixels. `0`, the default,
32
+ * leaves it still.
33
+ *
34
+ * See {@link UIPanel#bobAmplitude}.
35
+ */
36
+ bobAmplitude?: number;
37
+ /**
38
+ * How long one full up and down cycle takes, in milliseconds.
39
+ *
40
+ * See {@link UIPanel#bobPeriod}.
41
+ */
42
+ bobPeriod?: number;
43
+ /**
44
+ * Whether the panel swallows pointer events aimed at what is behind it.
45
+ *
46
+ * `true` by default, which is what a dialog wants: a click on the panel,
47
+ * or on the dimmed scene it covers, must not reach the game underneath.
48
+ * Children are unaffected either way, because the dispatcher asks a child
49
+ * before the container holding it.
50
+ *
51
+ * Set `false` for a panel that is only a backdrop, such as a HUD frame
52
+ * drawn over a playfield that still has to receive clicks.
53
+ */
54
+ blocking?: boolean;
55
+ }
56
+ /**
57
+ * A rectangular surface with a background, an optional border and children.
58
+ *
59
+ * The thing every menu, dialog and HUD frame starts by writing: a rounded
60
+ * rectangle, a fill, an outline, and some labels on top. One example in this
61
+ * repository had three of them, each repeating the same half dozen renderer
62
+ * calls, and each repeating the same correction for the way `setColor` folds
63
+ * the global alpha in. That correction is the reason this is a widget rather
64
+ * than a snippet: it is easy to leave out, and leaving it out does not fail,
65
+ * it just renders a panel at the wrong opacity.
66
+ *
67
+ * It is a {@link UIBaseElement}, so it is a container that carries pointer
68
+ * events, and children added to it are drawn over its background and are
69
+ * asked about a click before it is.
70
+ *
71
+ * It is floating, as every UI element is, and where it lands in the paint
72
+ * order is the depth it is added at. In a world sorted on `"depth"`, which
73
+ * is every `Camera3d` scene, that depth is read the other way round from
74
+ * the 2D habit: a floating child is ranked by `|pos.z|` there and the
75
+ * SMALLER magnitude draws on top, so a panel added at 9000 to sit above
76
+ * everything sits behind everything instead, and a dialog there wants a
77
+ * small depth, 0 or 1.
78
+ * @example
79
+ * import { UIPanel, Text } from "melonjs";
80
+ *
81
+ * const panel = new UIPanel(cx - 200, cy - 120, {
82
+ * width: 400,
83
+ * height: 240,
84
+ * fillColor: "#0a1526",
85
+ * borderColor: "rgba(130, 200, 240, 0.55)",
86
+ * borderWidth: 2,
87
+ * radius: 14,
88
+ * });
89
+ * // positioned relative to the panel, not to the screen
90
+ * panel.addChild(new Text(200, 24, { text: "PAUSED", textAlign: "center" }));
91
+ * app.world.addChild(panel);
92
+ * @category UI
93
+ */
94
+ export default class UIPanel extends UIBaseElement {
95
+ /** the fill behind the children; `null` leaves it transparent */
96
+ fillColor: Paint | null;
97
+ /** drawn around the edge; `null` for none */
98
+ borderColor: Paint | null;
99
+ /** how thick that border is */
100
+ borderWidth: number;
101
+ /** corner radius; `0` is square */
102
+ radius: number;
103
+ /** whether it swallows pointer events aimed at what is behind it */
104
+ blocking: boolean;
105
+ /**
106
+ * How far the panel drifts up and down, in pixels. `0`, the default,
107
+ * leaves it still.
108
+ *
109
+ * The slow float an idle dialogue or pause panel has in a lot of games,
110
+ * which is there so a screen waiting for input does not look frozen. It
111
+ * is a sine, so this is the distance to either extreme and the panel
112
+ * covers twice it over a cycle; 2 to 4 is the usual range, and it starts
113
+ * by rising rather than sinking.
114
+ *
115
+ * Do not go much below 2. The renderer snaps a translation to whole
116
+ * pixels, truncating, so an amplitude of 1 spends most of the cycle
117
+ * reading as 0 and the panel twitches rather than drifts.
118
+ *
119
+ * The panel is CLICKABLE where it is drawn: the offset goes into
120
+ * {@link UIPanel#getAbsolutePosition}, which is what the bounds pipeline
121
+ * reads, so the hit area of the panel and of every widget inside it
122
+ * follows the float at any depth. `pos` is deliberately left alone, so a
123
+ * caller still reads and writes the resting place rather than a value
124
+ * that moves under them.
125
+ *
126
+ * The bounds are rebuilt only on the frames the offset actually changes,
127
+ * so a panel with no bob costs nothing.
128
+ * @default 0
129
+ */
130
+ bobAmplitude: number;
131
+ /**
132
+ * How long one full up and down cycle takes, in milliseconds.
133
+ *
134
+ * Anything at or below zero turns the bob off rather than dividing by it.
135
+ * That is not politeness: the offset would be `NaN`, and one `translate`
136
+ * by `NaN` writes it into the transform, where every batched vertex under
137
+ * it inherits the poison and the GPU clips the lot away. A panel that
138
+ * silently vanished would be a long way from an obviously bad period.
139
+ * @default 2000
140
+ */
141
+ bobPeriod: number;
142
+ /**
143
+ * @param x - position of the panel's left edge
144
+ * @param y - position of the panel's top edge
145
+ * @param settings - see {@link UIPanelSettings}
146
+ */
147
+ constructor(x: number, y: number, settings: UIPanelSettings);
148
+ /**
149
+ * Advance the bob.
150
+ * @param dt - time since the last frame, in milliseconds
151
+ * @returns whether the panel needs redrawing
152
+ */
153
+ update(dt: number): boolean;
154
+ /**
155
+ * Draw the fill, the border, and then the children over both.
156
+ * @param renderer - the renderer to draw with
157
+ * @param viewport - the camera being drawn through, passed to the children
158
+ */
159
+ draw(renderer: Renderer, viewport?: Camera2d): void;
160
+ /**
161
+ * Where the panel IS, bob included.
162
+ *
163
+ * THE hook that makes a floating panel honest. Both bounds paths funnel
164
+ * through this one method, and a child's absolute position is the sum of
165
+ * the chain above it, so adding the offset here reaches the panel's own
166
+ * hit area and every descendant's, at any depth, without any of them
167
+ * knowing a bob exists.
168
+ *
169
+ * Not `currentTransform`, which was the obvious guess: that reaches a
170
+ * renderable's OWN bounds and not its children's, so a bobbing panel's
171
+ * swallow rectangle would drift off the widgets sitting in it. And not a
172
+ * write to `pos`, which would reach everything correctly but silently
173
+ * overwrite a caller's own write on the very next frame.
174
+ *
175
+ * {@link Particle} overrides this method for the same reason, its
176
+ * placement not being in its `pos` chain either.
177
+ * @returns the absolute position, offset by the bob
178
+ */
179
+ getAbsolutePosition(): Vector3d;
180
+ /**
181
+ * The matrix form of the same offset.
182
+ *
183
+ * Without it `getWorldTransform()` and `getAbsolutePosition()` disagree
184
+ * about a bobbing panel, and the contract on those two says that for a
185
+ * `Container` they coincide.
186
+ * @param out - matrix to write into
187
+ * @returns `out`, for chaining
188
+ */
189
+ protected getLocalTransform(out: Matrix3d): Matrix3d;
190
+ /**
191
+ * Resize this panel's bounds, and refresh its children's.
192
+ *
193
+ * `Container` does those two jobs in ONE loop, both gated on
194
+ * `enableChildBoundsUpdate`, and a panel wants exactly one of them. The
195
+ * flag is off here so that a label overhanging the edge cannot grow the
196
+ * rectangle a blocking panel swallows clicks inside, and turning it off
197
+ * took the other job with it: a child's bounds are absolute, worked out
198
+ * once through `getAbsolutePosition()` and then cached, so moving the
199
+ * panel left every child's HIT AREA behind at the old place while the
200
+ * whole panel drew at the new one. A dialog slid or snapped into position
201
+ * after it was built had buttons that only answered where they used to
202
+ * be.
203
+ *
204
+ * This costs nothing per frame: `pos` calls `updateBounds` when it is
205
+ * written, so the walk happens when the panel actually moves.
206
+ * @param absolute - update in world absolute coordinates
207
+ * @returns this panel's bounds
208
+ */
209
+ updateBounds(absolute?: boolean): import("../../index.ts").Bounds;
210
+ /**
211
+ * Consume a click on the panel itself, unless told not to.
212
+ *
213
+ * Returning `false` is how {@link UIBaseElement} consumes. A child is
214
+ * asked before the container holding it, so this only ever sees a click
215
+ * that missed every one of them, which for a dialog means a click on its
216
+ * own background and should go no further.
217
+ * @returns false while {@link UIPanel#blocking}
218
+ */
219
+ onClick(): boolean;
220
+ /**
221
+ * Consume the release that follows a click on the panel, unless told not
222
+ * to.
223
+ *
224
+ * The three handlers consume independently. Taking the press and leaving
225
+ * the release is half a block: the pointer-up still reaches whatever is
226
+ * under the dialog, so a button there completes an interaction it never
227
+ * began.
228
+ * @returns false while {@link UIPanel#blocking}
229
+ */
230
+ onRelease(): boolean;
231
+ /**
232
+ * Consume a hover on the panel itself, unless told not to.
233
+ *
234
+ * Without this a widget UNDER a dialog keeps lighting up as the pointer
235
+ * crosses the panel covering it.
236
+ * @returns false while {@link UIPanel#blocking}
237
+ */
238
+ onOver(): boolean;
239
+ /**
240
+ * Hand back what the painter borrowed.
241
+ * @ignore
242
+ */
243
+ onDestroyEvent(): void;
244
+ }
245
+ //# sourceMappingURL=uipanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uipanel.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uipanel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IACjD,iEAAiE;IACjE,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;IACxB,6CAA6C;IAC7C,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;IAC1B,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;;;OASG;IACH,SAAS,EAAE,MAAM,CAAC;IAmClB;;;;OAIG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe;IAiE3D;;;;OAIG;IACM,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmBpC;;;;OAIG;IACM,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA6CrD;;;;;;;;;;;;;;;;;;OAkBG;IACM,mBAAmB,IAAI,QAAQ;IAMxC;;;;;;;;OAQG;cACgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ;IAS7D;;;;;;;;;;;;;;;;;;OAkBG;IACM,YAAY,CAAC,QAAQ,UAAO;IAQrC;;;;;;;;OAQG;IACM,OAAO,IAAI,OAAO;IAI3B;;;;;;;;;OASG;IACM,SAAS,IAAI,OAAO;IAI7B;;;;;;OAMG;IACM,MAAM,IAAI,OAAO;IAI1B;;;OAGG;IACM,cAAc;CAIvB"}
@@ -74,12 +74,28 @@ export default class UISpriteElement extends Sprite {
74
74
  */
75
75
  onClick(_event?: Pointer): boolean;
76
76
  /**
77
- * function called when the pointer is over the object
77
+ * function called when the pointer is over the object.
78
+ *
79
+ * Fires once, on the frame the pointer crosses into the element. To stay
80
+ * opaque for as long as the pointer rests on it, an element also wants a
81
+ * `"pointermove"` callback registered through
82
+ * {@link input.registerPointerEvent} returning `false`, since by then the
83
+ * pointer is already inside and this no longer runs.
78
84
  * @param _event - the event object
85
+ * @returns return false if we need to stop propagating the event, so that an
86
+ * element covered by this one does not also light up on hover
79
87
  */
80
- onOver(_event?: Pointer): void;
88
+ onOver(_event?: Pointer): boolean | void;
81
89
  /**
82
- * function called when the pointer is leaving the object area
90
+ * function called when the pointer is leaving the object area.
91
+ *
92
+ * Fires when the pointer leaves the element's bounds, and also when it is
93
+ * still inside them but something drawn above has consumed the move, since
94
+ * the pointer is then over that instead.
95
+ *
96
+ * Unlike {@link UISpriteElement#onOver} this one cannot consume the event, on
97
+ * purpose: an element that suppressed its own leave would stay in its hover
98
+ * state after the pointer had gone.
83
99
  * @param _event - the event object
84
100
  */
85
101
  onOut(_event?: Pointer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"uispriteelement.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uispriteelement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AAEpD,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,MAAM;IAClD;;;;;OAKG;IACM,QAAQ,UAAQ;IAEzB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAGf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;gBAEF,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAyC7C;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAelC;;;OAGG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAgB9B;;;OAGG;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAmB7B;;;;OAIG;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBpC;;;OAGG;IACH,MAAM,IAAI,IAAI;CAyCd"}
1
+ {"version":3,"file":"uispriteelement.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uispriteelement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AAEpD,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,MAAM;IAClD;;;;;OAKG;IACM,QAAQ,UAAQ;IAEzB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAGf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;gBAEF,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAyC7C;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAelC;;;;;;;;;;;OAWG;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAgBxC;;;;;;;;;;;OAWG;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAmB7B;;;;OAIG;IAEH,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBpC;;;OAGG;IACH,MAAM,IAAI,IAAI;CAyCd"}
@@ -1,5 +1,6 @@
1
1
  import type Camera2d from "../../camera/camera2d.ts";
2
2
  import { RoundRect } from "../../geometries/roundrect.ts";
3
+ import type Pointer from "../../input/pointer.ts";
3
4
  import type { Bounds } from "../../physics/bounds.ts";
4
5
  import type Renderer from "../../video/renderer.js";
5
6
  import BitmapText from "../text/bitmaptext.js";
@@ -8,6 +9,7 @@ interface UITextButtonSettings {
8
9
  font?: string;
9
10
  size?: number;
10
11
  text?: string;
12
+ /** see {@link UITextButton.bindKey} */
11
13
  bindKey?: string | number;
12
14
  hoverOffColor?: string;
13
15
  hoverOnColor?: string;
@@ -25,9 +27,31 @@ interface UITextButtonSettings {
25
27
  */
26
28
  export default class UITextButton extends UIBaseElement {
27
29
  /**
28
- * The key to bind the action to
30
+ * Keyboard shortcut: an input.KEY keycode or an existing input action name.
31
+ * A press calls onClick() and its matching release calls onRelease(), both
32
+ * without a pointer event. Shortcuts are active only while the button is
33
+ * activated and never change global key bindings. The first input to press
34
+ * owns the button until released; shortcuts do not start pointer dragging
35
+ * or tap-and-hold.
36
+ *
37
+ * `isClickable` gates the PRESS, not the release: a button disabled while
38
+ * its key is held still releases when that key comes up, so it cannot be
39
+ * left stuck down.
40
+ *
41
+ * **Losing focus or being removed cancels a held press WITHOUT calling
42
+ * `onRelease()`.** The press was abandoned rather than completed, so the
43
+ * button returns to its released state silently. Code that treats the pair
44
+ * as press and depress, firing a weapon on click and stopping on release,
45
+ * needs to stop on {@link event.BLUR} too or it will still be firing when
46
+ * the window comes back.
47
+ * @default -1
29
48
  */
30
49
  bindKey: string | number;
50
+ private keyboardKey;
51
+ private keyboardActive;
52
+ private readonly keyDown;
53
+ private readonly keyUp;
54
+ private readonly cancelKeyboardPress;
31
55
  /**
32
56
  * The css value of a color to be used if the pointer is not hovering over the button
33
57
  */
@@ -95,6 +119,11 @@ export default class UITextButton extends UIBaseElement {
95
119
  * world.addChild(new PlayButton(15,200));
96
120
  */
97
121
  constructor(x: number, y: number, settings: UITextButtonSettings);
122
+ onActivateEvent(): void;
123
+ onDeactivateEvent(): void;
124
+ clicked(event: Pointer): boolean | void;
125
+ release(event: Pointer): boolean | void;
126
+ pointerMove(event: Pointer): void;
98
127
  draw(renderer: Renderer, viewport?: Camera2d): void;
99
128
  }
100
129
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"uitextbutton.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uitextbutton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,UAAU,oBAAoB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa;IACtD;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;IAyCvD,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;CAY5D"}
1
+ {"version":3,"file":"uitextbutton.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/uitextbutton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,UAAU,oBAAoB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa;IACtD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAkBtB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAQpB;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAMlC;IAEF;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;IAyCvD,eAAe,IAAI,IAAI;IAWvB,iBAAiB,IAAI,IAAI;IASzB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAOvC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAOvC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMjC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;CAY5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,qBAAqB,CAAC;AA4QxC;;GAEG;AACH,QAAA,MAAM,KAAK;IACV;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;OAGG;;IAGH;;;;;;;OAOG;;IAGH;;;OAGG;4BACoB,OAAO,GAAW,IAAI;IAqB7C;;;OAGG;kBACU,OAAO,GAAW,IAAI;IAkBnC;;;OAGG;oBACY,OAAO,GAAW,IAAI;IAiBrC;;;OAGG;mBACW,OAAO,GAAW,IAAI;IAmBpC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;qBACc,MAAM,UAAS,OAAO,GAAW,OAAO,CAAC,IAAI,CAAC;IAkC/D;;;OAGG;iBACU,OAAO;IAIpB;;;OAGG;gBACS,OAAO;IAInB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;iBACU,MAAM,SAAS,KAAK,UAAS,OAAO,GAAW,IAAI;IAchE;;;;;OAKG;kBACU,MAAM,GAAY,KAAK,GAAG,SAAS;IAQhD;;;;OAIG;eACQ,KAAK,GAAG,SAAS;IAI5B;;;;;;;;;;;;;;;;;;OAkBG;uBAEM,MAAM,GAAG,MAAM,SAChB,MAAM,aACH,MAAM,UAEb,OAAO,0BAA0B,EAAE,OAAO,GAC1C,OAAO,0BAA0B,EAAE,OAAO,GAC3C,IAAI;IAOP;;;;OAIG;2BACoB,MAAM,UAAU,OAAO,GAAG,IAAI;IAIrD;;;;;;;;;OASG;oBAEO,MAAM,gBACF,OAAO,gBACN,OAAO,EAAE,GACrB,IAAI;IA4FP;;;;OAIG;uBACgB,MAAM,GAAG,OAAO;CAGnC,CAAC;AACF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,qBAAqB,CAAC;AA4QxC;;GAEG;AACH,QAAA,MAAM,KAAK;IACV;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;OAGG;;IAGH;;;;;;;OAOG;;IAGH;;;OAGG;4BACoB,OAAO,GAAW,IAAI;IAqB7C;;;OAGG;kBACU,OAAO,GAAW,IAAI;IAkBnC;;;OAGG;oBACY,OAAO,GAAW,IAAI;IAiBrC;;;OAGG;mBACW,OAAO,GAAW,IAAI;IAmBpC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;qBACc,MAAM,UAAS,OAAO,GAAW,OAAO,CAAC,IAAI,CAAC;IAkC/D;;;OAGG;iBACU,OAAO;IAIpB;;;OAGG;gBACS,OAAO;IAInB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;iBACU,MAAM,SAAS,KAAK,UAAS,OAAO,GAAW,IAAI;IAchE;;;;;OAKG;kBACU,MAAM,GAAY,KAAK,GAAG,SAAS;IAQhD;;;;OAIG;eACQ,KAAK,GAAG,SAAS;IAI5B;;;;;;;;;;;;;;;;;;OAkBG;uBAEM,MAAM,GAAG,MAAM,SAChB,MAAM,aACH,MAAM,UAEb,OAAO,0BAA0B,EAAE,OAAO,GAC1C,OAAO,0BAA0B,EAAE,OAAO,GAC3C,IAAI;IAOP;;;;OAIG;2BACoB,MAAM,UAAU,OAAO,GAAG,IAAI;IAIrD;;;;;;;;;OASG;oBAEO,MAAM,gBACF,OAAO,gBACN,OAAO,EAAE,GACrB,IAAI;IA0GP;;;;OAIG;uBACgB,MAAM,GAAG,OAAO;CAGnC,CAAC;AACF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/system/bootstrap.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,eAAO,IAAI,WAAW,SAAQ,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,IAAI,SA0DnB"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/system/bootstrap.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,eAAO,IAAI,WAAW,SAAQ,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,IAAI,SAmDnB"}
@@ -27,6 +27,17 @@ declare const pool: ObjectPool;
27
27
  * which means, that on level loading the engine will try to instantiate every object
28
28
  * found in the map, based on the user defined name in each Object Properties<br>
29
29
  * <img src="../images/object_properties.png"/><br>
30
+ *
31
+ * **Superseded by the typed pools.** `createPool` arrived in 18.0.0 and does
32
+ * the same job without the string keys: `getPool("tween")`, `getPool("text")`
33
+ * and the rest are typed, so a wrong name is a compile error rather than a
34
+ * throw, and a pool can be created for any class with `createPool`. For
35
+ * registering a class so a Tiled map can name it, use
36
+ * {@link registerTiledObjectClass}, which is what this now delegates to.
37
+ *
38
+ * The engine itself no longer uses this pool for anything.
39
+ * @deprecated since 18.0.0, use {@link getPool} / `createPool`, and
40
+ * {@link registerTiledObjectClass} for Tiled classes
30
41
  * @see {@link pool} the default global instance of ObjectPool
31
42
  */
32
43
  declare class ObjectPool {
@@ -76,7 +87,7 @@ declare class ObjectPool {
76
87
  /**
77
88
  * Pull a new instance of the requested object (if added into the object pool)
78
89
  * @param {string} name - as used in {@link pool.register}
79
- * @param {...*} [args] - arguments to be passed when instantiating/reinitializing the object
90
+ * @param {...*} args - arguments to be passed when instantiating/reinitializing the object
80
91
  * @returns {object} the instance of the requested object
81
92
  * @example
82
93
  * me.pool.register("bullet", BulletEntity, true);
@@ -94,7 +105,7 @@ declare class ObjectPool {
94
105
  * app.world.removeChild(enemy);
95
106
  * app.world.removeChild(bullet);
96
107
  */
97
- pull(name: string, ...args?: any[]): object;
108
+ pull(name: string, ...args: any[]): object;
98
109
  /**
99
110
  * purge the object pool from any inactive object <br>
100
111
  * Object pooling must be enabled for this function to work<br>
@@ -106,9 +117,18 @@ declare class ObjectPool {
106
117
  * Object pooling for the object class must be enabled,
107
118
  * and object must have been instantiated using {@link pull},
108
119
  * otherwise this function won't work
109
- * @throws will throw an error if the object cannot be recycled
120
+ *
121
+ * Reports failure by RETURNING FALSE. It used to throw by default, and
122
+ * nothing at the call site made that visible: a class that was never
123
+ * registered, or registered without recycling, aborted whatever was
124
+ * running. Both of the internal uses removed in 20.7.0 failed that way,
125
+ * inside a `destroy()` that had already recycled other state, which left
126
+ * a half-torn-down object to die later somewhere unrelated. Pass
127
+ * `throwOnError` to opt back in where a missed registration is a bug you
128
+ * want to hear about immediately.
110
129
  * @param {object} obj - instance to be recycled
111
- * @param {boolean} [throwOnError=true] - throw an exception if the object cannot be recycled
130
+ * @param {boolean} [throwOnError=false] - throw an exception instead of returning false
131
+ * @throws when the object cannot be recycled AND `throwOnError` is true
112
132
  * @returns {boolean} true if the object was successfully recycled in the object pool
113
133
  */
114
134
  push(obj: object, throwOnError?: boolean): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"legacy_pool.d.ts","sourceRoot":"","sources":["../../src/system/legacy_pool.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,kEAEC;;AAmND;;;;;;;;;;;;;;GAcG;AACH,+BAA8B;AAhO9B;;;;;;;;;;;;GAYG;AACH;IAEE,gBAAqB;IACrB,yBAAyB;IAEzB;;;;;;;;;;;;;;OAcG;IACH,mBARU,OAAO,CAQY;IAG9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,oBAhBW,MAAM,YACN,MAAM,cACN,OAAO,QAsCjB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAnBW,MAAM,YACH,GAAC,EAAA,GACF,MAAM,CAsClB;IAED;;;;OAIG;IACH,cAOC;IAED;;;;;;;;;OASG;IACH,UAJW,MAAM,iBACN,OAAO,GACL,OAAO,CAgBnB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;;;OAUG;IACH,cAPW,MAAM,GACJ,OAAO,CAcnB;IAED;;;OAGG;IACH,oBAFa,MAAM,CAIlB;CACD"}
1
+ {"version":3,"file":"legacy_pool.d.ts","sourceRoot":"","sources":["../../src/system/legacy_pool.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,kEAEC;;AA4QD;;;;;;;;;;;;;;GAcG;AACH,+BAA8B;AAvP9B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAEE,gBAAqB;IACrB,yBAAyB;IAEzB;;;;;;;;;;;;;;OAcG;IACH,mBARU,OAAO,CAQY;IAG9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,oBAhBW,MAAM,YACN,MAAM,cACN,OAAO,QAuCjB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAnBW,MAAM,WACH,GAAC,EAAA,GACF,MAAM,CAuClB;IAED;;;;OAIG;IACH,cAOC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,UALW,MAAM,iBACN,OAAO,GAEL,OAAO,CAiBnB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;;;OAUG;IACH,cAPW,MAAM,GACJ,OAAO,CAcnB;IAED;;;OAGG;IACH,oBAFa,MAAM,CAIlB;CACD"}
@@ -1,17 +1,24 @@
1
- export interface Pool<T, A extends unknown[]> {
1
+ export interface Pool<T extends object, A extends unknown[]> {
2
2
  get(...args: A): T;
3
3
  release(object: T): void;
4
4
  purge(): void;
5
5
  size(): number;
6
6
  used(): number;
7
7
  }
8
- type Reset<A extends unknown[]> = ((...args: A) => void) | undefined;
9
- type Release = (() => void) | undefined;
10
- export interface CreatePoolOptions<T, A extends unknown[]> {
8
+ export interface CreatePoolOptions<T extends object, A extends unknown[]> {
11
9
  instance: T;
12
- reset?: Reset<A>;
13
- release?: Release;
10
+ reset?: ((...args: A) => void) | undefined;
11
+ release?: (() => void) | undefined;
14
12
  }
15
- export declare const createPool: <T, A extends unknown[]>(options: (...args: A) => CreatePoolOptions<T, A>) => Pool<T, A>;
16
- export {};
13
+ /**
14
+ * Register a pool instance to the pool registry.
15
+ *
16
+ * Public because `pool.js` re-exports it. Marked internal it was stripped
17
+ * from the declarations while that re-export kept naming it, which left the
18
+ * public `pool` module exporting something no longer declared.
19
+ * @param key - the name this pool is reachable by
20
+ * @param pool - the pool instance to register under it
21
+ */
22
+ export declare const registerPool: (key: string, pool: Pool<any, any[]>) => void;
23
+ export declare const createPool: <T extends object, A extends unknown[]>(options: (...args: A) => CreatePoolOptions<T, A>) => Pool<T, A>;
17
24
  //# sourceMappingURL=pool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/system/pool.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE;IAC3C,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,MAAM,CAAC;IACf,IAAI,IAAI,MAAM,CAAC;CACf;AAED,KAAK,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;AACrE,KAAK,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;AAExC,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE;IACxD,QAAQ,EAAE,CAAC,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAoBD,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE,EAChD,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,KAC9C,IAAI,CAAC,CAAC,EAAE,CAAC,CA2DX,CAAC"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/system/pool.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE;IAC1D,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,MAAM,CAAC;IACf,IAAI,IAAI,MAAM,CAAC;CACf;AAKD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE;IACvE,QAAQ,EAAE,CAAC,CAAC;IAIZ,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACnC;AAKD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAE/D,CAAC;AAuEF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,EAC/D,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,KAC9C,IAAI,CAAC,CAAC,EAAE,CAAC,CAyGX,CAAC"}
@@ -1,5 +1,21 @@
1
1
  import { EasingFunction } from "./easing.js";
2
2
  import { InterpolationFunction } from "./interpolation.js";
3
+ /**
4
+ * Called once when a tween starts, with `this` bound to the tweened object.
5
+ * @see Tween#onStart
6
+ */
7
+ export type OnStartCallback<T> = (this: T) => void;
8
+ /**
9
+ * Called on every tween step with the eased progress in `[0, 1]`, and `this`
10
+ * bound to the tweened object.
11
+ * @see Tween#onUpdate
12
+ */
13
+ export type OnUpdateCallback<T> = (this: T, value: number) => void;
14
+ /**
15
+ * Called once when a tween finishes, with `this` bound to the tweened object.
16
+ * @see Tween#onComplete
17
+ */
18
+ export type OnCompleteCallback<T> = (this: T) => void;
3
19
  /**
4
20
  * A tweening engine for smoothly interpolating object properties over time.
5
21
  * Based on <a href="https://github.com/sole/Tween.js">tween.js</a> with
@@ -140,12 +156,43 @@ export default class Tween {
140
156
  onComplete(onCompleteCallback: OnCompleteCallback<object>): this;
141
157
  /**
142
158
  * Available easing functions, accessed via `Tween.Easing`.
143
- * Each family provides `In`, `Out`, and `InOut` variants.
144
- * @see {@link Easing} for the full list
159
+ *
160
+ * Eleven families, each providing `In`, `Out` and `InOut`. `In` applies the
161
+ * curve at the start, `Out` at the end, and `InOut` at both. `Out` is what
162
+ * most UI wants: the value arrives decisively rather than creeping in.
163
+ *
164
+ * | family | shape | reach for it when |
165
+ * | --- | --- | --- |
166
+ * | `Linear.None` | no curve at all | the value IS the progress, e.g. a loading bar |
167
+ * | `Quadratic` `Cubic` `Quartic` `Quintic` | progressively sharper power curves | general motion; higher powers start slower and finish harder |
168
+ * | `Sinusoidal` | gentlest of all | a drift or a breath that should not call attention |
169
+ * | `Exponential` | extreme, near-instant at one end | something that snaps |
170
+ * | `Circular` | hard, like the quarter of a circle | a mechanical slide |
171
+ * | `Back` | **overshoots past the target and settles back** | impact: a stamp, a button press, anything that should land rather than arrive |
172
+ * | `Elastic` | overshoots repeatedly, oscillating | springy, cartoon motion |
173
+ * | `Bounce` | lands and bounces, settling | something falling onto a surface |
174
+ *
175
+ * `Back` and `Elastic` overshoot, so the value LEAVES the range between
176
+ * your start and end: clamp anything that cannot take it, an opacity or a
177
+ * colour channel in particular. Note the direction of the overshoot follows
178
+ * the direction of travel, so a value tweened DOWN to its target overshoots
179
+ * below it.
180
+ * @see https://easings.net/ for a visual reference of every curve
145
181
  * @example
146
182
  * me.Tween.Easing.Quadratic.InOut
147
183
  * me.Tween.Easing.Bounce.Out
148
184
  * me.Tween.Easing.Elastic.In
185
+ * @example
186
+ * // a stamp: scale falls to 1 and springs through it
187
+ * const driver = { scale: 5 };
188
+ * new me.Tween(driver)
189
+ * .to({ scale: 1 }, { duration: 420 })
190
+ * .easing(me.Tween.Easing.Back.Out)
191
+ * .onUpdate(() => {
192
+ * label.currentTransform.identity();
193
+ * label.scale(driver.scale);
194
+ * })
195
+ * .start();
149
196
  */
150
197
  static get Easing(): {
151
198
  Linear: {
@@ -216,5 +263,5 @@ export default class Tween {
216
263
  CatmullRom: (v: number[], k: number) => number;
217
264
  };
218
265
  }
219
- export declare const tweenPool: import("../system/pool.ts").Pool<Tween, [obj: object]>;
266
+ export declare const tweenPool: import("../index.ts").Pool<Tween, [obj: object]>;
220
267
  //# sourceMappingURL=tween.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tween.d.ts","sourceRoot":"","sources":["../../src/tweens/tween.ts"],"names":[],"mappings":"AAWA,OAAO,EAAU,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAiB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAuB1E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IAqHzB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;gBACS,MAAM,EAAE,MAAM;IA+I1B;;;;;;;;;;;;;OAaG;IACH,EAAE,CACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,aAAa,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;QAClD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC;IAkCF;;;;OAIG;IACH,KAAK,CAAC,IAAI,SAAkB;IA4C5B;;;OAGG;IACH,IAAI;IAKJ;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM;IAKpB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM;IAKpB;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM;IAK1B;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO;IAKlB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc;IAK7B;;;;OAIG;IACH,aAAa,CAAC,aAAa,EAAE,qBAAqB;IAKlD;;;;OAIG;IACH,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE;IAKxB;;;;OAIG;IACH,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC;IAKhD;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAKnD;;;;OAIG;IACH,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC;IA0HzD;;;;;;;;OAQG;IACH,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEhB;IAED;;;;;;;OAOG;IACH,MAAM,KAAK,aAAa;;;;MAEvB;CACD;AAED,eAAO,MAAM,SAAS,wDASpB,CAAC"}
1
+ {"version":3,"file":"tween.d.ts","sourceRoot":"","sources":["../../src/tweens/tween.ts"],"names":[],"mappings":"AAWA,OAAO,EAAU,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAiB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAO1E;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AACnD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACnE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IAqHzB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;gBACS,MAAM,EAAE,MAAM;IA+I1B;;;;;;;;;;;;;OAaG;IACH,EAAE,CACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,aAAa,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;QAClD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC;IAkCF;;;;OAIG;IACH,KAAK,CAAC,IAAI,SAAkB;IA4C5B;;;OAGG;IACH,IAAI;IAKJ;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM;IAKpB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM;IAKpB;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM;IAK1B;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO;IAKlB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc;IAK7B;;;;OAIG;IACH,aAAa,CAAC,aAAa,EAAE,qBAAqB;IAKlD;;;;OAIG;IACH,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE;IAKxB;;;;OAIG;IACH,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC;IAKhD;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAKnD;;;;OAIG;IACH,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC;IA0HzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACH,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEhB;IAED;;;;;;;OAOG;IACH,MAAM,KAAK,aAAa;;;;MAEvB;CACD;AAED,eAAO,MAAM,SAAS,kDASpB,CAAC"}