1681-engine 0.5.8 → 0.5.9

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 (600) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/1681-engine.js +463 -409
  3. package/dist/ambient/ColorGrade.js +0 -1
  4. package/dist/ambient/DayClock.js +0 -1
  5. package/dist/ambient/WeatherLayer.js +0 -1
  6. package/dist/ambient/grade.js +0 -1
  7. package/dist/ambient/weather.js +0 -1
  8. package/dist/anim/AnimStateMachine.js +0 -1
  9. package/dist/anim/Animator.js +0 -1
  10. package/dist/anim/animStateCompile.js +0 -1
  11. package/dist/anim/animStateSystem.js +0 -1
  12. package/dist/anim/animationSystem.js +0 -1
  13. package/dist/anim/asepriteSlices.js +0 -1
  14. package/dist/anim/asepriteTags.js +0 -1
  15. package/dist/anim/parseAseprite.js +0 -1
  16. package/dist/assets/AssetLoader.js +112 -14
  17. package/dist/assets/loadAseprite.js +0 -1
  18. package/dist/assets/takeCleanerWorker-DTcI_Jqr.js +0 -1
  19. package/dist/assets/textureAtlas.js +58 -0
  20. package/dist/audio/Footsteps.js +0 -1
  21. package/dist/audio/MusicPlayer.js +0 -1
  22. package/dist/audio/SoundEngine.js +13 -7
  23. package/dist/audio/cleanTake.js +0 -1
  24. package/dist/audio/music/ElementVoice.js +0 -1
  25. package/dist/audio/music/GraphVoice.js +0 -1
  26. package/dist/audio/music/MusicChannel.js +0 -1
  27. package/dist/audio/music/musicVoice.js +0 -1
  28. package/dist/audio/sampleBank.js +0 -1
  29. package/dist/audio/soundTable.js +0 -1
  30. package/dist/audio/synth.js +0 -1
  31. package/dist/core/BitmapLabel.js +0 -1
  32. package/dist/core/Camera.js +1 -2
  33. package/dist/core/Clock.js +31 -21
  34. package/dist/core/Graphics.js +0 -1
  35. package/dist/core/Group.js +0 -1
  36. package/dist/core/Image.js +0 -1
  37. package/dist/core/ObjectFactory.js +0 -1
  38. package/dist/core/Pointer.js +46 -24
  39. package/dist/core/Rectangle.js +0 -1
  40. package/dist/core/Stage.js +5 -6
  41. package/dist/core/Text.js +0 -1
  42. package/dist/core/TextureRegistry.js +54 -24
  43. package/dist/core/Timeline.js +0 -1
  44. package/dist/core/TimelineBuilder.js +0 -1
  45. package/dist/core/TimelineChild.js +0 -1
  46. package/dist/core/Tweener.js +0 -1
  47. package/dist/core/atlas.js +0 -1
  48. package/dist/core/atlasPlan.js +0 -1
  49. package/dist/core/blendLayer.js +11 -0
  50. package/dist/core/eases.js +0 -1
  51. package/dist/core/gameObject.js +22 -20
  52. package/dist/core/pixelZoom.js +43 -0
  53. package/dist/core/pixiPatches.js +0 -1
  54. package/dist/core/runDue.js +28 -0
  55. package/dist/core/silhouette.js +49 -0
  56. package/dist/core/timelinePlace.js +0 -1
  57. package/dist/core/tweenProps.js +0 -1
  58. package/dist/debug/DebugOverlay.js +0 -1
  59. package/dist/debug/DrawCallCounter.js +15 -12
  60. package/dist/debug/ErrorLog.js +0 -1
  61. package/dist/debug/FrameStats.js +0 -1
  62. package/dist/debug/inspectWorld.js +0 -1
  63. package/dist/diagnostics/ErrorDeduper.js +0 -1
  64. package/dist/diagnostics/FrameSampler.js +0 -1
  65. package/dist/diagnostics/bootWatch.js +0 -1
  66. package/dist/diagnostics/captureErrors.js +0 -1
  67. package/dist/diagnostics/contextLoss.js +0 -1
  68. package/dist/diagnostics/frameStats.js +0 -1
  69. package/dist/diagnostics/gpuInfo.js +0 -1
  70. package/dist/diagnostics/renderGuard.js +0 -1
  71. package/dist/ecs/SparseSet.js +0 -1
  72. package/dist/ecs/World.js +0 -1
  73. package/dist/ecs/fields.js +0 -1
  74. package/dist/engine/Engine.js +42 -18
  75. package/dist/engine/FixedLoop.js +0 -1
  76. package/dist/engine/HiddenPause.js +27 -0
  77. package/dist/engine/Scene.js +0 -1
  78. package/dist/engine/SceneManager.js +0 -1
  79. package/dist/events/EventBus.js +0 -1
  80. package/dist/fx/Afterimages.js +82 -0
  81. package/dist/fx/FloatingText.js +0 -1
  82. package/dist/fx/hitStop.js +0 -1
  83. package/dist/fx/viewCull.js +0 -1
  84. package/dist/i18n/Translator.js +0 -1
  85. package/dist/i18n/extractStrings.js +0 -1
  86. package/dist/i18n/formatMessage.js +0 -1
  87. package/dist/input/Actions.js +29 -21
  88. package/dist/input/AimGesture.js +0 -1
  89. package/dist/input/Keyboard.js +0 -1
  90. package/dist/input/Keymap.js +0 -1
  91. package/dist/input/TargetLock.js +0 -1
  92. package/dist/input/aimAxis.js +0 -1
  93. package/dist/input/keyChord.js +0 -1
  94. package/dist/input/longPress.js +0 -1
  95. package/dist/input/rumble.js +42 -0
  96. package/dist/input/stickAxis.js +0 -1
  97. package/dist/input/touchDetect.js +0 -1
  98. package/dist/light/LightLayer.js +0 -1
  99. package/dist/nav/MinHeap.js +0 -1
  100. package/dist/nav/findPath.js +0 -1
  101. package/dist/nav/navGrid.js +0 -1
  102. package/dist/nav/nearestOpen.js +0 -1
  103. package/dist/nav/straightenPath.js +0 -1
  104. package/dist/net/Connection.js +39 -16
  105. package/dist/net/InterpolationBuffer.js +0 -1
  106. package/dist/net/PredictedMover.js +0 -1
  107. package/dist/net/Room.js +0 -1
  108. package/dist/net/RoomHost.js +0 -1
  109. package/dist/net/cadence.js +0 -1
  110. package/dist/net/constants.js +0 -1
  111. package/dist/net/lobby/LobbyClient.js +0 -1
  112. package/dist/net/lobby/LobbyHost.js +0 -1
  113. package/dist/net/lobby/LobbyRooms.js +0 -1
  114. package/dist/net/lobby/Matchmaker.js +0 -1
  115. package/dist/net/movement.js +40 -39
  116. package/dist/net/protocol.js +0 -1
  117. package/dist/net/reconnect.js +10 -0
  118. package/dist/net/serverClock.js +0 -1
  119. package/dist/net/snapshotCodec.js +0 -1
  120. package/dist/parallax/Parallax.js +0 -1
  121. package/dist/parallax/ParallaxLayer.js +0 -1
  122. package/dist/parallax/parallaxMath.js +0 -1
  123. package/dist/particles/Emitter.js +0 -1
  124. package/dist/particles/ParticleBudget.js +0 -1
  125. package/dist/particles/ParticleSim.js +0 -1
  126. package/dist/particles/particleCurves.js +0 -1
  127. package/dist/particles/particleSampling.js +0 -1
  128. package/dist/physics/Body.js +0 -1
  129. package/dist/physics/BroadPhase.js +0 -1
  130. package/dist/physics/Contact.js +0 -1
  131. package/dist/physics/ContactSolver.js +0 -1
  132. package/dist/physics/PhysicsWorld.js +0 -1
  133. package/dist/physics/SpatialHash.js +0 -1
  134. package/dist/physics/collide.js +0 -1
  135. package/dist/physics/collidePolygon.js +0 -1
  136. package/dist/physics/contactReport.js +0 -1
  137. package/dist/physics/drawColliders.js +0 -1
  138. package/dist/physics/physicsSystem.js +0 -1
  139. package/dist/physics/polygon.js +0 -1
  140. package/dist/physics/raycast.js +0 -1
  141. package/dist/physics/syncToBody.js +0 -1
  142. package/dist/physics/tileBodies.js +0 -1
  143. package/dist/physics/types.js +0 -1
  144. package/dist/pixel/Darkness.js +50 -47
  145. package/dist/pixel/DitherVignette.js +0 -1
  146. package/dist/pixel/Evaporation.js +0 -1
  147. package/dist/pixel/NightShade.js +0 -1
  148. package/dist/pixel/PixelLayer.js +0 -1
  149. package/dist/pixel/PixelMarks.js +99 -0
  150. package/dist/pixel/SwayProp.js +0 -1
  151. package/dist/pixel/aimPixels.js +67 -0
  152. package/dist/pixel/lights.js +0 -1
  153. package/dist/pixel/nineSlice.js +0 -1
  154. package/dist/pixel/paintLayer.js +0 -1
  155. package/dist/pixel/palette.js +0 -1
  156. package/dist/pixel/pixel.js +0 -1
  157. package/dist/pixel/pixelPaint.js +27 -24
  158. package/dist/pixel/pixelParticles.js +35 -0
  159. package/dist/pixel/pixelTone.js +0 -1
  160. package/dist/pixel/propKit.js +0 -1
  161. package/dist/pixel/ramp.js +0 -1
  162. package/dist/pixel/selout.js +0 -1
  163. package/dist/pixel/spritePixels.js +0 -1
  164. package/dist/pixel/swayRig.js +0 -1
  165. package/dist/pixel/vignetteMask.js +0 -1
  166. package/dist/pixel/weatherArt.js +0 -1
  167. package/dist/pixel.js +71 -65
  168. package/dist/platform/appResume.js +18 -0
  169. package/dist/platform/fullscreen.js +52 -0
  170. package/dist/platform/orientation.js +26 -0
  171. package/dist/platform/pointerLock.js +37 -0
  172. package/dist/platform/reducedMotion.js +23 -0
  173. package/dist/platform/timeoutSignal.js +14 -0
  174. package/dist/platform/touch.js +0 -1
  175. package/dist/postfx/BloomFilter.js +0 -1
  176. package/dist/postfx/ChromaticAberrationFilter.js +0 -1
  177. package/dist/postfx/ColorAdjustFilter.js +0 -1
  178. package/dist/postfx/CrtFilter.js +0 -1
  179. package/dist/postfx/PixelateFilter.js +0 -1
  180. package/dist/postfx/PostFx.js +0 -1
  181. package/dist/postfx/ShockwaveFilter.js +0 -1
  182. package/dist/postfx/VignetteFilter.js +0 -1
  183. package/dist/postfx/fxAnimator.js +0 -1
  184. package/dist/postfx/fxShader.js +0 -1
  185. package/dist/postfx.js +0 -1
  186. package/dist/react/ChoiceDialog.js +0 -1
  187. package/dist/react/ConfirmDialog.js +0 -1
  188. package/dist/react/Glyph.js +0 -1
  189. package/dist/react/Modal.js +0 -1
  190. package/dist/react/Panel.js +0 -1
  191. package/dist/react/PixelImage.js +0 -1
  192. package/dist/react/Select.js +0 -1
  193. package/dist/react/Slider.js +0 -1
  194. package/dist/react/SplitPane.js +0 -1
  195. package/dist/react/TabStrip.js +0 -1
  196. package/dist/react/TitleTips.js +0 -1
  197. package/dist/react/Tooltip.js +0 -1
  198. package/dist/react/UiProvider.js +0 -1
  199. package/dist/react/baseCss.js +0 -1
  200. package/dist/react/choiceStore.js +0 -1
  201. package/dist/react/classNames.js +0 -1
  202. package/dist/react/confirmStore.js +0 -1
  203. package/dist/react/labels.js +0 -1
  204. package/dist/react/placement.js +0 -1
  205. package/dist/react/useFillSheet.js +0 -1
  206. package/dist/react/useFitToViewport.js +0 -1
  207. package/dist/react/usePicked.js +0 -1
  208. package/dist/react/useStore.js +0 -1
  209. package/dist/react/useViewport.js +0 -1
  210. package/dist/react.js +0 -1
  211. package/dist/rig/PosePlayer.js +0 -1
  212. package/dist/rig/RigView.js +0 -1
  213. package/dist/rig/Skeleton.js +0 -1
  214. package/dist/rig/humanoid.js +0 -1
  215. package/dist/rig/humanoid.json.js +0 -1
  216. package/dist/rig/humanoidPoses.js +0 -1
  217. package/dist/rig/poseMath.js +0 -1
  218. package/dist/rig/poses.json.js +0 -1
  219. package/dist/save/Autosaver.js +0 -1
  220. package/dist/save/MemoryBackend.js +0 -1
  221. package/dist/save/SaveStore.js +0 -1
  222. package/dist/save/WebStorageBackend.js +0 -1
  223. package/dist/save/checksum.js +0 -1
  224. package/dist/save/migrateSave.js +0 -1
  225. package/dist/settings.js +0 -1
  226. package/dist/tilemap/TilemapView.js +0 -1
  227. package/dist/tilemap/collision.js +0 -1
  228. package/dist/tilemap/tiled.js +0 -1
  229. package/dist/transitions/CrossfadeTransition.js +0 -1
  230. package/dist/transitions/DitherWipeTransition.js +0 -1
  231. package/dist/transitions/FadeTransition.js +0 -1
  232. package/dist/transitions/Letterbox.js +0 -1
  233. package/dist/transitions/ditherMask.js +0 -1
  234. package/dist/transitions/transitionTo.js +0 -1
  235. package/dist/transitions/tweenDone.js +0 -1
  236. package/dist/types/assets/AssetLoader.d.ts +63 -8
  237. package/dist/types/assets/AssetLoader.d.ts.map +1 -1
  238. package/dist/types/assets/textureAtlas.d.ts +35 -0
  239. package/dist/types/assets/textureAtlas.d.ts.map +1 -0
  240. package/dist/types/audio/SoundEngine.d.ts +5 -0
  241. package/dist/types/audio/SoundEngine.d.ts.map +1 -1
  242. package/dist/types/core/Camera.d.ts +1 -1
  243. package/dist/types/core/Camera.d.ts.map +1 -1
  244. package/dist/types/core/Clock.d.ts +14 -2
  245. package/dist/types/core/Clock.d.ts.map +1 -1
  246. package/dist/types/core/Pointer.d.ts +18 -0
  247. package/dist/types/core/Pointer.d.ts.map +1 -1
  248. package/dist/types/core/Stage.d.ts.map +1 -1
  249. package/dist/types/core/TextureRegistry.d.ts +39 -0
  250. package/dist/types/core/TextureRegistry.d.ts.map +1 -1
  251. package/dist/types/core/blendLayer.d.ts +23 -0
  252. package/dist/types/core/blendLayer.d.ts.map +1 -0
  253. package/dist/types/core/gameObject.d.ts.map +1 -1
  254. package/dist/types/core/pixelZoom.d.ts +45 -0
  255. package/dist/types/core/pixelZoom.d.ts.map +1 -0
  256. package/dist/types/core/runDue.d.ts +15 -0
  257. package/dist/types/core/runDue.d.ts.map +1 -0
  258. package/dist/types/core/silhouette.d.ts +16 -0
  259. package/dist/types/core/silhouette.d.ts.map +1 -0
  260. package/dist/types/debug/DrawCallCounter.d.ts.map +1 -1
  261. package/dist/types/engine/Engine.d.ts +16 -0
  262. package/dist/types/engine/Engine.d.ts.map +1 -1
  263. package/dist/types/engine/HiddenPause.d.ts +22 -0
  264. package/dist/types/engine/HiddenPause.d.ts.map +1 -0
  265. package/dist/types/fx/Afterimages.d.ts +62 -0
  266. package/dist/types/fx/Afterimages.d.ts.map +1 -0
  267. package/dist/types/index.d.ts +18 -3
  268. package/dist/types/index.d.ts.map +1 -1
  269. package/dist/types/input/Actions.d.ts +7 -1
  270. package/dist/types/input/Actions.d.ts.map +1 -1
  271. package/dist/types/input/rumble.d.ts +41 -0
  272. package/dist/types/input/rumble.d.ts.map +1 -0
  273. package/dist/types/net/Connection.d.ts +22 -0
  274. package/dist/types/net/Connection.d.ts.map +1 -1
  275. package/dist/types/net/constants.d.ts +13 -4
  276. package/dist/types/net/constants.d.ts.map +1 -1
  277. package/dist/types/net/movement.d.ts.map +1 -1
  278. package/dist/types/net/reconnect.d.ts +14 -0
  279. package/dist/types/net/reconnect.d.ts.map +1 -0
  280. package/dist/types/pixel/Darkness.d.ts +17 -5
  281. package/dist/types/pixel/Darkness.d.ts.map +1 -1
  282. package/dist/types/pixel/PixelMarks.d.ts +68 -0
  283. package/dist/types/pixel/PixelMarks.d.ts.map +1 -0
  284. package/dist/types/pixel/aimPixels.d.ts +23 -0
  285. package/dist/types/pixel/aimPixels.d.ts.map +1 -0
  286. package/dist/types/pixel/index.d.ts +3 -1
  287. package/dist/types/pixel/index.d.ts.map +1 -1
  288. package/dist/types/pixel/pixelPaint.d.ts +1 -0
  289. package/dist/types/pixel/pixelPaint.d.ts.map +1 -1
  290. package/dist/types/pixel/pixelParticles.d.ts +21 -0
  291. package/dist/types/pixel/pixelParticles.d.ts.map +1 -0
  292. package/dist/types/platform/appResume.d.ts +25 -0
  293. package/dist/types/platform/appResume.d.ts.map +1 -0
  294. package/dist/types/platform/fullscreen.d.ts +37 -0
  295. package/dist/types/platform/fullscreen.d.ts.map +1 -0
  296. package/dist/types/platform/orientation.d.ts +19 -0
  297. package/dist/types/platform/orientation.d.ts.map +1 -0
  298. package/dist/types/platform/pointerLock.d.ts +26 -0
  299. package/dist/types/platform/pointerLock.d.ts.map +1 -0
  300. package/dist/types/platform/reducedMotion.d.ts +20 -0
  301. package/dist/types/platform/reducedMotion.d.ts.map +1 -0
  302. package/dist/types/platform/timeoutSignal.d.ts +6 -0
  303. package/dist/types/platform/timeoutSignal.d.ts.map +1 -0
  304. package/dist/types/ui/index.d.ts +4 -0
  305. package/dist/types/ui/index.d.ts.map +1 -1
  306. package/dist/types/ui/rich/RichText.d.ts +48 -0
  307. package/dist/types/ui/rich/RichText.d.ts.map +1 -0
  308. package/dist/types/ui/rich/richFonts.d.ts +70 -0
  309. package/dist/types/ui/rich/richFonts.d.ts.map +1 -0
  310. package/dist/types/ui/rich/richLayout.d.ts +76 -0
  311. package/dist/types/ui/rich/richLayout.d.ts.map +1 -0
  312. package/dist/types/ui/rich/richMarkup.d.ts +48 -0
  313. package/dist/types/ui/rich/richMarkup.d.ts.map +1 -0
  314. package/dist/ui/Bar.js +0 -1
  315. package/dist/ui/Button.js +0 -1
  316. package/dist/ui/Dialog.js +0 -1
  317. package/dist/ui/FocusManager.js +0 -1
  318. package/dist/ui/Label.js +0 -1
  319. package/dist/ui/List.js +0 -1
  320. package/dist/ui/Panel.js +0 -1
  321. package/dist/ui/ScrollView.js +0 -1
  322. package/dist/ui/Slider.js +0 -1
  323. package/dist/ui/Stack.js +0 -1
  324. package/dist/ui/Toggle.js +0 -1
  325. package/dist/ui/UiHost.js +0 -1
  326. package/dist/ui/UiPointerGate.js +0 -1
  327. package/dist/ui/UiRoot.js +0 -1
  328. package/dist/ui/Widget.js +0 -1
  329. package/dist/ui/dom/DomOverlay.js +0 -1
  330. package/dist/ui/dom/DomWorldAnchors.js +0 -1
  331. package/dist/ui/dom/InputShield.js +0 -1
  332. package/dist/ui/dom/createStore.js +0 -1
  333. package/dist/ui/dom/shieldDecision.js +0 -1
  334. package/dist/ui/dom/worldToScreen.js +0 -1
  335. package/dist/ui/layout/anchor.js +0 -1
  336. package/dist/ui/layout/barDrain.js +0 -1
  337. package/dist/ui/layout/fitToViewport.js +0 -1
  338. package/dist/ui/layout/focusNav.js +0 -1
  339. package/dist/ui/layout/geometry.js +0 -1
  340. package/dist/ui/layout/listWidth.js +0 -1
  341. package/dist/ui/layout/placeTooltip.js +0 -1
  342. package/dist/ui/layout/scroll.js +0 -1
  343. package/dist/ui/layout/slider.js +0 -1
  344. package/dist/ui/layout/stack.js +0 -1
  345. package/dist/ui/layout/wrapRow.js +0 -1
  346. package/dist/ui/rich/RichText.js +87 -0
  347. package/dist/ui/rich/richFonts.js +105 -0
  348. package/dist/ui/rich/richLayout.js +132 -0
  349. package/dist/ui/rich/richMarkup.js +67 -0
  350. package/dist/ui.js +75 -65
  351. package/package.json +1 -4
  352. package/dist/1681-engine.js.map +0 -1
  353. package/dist/ambient/ColorGrade.js.map +0 -1
  354. package/dist/ambient/DayClock.js.map +0 -1
  355. package/dist/ambient/WeatherLayer.js.map +0 -1
  356. package/dist/ambient/grade.js.map +0 -1
  357. package/dist/ambient/weather.js.map +0 -1
  358. package/dist/anim/AnimStateMachine.js.map +0 -1
  359. package/dist/anim/Animator.js.map +0 -1
  360. package/dist/anim/animStateCompile.js.map +0 -1
  361. package/dist/anim/animStateSystem.js.map +0 -1
  362. package/dist/anim/animationSystem.js.map +0 -1
  363. package/dist/anim/asepriteSlices.js.map +0 -1
  364. package/dist/anim/asepriteTags.js.map +0 -1
  365. package/dist/anim/parseAseprite.js.map +0 -1
  366. package/dist/assets/AssetLoader.js.map +0 -1
  367. package/dist/assets/loadAseprite.js.map +0 -1
  368. package/dist/assets/takeCleanerWorker-DTcI_Jqr.js.map +0 -1
  369. package/dist/audio/Footsteps.js.map +0 -1
  370. package/dist/audio/MusicPlayer.js.map +0 -1
  371. package/dist/audio/SoundEngine.js.map +0 -1
  372. package/dist/audio/cleanTake.js.map +0 -1
  373. package/dist/audio/music/ElementVoice.js.map +0 -1
  374. package/dist/audio/music/GraphVoice.js.map +0 -1
  375. package/dist/audio/music/MusicChannel.js.map +0 -1
  376. package/dist/audio/music/musicVoice.js.map +0 -1
  377. package/dist/audio/sampleBank.js.map +0 -1
  378. package/dist/audio/soundTable.js.map +0 -1
  379. package/dist/audio/synth.js.map +0 -1
  380. package/dist/core/BitmapLabel.js.map +0 -1
  381. package/dist/core/Camera.js.map +0 -1
  382. package/dist/core/Clock.js.map +0 -1
  383. package/dist/core/Graphics.js.map +0 -1
  384. package/dist/core/Group.js.map +0 -1
  385. package/dist/core/Image.js.map +0 -1
  386. package/dist/core/ObjectFactory.js.map +0 -1
  387. package/dist/core/Pointer.js.map +0 -1
  388. package/dist/core/Rectangle.js.map +0 -1
  389. package/dist/core/Stage.js.map +0 -1
  390. package/dist/core/Text.js.map +0 -1
  391. package/dist/core/TextureRegistry.js.map +0 -1
  392. package/dist/core/Timeline.js.map +0 -1
  393. package/dist/core/TimelineBuilder.js.map +0 -1
  394. package/dist/core/TimelineChild.js.map +0 -1
  395. package/dist/core/Tweener.js.map +0 -1
  396. package/dist/core/atlas.js.map +0 -1
  397. package/dist/core/atlasPlan.js.map +0 -1
  398. package/dist/core/eases.js.map +0 -1
  399. package/dist/core/gameObject.js.map +0 -1
  400. package/dist/core/pixiPatches.js.map +0 -1
  401. package/dist/core/timelinePlace.js.map +0 -1
  402. package/dist/core/tweenProps.js.map +0 -1
  403. package/dist/debug/DebugOverlay.js.map +0 -1
  404. package/dist/debug/DrawCallCounter.js.map +0 -1
  405. package/dist/debug/ErrorLog.js.map +0 -1
  406. package/dist/debug/FrameStats.js.map +0 -1
  407. package/dist/debug/inspectWorld.js.map +0 -1
  408. package/dist/diagnostics/ErrorDeduper.js.map +0 -1
  409. package/dist/diagnostics/FrameSampler.js.map +0 -1
  410. package/dist/diagnostics/bootWatch.js.map +0 -1
  411. package/dist/diagnostics/captureErrors.js.map +0 -1
  412. package/dist/diagnostics/contextLoss.js.map +0 -1
  413. package/dist/diagnostics/frameStats.js.map +0 -1
  414. package/dist/diagnostics/gpuInfo.js.map +0 -1
  415. package/dist/diagnostics/renderGuard.js.map +0 -1
  416. package/dist/ecs/SparseSet.js.map +0 -1
  417. package/dist/ecs/World.js.map +0 -1
  418. package/dist/ecs/fields.js.map +0 -1
  419. package/dist/engine/Engine.js.map +0 -1
  420. package/dist/engine/FixedLoop.js.map +0 -1
  421. package/dist/engine/Scene.js.map +0 -1
  422. package/dist/engine/SceneManager.js.map +0 -1
  423. package/dist/events/EventBus.js.map +0 -1
  424. package/dist/fx/FloatingText.js.map +0 -1
  425. package/dist/fx/hitStop.js.map +0 -1
  426. package/dist/fx/viewCull.js.map +0 -1
  427. package/dist/i18n/Translator.js.map +0 -1
  428. package/dist/i18n/extractStrings.js.map +0 -1
  429. package/dist/i18n/formatMessage.js.map +0 -1
  430. package/dist/input/Actions.js.map +0 -1
  431. package/dist/input/AimGesture.js.map +0 -1
  432. package/dist/input/Keyboard.js.map +0 -1
  433. package/dist/input/Keymap.js.map +0 -1
  434. package/dist/input/TargetLock.js.map +0 -1
  435. package/dist/input/aimAxis.js.map +0 -1
  436. package/dist/input/keyChord.js.map +0 -1
  437. package/dist/input/longPress.js.map +0 -1
  438. package/dist/input/stickAxis.js.map +0 -1
  439. package/dist/input/touchDetect.js.map +0 -1
  440. package/dist/light/LightLayer.js.map +0 -1
  441. package/dist/nav/MinHeap.js.map +0 -1
  442. package/dist/nav/findPath.js.map +0 -1
  443. package/dist/nav/navGrid.js.map +0 -1
  444. package/dist/nav/nearestOpen.js.map +0 -1
  445. package/dist/nav/straightenPath.js.map +0 -1
  446. package/dist/net/Connection.js.map +0 -1
  447. package/dist/net/InterpolationBuffer.js.map +0 -1
  448. package/dist/net/PredictedMover.js.map +0 -1
  449. package/dist/net/Room.js.map +0 -1
  450. package/dist/net/RoomHost.js.map +0 -1
  451. package/dist/net/cadence.js.map +0 -1
  452. package/dist/net/constants.js.map +0 -1
  453. package/dist/net/lobby/LobbyClient.js.map +0 -1
  454. package/dist/net/lobby/LobbyHost.js.map +0 -1
  455. package/dist/net/lobby/LobbyRooms.js.map +0 -1
  456. package/dist/net/lobby/Matchmaker.js.map +0 -1
  457. package/dist/net/movement.js.map +0 -1
  458. package/dist/net/protocol.js.map +0 -1
  459. package/dist/net/serverClock.js.map +0 -1
  460. package/dist/net/snapshotCodec.js.map +0 -1
  461. package/dist/parallax/Parallax.js.map +0 -1
  462. package/dist/parallax/ParallaxLayer.js.map +0 -1
  463. package/dist/parallax/parallaxMath.js.map +0 -1
  464. package/dist/particles/Emitter.js.map +0 -1
  465. package/dist/particles/ParticleBudget.js.map +0 -1
  466. package/dist/particles/ParticleSim.js.map +0 -1
  467. package/dist/particles/particleCurves.js.map +0 -1
  468. package/dist/particles/particleSampling.js.map +0 -1
  469. package/dist/physics/Body.js.map +0 -1
  470. package/dist/physics/BroadPhase.js.map +0 -1
  471. package/dist/physics/Contact.js.map +0 -1
  472. package/dist/physics/ContactSolver.js.map +0 -1
  473. package/dist/physics/PhysicsWorld.js.map +0 -1
  474. package/dist/physics/SpatialHash.js.map +0 -1
  475. package/dist/physics/collide.js.map +0 -1
  476. package/dist/physics/collidePolygon.js.map +0 -1
  477. package/dist/physics/contactReport.js.map +0 -1
  478. package/dist/physics/drawColliders.js.map +0 -1
  479. package/dist/physics/physicsSystem.js.map +0 -1
  480. package/dist/physics/polygon.js.map +0 -1
  481. package/dist/physics/raycast.js.map +0 -1
  482. package/dist/physics/syncToBody.js.map +0 -1
  483. package/dist/physics/tileBodies.js.map +0 -1
  484. package/dist/physics/types.js.map +0 -1
  485. package/dist/pixel/Darkness.js.map +0 -1
  486. package/dist/pixel/DitherVignette.js.map +0 -1
  487. package/dist/pixel/Evaporation.js.map +0 -1
  488. package/dist/pixel/NightShade.js.map +0 -1
  489. package/dist/pixel/PixelLayer.js.map +0 -1
  490. package/dist/pixel/SwayProp.js.map +0 -1
  491. package/dist/pixel/lights.js.map +0 -1
  492. package/dist/pixel/nineSlice.js.map +0 -1
  493. package/dist/pixel/paintLayer.js.map +0 -1
  494. package/dist/pixel/palette.js.map +0 -1
  495. package/dist/pixel/pixel.js.map +0 -1
  496. package/dist/pixel/pixelPaint.js.map +0 -1
  497. package/dist/pixel/pixelTone.js.map +0 -1
  498. package/dist/pixel/propKit.js.map +0 -1
  499. package/dist/pixel/ramp.js.map +0 -1
  500. package/dist/pixel/selout.js.map +0 -1
  501. package/dist/pixel/spritePixels.js.map +0 -1
  502. package/dist/pixel/swayRig.js.map +0 -1
  503. package/dist/pixel/vignetteMask.js.map +0 -1
  504. package/dist/pixel/weatherArt.js.map +0 -1
  505. package/dist/pixel.js.map +0 -1
  506. package/dist/platform/touch.js.map +0 -1
  507. package/dist/postfx/BloomFilter.js.map +0 -1
  508. package/dist/postfx/ChromaticAberrationFilter.js.map +0 -1
  509. package/dist/postfx/ColorAdjustFilter.js.map +0 -1
  510. package/dist/postfx/CrtFilter.js.map +0 -1
  511. package/dist/postfx/PixelateFilter.js.map +0 -1
  512. package/dist/postfx/PostFx.js.map +0 -1
  513. package/dist/postfx/ShockwaveFilter.js.map +0 -1
  514. package/dist/postfx/VignetteFilter.js.map +0 -1
  515. package/dist/postfx/fxAnimator.js.map +0 -1
  516. package/dist/postfx/fxShader.js.map +0 -1
  517. package/dist/postfx.js.map +0 -1
  518. package/dist/react/ChoiceDialog.js.map +0 -1
  519. package/dist/react/ConfirmDialog.js.map +0 -1
  520. package/dist/react/Glyph.js.map +0 -1
  521. package/dist/react/Modal.js.map +0 -1
  522. package/dist/react/Panel.js.map +0 -1
  523. package/dist/react/PixelImage.js.map +0 -1
  524. package/dist/react/Select.js.map +0 -1
  525. package/dist/react/Slider.js.map +0 -1
  526. package/dist/react/SplitPane.js.map +0 -1
  527. package/dist/react/TabStrip.js.map +0 -1
  528. package/dist/react/TitleTips.js.map +0 -1
  529. package/dist/react/Tooltip.js.map +0 -1
  530. package/dist/react/UiProvider.js.map +0 -1
  531. package/dist/react/baseCss.js.map +0 -1
  532. package/dist/react/choiceStore.js.map +0 -1
  533. package/dist/react/classNames.js.map +0 -1
  534. package/dist/react/confirmStore.js.map +0 -1
  535. package/dist/react/labels.js.map +0 -1
  536. package/dist/react/placement.js.map +0 -1
  537. package/dist/react/useFillSheet.js.map +0 -1
  538. package/dist/react/useFitToViewport.js.map +0 -1
  539. package/dist/react/usePicked.js.map +0 -1
  540. package/dist/react/useStore.js.map +0 -1
  541. package/dist/react/useViewport.js.map +0 -1
  542. package/dist/react.js.map +0 -1
  543. package/dist/rig/PosePlayer.js.map +0 -1
  544. package/dist/rig/RigView.js.map +0 -1
  545. package/dist/rig/Skeleton.js.map +0 -1
  546. package/dist/rig/humanoid.js.map +0 -1
  547. package/dist/rig/humanoid.json.js.map +0 -1
  548. package/dist/rig/humanoidPoses.js.map +0 -1
  549. package/dist/rig/poseMath.js.map +0 -1
  550. package/dist/rig/poses.json.js.map +0 -1
  551. package/dist/save/Autosaver.js.map +0 -1
  552. package/dist/save/MemoryBackend.js.map +0 -1
  553. package/dist/save/SaveStore.js.map +0 -1
  554. package/dist/save/WebStorageBackend.js.map +0 -1
  555. package/dist/save/checksum.js.map +0 -1
  556. package/dist/save/migrateSave.js.map +0 -1
  557. package/dist/settings.js.map +0 -1
  558. package/dist/tilemap/TilemapView.js.map +0 -1
  559. package/dist/tilemap/collision.js.map +0 -1
  560. package/dist/tilemap/tiled.js.map +0 -1
  561. package/dist/transitions/CrossfadeTransition.js.map +0 -1
  562. package/dist/transitions/DitherWipeTransition.js.map +0 -1
  563. package/dist/transitions/FadeTransition.js.map +0 -1
  564. package/dist/transitions/Letterbox.js.map +0 -1
  565. package/dist/transitions/ditherMask.js.map +0 -1
  566. package/dist/transitions/transitionTo.js.map +0 -1
  567. package/dist/transitions/tweenDone.js.map +0 -1
  568. package/dist/ui/Bar.js.map +0 -1
  569. package/dist/ui/Button.js.map +0 -1
  570. package/dist/ui/Dialog.js.map +0 -1
  571. package/dist/ui/FocusManager.js.map +0 -1
  572. package/dist/ui/Label.js.map +0 -1
  573. package/dist/ui/List.js.map +0 -1
  574. package/dist/ui/Panel.js.map +0 -1
  575. package/dist/ui/ScrollView.js.map +0 -1
  576. package/dist/ui/Slider.js.map +0 -1
  577. package/dist/ui/Stack.js.map +0 -1
  578. package/dist/ui/Toggle.js.map +0 -1
  579. package/dist/ui/UiHost.js.map +0 -1
  580. package/dist/ui/UiPointerGate.js.map +0 -1
  581. package/dist/ui/UiRoot.js.map +0 -1
  582. package/dist/ui/Widget.js.map +0 -1
  583. package/dist/ui/dom/DomOverlay.js.map +0 -1
  584. package/dist/ui/dom/DomWorldAnchors.js.map +0 -1
  585. package/dist/ui/dom/InputShield.js.map +0 -1
  586. package/dist/ui/dom/createStore.js.map +0 -1
  587. package/dist/ui/dom/shieldDecision.js.map +0 -1
  588. package/dist/ui/dom/worldToScreen.js.map +0 -1
  589. package/dist/ui/layout/anchor.js.map +0 -1
  590. package/dist/ui/layout/barDrain.js.map +0 -1
  591. package/dist/ui/layout/fitToViewport.js.map +0 -1
  592. package/dist/ui/layout/focusNav.js.map +0 -1
  593. package/dist/ui/layout/geometry.js.map +0 -1
  594. package/dist/ui/layout/listWidth.js.map +0 -1
  595. package/dist/ui/layout/placeTooltip.js.map +0 -1
  596. package/dist/ui/layout/scroll.js.map +0 -1
  597. package/dist/ui/layout/slider.js.map +0 -1
  598. package/dist/ui/layout/stack.js.map +0 -1
  599. package/dist/ui/layout/wrapRow.js.map +0 -1
  600. package/dist/ui.js.map +0 -1
@@ -38,4 +38,3 @@ class c {
38
38
  export {
39
39
  c as ColorGrade
40
40
  };
41
- //# sourceMappingURL=ColorGrade.js.map
@@ -54,4 +54,3 @@ export {
54
54
  f as mixRgb,
55
55
  M as tintNight
56
56
  };
57
- //# sourceMappingURL=DayClock.js.map
@@ -88,4 +88,3 @@ class c {
88
88
  export {
89
89
  c as WeatherLayer
90
90
  };
91
- //# sourceMappingURL=WeatherLayer.js.map
@@ -10,4 +10,3 @@ export {
10
10
  c as gradeAt,
11
11
  i as mixToWhite
12
12
  };
13
- //# sourceMappingURL=grade.js.map
@@ -49,4 +49,3 @@ export {
49
49
  l as hash01,
50
50
  w as weatherAt
51
51
  };
52
- //# sourceMappingURL=weather.js.map
@@ -161,4 +161,3 @@ class v {
161
161
  export {
162
162
  v as AnimStateMachine
163
163
  };
164
- //# sourceMappingURL=AnimStateMachine.js.map
@@ -64,4 +64,3 @@ class r {
64
64
  export {
65
65
  r as Animator
66
66
  };
67
- //# sourceMappingURL=Animator.js.map
@@ -110,4 +110,3 @@ export {
110
110
  F as compileStates,
111
111
  N as compileTransitions
112
112
  };
113
- //# sourceMappingURL=animStateCompile.js.map
@@ -14,4 +14,3 @@ export {
14
14
  p as AnimStateComponent,
15
15
  u as animStateSystem
16
16
  };
17
- //# sourceMappingURL=animStateSystem.js.map
@@ -12,4 +12,3 @@ export {
12
12
  r as SpriteComponent,
13
13
  d as animationSystem
14
14
  };
15
- //# sourceMappingURL=animationSystem.js.map
@@ -19,4 +19,3 @@ export {
19
19
  c as sliceBorders,
20
20
  r as sliceNamed
21
21
  };
22
- //# sourceMappingURL=asepriteSlices.js.map
@@ -32,4 +32,3 @@ export {
32
32
  b as tagFrames,
33
33
  m as tagRepeat
34
34
  };
35
- //# sourceMappingURL=asepriteTags.js.map
@@ -80,4 +80,3 @@ export {
80
80
  $ as frameNamed,
81
81
  S as parseAseprite
82
82
  };
83
- //# sourceMappingURL=parseAseprite.js.map
@@ -1,27 +1,40 @@
1
- import { parseTiled as h } from "../tilemap/tiled.js";
2
- function n(r, t) {
1
+ import { sound as u } from "../audio/SoundEngine.js";
2
+ import { parseTiled as f } from "../tilemap/tiled.js";
3
+ import { collectAtlasPages as l, duplicateFrames as w, parseAtlas as p } from "./textureAtlas.js";
4
+ function c(r, t) {
3
5
  if (/^[a-z][a-z0-9+.-]*:/i.test(r) || r.startsWith("/")) return r;
4
6
  const a = (t.slice(0, t.lastIndexOf("/") + 1) + r).split("/"), s = [];
5
- for (const o of a)
6
- o === ".." && s.length && s[s.length - 1] !== ".." && s[s.length - 1] !== "" ? s.pop() : o !== "." && s.push(o);
7
+ for (const i of a)
8
+ i === ".." && s.length && s[s.length - 1] !== ".." && s[s.length - 1] !== "" ? s.pop() : i !== "." && s.push(i);
7
9
  return s.join("/");
8
10
  }
9
- async function c(r) {
11
+ async function m(r) {
10
12
  const t = await createImageBitmap(r), e = document.createElement("canvas");
11
13
  e.width = t.width, e.height = t.height;
12
14
  const a = e.getContext("2d");
13
15
  if (!a) throw new Error("AssetLoader: no 2D context (out of canvas memory?)");
14
16
  return a.drawImage(t, 0, 0), t.close(), e;
15
17
  }
16
- class u {
18
+ async function g(r, t, e) {
19
+ if (typeof FontFace > "u" || typeof document > "u" || !document.fonts)
20
+ throw new Error(`AssetLoader: this browser cannot load the font "${r}" (no FontFace)`);
21
+ const a = new FontFace(r, t, e);
22
+ await a.load(), document.fonts.add(a);
23
+ }
24
+ class $ {
17
25
  constructor(t, e = {}) {
18
- this.textures = t, this.options = e, this.fetcher = e.fetch ?? ((a) => fetch(a)), this.toCanvas = e.toCanvas ?? c;
26
+ this.textures = t, this.options = e, this.fetcher = e.fetch ?? ((a) => fetch(a)), this.toCanvas = e.toCanvas ?? m;
19
27
  }
20
28
  textures;
21
29
  options;
22
30
  queue = [];
23
31
  data = /* @__PURE__ */ new Map();
24
32
  maps = /* @__PURE__ */ new Map();
33
+ atlases = /* @__PURE__ */ new Map();
34
+ /** Decoded audio by key; a key with bytes only waits for a context (`decodeAudio`). */
35
+ audioBuffers = /* @__PURE__ */ new Map();
36
+ audioBytes = /* @__PURE__ */ new Map();
37
+ decoding = /* @__PURE__ */ new Map();
25
38
  fetcher;
26
39
  toCanvas;
27
40
  total = 0;
@@ -50,12 +63,87 @@ class u {
50
63
  /** A Tiled JSON map, then every tileset image it names (resolved beside the map file). */
51
64
  tilemap(t, e, a = {}) {
52
65
  return this.add(t, async () => {
53
- const s = h(await (await this.request(e)).json());
66
+ const s = f(await (await this.request(e)).json());
54
67
  this.maps.set(t, s);
55
- const o = a.textureKey ?? ((i) => i.name);
56
- for (const i of s.tilesets) this.image(o(i), n(i.image, e));
68
+ const i = a.textureKey ?? ((n) => n.name);
69
+ for (const n of s.tilesets) this.image(i(n), c(n.image, e));
70
+ });
71
+ }
72
+ /**
73
+ * A TexturePacker (or Pixi) JSON atlas, hash or array format: its page image, and for a multipack atlas every page
74
+ * named in `meta.related_multi_packs` (each resolved beside the file naming it). The first page is the texture
75
+ * `key`, further pages `key~1`, `key~2`…, and every frame of every page is found as `textures.get(key, frameName)`.
76
+ * Counts as one asset in the progress.
77
+ */
78
+ atlas(t, e) {
79
+ return this.add(t, async () => {
80
+ const a = this.textures.addAtlas?.bind(this.textures);
81
+ if (!a) throw new Error(`AssetLoader: the texture sink cannot take atlases (no addAtlas) for "${t}"`);
82
+ const s = await l(
83
+ e,
84
+ async (o) => p(await (await this.request(o)).json(), o),
85
+ c
86
+ ), i = await Promise.all(s.map((o) => this.blob(c(o.page.image, o.url)).then((h) => this.toCanvas(h)))), n = w(s.map((o) => o.page));
87
+ n.length && console.warn(`[assets] atlas "${t}" names ${n.length} frame(s) on more than one page: ${n.slice(0, 5).join(", ")}`), a(t, s.map((o, h) => ({ canvas: i[h], frames: o.page.frames })));
88
+ const d = {};
89
+ for (const o of s) Object.assign(d, o.page.animations);
90
+ this.atlases.set(t, { frames: [...new Set(s.flatMap((o) => o.page.frames.map((h) => h.name)))], animations: d, pages: s.length });
91
+ });
92
+ }
93
+ /**
94
+ * A web font (woff2, woff, ttf) under `family`, added to `document.fonts` once loaded so canvas text and the DOM can
95
+ * use it at once — load fonts before the first `Text` is drawn, or it measures with the fallback.
96
+ */
97
+ font(t, e, a) {
98
+ const s = this.options.addFont ?? g;
99
+ return this.add(t, async () => {
100
+ await s(t, await this.bytes(e), a);
101
+ });
102
+ }
103
+ /**
104
+ * A sound file decoded into an `AudioBuffer` through the engine's audio context (`getAudio`). Before any context
105
+ * exists (browsers open one only after a gesture) the bytes are kept and decoded by `decodeAudio`, so a loading
106
+ * screen never has to wait for the player to click.
107
+ */
108
+ audio(t, e) {
109
+ return this.add(t, async () => {
110
+ const a = await this.bytes(e);
111
+ this.audioBuffers.delete(t), this.decoding.delete(t);
112
+ const s = (this.options.audioContext ?? (() => u.audioContext))();
113
+ s ? this.audioBuffers.set(t, await this.decode(s, a, e)) : this.audioBytes.set(t, a);
57
114
  });
58
115
  }
116
+ /** A loaded sound, decoded; null while it waits for an audio context (`decodeAudio`). */
117
+ getAudio(t) {
118
+ const e = this.audioBuffers.get(t);
119
+ if (e) return e;
120
+ if (this.audioBytes.has(t)) return null;
121
+ throw new Error(`AssetLoader: no audio loaded as "${t}"`);
122
+ }
123
+ /** A loaded sound, decoding its kept bytes through `ctx` (default: the loader's context) the first time. */
124
+ decodeAudio(t, e) {
125
+ const a = this.audioBuffers.get(t);
126
+ if (a) return Promise.resolve(a);
127
+ const s = this.decoding.get(t);
128
+ if (s) return s;
129
+ const i = this.audioBytes.get(t);
130
+ if (!i) return Promise.reject(new Error(`AssetLoader: no audio loaded as "${t}"`));
131
+ const n = e ?? (this.options.audioContext ?? (() => u.audioContext))();
132
+ if (!n) return Promise.reject(new Error(`AssetLoader: no audio context to decode "${t}" yet`));
133
+ const d = this.decode(n, i, t).then(
134
+ (o) => (this.audioBuffers.set(t, o), this.audioBytes.delete(t), this.decoding.delete(t), o),
135
+ (o) => {
136
+ throw this.decoding.delete(t), o;
137
+ }
138
+ );
139
+ return this.decoding.set(t, d), d;
140
+ }
141
+ /** What a loaded atlas holds: its frame names and animations. */
142
+ getAtlas(t) {
143
+ const e = this.atlases.get(t);
144
+ if (!e) throw new Error(`AssetLoader: no atlas loaded as "${t}"`);
145
+ return e;
146
+ }
59
147
  /** Runs everything queued; `onProgress` after each asset. Safe to call again after queueing more. */
60
148
  async load(t) {
61
149
  const e = Math.max(1, this.options.concurrency ?? 6), a = async () => {
@@ -83,7 +171,7 @@ class u {
83
171
  return this.queue.push({ key: t, run: e }), this.total++, this;
84
172
  }
85
173
  async request(t) {
86
- const e = n(t, this.options.baseUrl ?? "");
174
+ const e = c(t, this.options.baseUrl ?? "");
87
175
  let a;
88
176
  try {
89
177
  a = await this.fetcher(e);
@@ -96,9 +184,19 @@ class u {
96
184
  async blob(t) {
97
185
  return (await this.request(t)).blob();
98
186
  }
187
+ async bytes(t) {
188
+ const e = await this.request(t);
189
+ return typeof e.arrayBuffer == "function" ? e.arrayBuffer() : (await e.blob()).arrayBuffer();
190
+ }
191
+ async decode(t, e, a) {
192
+ try {
193
+ return await t.decodeAudioData(e.slice(0));
194
+ } catch (s) {
195
+ throw new Error(`AssetLoader: could not decode audio ${a}: ${s instanceof Error ? s.message : String(s)}`);
196
+ }
197
+ }
99
198
  }
100
199
  export {
101
- u as AssetLoader,
102
- n as resolveUrl
200
+ $ as AssetLoader,
201
+ c as resolveUrl
103
202
  };
104
- //# sourceMappingURL=AssetLoader.js.map
@@ -47,4 +47,3 @@ export {
47
47
  p as addAsepriteTextures,
48
48
  A as loadAseprite
49
49
  };
50
- //# sourceMappingURL=loadAseprite.js.map
@@ -28,4 +28,3 @@ self.onmessage = (l) => {
28
28
  const { id: h, channels: a, sampleRate: f } = l.data, e = m(a, f);
29
29
  self.postMessage({ id: h, data: e }, e ? { transfer: [e.buffer] } : void 0);
30
30
  };
31
- //# sourceMappingURL=takeCleanerWorker-DTcI_Jqr.js.map
@@ -0,0 +1,58 @@
1
+ function m(n) {
2
+ const e = n;
3
+ return typeof e == "object" && e !== null && [e.x, e.y, e.w, e.h].every((t) => typeof t == "number" && Number.isFinite(t));
4
+ }
5
+ function u(n, e, t) {
6
+ if (!m(e.frame)) throw new Error(`${t}: frame "${n}" has no frame rect`);
7
+ const o = e.frame, i = e.rotated === !0, a = {
8
+ name: n,
9
+ x: Math.floor(o.x),
10
+ y: Math.floor(o.y),
11
+ w: Math.floor(i ? o.h : o.w),
12
+ h: Math.floor(i ? o.w : o.h),
13
+ rotated: i,
14
+ sourceW: Math.floor(e.trimmed && e.sourceSize ? e.sourceSize.w : o.w),
15
+ sourceH: Math.floor(e.trimmed && e.sourceSize ? e.sourceSize.h : o.h)
16
+ };
17
+ if (e.trimmed !== !1 && m(e.spriteSourceSize) && e.sourceSize) {
18
+ const f = e.spriteSourceSize;
19
+ f.x === 0 && f.y === 0 && o.w === e.sourceSize.w && o.h === e.sourceSize.h || (a.trim = { x: Math.floor(f.x), y: Math.floor(f.y), w: Math.floor(o.w), h: Math.floor(o.h) }, a.sourceW = Math.floor(e.sourceSize.w), a.sourceH = Math.floor(e.sourceSize.h));
20
+ }
21
+ const r = e.anchor ?? e.pivot;
22
+ return r && typeof r.x == "number" && typeof r.y == "number" && (a.anchor = { x: r.x, y: r.y }), a;
23
+ }
24
+ function h(n, e = "atlas") {
25
+ const t = n;
26
+ if (typeof t != "object" || t === null || typeof t.frames != "object" || t.frames === null)
27
+ throw new Error(`${e}: not a TexturePacker JSON atlas (no "frames")`);
28
+ const o = t.meta?.image;
29
+ if (typeof o != "string" || o === "") throw new Error(`${e}: no "meta.image"`);
30
+ const i = Array.isArray(t.frames) ? t.frames.map((s, c) => u(typeof s?.filename == "string" ? s.filename : String(c), s ?? {}, e)) : Object.entries(t.frames).map(([s, c]) => u(s, c ?? {}, e)), a = Array.isArray(t.meta?.related_multi_packs) ? t.meta.related_multi_packs.filter((s) => typeof s == "string" && s !== "") : [], r = {};
31
+ if (typeof t.animations == "object" && t.animations !== null)
32
+ for (const [s, c] of Object.entries(t.animations))
33
+ Array.isArray(c) && (r[s] = c.filter((l) => typeof l == "string"));
34
+ const f = Number(t.meta?.scale);
35
+ return { image: o, frames: i, animations: r, related: a, scale: Number.isFinite(f) && f > 0 ? f : 1 };
36
+ }
37
+ async function y(n, e, t) {
38
+ const o = /* @__PURE__ */ new Set([n]), i = [], a = [n];
39
+ for (let r = a.shift(); r !== void 0; r = a.shift()) {
40
+ const f = await e(r);
41
+ i.push({ url: r, page: f });
42
+ for (const s of f.related) {
43
+ const c = t(s, r);
44
+ o.has(c) || (o.add(c), a.push(c));
45
+ }
46
+ }
47
+ return i;
48
+ }
49
+ function p(n) {
50
+ const e = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
51
+ for (const o of n) for (const i of o.frames) (e.has(i.name) ? t : e).add(i.name);
52
+ return [...t];
53
+ }
54
+ export {
55
+ y as collectAtlasPages,
56
+ p as duplicateFrames,
57
+ h as parseAtlas
58
+ };
@@ -23,4 +23,3 @@ class u {
23
23
  export {
24
24
  u as Footsteps
25
25
  };
26
- //# sourceMappingURL=Footsteps.js.map
@@ -75,4 +75,3 @@ export {
75
75
  a as MusicPlayer,
76
76
  w as music
77
77
  };
78
- //# sourceMappingURL=MusicPlayer.js.map
@@ -2,8 +2,8 @@ import { engineSettings as m } from "../settings.js";
2
2
  import { SampleBank as E, hasTakes as y } from "./sampleBank.js";
3
3
  import { SOUNDS as u } from "./soundTable.js";
4
4
  import { renderRecipe as R, SYNTH_RATE as k } from "./synth.js";
5
- const p = 480, _ = 10, q = 6, B = 60, F = 0.45, O = 0.05, w = 80, g = [18e3, 1800], T = { freq: 3500, gainDb: -7 }, V = 11e3;
6
- class C {
5
+ const p = 480, _ = 10, q = 6, B = 60, F = 0.45, C = 0.05, w = 80, g = [18e3, 1800], T = { freq: 3500, gainDb: -7 }, O = 11e3;
6
+ class V {
7
7
  ctx = null;
8
8
  master = null;
9
9
  buffers = /* @__PURE__ */ new Map();
@@ -32,6 +32,13 @@ class C {
32
32
  this.ctx && this.master && this.master.gain.setTargetAtTime(this.level(s.sfxVolume), this.ctx.currentTime, 0.02);
33
33
  });
34
34
  }
35
+ /**
36
+ * The effects' audio context once something opened it (the first gesture does), else null: never created here, so
37
+ * asking does not open a context the browser would hold suspended. `AssetLoader.audio` decodes through it.
38
+ */
39
+ get audioContext() {
40
+ return this.ctx;
41
+ }
35
42
  play(t, n = {}) {
36
43
  if (!t || !u.recipes[t] && !y(t) || m.getState().sfxVolume <= 0) return;
37
44
  const e = this.ctx;
@@ -53,7 +60,7 @@ class C {
53
60
  v && (i *= u.recipes[t]?.fileGain ?? 1), this.lastAt.set(t, x);
54
61
  const c = e.createBufferSource();
55
62
  c.buffer = l;
56
- const S = u.recipes[t]?.jitter ?? O;
63
+ const S = u.recipes[t]?.jitter ?? C;
57
64
  c.playbackRate.value = 1 + (Math.random() * 2 - 1) * S;
58
65
  const a = e.createGain();
59
66
  a.gain.value = Math.min(1, i);
@@ -79,7 +86,7 @@ class C {
79
86
  const t = this.ctx.createBiquadFilter();
80
87
  t.type = "highshelf", t.frequency.value = T.freq, t.gain.value = T.gainDb;
81
88
  const n = this.ctx.createBiquadFilter();
82
- n.type = "lowpass", n.frequency.value = V, this.master.connect(t).connect(n).connect(this.ctx.destination);
89
+ n.type = "lowpass", n.frequency.value = O, this.master.connect(t).connect(n).connect(this.ctx.destination);
83
90
  const e = this.ctx, i = () => {
84
91
  const s = e.state === "running";
85
92
  this.onRunning(s), s && this.prerender(e);
@@ -111,9 +118,8 @@ class C {
111
118
  return this.buffers.set(n, s), s;
112
119
  }
113
120
  }
114
- const H = new C();
121
+ const H = new V();
115
122
  export {
116
- C as SoundEngine,
123
+ V as SoundEngine,
117
124
  H as sound
118
125
  };
119
- //# sourceMappingURL=SoundEngine.js.map
@@ -27,4 +27,3 @@ function L(c, h) {
27
27
  export {
28
28
  L as cleanSamples
29
29
  };
30
- //# sourceMappingURL=cleanTake.js.map
@@ -32,4 +32,3 @@ class m {
32
32
  export {
33
33
  m as ElementVoice
34
34
  };
35
- //# sourceMappingURL=ElementVoice.js.map
@@ -36,4 +36,3 @@ class h {
36
36
  export {
37
37
  h as GraphVoice
38
38
  };
39
- //# sourceMappingURL=GraphVoice.js.map
@@ -55,4 +55,3 @@ class h {
55
55
  export {
56
56
  h as MusicChannel
57
57
  };
58
- //# sourceMappingURL=MusicChannel.js.map
@@ -10,4 +10,3 @@ export {
10
10
  o as clamp01,
11
11
  n as elementVolumeLocked
12
12
  };
13
- //# sourceMappingURL=musicVoice.js.map
@@ -79,4 +79,3 @@ export {
79
79
  y as hasTakes,
80
80
  k as registerTakes
81
81
  };
82
- //# sourceMappingURL=sampleBank.js.map
@@ -6,4 +6,3 @@ export {
6
6
  s as SOUNDS,
7
7
  r as registerSounds
8
8
  };
9
- //# sourceMappingURL=soundTable.js.map
@@ -33,4 +33,3 @@ export {
33
33
  Y as SYNTH_RATE,
34
34
  _ as renderRecipe
35
35
  };
36
- //# sourceMappingURL=synth.js.map
@@ -46,4 +46,3 @@ export {
46
46
  w as addLabelGlyphs,
47
47
  b as installLabelFont
48
48
  };
49
- //# sourceMappingURL=BitmapLabel.js.map
@@ -8,7 +8,7 @@ class g {
8
8
  zoom = 1;
9
9
  /** The zoom `reset` goes back to: the engine sets it from its `zoom` option (default 1). */
10
10
  defaultZoom = 1;
11
- /** Backing pixels per screen pixel (the renderer's resolution, `zoomResolution`): what `snap` rounds to. */
11
+ /** Backing pixels per screen pixel (the renderer's resolution, `zoomResolution(zoom, devicePixelRatio)`): what `snap` rounds to. */
12
12
  resolution = 1;
13
13
  /** Lands the view on whole backing pixels (pixel art); off, the world moves smoothly between them. */
14
14
  roundPixels = !1;
@@ -147,4 +147,3 @@ class g {
147
147
  export {
148
148
  g as Camera
149
149
  };
150
- //# sourceMappingURL=Camera.js.map
@@ -1,30 +1,40 @@
1
- class o {
1
+ import { runDue as o } from "./runDue.js";
2
+ class i {
3
+ constructor(e, r) {
4
+ this.at = e, this.fn = r;
5
+ }
6
+ at;
7
+ fn;
8
+ removed = !1;
9
+ /** An arrow, so a handle's `remove` still works when taken off it (`const { remove } = …`). */
10
+ remove = () => {
11
+ this.removed = !0;
12
+ };
13
+ }
14
+ class h {
2
15
  now = performance.now();
16
+ /** Told of every error a timer throws (default: logged). `Stage` routes it into its guarded-step reporting. */
17
+ onError = (e) => console.error("[timer] failed", e);
3
18
  timers = [];
4
- delayedCall(r, t) {
5
- const e = { at: this.now + r, fn: t, removed: !1 };
6
- return this.timers.push(e), { remove: () => {
7
- e.removed = !0;
8
- } };
19
+ due = [];
20
+ /** Made once, so `update` hands `runDue` no fresh closure; reads `onError` late so it may be swapped any time. */
21
+ report = (e) => this.onError(e);
22
+ delayedCall(e, r) {
23
+ const t = new i(this.now + e, r);
24
+ return this.timers.push(t), t;
25
+ }
26
+ /** Timers waiting to run (removed ones not yet swept included). */
27
+ get pending() {
28
+ return this.timers.length;
9
29
  }
10
- update(r) {
11
- this.now = r;
12
- const t = this.timers.filter((e) => !e.removed && e.at <= r);
13
- if (t.length) {
14
- this.timers = this.timers.filter((e) => !e.removed && e.at > r);
15
- for (const e of t)
16
- try {
17
- e.fn();
18
- } catch (s) {
19
- console.error("[timer] failed", s);
20
- }
21
- }
30
+ update(e) {
31
+ this.now = e, o(this.timers, this.due, e, this.report);
22
32
  }
23
33
  clear() {
24
- this.timers = [];
34
+ for (const e of this.due) e.removed = !0;
35
+ this.timers.length = 0;
25
36
  }
26
37
  }
27
38
  export {
28
- o as Clock
39
+ h as Clock
29
40
  };
30
- //# sourceMappingURL=Clock.js.map
@@ -66,4 +66,3 @@ class u extends o(n) {
66
66
  export {
67
67
  u as Graphics
68
68
  };
69
- //# sourceMappingURL=Graphics.js.map
@@ -26,4 +26,3 @@ class a extends i(r) {
26
26
  export {
27
27
  a as Group
28
28
  };
29
- //# sourceMappingURL=Group.js.map
@@ -48,4 +48,3 @@ class o extends a(h) {
48
48
  export {
49
49
  o as Image
50
50
  };
51
- //# sourceMappingURL=Image.js.map
@@ -52,4 +52,3 @@ class L {
52
52
  export {
53
53
  L as ObjectFactory
54
54
  };
55
- //# sourceMappingURL=ObjectFactory.js.map
@@ -1,25 +1,26 @@
1
- import { isTouchUi as b } from "../platform/touch.js";
2
- function s(r) {
3
- return r === 1 ? 4 : r === 2 ? 2 : r === 0 ? 1 : 0;
1
+ import { isTouchUi as v } from "../platform/touch.js";
2
+ import { isPointerLocked as m, requestPointerLock as d, exitPointerLock as a } from "../platform/pointerLock.js";
3
+ function s(e) {
4
+ return e === 1 ? 4 : e === 2 ? 2 : e === 0 ? 1 : 0;
4
5
  }
5
- class l {
6
- constructor(n) {
7
- this.canvas = n;
8
- const i = b(), o = (t, e, c) => {
9
- const h = (u) => {
10
- i && u instanceof PointerEvent && u.pointerType === "touch" || c(u);
6
+ class c {
7
+ constructor(o) {
8
+ this.canvas = o;
9
+ const i = v(), n = (t, u, l) => {
10
+ const h = (r) => {
11
+ i && r instanceof PointerEvent && r.pointerType === "touch" || l(r);
11
12
  };
12
- t.addEventListener(e, h), this.cleanup.push(() => t.removeEventListener(e, h));
13
+ t.addEventListener(u, h), this.cleanup.push(() => t.removeEventListener(u, h));
13
14
  };
14
- o(n, "pointerdown", (t) => {
15
- this.track(t), !l.ignorePress?.(t) && (this.buttons |= s(t.button));
16
- }), o(window, "pointermove", (t) => {
17
- this.track(t), t.button >= 0 && (this.buttons = (t.buttons & s(t.button)) !== 0 ? this.buttons | s(t.button) : this.buttons & ~s(t.button));
18
- }), o(window, "pointerup", (t) => {
15
+ n(o, "pointerdown", (t) => {
16
+ this.track(t), !c.ignorePress?.(t) && (this.buttons |= s(t.button));
17
+ }), n(window, "pointermove", (t) => {
18
+ this.locked ? (this.moveX += t.movementX, this.moveY += t.movementY) : this.track(t), t.button >= 0 && (this.buttons = (t.buttons & s(t.button)) !== 0 ? this.buttons | s(t.button) : this.buttons & ~s(t.button));
19
+ }), n(window, "pointerup", (t) => {
19
20
  this.buttons &= ~s(t.button);
20
- }), o(window, "blur", () => {
21
+ }), n(window, "blur", () => {
21
22
  this.buttons = 0;
22
- }), o(n, "contextmenu", (t) => t.preventDefault());
23
+ }), n(o, "contextmenu", (t) => t.preventDefault());
23
24
  }
24
25
  canvas;
25
26
  /**
@@ -33,6 +34,9 @@ class l {
33
34
  worldX = 0;
34
35
  worldY = 0;
35
36
  buttons = 0;
37
+ /** Raw mouse travel (`movementX/Y`) summed since the last `takeMovement`, kept only while the pointer is locked. */
38
+ moveX = 0;
39
+ moveY = 0;
36
40
  cleanup = [];
37
41
  leftButtonDown() {
38
42
  return (this.buttons & 1) !== 0;
@@ -40,19 +44,37 @@ class l {
40
44
  rightButtonDown() {
41
45
  return (this.buttons & 2) !== 0;
42
46
  }
43
- updateWorldPoint(n) {
44
- this.worldX = n.scrollX + this.x / n.zoom, this.worldY = n.scrollY + this.y / n.zoom;
47
+ /** True while the canvas holds the pointer (`lock`). */
48
+ get locked() {
49
+ return m(this.canvas);
50
+ }
51
+ /**
52
+ * Locks the pointer to the canvas for mouse-look: the cursor hides and `takeMovement` returns how far the mouse went.
53
+ * Call from a press or key handler (browsers allow it only in a gesture); resolves whether the lock holds.
54
+ */
55
+ lock(o = {}) {
56
+ return this.moveX = this.moveY = 0, d(this.canvas, o);
57
+ }
58
+ unlock() {
59
+ this.locked && a();
60
+ }
61
+ /** The mouse travel (CSS pixels) since the last call while locked, then zeroed; read it once per step. */
62
+ takeMovement() {
63
+ const o = { x: this.moveX, y: this.moveY };
64
+ return this.moveX = this.moveY = 0, o;
65
+ }
66
+ updateWorldPoint(o) {
67
+ this.worldX = o.scrollX + this.x / o.zoom, this.worldY = o.scrollY + this.y / o.zoom;
45
68
  }
46
69
  destroy() {
47
- for (const n of this.cleanup) n();
70
+ for (const o of this.cleanup) o();
48
71
  this.cleanup.length = 0;
49
72
  }
50
- track(n) {
73
+ track(o) {
51
74
  const i = this.canvas.getBoundingClientRect();
52
- this.x = n.clientX - i.left, this.y = n.clientY - i.top;
75
+ this.x = o.clientX - i.left, this.y = o.clientY - i.top;
53
76
  }
54
77
  }
55
78
  export {
56
- l as Pointer
79
+ c as Pointer
57
80
  };
58
- //# sourceMappingURL=Pointer.js.map
@@ -48,4 +48,3 @@ class c extends l(e) {
48
48
  export {
49
49
  c as Rectangle
50
50
  };
51
- //# sourceMappingURL=Rectangle.js.map