@v12-engine/engine 0.1.0 → 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 (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
@@ -0,0 +1,149 @@
1
+ //#region src/entityIndex.ts
2
+ var none = /* @__PURE__ */ new Set();
3
+ /** Entities in the order of their ids, with the highest id filed: what comes next goes at the end when it is higher */
4
+ var ById = class extends Set {
5
+ last = 0;
6
+ };
7
+ /**
8
+ * Entities filed by what they are asked for by: whose they are, which have a component (and, for a component that
9
+ * asks, whose they are too: `Component.index`). Answers questions like "the heroes of player 2"
10
+ * or "every shop" without going through every entity of the world, most of which are trees. Kept up to date by the
11
+ * world as entities come and go, and by the entities as they get or lose a component.
12
+ *
13
+ * Every set keeps entities in the order of their ids, the order they came into the world and the one a walk through
14
+ * `World.entities` gives, however and whenever each was filed: one that changed owner or type, or was given a component
15
+ * late, takes its place among the others, as it has in a world loaded from a save. Code that picks the first of equals
16
+ * gets the same one either way. A set an entity is filed into out of its place is made again: a walk through it under
17
+ * way goes on through the one it had
18
+ */
19
+ var EntityIndex = class {
20
+ componentOf;
21
+ worldOf;
22
+ /**
23
+ * `componentOf`: a component of the world's game by its id, an error for one it does not list (`registry.used`);
24
+ * `worldOf`: the world it is the index of, which its entities reach through it (`Entity.order`)
25
+ */
26
+ constructor(componentOf, worldOf) {
27
+ this.componentOf = componentOf;
28
+ this.worldOf = worldOf;
29
+ }
30
+ /** The world it is the index of */
31
+ world() {
32
+ return this.worldOf();
33
+ }
34
+ owned = /* @__PURE__ */ new Map();
35
+ components = /* @__PURE__ */ new Map();
36
+ /** By component id, then by owner: for the components that ask (`index: 'owner'`) */
37
+ byOwner = /* @__PURE__ */ new Map();
38
+ /** By component id, what has it in the order of the entities' ids (`ordered`): made again once it changes */
39
+ inOrder = /* @__PURE__ */ new Map();
40
+ /** Everything the player owns, dead heroes waiting to be brought back included */
41
+ ownedBy(player) {
42
+ return this.owned.get(player) ?? none;
43
+ }
44
+ /**
45
+ * Everything that has the component; with a player, what the player owns of it, for a component filed by owner
46
+ * (`Component.index: 'owner'`; throws for one that is not)
47
+ */
48
+ with(key, owner) {
49
+ if (owner === void 0) return this.components.get(key.id) ?? none;
50
+ const owners = this.byOwner.get(key.id);
51
+ if (!owners) {
52
+ if (key.index === "owner") return none;
53
+ throw new Error(`Index: "${key.id}" is not filed by owner: define it with index: 'owner' to ask for a player's`);
54
+ }
55
+ return owners.get(owner) ?? none;
56
+ }
57
+ /**
58
+ * Everything that has the component, in the order of the entities' ids: the order a walk through `World.units`
59
+ * meets them in. What a system that runs over a component goes through (`System.over`), so a game plays the same
60
+ * as one that looks at every actor. A list of its own, kept until what has the component changes: what is given it
61
+ * or loses it while the list is gone through is in the next one
62
+ */
63
+ ordered(key) {
64
+ let list = this.inOrder.get(key.id);
65
+ if (!list) {
66
+ const set = this.components.get(key.id);
67
+ list = set ? [...set] : [];
68
+ this.inOrder.set(key.id, list);
69
+ }
70
+ return list;
71
+ }
72
+ add(entity) {
73
+ file(this.owned, entity.owner, entity);
74
+ for (const component of entity.heldComponents()) this.fileComponent(entity, component.id);
75
+ entity.index = this;
76
+ }
77
+ remove(entity) {
78
+ this.owned.get(entity.owner)?.delete(entity);
79
+ for (const component of entity.heldComponents()) this.dropComponent(entity, component.id);
80
+ entity.index = null;
81
+ }
82
+ /** An entity in the index was given a component, or had it taken away. Told by the entity */
83
+ /** Whether the component with this id asks to be filed by owner */
84
+ byOwnerOf(id) {
85
+ return this.componentOf(id)?.index === "owner";
86
+ }
87
+ componentChanged(entity, id, has) {
88
+ if (has) this.fileComponent(entity, id);
89
+ else this.dropComponent(entity, id);
90
+ }
91
+ fileComponent(entity, id) {
92
+ file(this.components, id, entity);
93
+ this.inOrder.delete(id);
94
+ if (this.byOwnerOf(id)) {
95
+ let owners = this.byOwner.get(id);
96
+ if (!owners) this.byOwner.set(id, owners = /* @__PURE__ */ new Map());
97
+ file(owners, entity.owner, entity);
98
+ }
99
+ }
100
+ dropComponent(entity, id) {
101
+ if (this.components.get(id)?.delete(entity)) this.inOrder.delete(id);
102
+ this.byOwner.get(id)?.get(entity.owner)?.delete(entity);
103
+ }
104
+ /** Throws when the index does not say what the entities are. See `debugChecks` */
105
+ check(entities) {
106
+ let count = 0;
107
+ for (const entity of entities) {
108
+ count++;
109
+ const what = `${entity.def.id}#${entity.id}`;
110
+ if (!this.ownedBy(entity.owner).has(entity)) throw new Error(`Index: ${what} is not filed under its owner ${entity.owner}`);
111
+ for (const { id } of entity.heldComponents()) {
112
+ if (!this.components.get(id)?.has(entity)) throw new Error(`Index: ${what} is not filed under its component ${id}`);
113
+ if (this.byOwnerOf(id) && !this.byOwner.get(id)?.get(entity.owner)?.has(entity)) throw new Error(`Index: ${what} is not filed under its owner for its component ${id}`);
114
+ }
115
+ }
116
+ let filed = 0;
117
+ for (const set of this.owned.values()) filed += set.size;
118
+ if (filed !== count) throw new Error(`Index: ${filed} entities filed by owner, the world has ${count}`);
119
+ for (const [id, set] of this.components) for (const entity of set) if (!entity.heldComponents().some((held) => held.id === id)) throw new Error(`Index: ${entity.def.id}#${entity.id} is filed under ${id}, which it has not`);
120
+ }
121
+ clear() {
122
+ this.owned.clear();
123
+ this.components.clear();
124
+ this.byOwner.clear();
125
+ this.inOrder.clear();
126
+ }
127
+ };
128
+ function file(map, key, entity) {
129
+ let set = map.get(key);
130
+ if (!set) map.set(key, set = new ById());
131
+ if (entity.id > set.last) {
132
+ set.add(entity);
133
+ set.last = entity.id;
134
+ return;
135
+ }
136
+ if (set.has(entity)) return;
137
+ const again = new ById();
138
+ for (const each of set) {
139
+ if (each.id > entity.id) again.add(entity);
140
+ again.add(each);
141
+ }
142
+ again.add(entity);
143
+ again.last = set.last;
144
+ map.set(key, again);
145
+ }
146
+ //#endregion
147
+ export { EntityIndex };
148
+
149
+ //# sourceMappingURL=entityIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityIndex.js","names":[],"sources":["../src/entityIndex.ts"],"sourcesContent":["import type { Component } from './components'\nimport type { Entity, PlayerId } from './entity'\nimport type { World } from './world'\n\nconst none: ReadonlySet<Entity> = new Set()\n\n/** Entities in the order of their ids, with the highest id filed: what comes next goes at the end when it is higher */\nclass ById extends Set<Entity> {\n\tlast = 0\n}\n\n/**\n * Entities filed by what they are asked for by: whose they are, which have a component (and, for a component that\n * asks, whose they are too: `Component.index`). Answers questions like \"the heroes of player 2\"\n * or \"every shop\" without going through every entity of the world, most of which are trees. Kept up to date by the\n * world as entities come and go, and by the entities as they get or lose a component.\n *\n * Every set keeps entities in the order of their ids, the order they came into the world and the one a walk through\n * `World.entities` gives, however and whenever each was filed: one that changed owner or type, or was given a component\n * late, takes its place among the others, as it has in a world loaded from a save. Code that picks the first of equals\n * gets the same one either way. A set an entity is filed into out of its place is made again: a walk through it under\n * way goes on through the one it had\n */\nexport class EntityIndex {\n\t/**\n\t * `componentOf`: a component of the world's game by its id, an error for one it does not list (`registry.used`);\n\t * `worldOf`: the world it is the index of, which its entities reach through it (`Entity.order`)\n\t */\n\tconstructor(\n\t\tprivate readonly componentOf: (id: string) => Component<unknown, unknown> | undefined,\n\t\tprivate readonly worldOf: () => World\n\t) {}\n\n\t/** The world it is the index of */\n\tworld(): World {\n\t\treturn this.worldOf()\n\t}\n\n\tprivate readonly owned = new Map<PlayerId, ById>()\n\tprivate readonly components = new Map<string, ById>()\n\t/** By component id, then by owner: for the components that ask (`index: 'owner'`) */\n\tprivate readonly byOwner = new Map<string, Map<PlayerId, ById>>()\n\t/** By component id, what has it in the order of the entities' ids (`ordered`): made again once it changes */\n\tprivate readonly inOrder = new Map<string, readonly Entity[]>()\n\n\t/** Everything the player owns, dead heroes waiting to be brought back included */\n\townedBy(player: PlayerId): ReadonlySet<Entity> {\n\t\treturn this.owned.get(player) ?? none\n\t}\n\n\t/**\n\t * Everything that has the component; with a player, what the player owns of it, for a component filed by owner\n\t * (`Component.index: 'owner'`; throws for one that is not)\n\t */\n\twith(key: Component<unknown, unknown>, owner?: PlayerId): ReadonlySet<Entity> {\n\t\tif (owner === undefined) return this.components.get(key.id) ?? none\n\t\tconst owners = this.byOwner.get(key.id)\n\t\tif (!owners) {\n\t\t\tif (key.index === 'owner') return none\n\t\t\tthrow new Error(`Index: \"${key.id}\" is not filed by owner: define it with index: 'owner' to ask for a player's`)\n\t\t}\n\t\treturn owners.get(owner) ?? none\n\t}\n\n\t/**\n\t * Everything that has the component, in the order of the entities' ids: the order a walk through `World.units`\n\t * meets them in. What a system that runs over a component goes through (`System.over`), so a game plays the same\n\t * as one that looks at every actor. A list of its own, kept until what has the component changes: what is given it\n\t * or loses it while the list is gone through is in the next one\n\t */\n\tordered(key: Component<unknown, unknown>): readonly Entity[] {\n\t\tlet list = this.inOrder.get(key.id)\n\t\tif (!list) {\n\t\t\tconst set = this.components.get(key.id)\n\t\t\tlist = set ? [...set] : []\n\t\t\tthis.inOrder.set(key.id, list)\n\t\t}\n\t\treturn list\n\t}\n\n\tadd(entity: Entity): void {\n\t\tfile(this.owned, entity.owner, entity)\n\t\tfor (const component of entity.heldComponents()) this.fileComponent(entity, component.id)\n\t\tentity.index = this\n\t}\n\n\tremove(entity: Entity): void {\n\t\tthis.owned.get(entity.owner)?.delete(entity)\n\t\tfor (const component of entity.heldComponents()) this.dropComponent(entity, component.id)\n\t\tentity.index = null\n\t}\n\n\t/** An entity in the index was given a component, or had it taken away. Told by the entity */\n\t/** Whether the component with this id asks to be filed by owner */\n\tprivate byOwnerOf(id: string): boolean {\n\t\treturn this.componentOf(id)?.index === 'owner'\n\t}\n\n\tcomponentChanged(entity: Entity, id: string, has: boolean): void {\n\t\tif (has) this.fileComponent(entity, id)\n\t\telse this.dropComponent(entity, id)\n\t}\n\n\tprivate fileComponent(entity: Entity, id: string): void {\n\t\tfile(this.components, id, entity)\n\t\tthis.inOrder.delete(id)\n\t\tif (this.byOwnerOf(id)) {\n\t\t\tlet owners = this.byOwner.get(id)\n\t\t\tif (!owners) this.byOwner.set(id, (owners = new Map()))\n\t\t\tfile(owners, entity.owner, entity)\n\t\t}\n\t}\n\n\tprivate dropComponent(entity: Entity, id: string): void {\n\t\tif (this.components.get(id)?.delete(entity)) this.inOrder.delete(id)\n\t\tthis.byOwner.get(id)?.get(entity.owner)?.delete(entity)\n\t}\n\n\t/** Throws when the index does not say what the entities are. See `debugChecks` */\n\tcheck(entities: Iterable<Entity>): void {\n\t\tlet count = 0\n\t\tfor (const entity of entities) {\n\t\t\tcount++\n\t\t\tconst what = `${entity.def.id}#${entity.id}`\n\t\t\tif (!this.ownedBy(entity.owner).has(entity)) throw new Error(`Index: ${what} is not filed under its owner ${entity.owner}`)\n\t\t\tfor (const { id } of entity.heldComponents()) {\n\t\t\t\tif (!this.components.get(id)?.has(entity)) throw new Error(`Index: ${what} is not filed under its component ${id}`)\n\t\t\t\tif (this.byOwnerOf(id) && !this.byOwner.get(id)?.get(entity.owner)?.has(entity))\n\t\t\t\t\tthrow new Error(`Index: ${what} is not filed under its owner for its component ${id}`)\n\t\t\t}\n\t\t}\n\t\tlet filed = 0\n\t\tfor (const set of this.owned.values()) filed += set.size\n\t\tif (filed !== count) throw new Error(`Index: ${filed} entities filed by owner, the world has ${count}`)\n\t\tfor (const [id, set] of this.components) {\n\t\t\tfor (const entity of set)\n\t\t\t\tif (!entity.heldComponents().some((held) => held.id === id))\n\t\t\t\t\tthrow new Error(`Index: ${entity.def.id}#${entity.id} is filed under ${id}, which it has not`)\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis.owned.clear()\n\t\tthis.components.clear()\n\t\tthis.byOwner.clear()\n\t\tthis.inOrder.clear()\n\t}\n}\n\nfunction file<K>(map: Map<K, ById>, key: K, entity: Entity): void {\n\tlet set = map.get(key)\n\tif (!set) map.set(key, (set = new ById()))\n\tif (entity.id > set.last) {\n\t\tset.add(entity)\n\t\tset.last = entity.id\n\t\treturn\n\t}\n\tif (set.has(entity)) return\n\t// out of its place: the set made again with it among the others\n\tconst again = new ById()\n\tfor (const each of set) {\n\t\tif (each.id > entity.id) again.add(entity)\n\t\tagain.add(each)\n\t}\n\tagain.add(entity)\n\tagain.last = set.last\n\tmap.set(key, again)\n}\n"],"mappings":";AAIA,IAAM,uBAA4B,IAAI,IAAI;;AAG1C,IAAM,OAAN,cAAmB,IAAY;CAC9B,OAAO;AACR;;;;;;;;;;;;;AAcA,IAAa,cAAb,MAAyB;CAMN;CACA;;;;;CAFlB,YACC,aACA,SACC;EAFgB,KAAA,cAAA;EACA,KAAA,UAAA;CACf;;CAGH,QAAe;EACd,OAAO,KAAK,QAAQ;CACrB;CAEA,wBAAyB,IAAI,IAAoB;CACjD,6BAA8B,IAAI,IAAkB;;CAEpD,0BAA2B,IAAI,IAAiC;;CAEhE,0BAA2B,IAAI,IAA+B;;CAG9D,QAAQ,QAAuC;EAC9C,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK;CAClC;;;;;CAMA,KAAK,KAAkC,OAAuC;EAC7E,IAAI,UAAU,KAAA,GAAW,OAAO,KAAK,WAAW,IAAI,IAAI,EAAE,KAAK;EAC/D,MAAM,SAAS,KAAK,QAAQ,IAAI,IAAI,EAAE;EACtC,IAAI,CAAC,QAAQ;GACZ,IAAI,IAAI,UAAU,SAAS,OAAO;GAClC,MAAM,IAAI,MAAM,WAAW,IAAI,GAAG,6EAA6E;EAChH;EACA,OAAO,OAAO,IAAI,KAAK,KAAK;CAC7B;;;;;;;CAQA,QAAQ,KAAqD;EAC5D,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,EAAE;EAClC,IAAI,CAAC,MAAM;GACV,MAAM,MAAM,KAAK,WAAW,IAAI,IAAI,EAAE;GACtC,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;GACzB,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI;EAC9B;EACA,OAAO;CACR;CAEA,IAAI,QAAsB;EACzB,KAAK,KAAK,OAAO,OAAO,OAAO,MAAM;EACrC,KAAK,MAAM,aAAa,OAAO,eAAe,GAAG,KAAK,cAAc,QAAQ,UAAU,EAAE;EACxF,OAAO,QAAQ;CAChB;CAEA,OAAO,QAAsB;EAC5B,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;EAC3C,KAAK,MAAM,aAAa,OAAO,eAAe,GAAG,KAAK,cAAc,QAAQ,UAAU,EAAE;EACxF,OAAO,QAAQ;CAChB;;;CAIA,UAAkB,IAAqB;EACtC,OAAO,KAAK,YAAY,EAAE,CAAC,EAAE,UAAU;CACxC;CAEA,iBAAiB,QAAgB,IAAY,KAAoB;EAChE,IAAI,KAAK,KAAK,cAAc,QAAQ,EAAE;OACjC,KAAK,cAAc,QAAQ,EAAE;CACnC;CAEA,cAAsB,QAAgB,IAAkB;EACvD,KAAK,KAAK,YAAY,IAAI,MAAM;EAChC,KAAK,QAAQ,OAAO,EAAE;EACtB,IAAI,KAAK,UAAU,EAAE,GAAG;GACvB,IAAI,SAAS,KAAK,QAAQ,IAAI,EAAE;GAChC,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAK,yBAAS,IAAI,IAAI,CAAE;GACtD,KAAK,QAAQ,OAAO,OAAO,MAAM;EAClC;CACD;CAEA,cAAsB,QAAgB,IAAkB;EACvD,IAAI,KAAK,WAAW,IAAI,EAAE,CAAC,EAAE,OAAO,MAAM,GAAG,KAAK,QAAQ,OAAO,EAAE;EACnE,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;CACvD;;CAGA,MAAM,UAAkC;EACvC,IAAI,QAAQ;EACZ,KAAK,MAAM,UAAU,UAAU;GAC9B;GACA,MAAM,OAAO,GAAG,OAAO,IAAI,GAAG,GAAG,OAAO;GACxC,IAAI,CAAC,KAAK,QAAQ,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,UAAU,KAAK,gCAAgC,OAAO,OAAO;GAC1H,KAAK,MAAM,EAAE,QAAQ,OAAO,eAAe,GAAG;IAC7C,IAAI,CAAC,KAAK,WAAW,IAAI,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,UAAU,KAAK,oCAAoC,IAAI;IAClH,IAAI,KAAK,UAAU,EAAE,KAAK,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,EAAE,IAAI,MAAM,GAC7E,MAAM,IAAI,MAAM,UAAU,KAAK,kDAAkD,IAAI;GACvF;EACD;EACA,IAAI,QAAQ;EACZ,KAAK,MAAM,OAAO,KAAK,MAAM,OAAO,GAAG,SAAS,IAAI;EACpD,IAAI,UAAU,OAAO,MAAM,IAAI,MAAM,UAAU,MAAM,0CAA0C,OAAO;EACtG,KAAK,MAAM,CAAC,IAAI,QAAQ,KAAK,YAC5B,KAAK,MAAM,UAAU,KACpB,IAAI,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,SAAS,KAAK,OAAO,EAAE,GACzD,MAAM,IAAI,MAAM,UAAU,OAAO,IAAI,GAAG,GAAG,OAAO,GAAG,kBAAkB,GAAG,mBAAmB;CAEjG;CAEA,QAAc;EACb,KAAK,MAAM,MAAM;EACjB,KAAK,WAAW,MAAM;EACtB,KAAK,QAAQ,MAAM;EACnB,KAAK,QAAQ,MAAM;CACpB;AACD;AAEA,SAAS,KAAQ,KAAmB,KAAQ,QAAsB;CACjE,IAAI,MAAM,IAAI,IAAI,GAAG;CACrB,IAAI,CAAC,KAAK,IAAI,IAAI,KAAM,MAAM,IAAI,KAAK,CAAE;CACzC,IAAI,OAAO,KAAK,IAAI,MAAM;EACzB,IAAI,IAAI,MAAM;EACd,IAAI,OAAO,OAAO;EAClB;CACD;CACA,IAAI,IAAI,IAAI,MAAM,GAAG;CAErB,MAAM,QAAQ,IAAI,KAAK;CACvB,KAAK,MAAM,QAAQ,KAAK;EACvB,IAAI,KAAK,KAAK,OAAO,IAAI,MAAM,IAAI,MAAM;EACzC,MAAM,IAAI,IAAI;CACf;CACA,MAAM,IAAI,MAAM;CAChB,MAAM,OAAO,IAAI;CACjB,IAAI,IAAI,KAAK,KAAK;AACnB"}
package/dist/errors.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * What becomes of a part of a game that throws: a hook's handler, a listener, a system, a timer, a unit's order, a
3
- * player's command. The game says (`GameModule.onError`), or whoever runs it (a server, a page); a world that is told
3
+ * player's command. The game says (`Rules.onError`), or whoever runs it (a server, a page); a world that is told
4
4
  * nothing throws, as it always did, so that a test sees every error.
5
5
  */
6
6
  import type { EntityId, PlayerId } from './entity';
@@ -22,6 +22,7 @@ export type ErrorAnswer = 'throw' | 'end' | 'disable';
22
22
  * @beta
23
23
  */
24
24
  export interface ErrorSite {
25
+ /** What sort of part threw: a hook's handler, a listener, a system, a timer, a unit's order or a player's command */
25
26
  kind: 'hook' | 'listener' | 'system' | 'timer' | 'order' | 'command';
26
27
  /** Its id: the handler's, the listener's, the system's name, the timer's, the order's or the command's type */
27
28
  id: string;
@@ -48,12 +49,15 @@ export type ErrorPolicy = ErrorAnswer | ((error: unknown, where: ErrorSite, worl
48
49
  export interface WorldFailure {
49
50
  /** What is said to whoever played: no more than that it stopped, and in what */
50
51
  message: string;
52
+ /** The part that threw */
51
53
  where: ErrorSite;
54
+ /** The thrown error as plain data: its class name, its message and its stack where it had one */
52
55
  error: {
53
56
  name: string;
54
57
  message: string;
55
58
  stack?: string;
56
59
  };
60
+ /** The tick the world was stepping when the part threw */
57
61
  tick: number;
58
62
  }
59
63
  /** Thrown to leave the tick a game ends in (`end`): caught by `World.step`, and never seen outside it */
@@ -64,7 +68,7 @@ export declare class GameEnded extends Error {
64
68
  /**
65
69
  * Why a command was turned away (`commandRejected`): a type the game has not got, fields not as its definition says, a
66
70
  * player not in the game, a unit not theirs, one there is not, more than a tick takes, or a director's command sent
67
- * with no cinematic playing on the sender's screen (`withDirector`)
71
+ * with no cinematic playing on the sender's screen (`directorPack`)
68
72
  *
69
73
  * @beta
70
74
  */
package/dist/errors.js ADDED
@@ -0,0 +1,59 @@
1
+ //#region src/errors.ts
2
+ /** Thrown to leave the tick a game ends in (`end`): caught by `World.step`, and never seen outside it */
3
+ var GameEnded = class extends Error {
4
+ failure;
5
+ constructor(failure) {
6
+ super(failure.message);
7
+ this.failure = failure;
8
+ }
9
+ };
10
+ /** What a part switched off is kept as (`world.disabled`, a save): its kind, id, hook and mod, nothing of the moment it threw */
11
+ var siteOf = (where) => ({
12
+ kind: where.kind,
13
+ id: where.id,
14
+ ...where.hook !== void 0 && { hook: where.hook },
15
+ ...where.mod !== void 0 && { mod: where.mod }
16
+ });
17
+ /**
18
+ * The name a part goes by among those switched off (`world.disabled`)
19
+ *
20
+ * @internal
21
+ */
22
+ var siteKey = (where) => where.kind === "hook" ? `hook:${where.hook}:${where.id}` : `${where.kind}:${where.id}`;
23
+ /**
24
+ * A part in words: `the handler "thorns" of the hook "damage"`
25
+ *
26
+ * @beta
27
+ */
28
+ function siteWords(where) {
29
+ switch (where.kind) {
30
+ case "hook": return `the handler "${where.id}" of the hook "${where.hook}"`;
31
+ case "listener": return `the listener "${where.id}"`;
32
+ case "system": return `the system "${where.id}"`;
33
+ case "timer": return `the timer "${where.id}"`;
34
+ case "order": return `the order "${where.id}" of the unit ${where.entity}`;
35
+ case "command": return `the command "${where.id}" of player ${where.player}`;
36
+ }
37
+ }
38
+ /** Which mod added or last changed each part of a game put together with mods, by the words `composeGame` knows it by */
39
+ var changedBy = /* @__PURE__ */ new WeakMap();
40
+ /** Kept by `composeGame` for the game it makes: who changed what, to say whose a part that throws is */
41
+ function notePartOwners(game, owners) {
42
+ changedBy.set(game, owners);
43
+ }
44
+ /** The parts' owners as noted for a game: none for one without mods */
45
+ var partOwners = (game) => changedBy.get(game) ?? /* @__PURE__ */ new Map();
46
+ var PART_WORDS = {
47
+ hook: "hook handler",
48
+ listener: "listener",
49
+ system: "system",
50
+ timer: "timer",
51
+ order: "order",
52
+ command: "command"
53
+ };
54
+ /** The mod a part is of, when a mod added it or changed it: nothing for a part of the game itself */
55
+ var modOfPart = (game, where) => game ? changedBy.get(game)?.get(`${PART_WORDS[where.kind]} "${where.id}"`) : void 0;
56
+ //#endregion
57
+ export { GameEnded, modOfPart, notePartOwners, partOwners, siteKey, siteOf, siteWords };
58
+
59
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/**\n * What becomes of a part of a game that throws: a hook's handler, a listener, a system, a timer, a unit's order, a\n * player's command. The game says (`Rules.onError`), or whoever runs it (a server, a page); a world that is told\n * nothing throws, as it always did, so that a test sees every error.\n */\nimport type { EntityId, PlayerId } from './entity'\nimport type { World } from './world'\n\n/**\n * - `throw`: the error goes on to whoever stepped the world. Nothing is hidden: for tests and development\n * - `end`: the game ends there, with the reason kept (`world.failure`) and told to the players. The world is not\n * stepped again. What a server and a launched game do when nothing is said: one game ends, and nothing else does\n * - `disable`: the part that threw is switched off and the game goes on without it: the handler, the listener, the\n * system or the timer no longer runs; the order is taken off its unit, the command refused. Never done unasked: a\n * rule that is quietly gone is a game that goes quietly wrong\n *\n * @beta\n */\nexport type ErrorAnswer = 'throw' | 'end' | 'disable'\n\n/**\n * The part of the game that threw\n *\n * @beta\n */\nexport interface ErrorSite {\n\t/** What sort of part threw: a hook's handler, a listener, a system, a timer, a unit's order or a player's command */\n\tkind: 'hook' | 'listener' | 'system' | 'timer' | 'order' | 'command'\n\t/** Its id: the handler's, the listener's, the system's name, the timer's, the order's or the command's type */\n\tid: string\n\t/** The hook a handler is on */\n\thook?: string\n\t/** The unit whose order it was */\n\tentity?: EntityId\n\t/** The player whose command it was */\n\tplayer?: PlayerId\n\t/** The mod that added the part or changed it last, for a game with mods (`composeGame`) */\n\tmod?: string\n}\n\n/**\n * What to do about an error: the same for all of them, or decided for each\n *\n * @beta\n */\nexport type ErrorPolicy = ErrorAnswer | ((error: unknown, where: ErrorSite, world: World) => ErrorAnswer)\n\n/**\n * Why a game ended on an error (`world.failure`): plain data, for a log, a save's notes, a player's screen\n *\n * @beta\n */\nexport interface WorldFailure {\n\t/** What is said to whoever played: no more than that it stopped, and in what */\n\tmessage: string\n\t/** The part that threw */\n\twhere: ErrorSite\n\t/** The thrown error as plain data: its class name, its message and its stack where it had one */\n\terror: { name: string; message: string; stack?: string }\n\t/** The tick the world was stepping when the part threw */\n\ttick: number\n}\n\n/** Thrown to leave the tick a game ends in (`end`): caught by `World.step`, and never seen outside it */\nexport class GameEnded extends Error {\n\tconstructor(readonly failure: WorldFailure) {\n\t\tsuper(failure.message)\n\t}\n}\n\n/**\n * Why a command was turned away (`commandRejected`): a type the game has not got, fields not as its definition says, a\n * player not in the game, a unit not theirs, one there is not, more than a tick takes, or a director's command sent\n * with no cinematic playing on the sender's screen (`directorPack`)\n *\n * @beta\n */\nexport type RejectedKind = 'unknownType' | 'badFields' | 'noSuchPlayer' | 'notTheirs' | 'noSuchUnit' | 'tooMany' | 'notDirecting'\n\n/** What a part switched off is kept as (`world.disabled`, a save): its kind, id, hook and mod, nothing of the moment it threw */\nexport const siteOf = (where: ErrorSite): ErrorSite => ({\n\tkind: where.kind,\n\tid: where.id,\n\t...(where.hook !== undefined && { hook: where.hook }),\n\t...(where.mod !== undefined && { mod: where.mod })\n})\n\n/**\n * The name a part goes by among those switched off (`world.disabled`)\n *\n * @internal\n */\nexport const siteKey = (where: ErrorSite): string => (where.kind === 'hook' ? `hook:${where.hook}:${where.id}` : `${where.kind}:${where.id}`)\n\n/**\n * A part in words: `the handler \"thorns\" of the hook \"damage\"`\n *\n * @beta\n */\nexport function siteWords(where: ErrorSite): string {\n\tswitch (where.kind) {\n\t\tcase 'hook':\n\t\t\treturn `the handler \"${where.id}\" of the hook \"${where.hook}\"`\n\t\tcase 'listener':\n\t\t\treturn `the listener \"${where.id}\"`\n\t\tcase 'system':\n\t\t\treturn `the system \"${where.id}\"`\n\t\tcase 'timer':\n\t\t\treturn `the timer \"${where.id}\"`\n\t\tcase 'order':\n\t\t\treturn `the order \"${where.id}\" of the unit ${where.entity}`\n\t\tcase 'command':\n\t\t\treturn `the command \"${where.id}\" of player ${where.player}`\n\t}\n}\n\n/** Which mod added or last changed each part of a game put together with mods, by the words `composeGame` knows it by */\nconst changedBy = new WeakMap<object, ReadonlyMap<string, string>>()\n\n/** Kept by `composeGame` for the game it makes: who changed what, to say whose a part that throws is */\nexport function notePartOwners(game: object, owners: ReadonlyMap<string, string>): void {\n\tchangedBy.set(game, owners)\n}\n\n/** The parts' owners as noted for a game: none for one without mods */\nexport const partOwners = (game: object): ReadonlyMap<string, string> => changedBy.get(game) ?? new Map()\n\nconst PART_WORDS: Record<ErrorSite['kind'], string> = {\n\thook: 'hook handler',\n\tlistener: 'listener',\n\tsystem: 'system',\n\ttimer: 'timer',\n\torder: 'order',\n\tcommand: 'command'\n}\n\n/** The mod a part is of, when a mod added it or changed it: nothing for a part of the game itself */\nexport const modOfPart = (game: object | null | undefined, where: ErrorSite): string | undefined =>\n\tgame ? changedBy.get(game)?.get(`${PART_WORDS[where.kind]} \"${where.id}\"`) : undefined\n"],"mappings":";;AAgEA,IAAa,YAAb,cAA+B,MAAM;CACf;CAArB,YAAY,SAAgC;EAC3C,MAAM,QAAQ,OAAO;EADD,KAAA,UAAA;CAErB;AACD;;AAYA,IAAa,UAAU,WAAiC;CACvD,MAAM,MAAM;CACZ,IAAI,MAAM;CACV,GAAI,MAAM,SAAS,KAAA,KAAa,EAAE,MAAM,MAAM,KAAK;CACnD,GAAI,MAAM,QAAQ,KAAA,KAAa,EAAE,KAAK,MAAM,IAAI;AACjD;;;;;;AAOA,IAAa,WAAW,UAA8B,MAAM,SAAS,SAAS,QAAQ,MAAM,KAAK,GAAG,MAAM,OAAO,GAAG,MAAM,KAAK,GAAG,MAAM;;;;;;AAOxI,SAAgB,UAAU,OAA0B;CACnD,QAAQ,MAAM,MAAd;EACC,KAAK,QACJ,OAAO,gBAAgB,MAAM,GAAG,iBAAiB,MAAM,KAAK;EAC7D,KAAK,YACJ,OAAO,iBAAiB,MAAM,GAAG;EAClC,KAAK,UACJ,OAAO,eAAe,MAAM,GAAG;EAChC,KAAK,SACJ,OAAO,cAAc,MAAM,GAAG;EAC/B,KAAK,SACJ,OAAO,cAAc,MAAM,GAAG,gBAAgB,MAAM;EACrD,KAAK,WACJ,OAAO,gBAAgB,MAAM,GAAG,cAAc,MAAM;CACtD;AACD;;AAGA,IAAM,4BAAY,IAAI,QAA6C;;AAGnE,SAAgB,eAAe,MAAc,QAA2C;CACvF,UAAU,IAAI,MAAM,MAAM;AAC3B;;AAGA,IAAa,cAAc,SAA8C,UAAU,IAAI,IAAI,qBAAK,IAAI,IAAI;AAExG,IAAM,aAAgD;CACrD,MAAM;CACN,UAAU;CACV,QAAQ;CACR,OAAO;CACP,OAAO;CACP,SAAS;AACV;;AAGA,IAAa,aAAa,MAAiC,UAC1D,OAAO,UAAU,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,KAAA"}
package/dist/events.d.ts CHANGED
@@ -14,6 +14,7 @@ export type EventAudience<T> = 'everyone' | ((payload: T, view: SessionView) =>
14
14
  * @beta
15
15
  */
16
16
  export interface EventKey<T> {
17
+ /** The event's id, unique among the game's events */
17
18
  readonly id: string;
18
19
  /** Sent to the screens of these players, in their snapshots. Only to whoever listens in the world when left out */
19
20
  readonly replicate?: EventAudience<T>;
@@ -21,23 +22,24 @@ export interface EventKey<T> {
21
22
  readonly payload?: T;
22
23
  }
23
24
  /**
24
- * An event of a game's own: `const through = defineEvent<{ unit: string }>('td.invaderThrough', { replicate: 'everyone' })`.
25
+ * An event of a game's own: `const through = defineEvent<{ unit: string }>({ id: 'td.invaderThrough', replicate: 'everyone' })`.
25
26
  * Emitted on `world.events` like the engine's (`world.events.emit(through, { unit })`), held to the end of the tick
26
27
  * like them, and listened to with `defineListener`. Ids are shared by every game: give them a prefix of the game's.
27
28
  *
28
29
  * A replicated event goes to the players' screens, where `GameView.on` and the renderers get it: what it says has
29
30
  * to be plain data then (numbers, text, lists, plain objects), with entities by id, as it may cross a network
30
31
  *
31
- * @beta
32
+ * @public
32
33
  */
33
- export declare function defineEvent<T>(id: string, options?: {
34
+ export declare function defineEvent<T>(def: {
35
+ id: string;
34
36
  replicate?: EventAudience<T>;
35
37
  }): EventKey<T>;
36
38
  /** Whether an event is one of a game's own, rather than one of the engine's */
37
39
  export declare const isGameEvent: (id: PropertyKey) => boolean;
38
40
  /**
39
41
  * How a game reacts to an event: the engine's (`'entityDied'`, `'enteredArea'`) or one of its own. Listeners are
40
- * given in `GameModule.listeners`, and the world subscribes them when it is made, in their order: a new game, a
42
+ * given in `Rules.listeners`, and the world subscribes them when it is made, in their order: a new game, a
41
43
  * loaded save and every player's machine get the same ones. They run at the end of the tick, once everything in it
42
44
  * is settled, and may change the world: what happens then is part of that tick. One with the id of another takes
43
45
  * its place, in a mod
@@ -45,14 +47,17 @@ export declare const isGameEvent: (id: PropertyKey) => boolean;
45
47
  * @beta
46
48
  */
47
49
  export interface ListenerDef {
50
+ /** The listener's id; a listener of another with the same id takes its place */
48
51
  id: string;
52
+ /** The event it reacts to */
49
53
  event: EventKey<any>;
54
+ /** Reacts to one occurrence of the event, with the world and the event's payload */
50
55
  run(world: World, payload: any): void;
51
56
  }
52
57
  /**
53
58
  * Typed help for writing a listener: `defineListener({ event: enteredArea, id: 'td.gate', run(world, { area, entity }) { ... } })`
54
59
  *
55
- * @beta
60
+ * @public
56
61
  */
57
62
  export declare function defineListener<T>(def: {
58
63
  id: string;
@@ -69,6 +74,7 @@ export declare function defineListener<T>(def: {
69
74
  export declare class Emitter {
70
75
  private handlers;
71
76
  private held;
77
+ /** What waits while held: the type of each, then what it says, so that an event held makes no object to hold it in */
72
78
  private queue;
73
79
  /** True while what was held back goes out (`release`) */
74
80
  releasing: boolean;
package/dist/events.js ADDED
@@ -0,0 +1,158 @@
1
+ //#region src/events.ts
2
+ /**
3
+ * Every event defined in the process by id, the last of an id winning (`defineEvent`). No world reads an event's
4
+ * definition here: a server may hold rooms of different games, a game be reloaded, a mod define events of its own, so
5
+ * one id may be defined more than one way. A world finds its game's own in its registry (`Rules.events`), and the
6
+ * engine's in `engines`; this only says whether an id is one of a game's (`isGameEvent`), and what is deprecated (E7)
7
+ */
8
+ var defined = /* @__PURE__ */ new Map();
9
+ /** The engine's own events by id (`defineEngineEvent`): the first of an id, as the engine defined it. What every world finds them by */
10
+ var engines = /* @__PURE__ */ new Map();
11
+ /**
12
+ * An event of a game's own: `const through = defineEvent<{ unit: string }>({ id: 'td.invaderThrough', replicate: 'everyone' })`.
13
+ * Emitted on `world.events` like the engine's (`world.events.emit(through, { unit })`), held to the end of the tick
14
+ * like them, and listened to with `defineListener`. Ids are shared by every game: give them a prefix of the game's.
15
+ *
16
+ * A replicated event goes to the players' screens, where `GameView.on` and the renderers get it: what it says has
17
+ * to be plain data then (numbers, text, lists, plain objects), with entities by id, as it may cross a network
18
+ *
19
+ * @public
20
+ */
21
+ function defineEvent(def) {
22
+ const { id } = def;
23
+ const key = { ...def };
24
+ defined.set(id, key);
25
+ return key;
26
+ }
27
+ /**
28
+ * One of the engine's own events that goes through the world as a game's own does (`core.captured`): `defineEvent`,
29
+ * and kept as the engine's, which every world finds (`Registry.event`) whatever else in the process defines its id
30
+ *
31
+ * @internal
32
+ */
33
+ function defineEngineEvent(def) {
34
+ const key = defineEvent(def);
35
+ if (!engines.has(def.id)) engines.set(def.id, key);
36
+ return key;
37
+ }
38
+ /**
39
+ * The engine's own event of this id (`defineEngineEvent`), as the engine defined it, if any
40
+ *
41
+ * @internal
42
+ */
43
+ var engineEventById = (id) => engines.get(id);
44
+ /**
45
+ * One of the engine's events (`engineEvents.ts`): a key as a game's own is, but not one of a game's (`isGameEvent`),
46
+ * and told to the players only by what replicates it (`replicateEvent`)
47
+ *
48
+ * @internal
49
+ */
50
+ var engineEvent = (id) => ({ id });
51
+ /**
52
+ * The event defined last with this id, in this process, if any: of whichever game or mod defined it last
53
+ *
54
+ * @deprecated A process may have more than one definition of an id (rooms of different games on one server, a
55
+ * game reloaded, a mod): ask the world's registry, `world.registry.event(id)`, which finds its own game's
56
+ *
57
+ * @internal
58
+ */
59
+ var eventById = (id) => defined.get(id);
60
+ /** Whether an event is one of a game's own, rather than one of the engine's */
61
+ var isGameEvent = (id) => typeof id === "string" && defined.has(id);
62
+ /**
63
+ * The events that go to the screen, of every game of the process, each as defined last
64
+ *
65
+ * @deprecated Of every game of the process, the last definition of an id winning: what goes to a world's players is
66
+ * what its game lists (`Rules.events`) and the engine's, found by `world.registry.event(id)`
67
+ *
68
+ * @internal
69
+ */
70
+ var replicatedEvents = () => [...defined.values()].filter((key) => key.replicate);
71
+ /**
72
+ * Typed help for writing a listener: `defineListener({ event: enteredArea, id: 'td.gate', run(world, { area, entity }) { ... } })`
73
+ *
74
+ * @public
75
+ */
76
+ function defineListener(def) {
77
+ return def;
78
+ }
79
+ /**
80
+ * Minimal typed event emitter: each event by its key (`EventKey`), which types what it says.
81
+ *
82
+ * While held (`hold`), what is emitted waits in a queue and goes out on `release`, in the order it happened.
83
+ * The world holds its events for the length of a tick, so that whoever listens sees how things stand once
84
+ * the tick is over, and cannot change anything halfway through it.
85
+ */
86
+ var Emitter = class {
87
+ handlers = /* @__PURE__ */ new Map();
88
+ held = false;
89
+ /** What waits while held: the type of each, then what it says, so that an event held makes no object to hold it in */
90
+ queue = [];
91
+ /** True while what was held back goes out (`release`) */
92
+ releasing = false;
93
+ taps = /* @__PURE__ */ new Set();
94
+ watchers = /* @__PURE__ */ new Set();
95
+ /**
96
+ * Calls back for every event as it goes out, before whoever listens to it: the event log of the debug tools, a
97
+ * logger. Any number of them. Returns what stops it
98
+ */
99
+ tap(listener) {
100
+ this.taps.add(listener);
101
+ return () => this.taps.delete(listener);
102
+ }
103
+ /**
104
+ * Calls back for every event as it goes out, whatever it is, after whoever listens to it by name: for what cannot
105
+ * know ahead which events there will be, as a player's seat that passes on a game's own. Returns what stops it
106
+ */
107
+ watch(watcher) {
108
+ this.watchers.add(watcher);
109
+ return () => this.watchers.delete(watcher);
110
+ }
111
+ /** Listens to an event, the engine's (`engineEvents.ts`) or a game's own. Returns what stops it */
112
+ on(key, handler) {
113
+ const { id } = key;
114
+ let set = this.handlers.get(id);
115
+ if (!set) this.handlers.set(id, set = /* @__PURE__ */ new Set());
116
+ set.add(handler);
117
+ return () => set.delete(handler);
118
+ }
119
+ emit(key, payload) {
120
+ const { id } = key;
121
+ if (this.held) {
122
+ this.queue.push(id, payload);
123
+ return;
124
+ }
125
+ this.deliver(id, payload);
126
+ }
127
+ /** Holds back what is emitted from now on, until `release` */
128
+ hold() {
129
+ this.held = true;
130
+ }
131
+ /** Sends out everything held back, and stops holding */
132
+ release() {
133
+ this.held = false;
134
+ const queue = this.queue;
135
+ this.queue = [];
136
+ this.releasing = true;
137
+ try {
138
+ for (let i = 0; i < queue.length; i += 2) this.deliver(queue[i], queue[i + 1]);
139
+ } finally {
140
+ this.releasing = false;
141
+ }
142
+ }
143
+ deliver(type, payload) {
144
+ for (const tap of this.taps) tap(type, payload);
145
+ const set = this.handlers.get(type);
146
+ if (set) for (const handler of set) handler(payload);
147
+ for (const watcher of this.watchers) watcher(type, payload);
148
+ }
149
+ clear() {
150
+ this.handlers.clear();
151
+ this.watchers.clear();
152
+ this.queue = [];
153
+ }
154
+ };
155
+ //#endregion
156
+ export { Emitter, defineEngineEvent, defineEvent, defineListener, engineEvent, engineEventById, eventById, isGameEvent, replicatedEvents };
157
+
158
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","names":[],"sources":["../src/events.ts"],"sourcesContent":["import type { SessionView } from './replication'\nimport type { World } from './world'\n\ntype Handler<T> = (payload: T) => void\n\n/**\n * Who of the players gets an event of a game's own on their screen (see `defineEvent`): everyone, or those a\n * function picks, from what the event says and what the seat may know (`SessionView`: its player, `knows`, `sees`)\n *\n * @beta\n */\nexport type EventAudience<T> = 'everyone' | ((payload: T, view: SessionView) => boolean)\n\n/**\n * A typed key for an event of a game's own, made with `defineEvent`\n *\n * @beta\n */\nexport interface EventKey<T> {\n\t/** The event's id, unique among the game's events */\n\treadonly id: string\n\t/** Sent to the screens of these players, in their snapshots. Only to whoever listens in the world when left out */\n\treadonly replicate?: EventAudience<T>\n\t/** Only there for the type of the payload */\n\treadonly payload?: T\n}\n\n/**\n * Every event defined in the process by id, the last of an id winning (`defineEvent`). No world reads an event's\n * definition here: a server may hold rooms of different games, a game be reloaded, a mod define events of its own, so\n * one id may be defined more than one way. A world finds its game's own in its registry (`Rules.events`), and the\n * engine's in `engines`; this only says whether an id is one of a game's (`isGameEvent`), and what is deprecated (E7)\n */\nconst defined = new Map<string, EventKey<unknown>>()\n\n/** The engine's own events by id (`defineEngineEvent`): the first of an id, as the engine defined it. What every world finds them by */\nconst engines = new Map<string, EventKey<unknown>>()\n\n/**\n * An event of a game's own: `const through = defineEvent<{ unit: string }>({ id: 'td.invaderThrough', replicate: 'everyone' })`.\n * Emitted on `world.events` like the engine's (`world.events.emit(through, { unit })`), held to the end of the tick\n * like them, and listened to with `defineListener`. Ids are shared by every game: give them a prefix of the game's.\n *\n * A replicated event goes to the players' screens, where `GameView.on` and the renderers get it: what it says has\n * to be plain data then (numbers, text, lists, plain objects), with entities by id, as it may cross a network\n *\n * @public\n */\nexport function defineEvent<T>(def: { id: string; replicate?: EventAudience<T> }): EventKey<T> {\n\tconst { id } = def\n\tconst key: EventKey<T> = { ...def }\n\t// the last of an id, of the process: no world is told by it (see `defined`)\n\tdefined.set(id, key as EventKey<unknown>)\n\treturn key\n}\n\n/**\n * One of the engine's own events that goes through the world as a game's own does (`core.captured`): `defineEvent`,\n * and kept as the engine's, which every world finds (`Registry.event`) whatever else in the process defines its id\n *\n * @internal\n */\nexport function defineEngineEvent<T>(def: { id: string; replicate?: EventAudience<T> }): EventKey<T> {\n\tconst key = defineEvent(def)\n\tif (!engines.has(def.id)) engines.set(def.id, key as EventKey<unknown>)\n\treturn key\n}\n\n/**\n * The engine's own event of this id (`defineEngineEvent`), as the engine defined it, if any\n *\n * @internal\n */\nexport const engineEventById = (id: string): EventKey<unknown> | undefined => engines.get(id)\n\n/**\n * One of the engine's events (`engineEvents.ts`): a key as a game's own is, but not one of a game's (`isGameEvent`),\n * and told to the players only by what replicates it (`replicateEvent`)\n *\n * @internal\n */\nexport const engineEvent = <T>(id: string): EventKey<T> => ({ id })\n\n/**\n * The event defined last with this id, in this process, if any: of whichever game or mod defined it last\n *\n * @deprecated A process may have more than one definition of an id (rooms of different games on one server, a\n * game reloaded, a mod): ask the world's registry, `world.registry.event(id)`, which finds its own game's\n *\n * @internal\n */\nexport const eventById = (id: string): EventKey<unknown> | undefined => defined.get(id)\n\n/** Whether an event is one of a game's own, rather than one of the engine's */\nexport const isGameEvent = (id: PropertyKey): boolean => typeof id === 'string' && defined.has(id)\n\n/**\n * The events that go to the screen, of every game of the process, each as defined last\n *\n * @deprecated Of every game of the process, the last definition of an id winning: what goes to a world's players is\n * what its game lists (`Rules.events`) and the engine's, found by `world.registry.event(id)`\n *\n * @internal\n */\nexport const replicatedEvents = (): EventKey<unknown>[] => [...defined.values()].filter((key) => key.replicate)\n\n/**\n * How a game reacts to an event: the engine's (`'entityDied'`, `'enteredArea'`) or one of its own. Listeners are\n * given in `Rules.listeners`, and the world subscribes them when it is made, in their order: a new game, a\n * loaded save and every player's machine get the same ones. They run at the end of the tick, once everything in it\n * is settled, and may change the world: what happens then is part of that tick. One with the id of another takes\n * its place, in a mod\n *\n * @beta\n */\nexport interface ListenerDef {\n\t/** The listener's id; a listener of another with the same id takes its place */\n\tid: string\n\t/** The event it reacts to */\n\tevent: EventKey<any>\n\t/** Reacts to one occurrence of the event, with the world and the event's payload */\n\trun(world: World, payload: any): void\n}\n\n/**\n * Typed help for writing a listener: `defineListener({ event: enteredArea, id: 'td.gate', run(world, { area, entity }) { ... } })`\n *\n * @public\n */\nexport function defineListener<T>(def: { id: string; event: EventKey<T>; run(world: World, payload: T): void }): ListenerDef {\n\treturn def\n}\n\n/**\n * Minimal typed event emitter: each event by its key (`EventKey`), which types what it says.\n *\n * While held (`hold`), what is emitted waits in a queue and goes out on `release`, in the order it happened.\n * The world holds its events for the length of a tick, so that whoever listens sees how things stand once\n * the tick is over, and cannot change anything halfway through it.\n */\nexport class Emitter {\n\tprivate handlers = new Map<PropertyKey, Set<Handler<any>>>()\n\tprivate held = false\n\t/** What waits while held: the type of each, then what it says, so that an event held makes no object to hold it in */\n\tprivate queue: unknown[] = []\n\t/** True while what was held back goes out (`release`) */\n\treleasing = false\n\tprivate readonly taps = new Set<(type: PropertyKey, payload: unknown) => void>()\n\tprivate readonly watchers = new Set<(type: PropertyKey, payload: unknown) => void>()\n\n\t/**\n\t * Calls back for every event as it goes out, before whoever listens to it: the event log of the debug tools, a\n\t * logger. Any number of them. Returns what stops it\n\t */\n\ttap(listener: (type: PropertyKey, payload: unknown) => void): () => void {\n\t\tthis.taps.add(listener)\n\t\treturn () => this.taps.delete(listener)\n\t}\n\n\t/**\n\t * Calls back for every event as it goes out, whatever it is, after whoever listens to it by name: for what cannot\n\t * know ahead which events there will be, as a player's seat that passes on a game's own. Returns what stops it\n\t */\n\twatch(watcher: (type: PropertyKey, payload: unknown) => void): () => void {\n\t\tthis.watchers.add(watcher)\n\t\treturn () => this.watchers.delete(watcher)\n\t}\n\n\t/** Listens to an event, the engine's (`engineEvents.ts`) or a game's own. Returns what stops it */\n\ton<T>(key: EventKey<T>, handler: Handler<T>): () => void {\n\t\tconst { id } = key\n\t\tlet set = this.handlers.get(id)\n\t\tif (!set) this.handlers.set(id, (set = new Set()))\n\t\tset.add(handler)\n\t\treturn () => set.delete(handler)\n\t}\n\n\temit<T>(key: EventKey<T>, payload: T): void {\n\t\tconst { id } = key\n\t\tif (this.held) {\n\t\t\tthis.queue.push(id, payload)\n\t\t\treturn\n\t\t}\n\t\tthis.deliver(id, payload)\n\t}\n\n\t/** Holds back what is emitted from now on, until `release` */\n\thold(): void {\n\t\tthis.held = true\n\t}\n\n\t/** Sends out everything held back, and stops holding */\n\trelease(): void {\n\t\tthis.held = false\n\t\t// what a listener emits while this goes on is sent at once, after what it is reacting to\n\t\tconst queue = this.queue\n\t\tthis.queue = []\n\t\tthis.releasing = true\n\t\ttry {\n\t\t\tfor (let i = 0; i < queue.length; i += 2) this.deliver(queue[i] as PropertyKey, queue[i + 1])\n\t\t} finally {\n\t\t\tthis.releasing = false\n\t\t}\n\t}\n\n\tprivate deliver(type: PropertyKey, payload: unknown): void {\n\t\tfor (const tap of this.taps) tap(type, payload)\n\t\tconst set = this.handlers.get(type)\n\t\tif (set) for (const handler of set) handler(payload)\n\t\tfor (const watcher of this.watchers) watcher(type, payload)\n\t}\n\n\tclear(): void {\n\t\tthis.handlers.clear()\n\t\tthis.watchers.clear()\n\t\tthis.queue = []\n\t}\n}\n"],"mappings":";;;;;;;AAiCA,IAAM,0BAAU,IAAI,IAA+B;;AAGnD,IAAM,0BAAU,IAAI,IAA+B;;;;;;;;;;;AAYnD,SAAgB,YAAe,KAAgE;CAC9F,MAAM,EAAE,OAAO;CACf,MAAM,MAAmB,EAAE,GAAG,IAAI;CAElC,QAAQ,IAAI,IAAI,GAAwB;CACxC,OAAO;AACR;;;;;;;AAQA,SAAgB,kBAAqB,KAAgE;CACpG,MAAM,MAAM,YAAY,GAAG;CAC3B,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,GAAG,QAAQ,IAAI,IAAI,IAAI,GAAwB;CACtE,OAAO;AACR;;;;;;AAOA,IAAa,mBAAmB,OAA8C,QAAQ,IAAI,EAAE;;;;;;;AAQ5F,IAAa,eAAkB,QAA6B,EAAE,GAAG;;;;;;;;;AAUjE,IAAa,aAAa,OAA8C,QAAQ,IAAI,EAAE;;AAGtF,IAAa,eAAe,OAA6B,OAAO,OAAO,YAAY,QAAQ,IAAI,EAAE;;;;;;;;;AAUjG,IAAa,yBAA8C,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ,IAAI,SAAS;;;;;;AAyB9G,SAAgB,eAAkB,KAA2F;CAC5H,OAAO;AACR;;;;;;;;AASA,IAAa,UAAb,MAAqB;CACpB,2BAAmB,IAAI,IAAoC;CAC3D,OAAe;;CAEf,QAA2B,CAAC;;CAE5B,YAAY;CACZ,uBAAwB,IAAI,IAAmD;CAC/E,2BAA4B,IAAI,IAAmD;;;;;CAMnF,IAAI,UAAqE;EACxE,KAAK,KAAK,IAAI,QAAQ;EACtB,aAAa,KAAK,KAAK,OAAO,QAAQ;CACvC;;;;;CAMA,MAAM,SAAoE;EACzE,KAAK,SAAS,IAAI,OAAO;EACzB,aAAa,KAAK,SAAS,OAAO,OAAO;CAC1C;;CAGA,GAAM,KAAkB,SAAiC;EACxD,MAAM,EAAE,OAAO;EACf,IAAI,MAAM,KAAK,SAAS,IAAI,EAAE;EAC9B,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAK,sBAAM,IAAI,IAAI,CAAE;EACjD,IAAI,IAAI,OAAO;EACf,aAAa,IAAI,OAAO,OAAO;CAChC;CAEA,KAAQ,KAAkB,SAAkB;EAC3C,MAAM,EAAE,OAAO;EACf,IAAI,KAAK,MAAM;GACd,KAAK,MAAM,KAAK,IAAI,OAAO;GAC3B;EACD;EACA,KAAK,QAAQ,IAAI,OAAO;CACzB;;CAGA,OAAa;EACZ,KAAK,OAAO;CACb;;CAGA,UAAgB;EACf,KAAK,OAAO;EAEZ,MAAM,QAAQ,KAAK;EACnB,KAAK,QAAQ,CAAC;EACd,KAAK,YAAY;EACjB,IAAI;GACH,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG,KAAK,QAAQ,MAAM,IAAmB,MAAM,IAAI,EAAE;EAC7F,UAAU;GACT,KAAK,YAAY;EAClB;CACD;CAEA,QAAgB,MAAmB,SAAwB;EAC1D,KAAK,MAAM,OAAO,KAAK,MAAM,IAAI,MAAM,OAAO;EAC9C,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI;EAClC,IAAI,KAAK,KAAK,MAAM,WAAW,KAAK,QAAQ,OAAO;EACnD,KAAK,MAAM,WAAW,KAAK,UAAU,QAAQ,MAAM,OAAO;CAC3D;CAEA,QAAc;EACb,KAAK,SAAS,MAAM;EACpB,KAAK,SAAS,MAAM;EACpB,KAAK,QAAQ,CAAC;CACf;AACD"}