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
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Gamepad rumble through the Gamepad Extensions' `vibrationActuator` (`'dual-rumble'`: Chrome, Edge, Firefox behind a
3
+ * flag, Safari 16.4+). A pad without one, a browser without the API, or a refusal is a silent no-op that resolves
4
+ * false: rumble is seasoning, never something a game should wait on or crash over.
5
+ */
6
+ export interface RumbleOptions {
7
+ /** The low-frequency (heavy) motor, 0–1 (default 0). */
8
+ strong?: number;
9
+ /** The high-frequency (light) motor, 0–1 (default 0). */
10
+ weak?: number;
11
+ /** How long it shakes (ms, default 200). */
12
+ durationMs?: number;
13
+ /** Wait before starting (ms, default 0). */
14
+ startDelayMs?: number;
15
+ }
16
+ /** What rumble needs of a pad; `navigator.getGamepads()` entries satisfy it where the API exists. */
17
+ export interface RumblePad {
18
+ readonly vibrationActuator?: {
19
+ playEffect?(type: 'dual-rumble', params: {
20
+ duration: number;
21
+ startDelay: number;
22
+ strongMagnitude: number;
23
+ weakMagnitude: number;
24
+ }): Promise<unknown>;
25
+ reset?(): Promise<unknown>;
26
+ } | null;
27
+ }
28
+ /** The effect's parameters as the API wants them, clamped (pure, for tests and custom transports). */
29
+ export declare function rumbleParams(options: RumbleOptions): {
30
+ duration: number;
31
+ startDelay: number;
32
+ strongMagnitude: number;
33
+ weakMagnitude: number;
34
+ };
35
+ /** Rumbles one pad directly; resolves true when the effect played to its end. */
36
+ export declare function rumblePad(pad: RumblePad | null | undefined, options: RumbleOptions): Promise<boolean>;
37
+ /** Rumbles the pad at `padIndex` (as in `navigator.getGamepads()`); resolves false where it cannot. */
38
+ export declare function rumble(padIndex: number, options: RumbleOptions, pads?: () => readonly (RumblePad | null)[]): Promise<boolean>;
39
+ /** Stops whatever the pad at `padIndex` is playing. */
40
+ export declare function stopRumble(padIndex: number, pads?: () => readonly (RumblePad | null)[]): Promise<void>;
41
+ //# sourceMappingURL=rumble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rumble.d.ts","sourceRoot":"","sources":["../../../src/input/rumble.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qGAAqG;AACrG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAC3B,UAAU,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrJ,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5B,GAAG,IAAI,CAAC;CACV;AAOD,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAS7I;AAQD,iFAAiF;AACjF,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAY3G;AAED,uGAAuG;AACvG,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,GAAE,MAAM,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,EAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5I;AAED,uDAAuD;AACvD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,EAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3H"}
@@ -1,6 +1,8 @@
1
1
  import { EventBus } from '../events/EventBus.js';
2
2
  import type { InputStep } from './constants.js';
3
3
  import type { ClientMessage, ServerMessage, Snapshot } from './protocol.js';
4
+ /** The close code `Connection` reports when it gave up on a socket that did not answer after a resume. */
5
+ export declare const CLOSE_NO_ANSWER = 4408;
4
6
  export interface ConnectionEvents {
5
7
  open: undefined;
6
8
  /** The socket closed; `willRetry` when it will reconnect by itself. */
@@ -29,6 +31,19 @@ export interface ConnectionOptions {
29
31
  hello?: () => unknown;
30
32
  /** The WebSocket class (default the global one; Node 22+ and browsers have it). */
31
33
  WebSocket?: typeof WebSocket;
34
+ /**
35
+ * Close codes after which it must not reconnect (default none): the server's "kicked", "banned", "update required"…
36
+ * The close event then says `willRetry: false`.
37
+ */
38
+ fatalCloseCodes?: readonly number[];
39
+ /**
40
+ * After the app returns from the background, ping and give the server this long to answer (default 0: off). A phone
41
+ * that froze the tab can come back to a socket that still says it is open and is dead; with no pong in time the
42
+ * socket is dropped (close code `CLOSE_NO_ANSWER`) and reconnected as after any drop.
43
+ */
44
+ resumeProbeMs?: number;
45
+ /** How the probe hears of a resume (default `onAppResume`); returns the unsubscribe. */
46
+ onResume?: (cb: () => void) => () => void;
32
47
  }
33
48
  /**
34
49
  * The client side of the engine's netcode over a WebSocket: hello on open, input steps batched and sent once a frame
@@ -47,6 +62,8 @@ export declare class Connection {
47
62
  private attempt;
48
63
  private pingTimer;
49
64
  private retryTimer;
65
+ private probeTimer;
66
+ private stopResume;
50
67
  constructor(url: string, options?: ConnectionOptions);
51
68
  get open(): boolean;
52
69
  connect(): this;
@@ -60,6 +77,11 @@ export declare class Connection {
60
77
  /** Sends this frame's input steps as one message. Call once a frame. */
61
78
  flush(): void;
62
79
  close(): void;
80
+ /** The socket is gone (closed, or given up on): report it and reconnect unless told not to. */
81
+ private closed;
82
+ /** Back from the background: a pong within `resumeProbeMs` proves the socket alive, none drops it. */
83
+ private probe;
84
+ private clearProbe;
63
85
  private ping;
64
86
  private receive;
65
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/net/Connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,uEAAuE;IACvE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,QAAQ,CAAC;IACnB,8DAA8D;IAC9D,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,sGAAsG;IACtG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,UAAU;IAYnB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,QAAQ,CAAC,MAAM,6BAAoC;IACnD,wCAAwC;IACxC,GAAG,SAAK;IACR,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAoD;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,UAAU,CAA8C;gBAGrD,GAAG,EAAE,MAAM,EACH,OAAO,GAAE,iBAAsB;IAGlD,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,OAAO,IAAI,IAAI;IA6Bf,oHAAoH;IACpH,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAIpE,sGAAsG;IACtG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAK9C,wEAAwE;IACxE,KAAK,IAAI,IAAI;IAMb,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;CAyBhB"}
1
+ {"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/net/Connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGzE,0GAA0G;AAC1G,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,uEAAuE;IACvE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,QAAQ,CAAC;IACnB,8DAA8D;IAC9D,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,sGAAsG;IACtG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CAC3C;AAED;;;;GAIG;AACH,qBAAa,UAAU;IAcnB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,QAAQ,CAAC,MAAM,6BAAoC;IACnD,wCAAwC;IACxC,GAAG,SAAK;IACR,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAoD;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,UAAU,CAA6B;gBAGpC,GAAG,EAAE,MAAM,EACH,OAAO,GAAE,iBAAsB;IAGlD,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,OAAO,IAAI,IAAI;IAyBf,oHAAoH;IACpH,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAIpE,sGAAsG;IACtG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAK9C,wEAAwE;IACxE,KAAK,IAAI,IAAI;IAMb,KAAK,IAAI,IAAI;IAWb,+FAA+F;IAC/F,OAAO,CAAC,MAAM;IAUd,sGAAsG;IACtG,OAAO,CAAC,KAAK;IAkBb,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;CA0BhB"}
@@ -1,11 +1,16 @@
1
- /** World and movement constants. A game that needs other numbers forks these; client and server must agree. */
1
+ /**
2
+ * The movement defaults. Every one of them can be changed without forking: the tile size and the body's half extents
3
+ * are fields of the `CollisionGrid` (`createCollisionGrid`'s `tileSize` and options), the dash bit and the step length
4
+ * are optional fields of `MovementParams`. Client and server must agree on whichever numbers a game picks.
5
+ */
6
+ /** The default tile size, px; a grid carries its own (`CollisionGrid.tileSize`). */
2
7
  export declare const TILE_SIZE = 16;
3
- /** Fixed input steps a second; movement is simulated per step on both sides. */
8
+ /** The default fixed input steps a second (`MovementParams.stepDt` overrides the step's length). */
4
9
  export declare const INPUT_STEP_RATE = 60;
5
10
  export declare const INPUT_STEP_DT: number;
6
- /** Bit of an input step's flags that asks for a dodge roll. */
11
+ /** The default bit of an input step's flags that asks for a dash (`MovementParams.dashFlag` overrides it). */
7
12
  export declare const INPUT_FLAG_DASH = 1;
8
- /** The body's collision box, half extents (px). */
13
+ /** The default collision box, half extents (px); `createCollisionGrid`'s `bodyHalfWidth`/`bodyHalfHeight` override them. */
9
14
  export declare const BODY_HALF_WIDTH = 5;
10
15
  export declare const BODY_HALF_HEIGHT = 3;
11
16
  export declare const COLLISION_EPSILON = 0.01;
@@ -18,6 +23,10 @@ export interface MovementParams {
18
23
  dashCooldownSteps: number;
19
24
  canMove: boolean;
20
25
  canDash: boolean;
26
+ /** The bit of an input step's flags that starts a dash (default `INPUT_FLAG_DASH`). */
27
+ dashFlag?: number;
28
+ /** Seconds one input step lasts (default `INPUT_STEP_DT`); speeds are px a second. */
29
+ stepDt?: number;
21
30
  }
22
31
  /** One body's state in a snapshot: [id, x, y, aim, anim, hp, flags]. */
23
32
  export type EntityUpdate = [number, number, number, number, number, number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/net/constants.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,gFAAgF;AAChF,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,aAAa,QAAsB,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,mDAAmD;AACnD,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/net/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oFAAoF;AACpF,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,oGAAoG;AACpG,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,aAAa,QAAsB,CAAC;AAEjD,8GAA8G;AAC9G,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,4HAA4H;AAC5H,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"movement.d.ts","sourceRoot":"","sources":["../../../src/net/movement.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAUrB,gFAAgF;AAChF,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,qGAAqG;IACrG,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,kHAAkH;IAClH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAgBrJ;AAED,8GAA8G;AAC9G,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAG/E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAE5D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGhF;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAY/E;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAED,4EAA4E;AAC5E,wBAAgB,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAMD,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAoCtG"}
1
+ {"version":3,"file":"movement.d.ts","sourceRoot":"","sources":["../../../src/net/movement.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAUrB,gFAAgF;AAChF,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,qGAAqG;IACrG,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,kHAAkH;IAClH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAgBrJ;AAED,8GAA8G;AAC9G,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAG/E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAE5D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGhF;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAY/E;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAED,4EAA4E;AAC5E,wBAAgB,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAMD,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAqCtG"}
@@ -0,0 +1,14 @@
1
+ /** The pure decisions behind `Connection`'s reconnecting, apart so they are tested without a socket. */
2
+ /** The wait before reconnect attempt `attempt` (0 first): doubling from `baseMs`, never past `maxMs`. */
3
+ export declare function reconnectDelay(attempt: number, maxMs?: number, baseMs?: number): number;
4
+ /**
5
+ * Whether a socket that closed with `code` should reconnect by itself: not when we closed it, not when reconnecting is
6
+ * off, and not on a code the server uses to say "do not come back" (kicked, banned, an outdated client) — retrying
7
+ * those only loops.
8
+ */
9
+ export declare function shouldReconnect(code: number, o: {
10
+ closedByUs: boolean;
11
+ reconnect?: boolean;
12
+ fatalCloseCodes?: readonly number[];
13
+ }): boolean;
14
+ //# sourceMappingURL=reconnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../../../src/net/reconnect.ts"],"names":[],"mappings":"AAAA,wGAAwG;AAExG,yGAAyG;AACzG,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,SAAM,GAAG,MAAM,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAG3I"}
@@ -43,7 +43,9 @@ export declare class Darkness {
43
43
  private dimLamps;
44
44
  /** A phone redraws the night at most `PHONE_MS` apart, whatever moves (`isTouchUi`). */
45
45
  private readonly phone;
46
- constructor(stage: Stage, color: number, alpha: number);
46
+ /** The radius `update` uses when it is given none (`DarknessOptions.carriedLight`). */
47
+ readonly carriedLight: number;
48
+ constructor(stage: Stage, color: number, alpha: number, options?: DarknessOptions);
47
49
  /** A hole and its colour, added to the night's layers. */
48
50
  private light;
49
51
  /** A lamp fixed in the world: a torch on a wall, the seep in its chamber, a crystal in a seam, in its own colour. */
@@ -64,8 +66,11 @@ export declare class Darkness {
64
66
  * at zoom 2 or 3 it is a quarter or a ninth of the screen's pixels. True when it was remade.
65
67
  */
66
68
  private fit;
67
- /** Redraws the night with this frame's holes in it, when anything in it changed. `px`/`py` is where the player stands. */
68
- update(now: number, px: number, py: number, carriedRadius: number): void;
69
+ /**
70
+ * Redraws the night with this frame's holes in it, when anything in it changed. `px`/`py` is where the player stands;
71
+ * `carriedRadius` is the light they carry (default the `carriedLight` option, 0 for none).
72
+ */
73
+ update(now: number, px: number, py: number, carriedRadius?: number): void;
69
74
  private hide;
70
75
  /** Lays light `l` at world (wx, wy), `r` px across its radius, in the night's world-pixel grid. */
71
76
  private place;
@@ -73,6 +78,13 @@ export declare class Darkness {
73
78
  }
74
79
  /** What is left of a lamp's glow and colour while lamps are dimmed (`setLampsDimmed`). */
75
80
  export declare const LAMP_DIM = 0.35;
76
- /** World units of light the player carries underground — about five tiles of certainty in any direction. */
77
- export declare const CARRIED_LIGHT: number;
81
+ /**
82
+ * The default radius of light the player carries underground, world px: five 16-px tiles of certainty in any
83
+ * direction. A game with other tiles passes its own as `DarknessOptions.carriedLight`.
84
+ */
85
+ export declare const CARRIED_LIGHT = 80;
86
+ export interface DarknessOptions {
87
+ /** The light the player carries when `update` is given no radius, world px (default `CARRIED_LIGHT`, 80). */
88
+ carriedLight?: number;
89
+ }
78
90
  //# sourceMappingURL=Darkness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Darkness.d.ts","sourceRoot":"","sources":["../../../src/pixel/Darkness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AA2C3C,yGAAyG;AACzG,eAAO,MAAM,UAAU,WAAW,CAAC;AAsEnC,qBAAa,QAAQ;IAyCjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,KAAK;IA1Cf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,iHAAiH;IACjH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqF;IAC3G,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,EAAE,CAAgB;IAC1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IAC/C,8FAA8F;IAC9F,OAAO,CAAC,UAAU,CAAK;IACvB,oHAAoH;IACpH,OAAO,CAAC,KAAK,CAAQ;IACrB,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAM;IACnB,0EAA0E;IAC1E,OAAO,CAAC,SAAS,CAAM;IACvB,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAa;IAC5B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,EAAE,CAAK;IACf,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAAM;IACnB,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAGlB,KAAK,EAAE,KAAK,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM;IAgBvB,0DAA0D;IAC1D,OAAO,CAAC,KAAK;IAUb,qHAAqH;IACrH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,KAAK,SAAa,GAAG,IAAI;IAMpF;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5C;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAMlC;;;;OAIG;IACH,OAAO,CAAC,GAAG;IAaX,0HAA0H;IAC1H,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAiExE,OAAO,CAAC,IAAI;IAKZ,mGAAmG;IACnG,OAAO,CAAC,KAAK;IAmBb,OAAO,IAAI,IAAI;CAOhB;AAED,0FAA0F;AAC1F,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,4GAA4G;AAC5G,eAAO,MAAM,aAAa,QAAgB,CAAC"}
1
+ {"version":3,"file":"Darkness.d.ts","sourceRoot":"","sources":["../../../src/pixel/Darkness.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AA2C3C,yGAAyG;AACzG,eAAO,MAAM,UAAU,WAAW,CAAC;AAsEnC,qBAAa,QAAQ;IA4CjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,KAAK;IA7Cf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,iHAAiH;IACjH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqF;IAC3G,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,EAAE,CAAgB;IAC1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IAC/C,8FAA8F;IAC9F,OAAO,CAAC,UAAU,CAAK;IACvB,oHAAoH;IACpH,OAAO,CAAC,KAAK,CAAQ;IACrB,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAM;IACnB,0EAA0E;IAC1E,OAAO,CAAC,SAAS,CAAM;IACvB,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAa;IAC5B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,EAAE,CAAK;IACf,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAAM;IACnB,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,uFAAuF;IACvF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAGX,KAAK,EAAE,KAAK,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACrB,OAAO,GAAE,eAAoB;IAiB/B,0DAA0D;IAC1D,OAAO,CAAC,KAAK;IAUb,qHAAqH;IACrH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,KAAK,SAAa,GAAG,IAAI;IAMpF;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5C;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAMlC;;;;OAIG;IACH,OAAO,CAAC,GAAG;IAaX;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,SAAoB,GAAG,IAAI;IAiEpF,OAAO,CAAC,IAAI;IAKZ,mGAAmG;IACnG,OAAO,CAAC,KAAK;IAmBb,OAAO,IAAI,IAAI;CAOhB;AAED,0FAA0F;AAC1F,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B;;;GAGG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,MAAM,WAAW,eAAe;IAC9B,6GAA6G;IAC7G,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,68 @@
1
+ import type { Stage } from '../core/Stage.js';
2
+ /** A mark's look: the bright stroke, the rim/edge tone, the dark pixels round it, and a fill for discs. */
3
+ export interface MarkTone {
4
+ light: number;
5
+ rim: number;
6
+ dark: number;
7
+ fill: number;
8
+ }
9
+ export interface PixelMarksOptions<T extends string> {
10
+ /** The looks marks are drawn in, by name (`aim`, `cancel`, `lock`…); every mark names one. */
11
+ tones: Record<T, MarkTone>;
12
+ /** Depth of every mark (default 0): usually just over the effects that lie on the ground. */
13
+ depth?: number;
14
+ /** Headings a chevron is painted for (default 32, 11.25° apart): each is painted once per size and tone. */
15
+ headings?: number;
16
+ /** World pixels between two chevrons of an aim line (default 10). */
17
+ spacing?: number;
18
+ /** How fast the chevrons creep along a line, px per ms (default 0.02), so it reads as a direction. */
19
+ creep?: number;
20
+ /** Opacity of a disc's fill (default 0.28). */
21
+ fillAlpha?: number;
22
+ }
23
+ /**
24
+ * Aim and target marks in the world's own pixels: rings, discs and ground ellipses painted once per size and tone and
25
+ * only moved after that, and aim lines as a row of chevrons from a pool — a chevron is repainted only when its heading,
26
+ * size or tone changes. Lines are chevrons, never a solid lane: a solid line of world pixels at most angles is a
27
+ * staircase and reads as broken, while each chevron is crisp at any angle. The drawing side of `AimGesture` and
28
+ * `TargetLock`. Each frame: `begin`, place what the frame needs, then `end`, which hides whatever was shown last frame
29
+ * and not this one.
30
+ */
31
+ export declare class PixelMarks<T extends string = string> {
32
+ private readonly stage;
33
+ private readonly tones;
34
+ private readonly depth;
35
+ private readonly headings;
36
+ private readonly spacing;
37
+ private readonly creep;
38
+ private readonly fillAlpha;
39
+ private readonly cache;
40
+ private readonly pool;
41
+ private used;
42
+ private shown;
43
+ private next;
44
+ constructor(stage: Stage, options: PixelMarksOptions<T>);
45
+ begin(): void;
46
+ /** A ring of radius `r` round (x, y): the bright line with dark pixels just inside and outside it. */
47
+ ring(x: number, y: number, r: number, tone: T): void;
48
+ /** A filled disc of radius `r` with a bright rim and a cross at its middle: where a skill aimed at a spot lands. */
49
+ disc(x: number, y: number, r: number, tone: T): void;
50
+ /** A ring on the ground in three-quarter view, `rx` wide and `ry` deep, centred on (x, y) — a body's feet. */
51
+ groundRing(x: number, y: number, rx: number, ry: number, tone: T): void;
52
+ /**
53
+ * An aim line from (x, y) along `angle`, from `start` to `end` px out: chevrons `size` px across every `spacing`,
54
+ * creeping forward with `now`, and a larger one at the end.
55
+ */
56
+ chevrons(now: number, x: number, y: number, angle: number, start: number, end: number, size: number, tone: T): void;
57
+ /**
58
+ * One still chevron `dist` px out from (x, y) along `angle`: the way the next blow goes. Unlike `chevrons` it does
59
+ * not creep, so an arrow always under the feet does not keep catching the eye.
60
+ */
61
+ pointer(x: number, y: number, angle: number, dist: number, size: number, tone: T): void;
62
+ end(): void;
63
+ destroy(): void;
64
+ private heading;
65
+ private chevron;
66
+ private place;
67
+ }
68
+ //# sourceMappingURL=PixelMarks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixelMarks.d.ts","sourceRoot":"","sources":["../../../src/pixel/PixelMarks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,2GAA2G;AAC3G,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM;IACjD,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3B,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD;;;;;;;GAOG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAc7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAbxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAuB;gBAGhB,KAAK,EAAE,KAAK,EAC7B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAU/B,KAAK,IAAI,IAAI;IAMb,sGAAsG;IACtG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAUpD,oHAAoH;IACpH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAYpD,8GAA8G;IAC9G,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAYvE;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAWnH;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAKvF,GAAG,IAAI,IAAI;IASX,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,KAAK;CAWd"}
@@ -0,0 +1,23 @@
1
+ export type PixelPoint = readonly [number, number];
2
+ /** One horizontal run of pixels: row y, from x0 to x1 inclusive. */
3
+ export type PixelRun = readonly [number, number, number];
4
+ /** The outline of a circle of radius `r` round (0, 0), each pixel once (midpoint algorithm, 8-way symmetric). */
5
+ export declare function ringPixels(r: number): PixelPoint[];
6
+ /** A filled disc of radius `r` round (0, 0), one run per row. */
7
+ export declare function discRuns(r: number): PixelRun[];
8
+ /**
9
+ * The outline of an ellipse `rx` wide and `ry` deep round (0, 0), each pixel once (midpoint algorithm) — a circle on
10
+ * the ground as a three-quarter view shows it, so a body can stand in the middle of it.
11
+ */
12
+ export declare function ellipsePixels(rx: number, ry: number): PixelPoint[];
13
+ /**
14
+ * A chevron (›) pointing along `angle`, its arms `size` px out from the line either side, round (0, 0): the bright
15
+ * stroke and the dark pixels that rim it. A row of these, evenly spaced, is how an aim line is drawn: each one is
16
+ * crisp at any angle, and with no continuous edge between them there is no staircase to see — a solid line of world
17
+ * pixels at, say, 20° is one, and read as broken.
18
+ */
19
+ export declare function chevronPixels(angle: number, size: number): {
20
+ lit: PixelPoint[];
21
+ rim: PixelPoint[];
22
+ };
23
+ //# sourceMappingURL=aimPixels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aimPixels.d.ts","sourceRoot":"","sources":["../../../src/pixel/aimPixels.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,oEAAoE;AACpE,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzD,iHAAiH;AACjH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAuBlD;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAQ9C;AAGD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,EAAE,CA8ClE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAAC,GAAG,EAAE,UAAU,EAAE,CAAA;CAAE,CA+BnG"}
@@ -11,6 +11,8 @@ export { P as PALETTE } from './palette.js';
11
11
  export { art, litOutline, groundShadow, shadeBox, type PropArt } from './propKit.js';
12
12
  export { ramp, rampTones, hueShade, outlineOf, registerMaterial, MATERIALS, RAMP_FACTOR_SET, type Material, type BuiltinMaterial, type MaterialLight, type RampFactors, type Ramp, } from './ramp.js';
13
13
  export { selectiveOutline } from './selout.js';
14
+ export { ringPixels, discRuns, ellipsePixels, chevronPixels, type PixelPoint, type PixelRun } from './aimPixels.js';
15
+ export { PixelMarks, type MarkTone, type PixelMarksOptions } from './PixelMarks.js';
14
16
  /** Pixel shapes on the 1-px world grid: `pixelPaint.ring(g, …)`, `pixelPaint.arc(g, …)`… */
15
17
  export * as pixelPaint from './pixelPaint.js';
16
18
  /** Colour ramps, grading, dithering and batching under `pixelPaint`. */
@@ -19,7 +21,7 @@ export { registerHandRamps } from './pixelTone.js';
19
21
  export { paintLayer, type PaintLayerOptions } from './paintLayer.js';
20
22
  export { Evaporation, type DeathPixels } from './Evaporation.js';
21
23
  export { spritePixels, NO_PIXELS, PackedPixels, type SpritePixel } from './spritePixels.js';
22
- export { Darkness, WARM_LIGHT, LAMP_DIM, CARRIED_LIGHT } from './Darkness.js';
24
+ export { Darkness, WARM_LIGHT, LAMP_DIM, CARRIED_LIGHT, type DarknessOptions } from './Darkness.js';
23
25
  export { flashLight, carriedLight, liveLights, clearLights, type TransientLight } from './lights.js';
24
26
  export { NightShade, type NightShadeOptions } from './NightShade.js';
25
27
  export { paintWeatherArt, mistPixels, WEATHER_COLORS, type WeatherColors, type WeatherPixel } from './weatherArt.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pixel/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,EACL,IAAI,EACJ,GAAG,EACH,QAAQ,EACR,KAAK,EACL,GAAG,EACH,SAAS,EACT,KAAK,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,KAAK,KAAK,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,IAAI,GACV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,4FAA4F;AAC5F,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,wEAAwE;AACxE,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5L,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pixel/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,EACL,IAAI,EACJ,GAAG,EACH,QAAQ,EACR,KAAK,EACL,GAAG,EACH,SAAS,EACT,KAAK,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,KAAK,KAAK,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,IAAI,GACV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjH,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjF,4FAA4F;AAC5F,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,wEAAwE;AACxE,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5L,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -40,4 +40,5 @@ export declare function arc(g: Graphics, x: number, y: number, r: number, a0: nu
40
40
  export declare function dust(g: Graphics, x: number, y: number, t: number, spread?: number, color?: number): void;
41
41
  /** Pixel chunks flung out of (x, y) under gravity (rock, splinters): `ms` after the blow. */
42
42
  export declare function debris(g: Graphics, x: number, y: number, count: number, speed: number, ms: number, colors: number[]): void;
43
+ export { spark, tail, pixelOn, type FlightPixel } from './pixelParticles.js';
43
44
  //# sourceMappingURL=pixelPaint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pixelPaint.d.ts","sourceRoot":"","sources":["../../../src/pixel/pixelPaint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pixelPaint.d.ts","sourceRoot":"","sources":["../../../src/pixel/pixelPaint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Graphics } from '../core/Graphics.js';
2
+ /**
3
+ * A spark of `size` 1 (one pixel, glinting every third `frame`), 2 (a plus with a lit centre) or 3 (a four-point star
4
+ * whose arms twinkle with `frame`), shaded from `color`'s ramp, on the 1-px world grid.
5
+ */
6
+ export declare function spark(g: Graphics, x: number, y: number, color: number, size: 1 | 2 | 3, frame?: number): void;
7
+ /**
8
+ * A particle's trail: `len` px back from its head (x, y) against its velocity (vx, vy), glint to shade, its far half
9
+ * broken into every other pixel. `thick` 2 lays a second row under it on the shaded side (down, or right for a trail
10
+ * running straight up or down) a tone deeper, so the trail has a body; 3 adds a lit row on the up-left side over its
11
+ * near half. Light comes from the up-left, as on the rest of the art.
12
+ */
13
+ export declare function tail(g: Graphics, x: number, y: number, vx: number, vy: number, len: number, color: number, thick?: number): void;
14
+ /** Paints one art pixel at (along, across) in the frame of a line through a point, heading an angle. */
15
+ export type FlightPixel = (along: number, across: number, color: number) => void;
16
+ /**
17
+ * A painter for a projectile drawn the size it really hits at: pixels are given along its heading and across it
18
+ * (positive across is to the right of the heading), rotated onto the world grid at (x, y). Make one per frame painted.
19
+ */
20
+ export declare function pixelOn(g: Graphics, x: number, y: number, angle: number): FlightPixel;
21
+ //# sourceMappingURL=pixelParticles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixelParticles.d.ts","sourceRoot":"","sources":["../../../src/pixel/pixelParticles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAUjD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,SAAI,GAAG,IAAI,CAYxG;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,IAAI,CAyB3H;AAED,wGAAwG;AACxG,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAIrF"}
@@ -0,0 +1,25 @@
1
+ /** What `onAppResume` listens on: `document` and `window` in a browser; a test passes its own. */
2
+ export interface ResumeEnv {
3
+ document?: {
4
+ readonly visibilityState?: string;
5
+ addEventListener(type: string, cb: () => void): void;
6
+ removeEventListener(type: string, cb: () => void): void;
7
+ };
8
+ window?: {
9
+ addEventListener(type: string, cb: (e: {
10
+ persisted?: boolean;
11
+ }) => void): void;
12
+ removeEventListener(type: string, cb: (e: {
13
+ persisted?: boolean;
14
+ }) => void): void;
15
+ };
16
+ now?: () => number;
17
+ }
18
+ /**
19
+ * Calls `cb` when the app comes back to the foreground: the tab shown again (`visibilitychange`) or the page restored
20
+ * from the back/forward cache (`pageshow` with `persisted`). A phone freezes a background tab — timers stop, a socket
21
+ * may be dead without having closed — so this is the moment to check what survived. `cb` gets how long the app was
22
+ * hidden, ms (0 when the hiding was not seen). Returns the unsubscribe; does nothing where there is no document.
23
+ */
24
+ export declare function onAppResume(cb: (hiddenMs: number) => void, env?: ResumeEnv): () => void;
25
+ //# sourceMappingURL=appResume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appResume.d.ts","sourceRoot":"","sources":["../../../src/platform/appResume.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;QAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;IAChK,MAAM,CAAC,EAAE;QAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,IAAI,GAAG,IAAI,CAAC;QAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/K,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,GAAG,GAAE,SAAmC,GAAG,MAAM,IAAI,CAwBhH"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Fullscreen through the standard API, with the `webkit` names older Safari (and iPadOS before 16.4) still use. Where
3
+ * neither exists (iPhone Safari never offers an element fullscreen) every call is a safe no-op: `enterFullscreen`
4
+ * resolves false and `isFullscreen` stays false, so a game can show its button only when `fullscreenSupported()`.
5
+ */
6
+ /** The slice of `Document` the helpers read; tests pass their own. */
7
+ export interface FullscreenDocument {
8
+ readonly fullscreenElement?: Element | null;
9
+ readonly webkitFullscreenElement?: Element | null;
10
+ readonly fullscreenEnabled?: boolean;
11
+ readonly webkitFullscreenEnabled?: boolean;
12
+ readonly documentElement?: Element;
13
+ exitFullscreen?(): Promise<void>;
14
+ webkitExitFullscreen?(): void;
15
+ addEventListener(type: string, fn: () => void): void;
16
+ removeEventListener(type: string, fn: () => void): void;
17
+ }
18
+ /** True when this page may put an element in fullscreen at all. */
19
+ export declare function fullscreenSupported(doc?: FullscreenDocument | null): boolean;
20
+ /** True while something is in fullscreen. */
21
+ export declare function isFullscreen(doc?: FullscreenDocument | null): boolean;
22
+ /**
23
+ * Puts `element` (default the whole page) in fullscreen; resolves true once it is. Browsers allow it only inside a
24
+ * user gesture, so call it from a click or key handler. A refusal resolves false instead of throwing: a game's
25
+ * fullscreen button should never take the frame down with it.
26
+ */
27
+ export declare function enterFullscreen(element?: Element, doc?: FullscreenDocument | null): Promise<boolean>;
28
+ /** Leaves fullscreen; resolves false when nothing was in it or the browser refused. */
29
+ export declare function exitFullscreen(doc?: FullscreenDocument | null): Promise<boolean>;
30
+ /** Enters or leaves; resolves whether the page is in fullscreen afterwards (as far as the call could tell). */
31
+ export declare function toggleFullscreen(element?: Element, doc?: FullscreenDocument | null): Promise<boolean>;
32
+ /**
33
+ * Calls `fn(isFullscreen)` whenever the page enters or leaves fullscreen — by the game or by the player pressing Esc,
34
+ * which no game code sees otherwise. Returns the unsubscribe.
35
+ */
36
+ export declare function onFullscreenChange(fn: (fullscreen: boolean) => void, doc?: FullscreenDocument | null): () => void;
37
+ //# sourceMappingURL=fullscreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../../src/platform/fullscreen.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAC9B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACrD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACzD;AAWD,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,OAAO,CAE/F;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,OAAO,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAY7H;AAED,uFAAuF;AACvF,wBAAsB,cAAc,CAAC,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAUzG;AAED,+GAA+G;AAC/G,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9H;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,EAAE,GAAG,GAAE,kBAAkB,GAAG,IAAwB,GAAG,MAAM,IAAI,CASpI"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Locks the screen's orientation where the platform allows it: Android Chrome in fullscreen or as an installed app,
3
+ * Electron and Capacitor shells. Desktop browsers and iPhone Safari refuse or lack the API; then `lockOrientation`
4
+ * resolves false, so a game asks once and falls back to a "turn your phone" hint without try/catch of its own.
5
+ */
6
+ export type OrientationLock = 'any' | 'natural' | 'landscape' | 'portrait' | 'portrait-primary' | 'portrait-secondary' | 'landscape-primary' | 'landscape-secondary';
7
+ /** The slice of `ScreenOrientation` used here (`lock` is missing from some DOM typings); tests pass their own. */
8
+ export interface OrientationTarget {
9
+ readonly type?: string;
10
+ lock?(orientation: OrientationLock): Promise<void>;
11
+ unlock?(): void;
12
+ }
13
+ /** Resolves true once the screen is locked to `orientation`, false where the platform refuses or cannot. */
14
+ export declare function lockOrientation(orientation: OrientationLock, target?: OrientationTarget | null): Promise<boolean>;
15
+ /** Lets the screen turn freely again; a no-op where nothing could be locked. */
16
+ export declare function unlockOrientation(target?: OrientationTarget | null): void;
17
+ /** 'landscape', 'portrait', or null where the platform does not say. */
18
+ export declare function currentOrientationKind(target?: OrientationTarget | null): 'landscape' | 'portrait' | null;
19
+ //# sourceMappingURL=orientation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orientation.d.ts","sourceRoot":"","sources":["../../../src/platform/orientation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAErK,kHAAkH;AAClH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,IAAI,CAAC;CACjB;AAOD,4GAA4G;AAC5G,wBAAsB,eAAe,CAAC,WAAW,EAAE,eAAe,EAAE,MAAM,GAAE,iBAAiB,GAAG,IAA2B,GAAG,OAAO,CAAC,OAAO,CAAC,CAS7I;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,iBAAiB,GAAG,IAA2B,GAAG,IAAI,CAM/F;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,iBAAiB,GAAG,IAA2B,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAK/H"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Pointer lock for mouse-look and twin-stick aiming with the mouse: the cursor hides and movement comes as
3
+ * `movementX`/`movementY` deltas. Browsers grant it only inside a user gesture and the player can always leave it with
4
+ * Esc, so a game listens with `onPointerLockChange` rather than assuming it holds.
5
+ */
6
+ /** The slice of `Document` used here; tests pass their own. */
7
+ export interface PointerLockDocument {
8
+ readonly pointerLockElement?: Element | null;
9
+ exitPointerLock?(): void;
10
+ addEventListener(type: string, fn: () => void): void;
11
+ removeEventListener(type: string, fn: () => void): void;
12
+ }
13
+ /** True while `element` (or, with none named, anything) holds the pointer. */
14
+ export declare function isPointerLocked(element?: Element, doc?: PointerLockDocument | null): boolean;
15
+ /**
16
+ * Asks to lock the pointer to `element` (the game canvas); resolves whether it holds afterwards. `raw` asks for
17
+ * unaccelerated movement where the browser offers it, and falls back to the plain lock where it refuses that option.
18
+ */
19
+ export declare function requestPointerLock(element: Element, options?: {
20
+ raw?: boolean;
21
+ }, doc?: PointerLockDocument | null): Promise<boolean>;
22
+ /** Releases the pointer; a no-op when nothing holds it. */
23
+ export declare function exitPointerLock(doc?: PointerLockDocument | null): void;
24
+ /** Calls `fn(locked)` whenever the lock is taken or lost (Esc included). Returns the unsubscribe. */
25
+ export declare function onPointerLockChange(fn: (locked: boolean) => void, doc?: PointerLockDocument | null): () => void;
26
+ //# sourceMappingURL=pointerLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointerLock.d.ts","sourceRoot":"","sources":["../../../src/platform/pointerLock.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACrD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACzD;AAUD,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,GAAE,mBAAmB,GAAG,IAAwB,GAAG,OAAO,CAG/G;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,EAAE,GAAG,GAAE,mBAAmB,GAAG,IAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAcjK;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,GAAG,GAAE,mBAAmB,GAAG,IAAwB,GAAG,IAAI,CAEzF;AAED,qGAAqG;AACrG,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,GAAG,GAAE,mBAAmB,GAAG,IAAwB,GAAG,MAAM,IAAI,CAKlI"}
@@ -0,0 +1,20 @@
1
+ /** The slice of `MediaQueryList` used here; tests pass their own. */
2
+ export interface MotionQuery {
3
+ readonly matches: boolean;
4
+ addEventListener?(type: 'change', fn: () => void): void;
5
+ removeEventListener?(type: 'change', fn: () => void): void;
6
+ /** Safari before 14 only has the old names. */
7
+ addListener?(fn: () => void): void;
8
+ removeListener?(fn: () => void): void;
9
+ }
10
+ /** True when the system asks for reduced motion; false where it cannot be read. */
11
+ export declare function prefersReducedMotion(query?: MotionQuery | null): boolean;
12
+ /** Calls `fn(reduced)` when the system setting changes (not at once). Returns the unsubscribe. */
13
+ export declare function onReducedMotionChange(fn: (reduced: boolean) => void, query?: MotionQuery | null): () => void;
14
+ /**
15
+ * Sets `engineSettings.reducedFx` from the system setting now and whenever it changes. Returns the unsubscribe; the
16
+ * setting keeps its last value afterwards. A game with its own "reduced effects" toggle should not call this, or
17
+ * the system would overwrite the player's choice — mirror its own store instead.
18
+ */
19
+ export declare function followReducedMotion(query?: MotionQuery | null): () => void;
20
+ //# sourceMappingURL=reducedMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducedMotion.d.ts","sourceRoot":"","sources":["../../../src/platform/reducedMotion.ts"],"names":[],"mappings":"AAUA,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxD,mBAAmB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC3D,+CAA+C;IAC/C,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACvC;AAMD,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,WAAW,GAAG,IAAqB,GAAG,OAAO,CAExF;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,KAAK,GAAE,WAAW,GAAG,IAAqB,GAAG,MAAM,IAAI,CAS5H;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,WAAW,GAAG,IAAqB,GAAG,MAAM,IAAI,CAI1F"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * An `AbortSignal` that aborts after `ms` — `AbortSignal.timeout`, which iOS Safari only has from 16 and older
3
+ * WebViews not at all: there an `AbortController` and a timer stand in, aborting with the same `TimeoutError`.
4
+ */
5
+ export declare function timeoutSignal(ms: number): AbortSignal;
6
+ //# sourceMappingURL=timeoutSignal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeoutSignal.d.ts","sourceRoot":"","sources":["../../../src/platform/timeoutSignal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAQrD"}
@@ -35,4 +35,8 @@ export { worldToScreen, onScreen, type LayerTransform } from './dom/worldToScree
35
35
  export { createStore, type Store, type StoreListener } from './dom/createStore.js';
36
36
  export { InputShield } from './dom/InputShield.js';
37
37
  export { shouldShield, isEditable, isInside, type ShieldFacts, type ShieldOptions, type ElementLike } from './dom/shieldDecision.js';
38
+ export { RichText, type RichTextOptions } from './rich/RichText.js';
39
+ export { CanvasRichFont, BitmapRichFont, type RichFont, type RichFontOptions, type BitmapRichFontOptions } from './rich/richFonts.js';
40
+ export { parseRichText, escapeRichText, stripRichText, type RichSpan, type RichTextSpan, type RichIconSpan, type RichStyle, type RichMarkupOptions } from './rich/richMarkup.js';
41
+ export { layoutRichText, type RichMeasure, type RichLayoutOptions, type RichLayout, type RichLine, type RichItem, type RichTextItem, type RichIconItem, type RichAlign } from './rich/richLayout.js';
38
42
  //# sourceMappingURL=index.d.ts.map