@datamoc/mw_games 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/README.md +73 -24
  2. package/dist/actors/Affix.d.ts +26 -0
  3. package/dist/actors/Affix.d.ts.map +1 -1
  4. package/dist/actors/Affix.js +32 -1
  5. package/dist/actors/Affix.js.map +1 -1
  6. package/dist/actors/Barrier.d.ts +47 -0
  7. package/dist/actors/Barrier.d.ts.map +1 -0
  8. package/dist/actors/Barrier.js +70 -0
  9. package/dist/actors/Barrier.js.map +1 -0
  10. package/dist/actors/Charges.d.ts +22 -0
  11. package/dist/actors/Charges.d.ts.map +1 -1
  12. package/dist/actors/Charges.js +26 -0
  13. package/dist/actors/Charges.js.map +1 -1
  14. package/dist/actors/Equipment.d.ts +30 -0
  15. package/dist/actors/Equipment.d.ts.map +1 -1
  16. package/dist/actors/Equipment.js +33 -1
  17. package/dist/actors/Equipment.js.map +1 -1
  18. package/dist/actors/Inventory.d.ts +58 -3
  19. package/dist/actors/Inventory.d.ts.map +1 -1
  20. package/dist/actors/Inventory.js +97 -5
  21. package/dist/actors/Inventory.js.map +1 -1
  22. package/dist/actors/ItemState.d.ts +11 -2
  23. package/dist/actors/ItemState.d.ts.map +1 -1
  24. package/dist/actors/ItemState.js +18 -2
  25. package/dist/actors/ItemState.js.map +1 -1
  26. package/dist/actors/Loot.js +1 -1
  27. package/dist/actors/Loot.js.map +1 -1
  28. package/dist/actors/Progression.d.ts +9 -0
  29. package/dist/actors/Progression.d.ts.map +1 -1
  30. package/dist/actors/Progression.js +7 -0
  31. package/dist/actors/Progression.js.map +1 -1
  32. package/dist/actors/Resource.d.ts +16 -0
  33. package/dist/actors/Resource.d.ts.map +1 -1
  34. package/dist/actors/Resource.js +22 -0
  35. package/dist/actors/Resource.js.map +1 -1
  36. package/dist/actors/SkillPoints.d.ts +14 -0
  37. package/dist/actors/SkillPoints.d.ts.map +1 -1
  38. package/dist/actors/SkillPoints.js +16 -0
  39. package/dist/actors/SkillPoints.js.map +1 -1
  40. package/dist/actors/StatBlock.d.ts +16 -0
  41. package/dist/actors/StatBlock.d.ts.map +1 -1
  42. package/dist/actors/StatBlock.js +21 -0
  43. package/dist/actors/StatBlock.js.map +1 -1
  44. package/dist/actors/Support.d.ts +2 -2
  45. package/dist/actors/Support.d.ts.map +1 -1
  46. package/dist/actors/Support.js +2 -2
  47. package/dist/actors/Support.js.map +1 -1
  48. package/dist/actors/index.d.ts +8 -5
  49. package/dist/actors/index.d.ts.map +1 -1
  50. package/dist/actors/index.js +3 -2
  51. package/dist/actors/index.js.map +1 -1
  52. package/dist/assets/ByteProgress.d.ts +27 -0
  53. package/dist/assets/ByteProgress.d.ts.map +1 -0
  54. package/dist/assets/ByteProgress.js +44 -0
  55. package/dist/assets/ByteProgress.js.map +1 -0
  56. package/dist/assets/Streaming.d.ts +10 -4
  57. package/dist/assets/Streaming.d.ts.map +1 -1
  58. package/dist/assets/Streaming.js +18 -7
  59. package/dist/assets/Streaming.js.map +1 -1
  60. package/dist/assets/index.d.ts +11 -44
  61. package/dist/assets/index.d.ts.map +1 -1
  62. package/dist/assets/index.js +9 -76
  63. package/dist/assets/index.js.map +1 -1
  64. package/dist/assets/loader.d.ts +34 -0
  65. package/dist/assets/loader.d.ts.map +1 -0
  66. package/dist/assets/loader.js +61 -0
  67. package/dist/assets/loader.js.map +1 -0
  68. package/dist/assets/paths.d.ts +40 -0
  69. package/dist/assets/paths.d.ts.map +1 -0
  70. package/dist/assets/paths.js +49 -0
  71. package/dist/assets/paths.js.map +1 -0
  72. package/dist/audio/Music.d.ts +10 -0
  73. package/dist/audio/Music.d.ts.map +1 -1
  74. package/dist/audio/Music.js +36 -1
  75. package/dist/audio/Music.js.map +1 -1
  76. package/dist/audio/Playable.d.ts +3 -0
  77. package/dist/audio/Playable.d.ts.map +1 -1
  78. package/dist/audio/Playable.js +1 -1
  79. package/dist/audio/Playable.js.map +1 -1
  80. package/dist/battle/Field.d.ts +2 -2
  81. package/dist/battle/Field.d.ts.map +1 -1
  82. package/dist/battle/Field.js +3 -3
  83. package/dist/battle/Field.js.map +1 -1
  84. package/dist/battle/Hooks.d.ts +7 -13
  85. package/dist/battle/Hooks.d.ts.map +1 -1
  86. package/dist/battle/Hooks.js +20 -18
  87. package/dist/battle/Hooks.js.map +1 -1
  88. package/dist/core/Feedback.d.ts +3 -9
  89. package/dist/core/Feedback.d.ts.map +1 -1
  90. package/dist/core/Feedback.js +6 -18
  91. package/dist/core/Feedback.js.map +1 -1
  92. package/dist/core/Hooks.d.ts +34 -0
  93. package/dist/core/Hooks.d.ts.map +1 -0
  94. package/dist/core/Hooks.js +33 -0
  95. package/dist/core/Hooks.js.map +1 -0
  96. package/dist/core/HttpTransport.d.ts +22 -0
  97. package/dist/core/HttpTransport.d.ts.map +1 -0
  98. package/dist/core/HttpTransport.js +33 -0
  99. package/dist/core/HttpTransport.js.map +1 -0
  100. package/dist/core/Input.d.ts +41 -0
  101. package/dist/core/Input.d.ts.map +1 -1
  102. package/dist/core/Input.js +126 -21
  103. package/dist/core/Input.js.map +1 -1
  104. package/dist/core/Multiplayer.d.ts +63 -0
  105. package/dist/core/Multiplayer.d.ts.map +1 -0
  106. package/dist/core/Multiplayer.js +73 -0
  107. package/dist/core/Multiplayer.js.map +1 -0
  108. package/dist/core/PlayerInput.d.ts +5 -0
  109. package/dist/core/PlayerInput.d.ts.map +1 -1
  110. package/dist/core/PlayerInput.js +11 -0
  111. package/dist/core/PlayerInput.js.map +1 -1
  112. package/dist/core/Random.d.ts +14 -5
  113. package/dist/core/Random.d.ts.map +1 -1
  114. package/dist/core/Random.js +14 -5
  115. package/dist/core/Random.js.map +1 -1
  116. package/dist/core/SaveSync.d.ts +17 -14
  117. package/dist/core/SaveSync.d.ts.map +1 -1
  118. package/dist/core/SaveSync.js +35 -31
  119. package/dist/core/SaveSync.js.map +1 -1
  120. package/dist/core/Scene.d.ts +16 -6
  121. package/dist/core/Scene.d.ts.map +1 -1
  122. package/dist/core/Scene.js +18 -6
  123. package/dist/core/Scene.js.map +1 -1
  124. package/dist/core/SceneStack.d.ts +8 -4
  125. package/dist/core/SceneStack.d.ts.map +1 -1
  126. package/dist/core/SceneStack.js +4 -0
  127. package/dist/core/SceneStack.js.map +1 -1
  128. package/dist/core/Stats.d.ts +33 -0
  129. package/dist/core/Stats.d.ts.map +1 -0
  130. package/dist/core/Stats.js +34 -0
  131. package/dist/core/Stats.js.map +1 -0
  132. package/dist/core/Telemetry.d.ts +34 -0
  133. package/dist/core/Telemetry.d.ts.map +1 -0
  134. package/dist/core/Telemetry.js +47 -0
  135. package/dist/core/Telemetry.js.map +1 -0
  136. package/dist/core/index.d.ts +9 -2
  137. package/dist/core/index.d.ts.map +1 -1
  138. package/dist/core/index.js +4 -1
  139. package/dist/core/index.js.map +1 -1
  140. package/dist/index.d.ts +5 -5
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +5 -5
  143. package/dist/index.js.map +1 -1
  144. package/dist/mw_games.global.js +88 -87
  145. package/dist/roguelike/Boss.d.ts +4 -4
  146. package/dist/roguelike/Boss.d.ts.map +1 -1
  147. package/dist/roguelike/Boss.js +6 -6
  148. package/dist/roguelike/Boss.js.map +1 -1
  149. package/dist/roguelike/Combat.d.ts +10 -11
  150. package/dist/roguelike/Combat.d.ts.map +1 -1
  151. package/dist/roguelike/Combat.js +9 -16
  152. package/dist/roguelike/Combat.js.map +1 -1
  153. package/dist/roguelike/ContentRoll.d.ts +43 -0
  154. package/dist/roguelike/ContentRoll.d.ts.map +1 -0
  155. package/dist/roguelike/ContentRoll.js +38 -0
  156. package/dist/roguelike/ContentRoll.js.map +1 -0
  157. package/dist/roguelike/DungeonParity.d.ts +42 -0
  158. package/dist/roguelike/DungeonParity.d.ts.map +1 -0
  159. package/dist/roguelike/DungeonParity.js +63 -0
  160. package/dist/roguelike/DungeonParity.js.map +1 -0
  161. package/dist/roguelike/Features.d.ts +42 -0
  162. package/dist/roguelike/Features.d.ts.map +1 -0
  163. package/dist/roguelike/Features.js +59 -0
  164. package/dist/roguelike/Features.js.map +1 -0
  165. package/dist/roguelike/MonsterAI.js +1 -1
  166. package/dist/roguelike/MonsterAI.js.map +1 -1
  167. package/dist/roguelike/MultiStageAbility.d.ts +43 -0
  168. package/dist/roguelike/MultiStageAbility.d.ts.map +1 -0
  169. package/dist/roguelike/MultiStageAbility.js +60 -0
  170. package/dist/roguelike/MultiStageAbility.js.map +1 -0
  171. package/dist/roguelike/RoomBuilders.d.ts +43 -0
  172. package/dist/roguelike/RoomBuilders.d.ts.map +1 -0
  173. package/dist/roguelike/RoomBuilders.js +40 -0
  174. package/dist/roguelike/RoomBuilders.js.map +1 -0
  175. package/dist/roguelike/Targeting.d.ts +22 -0
  176. package/dist/roguelike/Targeting.d.ts.map +1 -1
  177. package/dist/roguelike/Targeting.js +20 -0
  178. package/dist/roguelike/Targeting.js.map +1 -1
  179. package/dist/roguelike/TriggerTracker.d.ts +36 -0
  180. package/dist/roguelike/TriggerTracker.d.ts.map +1 -0
  181. package/dist/roguelike/TriggerTracker.js +49 -0
  182. package/dist/roguelike/TriggerTracker.js.map +1 -0
  183. package/dist/roguelike/generate.d.ts +49 -0
  184. package/dist/roguelike/generate.d.ts.map +1 -1
  185. package/dist/roguelike/generate.js +38 -10
  186. package/dist/roguelike/generate.js.map +1 -1
  187. package/dist/roguelike/index.d.ts +16 -4
  188. package/dist/roguelike/index.d.ts.map +1 -1
  189. package/dist/roguelike/index.js +8 -2
  190. package/dist/roguelike/index.js.map +1 -1
  191. package/dist/rpg/EventRunner.d.ts +30 -8
  192. package/dist/rpg/EventRunner.d.ts.map +1 -1
  193. package/dist/rpg/EventRunner.js +1 -13
  194. package/dist/rpg/EventRunner.js.map +1 -1
  195. package/dist/rpg/FreeMover.d.ts +2 -2
  196. package/dist/rpg/FreeMover.d.ts.map +1 -1
  197. package/dist/rpg/FreeMover.js +5 -5
  198. package/dist/rpg/FreeMover.js.map +1 -1
  199. package/dist/rpg/GridMover.d.ts +2 -2
  200. package/dist/rpg/GridMover.d.ts.map +1 -1
  201. package/dist/rpg/GridMover.js +5 -5
  202. package/dist/rpg/GridMover.js.map +1 -1
  203. package/dist/rpg/MovableSprite.d.ts +25 -0
  204. package/dist/rpg/MovableSprite.d.ts.map +1 -0
  205. package/dist/rpg/MovableSprite.js +2 -0
  206. package/dist/rpg/MovableSprite.js.map +1 -0
  207. package/dist/rpg/Quest.d.ts +6 -1
  208. package/dist/rpg/Quest.d.ts.map +1 -1
  209. package/dist/rpg/Quest.js +6 -1
  210. package/dist/rpg/Quest.js.map +1 -1
  211. package/dist/rpg/automap.d.ts +24 -2
  212. package/dist/rpg/automap.d.ts.map +1 -1
  213. package/dist/rpg/automap.js +9 -1
  214. package/dist/rpg/automap.js.map +1 -1
  215. package/dist/rpg/index.d.ts +4 -4
  216. package/dist/rpg/index.d.ts.map +1 -1
  217. package/dist/rpg/index.js +1 -1
  218. package/dist/rpg/index.js.map +1 -1
  219. package/dist/simulation/Scenario.d.ts +29 -0
  220. package/dist/simulation/Scenario.d.ts.map +1 -0
  221. package/dist/simulation/Scenario.js +25 -0
  222. package/dist/simulation/Scenario.js.map +1 -0
  223. package/dist/simulation/Turns.d.ts +29 -0
  224. package/dist/simulation/Turns.d.ts.map +1 -0
  225. package/dist/simulation/Turns.js +30 -0
  226. package/dist/simulation/Turns.js.map +1 -0
  227. package/dist/simulation/index.d.ts +5 -0
  228. package/dist/simulation/index.d.ts.map +1 -0
  229. package/dist/simulation/index.js +3 -0
  230. package/dist/simulation/index.js.map +1 -0
  231. package/dist/three-d/Character3D.d.ts +26 -1
  232. package/dist/three-d/Character3D.d.ts.map +1 -1
  233. package/dist/three-d/Character3D.js +31 -14
  234. package/dist/three-d/Character3D.js.map +1 -1
  235. package/dist/three-d/Collision3D.d.ts +63 -0
  236. package/dist/three-d/Collision3D.d.ts.map +1 -0
  237. package/dist/three-d/Collision3D.js +75 -0
  238. package/dist/three-d/Collision3D.js.map +1 -0
  239. package/dist/three-d/Models.js +1 -1
  240. package/dist/three-d/index.d.ts +3 -1
  241. package/dist/three-d/index.d.ts.map +1 -1
  242. package/dist/three-d/index.js +1 -0
  243. package/dist/three-d/index.js.map +1 -1
  244. package/dist/{core → two-d}/Game.d.ts +7 -6
  245. package/dist/two-d/Game.d.ts.map +1 -0
  246. package/dist/{core → two-d}/Game.js +3 -3
  247. package/dist/two-d/Game.js.map +1 -0
  248. package/dist/two-d/Scene2D.d.ts +19 -0
  249. package/dist/two-d/Scene2D.d.ts.map +1 -0
  250. package/dist/two-d/Scene2D.js +23 -0
  251. package/dist/two-d/Scene2D.js.map +1 -0
  252. package/dist/two-d/index.d.ts +20 -0
  253. package/dist/two-d/index.d.ts.map +1 -0
  254. package/dist/two-d/index.js +18 -0
  255. package/dist/two-d/index.js.map +1 -0
  256. package/dist/two-d/render/ActorAnimator.d.ts.map +1 -0
  257. package/dist/two-d/render/ActorAnimator.js.map +1 -0
  258. package/dist/two-d/render/AnimatedSprite.d.ts.map +1 -0
  259. package/dist/two-d/render/AnimatedSprite.js.map +1 -0
  260. package/dist/two-d/render/Autotile.d.ts.map +1 -0
  261. package/dist/two-d/render/Autotile.js.map +1 -0
  262. package/dist/two-d/render/Camera.d.ts.map +1 -0
  263. package/dist/{render → two-d/render}/Camera.js +2 -2
  264. package/dist/two-d/render/Camera.js.map +1 -0
  265. package/dist/two-d/render/Capabilities.d.ts.map +1 -0
  266. package/dist/two-d/render/Capabilities.js.map +1 -0
  267. package/dist/two-d/render/ColorBlindness.d.ts.map +1 -0
  268. package/dist/two-d/render/ColorBlindness.js.map +1 -0
  269. package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -0
  270. package/dist/{render → two-d/render}/ColorTransformBatcher.js +3 -2
  271. package/dist/two-d/render/ColorTransformBatcher.js.map +1 -0
  272. package/dist/two-d/render/LayeredSprite.d.ts.map +1 -0
  273. package/dist/two-d/render/LayeredSprite.js.map +1 -0
  274. package/dist/two-d/render/Minimap.d.ts.map +1 -0
  275. package/dist/{render → two-d/render}/Minimap.js +1 -1
  276. package/dist/two-d/render/Minimap.js.map +1 -0
  277. package/dist/two-d/render/Particles.d.ts +109 -0
  278. package/dist/two-d/render/Particles.d.ts.map +1 -0
  279. package/dist/two-d/render/Particles.js +178 -0
  280. package/dist/two-d/render/Particles.js.map +1 -0
  281. package/dist/two-d/render/Projectile.d.ts.map +1 -0
  282. package/dist/two-d/render/Projectile.js.map +1 -0
  283. package/dist/two-d/render/ScreenEffects.d.ts +71 -0
  284. package/dist/two-d/render/ScreenEffects.d.ts.map +1 -0
  285. package/dist/two-d/render/ScreenEffects.js +133 -0
  286. package/dist/two-d/render/ScreenEffects.js.map +1 -0
  287. package/dist/two-d/render/SpriteSheet.d.ts.map +1 -0
  288. package/dist/{render → two-d/render}/SpriteSheet.js +1 -1
  289. package/dist/two-d/render/SpriteSheet.js.map +1 -0
  290. package/dist/two-d/render/StatusVisuals.d.ts +46 -0
  291. package/dist/two-d/render/StatusVisuals.d.ts.map +1 -0
  292. package/dist/two-d/render/StatusVisuals.js +48 -0
  293. package/dist/two-d/render/StatusVisuals.js.map +1 -0
  294. package/dist/two-d/render/TileMap.d.ts.map +1 -0
  295. package/dist/{render → two-d/render}/TileMap.js +1 -1
  296. package/dist/two-d/render/TileMap.js.map +1 -0
  297. package/dist/{rpg → two-d/render}/TiledMap.d.ts +2 -2
  298. package/dist/two-d/render/TiledMap.d.ts.map +1 -0
  299. package/dist/{rpg → two-d/render}/TiledMap.js +2 -2
  300. package/dist/two-d/render/TiledMap.js.map +1 -0
  301. package/dist/two-d/render/TintedSprite.d.ts.map +1 -0
  302. package/dist/two-d/render/TintedSprite.js.map +1 -0
  303. package/dist/two-d/render/Viewport.d.ts.map +1 -0
  304. package/dist/two-d/render/Viewport.js.map +1 -0
  305. package/dist/{render → two-d/render}/index.d.ts +8 -0
  306. package/dist/two-d/render/index.d.ts.map +1 -0
  307. package/dist/{render → two-d/render}/index.js +4 -0
  308. package/dist/two-d/render/index.js.map +1 -0
  309. package/dist/two-d/stage/DialogueStage.d.ts.map +1 -0
  310. package/dist/{stage → two-d/stage}/DialogueStage.js +1 -1
  311. package/dist/two-d/stage/DialogueStage.js.map +1 -0
  312. package/dist/two-d/stage/index.d.ts.map +1 -0
  313. package/dist/two-d/stage/index.js.map +1 -0
  314. package/dist/two-d/stage/script.d.ts.map +1 -0
  315. package/dist/{stage → two-d/stage}/script.js +0 -0
  316. package/dist/two-d/stage/script.js.map +1 -0
  317. package/dist/two-d/stage/twee.d.ts.map +1 -0
  318. package/dist/two-d/stage/twee.js.map +1 -0
  319. package/dist/two-d/ui/Bar.d.ts.map +1 -0
  320. package/dist/two-d/ui/Bar.js.map +1 -0
  321. package/dist/two-d/ui/BitmapLabel.d.ts.map +1 -0
  322. package/dist/two-d/ui/BitmapLabel.js.map +1 -0
  323. package/dist/{ui → two-d/ui}/Button.d.ts +25 -2
  324. package/dist/two-d/ui/Button.d.ts.map +1 -0
  325. package/dist/{ui → two-d/ui}/Button.js +35 -9
  326. package/dist/two-d/ui/Button.js.map +1 -0
  327. package/dist/two-d/ui/EventDialogue.d.ts +23 -0
  328. package/dist/two-d/ui/EventDialogue.d.ts.map +1 -0
  329. package/dist/two-d/ui/EventDialogue.js +27 -0
  330. package/dist/two-d/ui/EventDialogue.js.map +1 -0
  331. package/dist/two-d/ui/FloatingText.d.ts.map +1 -0
  332. package/dist/two-d/ui/FloatingText.js.map +1 -0
  333. package/dist/{ui → two-d/ui}/HelpScreen.d.ts +1 -1
  334. package/dist/two-d/ui/HelpScreen.d.ts.map +1 -0
  335. package/dist/two-d/ui/HelpScreen.js.map +1 -0
  336. package/dist/{ui → two-d/ui}/IconGrid.d.ts +1 -1
  337. package/dist/two-d/ui/IconGrid.d.ts.map +1 -0
  338. package/dist/two-d/ui/IconGrid.js.map +1 -0
  339. package/dist/{ui → two-d/ui}/Label.d.ts +8 -0
  340. package/dist/two-d/ui/Label.d.ts.map +1 -0
  341. package/dist/{ui → two-d/ui}/Label.js +3 -0
  342. package/dist/two-d/ui/Label.js.map +1 -0
  343. package/dist/{ui → two-d/ui}/ListView.d.ts +1 -1
  344. package/dist/two-d/ui/ListView.d.ts.map +1 -0
  345. package/dist/two-d/ui/ListView.js.map +1 -0
  346. package/dist/{ui → two-d/ui}/LoadingScreen.d.ts +1 -1
  347. package/dist/two-d/ui/LoadingScreen.d.ts.map +1 -0
  348. package/dist/two-d/ui/LoadingScreen.js.map +1 -0
  349. package/dist/{ui → two-d/ui}/MessageBox.d.ts +1 -1
  350. package/dist/two-d/ui/MessageBox.d.ts.map +1 -0
  351. package/dist/two-d/ui/MessageBox.js.map +1 -0
  352. package/dist/two-d/ui/NinePatch.d.ts.map +1 -0
  353. package/dist/two-d/ui/NinePatch.js.map +1 -0
  354. package/dist/{ui → two-d/ui}/RebindScreen.d.ts +1 -1
  355. package/dist/two-d/ui/RebindScreen.d.ts.map +1 -0
  356. package/dist/{ui → two-d/ui}/RebindScreen.js +1 -1
  357. package/dist/two-d/ui/RebindScreen.js.map +1 -0
  358. package/dist/two-d/ui/StatsScreen.d.ts +25 -0
  359. package/dist/two-d/ui/StatsScreen.d.ts.map +1 -0
  360. package/dist/two-d/ui/StatsScreen.js +27 -0
  361. package/dist/two-d/ui/StatsScreen.js.map +1 -0
  362. package/dist/two-d/ui/Toast.d.ts.map +1 -0
  363. package/dist/{ui → two-d/ui}/Toast.js +1 -1
  364. package/dist/two-d/ui/Toast.js.map +1 -0
  365. package/dist/two-d/ui/Tooltip.d.ts +94 -0
  366. package/dist/two-d/ui/Tooltip.d.ts.map +1 -0
  367. package/dist/two-d/ui/Tooltip.js +149 -0
  368. package/dist/two-d/ui/Tooltip.js.map +1 -0
  369. package/dist/two-d/ui/VerticalLabel.d.ts.map +1 -0
  370. package/dist/two-d/ui/VerticalLabel.js.map +1 -0
  371. package/dist/{ui → two-d/ui}/Window.d.ts +2 -2
  372. package/dist/two-d/ui/Window.d.ts.map +1 -0
  373. package/dist/{ui → two-d/ui}/Window.js +1 -1
  374. package/dist/two-d/ui/Window.js.map +1 -0
  375. package/dist/two-d/ui/WindowStack.d.ts.map +1 -0
  376. package/dist/{ui → two-d/ui}/WindowStack.js +1 -1
  377. package/dist/two-d/ui/WindowStack.js.map +1 -0
  378. package/dist/{ui → two-d/ui}/index.d.ts +7 -1
  379. package/dist/two-d/ui/index.d.ts.map +1 -0
  380. package/dist/{ui → two-d/ui}/index.js +3 -0
  381. package/dist/two-d/ui/index.js.map +1 -0
  382. package/dist/{ui → two-d/ui}/theme.d.ts +2 -2
  383. package/dist/two-d/ui/theme.d.ts.map +1 -0
  384. package/dist/{ui → two-d/ui}/theme.js +1 -1
  385. package/dist/two-d/ui/theme.js.map +1 -0
  386. package/dist/version.d.ts +1 -1
  387. package/dist/version.js +1 -1
  388. package/dist/world/Encounters.js +1 -1
  389. package/dist/world/Encounters.js.map +1 -1
  390. package/dist/world/Environment.d.ts +12 -3
  391. package/dist/world/Environment.d.ts.map +1 -1
  392. package/dist/world/Environment.js +18 -9
  393. package/dist/world/Environment.js.map +1 -1
  394. package/package.json +138 -23
  395. package/dist/core/Game.d.ts.map +0 -1
  396. package/dist/core/Game.js.map +0 -1
  397. package/dist/render/ActorAnimator.d.ts.map +0 -1
  398. package/dist/render/ActorAnimator.js.map +0 -1
  399. package/dist/render/AnimatedSprite.d.ts.map +0 -1
  400. package/dist/render/AnimatedSprite.js.map +0 -1
  401. package/dist/render/Autotile.d.ts.map +0 -1
  402. package/dist/render/Autotile.js.map +0 -1
  403. package/dist/render/Camera.d.ts.map +0 -1
  404. package/dist/render/Camera.js.map +0 -1
  405. package/dist/render/Capabilities.d.ts.map +0 -1
  406. package/dist/render/Capabilities.js.map +0 -1
  407. package/dist/render/ColorBlindness.d.ts.map +0 -1
  408. package/dist/render/ColorBlindness.js.map +0 -1
  409. package/dist/render/ColorTransformBatcher.d.ts.map +0 -1
  410. package/dist/render/ColorTransformBatcher.js.map +0 -1
  411. package/dist/render/LayeredSprite.d.ts.map +0 -1
  412. package/dist/render/LayeredSprite.js.map +0 -1
  413. package/dist/render/Minimap.d.ts.map +0 -1
  414. package/dist/render/Minimap.js.map +0 -1
  415. package/dist/render/Projectile.d.ts.map +0 -1
  416. package/dist/render/Projectile.js.map +0 -1
  417. package/dist/render/SpriteSheet.d.ts.map +0 -1
  418. package/dist/render/SpriteSheet.js.map +0 -1
  419. package/dist/render/TileMap.d.ts.map +0 -1
  420. package/dist/render/TileMap.js.map +0 -1
  421. package/dist/render/TintedSprite.d.ts.map +0 -1
  422. package/dist/render/TintedSprite.js.map +0 -1
  423. package/dist/render/Viewport.d.ts.map +0 -1
  424. package/dist/render/Viewport.js.map +0 -1
  425. package/dist/render/index.d.ts.map +0 -1
  426. package/dist/render/index.js.map +0 -1
  427. package/dist/rpg/TiledMap.d.ts.map +0 -1
  428. package/dist/rpg/TiledMap.js.map +0 -1
  429. package/dist/stage/DialogueStage.d.ts.map +0 -1
  430. package/dist/stage/DialogueStage.js.map +0 -1
  431. package/dist/stage/index.d.ts.map +0 -1
  432. package/dist/stage/index.js.map +0 -1
  433. package/dist/stage/script.d.ts.map +0 -1
  434. package/dist/stage/script.js.map +0 -1
  435. package/dist/stage/twee.d.ts.map +0 -1
  436. package/dist/stage/twee.js.map +0 -1
  437. package/dist/ui/Bar.d.ts.map +0 -1
  438. package/dist/ui/Bar.js.map +0 -1
  439. package/dist/ui/BitmapLabel.d.ts.map +0 -1
  440. package/dist/ui/BitmapLabel.js.map +0 -1
  441. package/dist/ui/Button.d.ts.map +0 -1
  442. package/dist/ui/Button.js.map +0 -1
  443. package/dist/ui/FloatingText.d.ts.map +0 -1
  444. package/dist/ui/FloatingText.js.map +0 -1
  445. package/dist/ui/HelpScreen.d.ts.map +0 -1
  446. package/dist/ui/HelpScreen.js.map +0 -1
  447. package/dist/ui/IconGrid.d.ts.map +0 -1
  448. package/dist/ui/IconGrid.js.map +0 -1
  449. package/dist/ui/Label.d.ts.map +0 -1
  450. package/dist/ui/Label.js.map +0 -1
  451. package/dist/ui/ListView.d.ts.map +0 -1
  452. package/dist/ui/ListView.js.map +0 -1
  453. package/dist/ui/LoadingScreen.d.ts.map +0 -1
  454. package/dist/ui/LoadingScreen.js.map +0 -1
  455. package/dist/ui/MessageBox.d.ts.map +0 -1
  456. package/dist/ui/MessageBox.js.map +0 -1
  457. package/dist/ui/NinePatch.d.ts.map +0 -1
  458. package/dist/ui/NinePatch.js.map +0 -1
  459. package/dist/ui/RebindScreen.d.ts.map +0 -1
  460. package/dist/ui/RebindScreen.js.map +0 -1
  461. package/dist/ui/Toast.d.ts.map +0 -1
  462. package/dist/ui/Toast.js.map +0 -1
  463. package/dist/ui/VerticalLabel.d.ts.map +0 -1
  464. package/dist/ui/VerticalLabel.js.map +0 -1
  465. package/dist/ui/Window.d.ts.map +0 -1
  466. package/dist/ui/Window.js.map +0 -1
  467. package/dist/ui/WindowStack.d.ts.map +0 -1
  468. package/dist/ui/WindowStack.js.map +0 -1
  469. package/dist/ui/index.d.ts.map +0 -1
  470. package/dist/ui/index.js.map +0 -1
  471. package/dist/ui/theme.d.ts.map +0 -1
  472. package/dist/ui/theme.js.map +0 -1
  473. /package/dist/{render → two-d/render}/ActorAnimator.d.ts +0 -0
  474. /package/dist/{render → two-d/render}/ActorAnimator.js +0 -0
  475. /package/dist/{render → two-d/render}/AnimatedSprite.d.ts +0 -0
  476. /package/dist/{render → two-d/render}/AnimatedSprite.js +0 -0
  477. /package/dist/{render → two-d/render}/Autotile.d.ts +0 -0
  478. /package/dist/{render → two-d/render}/Autotile.js +0 -0
  479. /package/dist/{render → two-d/render}/Camera.d.ts +0 -0
  480. /package/dist/{render → two-d/render}/Capabilities.d.ts +0 -0
  481. /package/dist/{render → two-d/render}/Capabilities.js +0 -0
  482. /package/dist/{render → two-d/render}/ColorBlindness.d.ts +0 -0
  483. /package/dist/{render → two-d/render}/ColorBlindness.js +0 -0
  484. /package/dist/{render → two-d/render}/ColorTransformBatcher.d.ts +0 -0
  485. /package/dist/{render → two-d/render}/LayeredSprite.d.ts +0 -0
  486. /package/dist/{render → two-d/render}/LayeredSprite.js +0 -0
  487. /package/dist/{render → two-d/render}/Minimap.d.ts +0 -0
  488. /package/dist/{render → two-d/render}/Projectile.d.ts +0 -0
  489. /package/dist/{render → two-d/render}/Projectile.js +0 -0
  490. /package/dist/{render → two-d/render}/SpriteSheet.d.ts +0 -0
  491. /package/dist/{render → two-d/render}/TileMap.d.ts +0 -0
  492. /package/dist/{render → two-d/render}/TintedSprite.d.ts +0 -0
  493. /package/dist/{render → two-d/render}/TintedSprite.js +0 -0
  494. /package/dist/{render → two-d/render}/Viewport.d.ts +0 -0
  495. /package/dist/{render → two-d/render}/Viewport.js +0 -0
  496. /package/dist/{stage → two-d/stage}/DialogueStage.d.ts +0 -0
  497. /package/dist/{stage → two-d/stage}/index.d.ts +0 -0
  498. /package/dist/{stage → two-d/stage}/index.js +0 -0
  499. /package/dist/{stage → two-d/stage}/script.d.ts +0 -0
  500. /package/dist/{stage → two-d/stage}/twee.d.ts +0 -0
  501. /package/dist/{stage → two-d/stage}/twee.js +0 -0
  502. /package/dist/{ui → two-d/ui}/Bar.d.ts +0 -0
  503. /package/dist/{ui → two-d/ui}/Bar.js +0 -0
  504. /package/dist/{ui → two-d/ui}/BitmapLabel.d.ts +0 -0
  505. /package/dist/{ui → two-d/ui}/BitmapLabel.js +0 -0
  506. /package/dist/{ui → two-d/ui}/FloatingText.d.ts +0 -0
  507. /package/dist/{ui → two-d/ui}/FloatingText.js +0 -0
  508. /package/dist/{ui → two-d/ui}/HelpScreen.js +0 -0
  509. /package/dist/{ui → two-d/ui}/IconGrid.js +0 -0
  510. /package/dist/{ui → two-d/ui}/ListView.js +0 -0
  511. /package/dist/{ui → two-d/ui}/LoadingScreen.js +0 -0
  512. /package/dist/{ui → two-d/ui}/MessageBox.js +0 -0
  513. /package/dist/{ui → two-d/ui}/NinePatch.d.ts +0 -0
  514. /package/dist/{ui → two-d/ui}/NinePatch.js +0 -0
  515. /package/dist/{ui → two-d/ui}/Toast.d.ts +0 -0
  516. /package/dist/{ui → two-d/ui}/VerticalLabel.d.ts +0 -0
  517. /package/dist/{ui → two-d/ui}/VerticalLabel.js +0 -0
  518. /package/dist/{ui → two-d/ui}/WindowStack.d.ts +0 -0
@@ -1,26 +1,29 @@
1
+ import { HttpTransport, type HttpTransportOptions } from './HttpTransport.ts';
1
2
  /**
2
- * Uploads/downloads one `SaveSystem.exportSlot` payload to a game's own HTTPS endpoint - the
3
+ * Uploads/downloads `SaveSystem.exportSlot` payloads to a game's own HTTPS endpoint - the
3
4
  * server half of item 124's save export/import, following `FeedbackClient`'s own shape
4
5
  * (an injectable transport a game points at its own endpoint) rather than a second pattern:
5
6
  * `mwg` ships no backend and assumes none here either.
7
+ *
8
+ * Every call names a `slot`, the same name `SaveSystem.exportSlot`/`importSlot` already use
9
+ * locally, so a player with several named profiles (`SaveSystem` supports as many as a game
10
+ * creates) can sync each independently against one endpoint rather than the endpoint holding
11
+ * only ever one save. `list()` is the seam a profile picker reads before choosing which slot
12
+ * to `download`.
6
13
  */
7
- export interface SaveSyncOptions {
8
- endpoint: string;
9
- timeoutMs?: number;
10
- fetch?: typeof globalThis.fetch;
11
- }
14
+ export type SaveSyncOptions = HttpTransportOptions;
12
15
  export interface SaveSyncResponse {
13
16
  ok: boolean;
14
17
  status: number;
15
18
  }
16
- export declare class SaveSyncClient {
17
- private readonly endpoint;
18
- private readonly timeoutMs;
19
- private readonly fetchFn;
19
+ export declare class SaveSyncClient extends HttpTransport {
20
20
  constructor(options: SaveSyncOptions);
21
- /** sends an `exportSlot` payload to the endpoint, replacing whatever it held before */
22
- upload(payload: string): Promise<SaveSyncResponse>;
23
- /** fetches whatever payload the endpoint currently holds, ready for `SaveSystem.importSlot` */
24
- download(): Promise<string>;
21
+ /** sends an `exportSlot` payload for `slot` to the endpoint, replacing whatever it held before */
22
+ upload(slot: string, payload: string): Promise<SaveSyncResponse>;
23
+ /** fetches whatever payload the endpoint currently holds for `slot`, ready for `SaveSystem.importSlot` */
24
+ download(slot: string): Promise<string>;
25
+ /** every slot name this endpoint currently holds for this player, for a profile picker to list */
26
+ list(): Promise<string[]>;
27
+ private slotUrl;
25
28
  }
26
29
  //# sourceMappingURL=SaveSync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SaveSync.d.ts","sourceRoot":"","sources":["../../src/core/SaveSync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,YAAY,OAAO,EAAE,eAAe,EAOnC;IAED,uFAAuF;IACjF,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBvD;IAED,+FAA+F;IACzF,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAYhC;CACD"}
1
+ {"version":3,"file":"SaveSync.d.ts","sourceRoot":"","sources":["../../src/core/SaveSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAe,SAAQ,aAAa;IAChD,YAAY,OAAO,EAAE,eAAe,EAEnC;IAED,kGAAkG;IAC5F,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAarE;IAED,0GAA0G;IACpG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS5C;IAED,kGAAkG;IAC5F,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAU9B;IAED,OAAO,CAAC,OAAO;CAIf"}
@@ -1,52 +1,56 @@
1
- export class SaveSyncClient {
1
+ import { HttpTransport } from './HttpTransport.js';
2
+ export class SaveSyncClient extends HttpTransport {
2
3
  constructor(options) {
3
- if (!options.endpoint)
4
- throw new Error('save sync endpoint is required');
5
- this.endpoint = options.endpoint;
6
- this.timeoutMs = options.timeoutMs ?? 10000;
7
- if (!(this.timeoutMs > 0))
8
- throw new Error('save sync timeout must be positive');
9
- this.fetchFn = options.fetch ?? globalThis.fetch;
10
- if (!this.fetchFn)
11
- throw new Error('fetch is unavailable; provide SaveSyncOptions.fetch');
4
+ super(options, 'save sync');
12
5
  }
13
- /** sends an `exportSlot` payload to the endpoint, replacing whatever it held before */
14
- async upload(payload) {
6
+ /** sends an `exportSlot` payload for `slot` to the endpoint, replacing whatever it held before */
7
+ async upload(slot, payload) {
8
+ if (!slot)
9
+ throw new Error('save sync slot name is required');
15
10
  if (!payload)
16
11
  throw new Error('save sync payload cannot be empty');
17
- const controller = new AbortController();
18
- const timer = setTimeout(() => controller.abort(), this.timeoutMs);
19
- try {
20
- const response = await this.fetchFn(this.endpoint, {
12
+ return this.withTimeout(async (signal) => {
13
+ const response = await this.fetchFn(this.slotUrl(slot), {
21
14
  method: 'POST',
22
15
  headers: { 'content-type': 'application/json' },
23
16
  body: JSON.stringify({ payload }),
24
- signal: controller.signal,
17
+ signal,
25
18
  });
26
19
  if (!response.ok)
27
20
  throw new Error(`save upload failed with HTTP ${response.status}`);
28
21
  return { ok: true, status: response.status };
29
- }
30
- finally {
31
- clearTimeout(timer);
32
- }
22
+ });
33
23
  }
34
- /** fetches whatever payload the endpoint currently holds, ready for `SaveSystem.importSlot` */
35
- async download() {
36
- const controller = new AbortController();
37
- const timer = setTimeout(() => controller.abort(), this.timeoutMs);
38
- try {
39
- const response = await this.fetchFn(this.endpoint, { signal: controller.signal });
24
+ /** fetches whatever payload the endpoint currently holds for `slot`, ready for `SaveSystem.importSlot` */
25
+ async download(slot) {
26
+ if (!slot)
27
+ throw new Error('save sync slot name is required');
28
+ return this.withTimeout(async (signal) => {
29
+ const response = await this.fetchFn(this.slotUrl(slot), { signal });
40
30
  if (!response.ok)
41
31
  throw new Error(`save download failed with HTTP ${response.status}`);
42
32
  const data = (await response.json());
43
33
  if (typeof data.payload !== 'string')
44
34
  throw new Error('save download response missing a string payload');
45
35
  return data.payload;
46
- }
47
- finally {
48
- clearTimeout(timer);
49
- }
36
+ });
37
+ }
38
+ /** every slot name this endpoint currently holds for this player, for a profile picker to list */
39
+ async list() {
40
+ return this.withTimeout(async (signal) => {
41
+ const response = await this.fetchFn(this.endpoint, { signal });
42
+ if (!response.ok)
43
+ throw new Error(`save slot list failed with HTTP ${response.status}`);
44
+ const data = (await response.json());
45
+ if (!Array.isArray(data.slots) || !data.slots.every((slot) => typeof slot === 'string')) {
46
+ throw new Error('save slot list response missing a string array of slots');
47
+ }
48
+ return data.slots;
49
+ });
50
+ }
51
+ slotUrl(slot) {
52
+ const separator = this.endpoint.includes('?') ? '&' : '?';
53
+ return `${this.endpoint}${separator}slot=${encodeURIComponent(slot)}`;
50
54
  }
51
55
  }
52
56
  //# sourceMappingURL=SaveSync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SaveSync.js","sourceRoot":"","sources":["../../src/core/SaveSync.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,cAAc;IAK1B,YAAY,OAAwB;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC3F,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,MAAM,CAAC,OAAe;QAC3B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;gBACjC,MAAM,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACrF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,QAAQ;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;YAC9D,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzG,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"SaveSync.js","sourceRoot":"","sources":["../../src/core/SaveSync.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
- import { Container } from 'pixi.js';
2
1
  import { Signal } from './Signal.ts';
3
2
  /**
4
3
  * One screen of the game: a title, a menu, the dungeon itself.
5
4
  *
6
- * A scene owns a Pixi container and everything in it. Switching scenes destroys the old
7
- * one, so a scene may hold whatever state it likes without cleaning up by hand.
5
+ * This is the lifecycle half only, and owns no renderer: `create`, `update`, `resize`, the
6
+ * suspend/resume pair a pushed scene needs, and a destroy that fires once. `two-d.Scene2D`
7
+ * adds the Pixi container a 2D game draws into; a Babylon game supplies its own equivalent.
8
+ * The split exists so `SceneStack` - which never touches a display node, only these methods -
9
+ * works for either, rather than scene management being something only a Pixi game gets.
10
+ *
11
+ * Switching scenes destroys the old one, so a scene may hold whatever state it likes without
12
+ * cleaning up by hand.
8
13
  */
9
14
  export declare abstract class Scene {
10
- /** everything this scene draws hangs off here */
11
- readonly stage: Container<import("pixi.js").ContainerChild>;
12
15
  /** fires when the scene is torn down, for listeners that need to detach */
13
16
  readonly onDestroy: Signal<void>;
14
17
  private destroyed;
@@ -34,7 +37,14 @@ export declare abstract class Scene {
34
37
  */
35
38
  onResume(_result: unknown): void;
36
39
  destroy(): void;
40
+ /**
41
+ * Renderer-owned resources this scene holds, released exactly once as it is destroyed.
42
+ *
43
+ * The base owns none, because it owns no renderer; `two-d.Scene2D` destroys its container
44
+ * here. A subclass overriding it does not need to call `super.teardown()`.
45
+ */
46
+ protected teardown(): void;
37
47
  get isDestroyed(): boolean;
38
48
  }
39
- export type SceneClass = new () => Scene;
49
+ export type SceneClass<T extends Scene = Scene> = new () => T;
40
50
  //# sourceMappingURL=Scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../src/core/Scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;GAKG;AACH,8BAAsB,KAAK;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,8CAAmB;IAEjC,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,eAAsB;IAExC,OAAO,CAAC,SAAS,CAAS;IAE1B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;IAExB,kEAAkE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5C;IAED;;;;;;OAMG;IACH,SAAS,IAAI,IAAI,CAEhB;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE/B;IAED,OAAO,IAAI,IAAI,CAOd;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;CACD;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,KAAK,CAAC"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../src/core/Scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,8BAAsB,KAAK;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,eAAsB;IAExC,OAAO,CAAC,SAAS,CAAS;IAE1B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;IAExB,kEAAkE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5C;IAED;;;;;;OAMG;IACH,SAAS,IAAI,IAAI,CAEhB;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE/B;IAED,OAAO,IAAI,IAAI,CAOd;IAED;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,IAAI,IAAI,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;CACD;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC"}
@@ -1,15 +1,18 @@
1
- import { Container } from 'pixi.js';
2
1
  import { Signal } from './Signal.js';
3
2
  /**
4
3
  * One screen of the game: a title, a menu, the dungeon itself.
5
4
  *
6
- * A scene owns a Pixi container and everything in it. Switching scenes destroys the old
7
- * one, so a scene may hold whatever state it likes without cleaning up by hand.
5
+ * This is the lifecycle half only, and owns no renderer: `create`, `update`, `resize`, the
6
+ * suspend/resume pair a pushed scene needs, and a destroy that fires once. `two-d.Scene2D`
7
+ * adds the Pixi container a 2D game draws into; a Babylon game supplies its own equivalent.
8
+ * The split exists so `SceneStack` - which never touches a display node, only these methods -
9
+ * works for either, rather than scene management being something only a Pixi game gets.
10
+ *
11
+ * Switching scenes destroys the old one, so a scene may hold whatever state it likes without
12
+ * cleaning up by hand.
8
13
  */
9
14
  export class Scene {
10
15
  constructor() {
11
- /** everything this scene draws hangs off here */
12
- this.stage = new Container();
13
16
  /** fires when the scene is torn down, for listeners that need to detach */
14
17
  this.onDestroy = new Signal();
15
18
  this.destroyed = false;
@@ -47,7 +50,16 @@ export class Scene {
47
50
  this.destroyed = true;
48
51
  this.onDestroy.dispatch();
49
52
  this.onDestroy.removeAll();
50
- this.stage.destroy({ children: true });
53
+ this.teardown();
54
+ }
55
+ /**
56
+ * Renderer-owned resources this scene holds, released exactly once as it is destroyed.
57
+ *
58
+ * The base owns none, because it owns no renderer; `two-d.Scene2D` destroys its container
59
+ * here. A subclass overriding it does not need to call `super.teardown()`.
60
+ */
61
+ teardown() {
62
+ //nothing renderer-shaped at this level
51
63
  }
52
64
  get isDestroyed() {
53
65
  return this.destroyed;
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.js","sourceRoot":"","sources":["../../src/core/Scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;GAKG;AACH,MAAM,OAAgB,KAAK;IAA3B;QACC,iDAAiD;QACxC,UAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAEjC,2EAA2E;QAClE,cAAS,GAAG,IAAI,MAAM,EAAQ,CAAC;QAEhC,cAAS,GAAG,KAAK,CAAC;IAgD3B,CAAC;IA3CA,kEAAkE;IAClE,MAAM,CAAC,GAAW;QACjB,wDAAwD;IACzD,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAc,EAAE,OAAe;QACrC,yDAAyD;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACR,kDAAkD;IACnD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAgB;QACxB,uDAAuD;IACxD,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;CACD"}
1
+ {"version":3,"file":"Scene.js","sourceRoot":"","sources":["../../src/core/Scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,KAAK;IAA3B;QACC,2EAA2E;QAClE,cAAS,GAAG,IAAI,MAAM,EAAQ,CAAC;QAEhC,cAAS,GAAG,KAAK,CAAC;IA0D3B,CAAC;IArDA,kEAAkE;IAClE,MAAM,CAAC,GAAW;QACjB,wDAAwD;IACzD,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAc,EAAE,OAAe;QACrC,yDAAyD;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACR,kDAAkD;IACnD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAgB;QACxB,uDAAuD;IACxD,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACO,QAAQ;QACjB,uCAAuC;IACxC,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;CACD"}
@@ -2,6 +2,10 @@ import type { Scene } from './Scene.ts';
2
2
  /**
3
3
  * The stack of scenes a `Game` runs: exactly one updates, all render.
4
4
  *
5
+ * Generic over the scene type, and typed against `core.Scene`'s lifecycle rather than any
6
+ * display node, so a Pixi game uses `SceneStack<Scene2D>` and a Babylon game its own - this
7
+ * class only ever calls `create`, `destroy`, `resize`, `update`, `onSuspend` and `onResume`.
8
+ *
5
9
  * `switchScene` replaces the whole stack, for moving between screens.
6
10
  * `pushScene` suspends the current scene and starts another on top of it - a
7
11
  * minigame over the dungeon, a pause menu over play - and `popScene` destroys
@@ -12,15 +16,15 @@ import type { Scene } from './Scene.ts';
12
16
  * Takes instances, never classes: constructing scenes is the `Game`'s job, and
13
17
  * keeping it out is what keeps this testable without a browser.
14
18
  */
15
- export declare class SceneStack {
19
+ export declare class SceneStack<T extends Scene = Scene> {
16
20
  private scenes;
17
21
  /** the scene that updates, or null when the stack is empty */
18
- get current(): Scene | null;
22
+ get current(): T | null;
19
23
  get depth(): number;
20
24
  /** replaces everything with one scene, destroying what was there */
21
- replace(scene: Scene): void;
25
+ replace(scene: T): void;
22
26
  /** suspends the current scene and starts another above it */
23
- push(scene: Scene): void;
27
+ push(scene: T): void;
24
28
  /**
25
29
  * Destroys the top scene and resumes the one below with `result`.
26
30
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SceneStack.d.ts","sourceRoot":"","sources":["../../src/core/SceneStack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,MAAM,CAAe;IAE7B,8DAA8D;IAC9D,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI,CAE1B;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,oEAAoE;IACpE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAI1B;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAIvB;IAED;;;;;OAKG;IACH,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAO1B;IAED,kEAAkE;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEvB;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1C;IAED,OAAO,IAAI,IAAI,CAGd;CACD"}
1
+ {"version":3,"file":"SceneStack.d.ts","sourceRoot":"","sources":["../../src/core/SceneStack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC9C,OAAO,CAAC,MAAM,CAAW;IAEzB,8DAA8D;IAC9D,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,oEAAoE;IACpE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAItB;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAInB;IAED;;;;;OAKG;IACH,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAO1B;IAED,kEAAkE;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEvB;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1C;IAED,OAAO,IAAI,IAAI,CAGd;CACD"}
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * The stack of scenes a `Game` runs: exactly one updates, all render.
3
3
  *
4
+ * Generic over the scene type, and typed against `core.Scene`'s lifecycle rather than any
5
+ * display node, so a Pixi game uses `SceneStack<Scene2D>` and a Babylon game its own - this
6
+ * class only ever calls `create`, `destroy`, `resize`, `update`, `onSuspend` and `onResume`.
7
+ *
4
8
  * `switchScene` replaces the whole stack, for moving between screens.
5
9
  * `pushScene` suspends the current scene and starts another on top of it - a
6
10
  * minigame over the dungeon, a pause menu over play - and `popScene` destroys
@@ -1 +1 @@
1
- {"version":3,"file":"SceneStack.js","sourceRoot":"","sources":["../../src/core/SceneStack.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,UAAU;IAAvB;QACS,WAAM,GAAY,EAAE,CAAC;IAsD9B,CAAC;IApDA,8DAA8D;IAC9D,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,oEAAoE;IACpE,OAAO,CAAC,KAAY;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,KAAK,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAY;QAChB,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,MAAgB;QACnB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9B,GAAG,EAAE,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,EAAU;QAChB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAa,EAAE,MAAc;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,CAAC;CACD"}
1
+ {"version":3,"file":"SceneStack.js","sourceRoot":"","sources":["../../src/core/SceneStack.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,UAAU;IAAvB;QACS,WAAM,GAAQ,EAAE,CAAC;IAsD1B,CAAC;IApDA,8DAA8D;IAC9D,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,oEAAoE;IACpE,OAAO,CAAC,KAAQ;QACf,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,KAAK,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAQ;QACZ,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,MAAgB;QACnB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9B,GAAG,EAAE,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,EAAU;QAChB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAa,EAAE,MAAc;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,CAAC;CACD"}
@@ -0,0 +1,33 @@
1
+ import { type SaveStorage } from './Save.ts';
2
+ export interface PlayerStatsOptions<T, S = T> {
3
+ /** namespaces the stored total, so two games sharing an origin never collide */
4
+ namespace: string;
5
+ storage?: SaveStorage;
6
+ /** the total before anything has ever been recorded */
7
+ initial: T;
8
+ /** folds one run's own summary into the running total */
9
+ combine: (total: T, summary: S) => T;
10
+ }
11
+ /**
12
+ * A lifetime running total, folded in one run at a time - distinct from `RunHistory`, which
13
+ * keeps individual runs and may drop the oldest ones once its own `limit` is reached.
14
+ * Deriving a lifetime total by reducing over `RunHistory.all()` would silently undercount the
15
+ * moment that limit trims anything, so this keeps its own persisted total instead, updated
16
+ * incrementally by `record` and never recomputed from a list that can shrink. A game wanting
17
+ * both a "last 50 runs" list and a true lifetime total uses both classes side by side, each
18
+ * for the question it actually answers.
19
+ */
20
+ export declare class PlayerStats<T, S = T> {
21
+ private readonly storage;
22
+ private readonly key;
23
+ private readonly initial;
24
+ private readonly combine;
25
+ constructor(options: PlayerStatsOptions<T, S>);
26
+ /** the current lifetime total, `initial` if nothing has been recorded yet */
27
+ get(): T;
28
+ /** folds `summary` into the running total and persists it, returning the new total */
29
+ record(summary: S): T;
30
+ /** back to `initial`, as a new save file or a "reset stats" option should */
31
+ reset(): void;
32
+ }
33
+ //# sourceMappingURL=Stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stats.d.ts","sourceRoot":"","sources":["../../src/core/Stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7D,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IAC3C,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,uDAAuD;IACvD,OAAO,EAAE,CAAC,CAAC;IACX,yDAAyD;IACzD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAI;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IAEtD,YAAY,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAK5C;IAED,6EAA6E;IAC7E,GAAG,IAAI,CAAC,CAGP;IAED,sFAAsF;IACtF,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAIpB;IAED,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAEZ;CACD"}
@@ -0,0 +1,34 @@
1
+ import { defaultStorage } from './Save.js';
2
+ /**
3
+ * A lifetime running total, folded in one run at a time - distinct from `RunHistory`, which
4
+ * keeps individual runs and may drop the oldest ones once its own `limit` is reached.
5
+ * Deriving a lifetime total by reducing over `RunHistory.all()` would silently undercount the
6
+ * moment that limit trims anything, so this keeps its own persisted total instead, updated
7
+ * incrementally by `record` and never recomputed from a list that can shrink. A game wanting
8
+ * both a "last 50 runs" list and a true lifetime total uses both classes side by side, each
9
+ * for the question it actually answers.
10
+ */
11
+ export class PlayerStats {
12
+ constructor(options) {
13
+ this.storage = options.storage ?? defaultStorage();
14
+ this.key = `mwg-stats:${options.namespace}`;
15
+ this.initial = options.initial;
16
+ this.combine = options.combine;
17
+ }
18
+ /** the current lifetime total, `initial` if nothing has been recorded yet */
19
+ get() {
20
+ const raw = this.storage.read(this.key);
21
+ return raw ? JSON.parse(raw) : this.initial;
22
+ }
23
+ /** folds `summary` into the running total and persists it, returning the new total */
24
+ record(summary) {
25
+ const next = this.combine(this.get(), summary);
26
+ this.storage.write(this.key, JSON.stringify(next));
27
+ return next;
28
+ }
29
+ /** back to `initial`, as a new save file or a "reset stats" option should */
30
+ reset() {
31
+ this.storage.remove(this.key);
32
+ }
33
+ }
34
+ //# sourceMappingURL=Stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/core/Stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoB,MAAM,WAAW,CAAC;AAY7D;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IAMvB,YAAY,OAAiC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG,aAAa,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,GAAG;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACpD,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,OAAU;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,6EAA6E;IAC7E,KAAK;QACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACD"}
@@ -0,0 +1,34 @@
1
+ import { HttpTransport, type HttpTransportOptions } from './HttpTransport.ts';
2
+ export interface TelemetryEvent {
3
+ name: string;
4
+ properties?: Record<string, string | number | boolean | null>;
5
+ }
6
+ export type TelemetryOptions = HttpTransportOptions;
7
+ export interface TelemetryResponse {
8
+ ok: boolean;
9
+ status: number;
10
+ }
11
+ /**
12
+ * An injectable transport for automatic, structured analytics events - `FeedbackClient`'s own
13
+ * shape, for a different question. `FeedbackClient` is a player choosing to write something
14
+ * and send it; this is a game deciding on its own to send something, which needs its own
15
+ * consent gate before anything ever leaves the machine, unlike a player action that already
16
+ * consents to sending just by happening. `send` is a silent no-op, not an error, until
17
+ * `setConsent(true)` has been called - automatic collection defaults off.
18
+ *
19
+ * `mwg` stays opinion-free on what an event actually contains, what "consent" means for a
20
+ * given game (a settings toggle, a first-launch prompt, a platform-level flag), and where the
21
+ * endpoint lives - the same boundary `FeedbackClient`'s own doc comment draws for manual
22
+ * reports.
23
+ */
24
+ export declare class TelemetryClient extends HttpTransport {
25
+ private consented;
26
+ constructor(options: TelemetryOptions);
27
+ /** whether `send` will actually transmit anything right now */
28
+ get hasConsent(): boolean;
29
+ /** a game calls this from its own consent flow; not read from anywhere `mwg` controls */
30
+ setConsent(granted: boolean): void;
31
+ /** sends one structured event; a silent no-op before consent is granted, not an error */
32
+ send(event: TelemetryEvent): Promise<TelemetryResponse | null>;
33
+ }
34
+ //# sourceMappingURL=Telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telemetry.d.ts","sourceRoot":"","sources":["../../src/core/Telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IACjD,OAAO,CAAC,SAAS,CAAS;IAE1B,YAAY,OAAO,EAAE,gBAAgB,EAEpC;IAED,+DAA+D;IAC/D,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,yFAAyF;IACzF,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjC;IAED,yFAAyF;IACnF,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAcnE;CACD"}
@@ -0,0 +1,47 @@
1
+ import { HttpTransport } from './HttpTransport.js';
2
+ /**
3
+ * An injectable transport for automatic, structured analytics events - `FeedbackClient`'s own
4
+ * shape, for a different question. `FeedbackClient` is a player choosing to write something
5
+ * and send it; this is a game deciding on its own to send something, which needs its own
6
+ * consent gate before anything ever leaves the machine, unlike a player action that already
7
+ * consents to sending just by happening. `send` is a silent no-op, not an error, until
8
+ * `setConsent(true)` has been called - automatic collection defaults off.
9
+ *
10
+ * `mwg` stays opinion-free on what an event actually contains, what "consent" means for a
11
+ * given game (a settings toggle, a first-launch prompt, a platform-level flag), and where the
12
+ * endpoint lives - the same boundary `FeedbackClient`'s own doc comment draws for manual
13
+ * reports.
14
+ */
15
+ export class TelemetryClient extends HttpTransport {
16
+ constructor(options) {
17
+ super(options, 'telemetry');
18
+ this.consented = false;
19
+ }
20
+ /** whether `send` will actually transmit anything right now */
21
+ get hasConsent() {
22
+ return this.consented;
23
+ }
24
+ /** a game calls this from its own consent flow; not read from anywhere `mwg` controls */
25
+ setConsent(granted) {
26
+ this.consented = granted;
27
+ }
28
+ /** sends one structured event; a silent no-op before consent is granted, not an error */
29
+ async send(event) {
30
+ if (!event.name)
31
+ throw new Error('telemetry event needs a name');
32
+ if (!this.consented)
33
+ return null;
34
+ return this.withTimeout(async (signal) => {
35
+ const response = await this.fetchFn(this.endpoint, {
36
+ method: 'POST',
37
+ headers: { 'content-type': 'application/json' },
38
+ body: JSON.stringify(event),
39
+ signal,
40
+ });
41
+ if (!response.ok)
42
+ throw new Error(`telemetry request failed with HTTP ${response.status}`);
43
+ return { ok: true, status: response.status };
44
+ });
45
+ }
46
+ }
47
+ //# sourceMappingURL=Telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telemetry.js","sourceRoot":"","sources":["../../src/core/Telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAc9E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAGjD,YAAY,OAAyB;QACpC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAHrB,cAAS,GAAG,KAAK,CAAC;IAI1B,CAAC;IAED,+DAA+D;IAC/D,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,yFAAyF;IACzF,UAAU,CAAC,OAAgB;QAC1B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,IAAI,CAAC,KAAqB;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAEjC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC3B,MAAM;aACN,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
@@ -1,11 +1,11 @@
1
- export { Game } from './Game.ts';
2
- export type { GameOptions } from './Game.ts';
3
1
  export { Scene } from './Scene.ts';
4
2
  export type { SceneClass } from './Scene.ts';
5
3
  export { SceneStack } from './SceneStack.ts';
6
4
  export { Logger } from './Log.ts';
7
5
  export type { LogLevel, LogEntry, LoggerOptions } from './Log.ts';
8
6
  export { Signal } from './Signal.ts';
7
+ export { HookRegistry } from './Hooks.ts';
8
+ export type { Hook } from './Hooks.ts';
9
9
  export type { SignalListener } from './Signal.ts';
10
10
  export * as Random from './Random.ts';
11
11
  export * as Input from './Input.ts';
@@ -17,8 +17,14 @@ export type { SaveMeta, SaveData, SaveStorage, SaveSystemOptions } from './Save.
17
17
  export { scramble, unscramble } from './Scramble.ts';
18
18
  export { SaveSyncClient } from './SaveSync.ts';
19
19
  export type { SaveSyncOptions, SaveSyncResponse } from './SaveSync.ts';
20
+ export { LockstepClient } from './Multiplayer.ts';
21
+ export type { WebSocketLike, LockstepClientOptions, TickEvent } from './Multiplayer.ts';
20
22
  export { RunHistory } from './RunHistory.ts';
21
23
  export type { RunHistoryEntry, RunHistoryOptions } from './RunHistory.ts';
24
+ export { PlayerStats } from './Stats.ts';
25
+ export type { PlayerStatsOptions } from './Stats.ts';
26
+ export { TelemetryClient } from './Telemetry.ts';
27
+ export type { TelemetryEvent, TelemetryOptions, TelemetryResponse } from './Telemetry.ts';
22
28
  export { NewsClient, NewsSeenTracker } from './News.ts';
23
29
  export type { NewsItem, NewsOptions, NewsSeenOptions } from './News.ts';
24
30
  export { checkSize, checkNoControlCharacters, sanitizeInboundText, validateSchema } from './Sanitize.ts';
@@ -33,6 +39,7 @@ export { Session } from './Session.ts';
33
39
  export type { SessionOptions } from './Session.ts';
34
40
  export { FeedbackClient } from './Feedback.ts';
35
41
  export type { FeedbackOptions, FeedbackRequest, FeedbackResponse } from './Feedback.ts';
42
+ export type { HttpTransportOptions } from './HttpTransport.ts';
36
43
  export { Spawner } from './Spawner.ts';
37
44
  export type { Wave, SpawnerOptions } from './Spawner.ts';
38
45
  export { hexNeighbors, hexDistance, hexLine, hexRange, hexToPixel, pixelToHex } from './Hex.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- export { Game } from './Game.js';
2
1
  export { Scene } from './Scene.js';
3
2
  export { SceneStack } from './SceneStack.js';
4
3
  export { Logger } from './Log.js';
5
4
  export { Signal } from './Signal.js';
5
+ export { HookRegistry } from './Hooks.js';
6
6
  export * as Random from './Random.js';
7
7
  export * as Input from './Input.js';
8
8
  export { PlayerInput } from './PlayerInput.js';
@@ -10,7 +10,10 @@ export { Generator } from './Random.js';
10
10
  export { SaveSystem } from './Save.js';
11
11
  export { scramble, unscramble } from './Scramble.js';
12
12
  export { SaveSyncClient } from './SaveSync.js';
13
+ export { LockstepClient } from './Multiplayer.js';
13
14
  export { RunHistory } from './RunHistory.js';
15
+ export { PlayerStats } from './Stats.js';
16
+ export { TelemetryClient } from './Telemetry.js';
14
17
  export { NewsClient, NewsSeenTracker } from './News.js';
15
18
  export { checkSize, checkNoControlCharacters, sanitizeInboundText, validateSchema } from './Sanitize.js';
16
19
  export { Collection } from './Collection.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,15 +3,14 @@
3
3
  *
4
4
  * This is the whole surface in one place, which is also what the standalone
5
5
  * `mw_games.global.js` build exposes as `window.mw_games`. Consumers using a bundler can
6
- * import the narrower entry points instead: `mw_games/core`, `mw_games/render`,
7
- * `mw_games/roguelike`.
6
+ * import the narrower entry points instead: `mw_games/core`, `mw_games/two-d`,
7
+ * `mw_games/roguelike`. `mw_games/3d` is deliberately absent from here: it pulls in Babylon,
8
+ * which a 2D game should never pay for by importing the root.
8
9
  */
9
10
  export { version } from './version.ts';
10
11
  export * from './core/index.ts';
11
- export * from './render/index.ts';
12
+ export * from './two-d/index.ts';
12
13
  export * as Resources from './assets/index.ts';
13
- export * from './ui/index.ts';
14
- export * from './stage/index.ts';
15
14
  export * as Roguelike from './roguelike/index.ts';
16
15
  export * as I18n from './i18n/index.ts';
17
16
  export * as Actors from './actors/index.ts';
@@ -20,4 +19,5 @@ export * as Rpg from './rpg/index.ts';
20
19
  export * as Battle from './battle/index.ts';
21
20
  export * as Board from './board/index.ts';
22
21
  export * as Audio from './audio/index.ts';
22
+ export * as Simulation from './simulation/index.ts';
23
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}