@v12-engine/engine 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
package/dist/names.js ADDED
@@ -0,0 +1,122 @@
1
+ import { defineComponent } from "./components.js";
2
+ import { mapThings } from "./mapFields.js";
3
+ import { Path } from "./paths.js";
4
+ //#region src/names.ts
5
+ /**
6
+ * Entities by the names they were given: on a map, where the editor names what the rules have to find (`MapObject.name`),
7
+ * or in code (`SpawnOptions.name`, `world.setName`). The rules ask for "the gate", never for a number or a spot on
8
+ * the map. Kept in the world, so that a save has them
9
+ */
10
+ var names = defineComponent({
11
+ id: "core.names",
12
+ default: () => ({})
13
+ });
14
+ var mapInfo = defineComponent({
15
+ id: "core.map",
16
+ default: () => ({
17
+ name: "",
18
+ data: {},
19
+ points: [],
20
+ paths: []
21
+ })
22
+ });
23
+ /**
24
+ * What the map a world was made from says that is not an entity (`World.map`): its name, what the game kept with it,
25
+ * and its points and paths by name. A game can say which names there are: `world.map.path<RoadPaths>('road')`
26
+ *
27
+ * @beta
28
+ */
29
+ var WorldMap = class {
30
+ info;
31
+ constructor(info) {
32
+ this.info = info;
33
+ }
34
+ /** The name of the map. Empty for a world made without one */
35
+ get name() {
36
+ return this.info.name;
37
+ }
38
+ /** What the game kept with the map (`GameMap.data`): a difficulty, the waves of this level */
39
+ get data() {
40
+ return this.info.data;
41
+ }
42
+ /**
43
+ * The things of a kind of the game's own that were put on the map (`MapThing`): a tower defense's ground kept clear,
44
+ * a MOBA's lanes. None for a kind the map has nothing of. With `fields`, each thing's own (`data`) has what was not
45
+ * set at its default: `world.map.things('td.clearings', clearingFields)`
46
+ */
47
+ things(kind, fields = []) {
48
+ const things = mapThings(this.info, kind);
49
+ if (!fields.length) return things;
50
+ return things.map((thing) => {
51
+ const data = { ...thing.data };
52
+ for (const field of fields) if (data[field.id] === void 0 && field.default !== void 0) data[field.id] = field.default;
53
+ return {
54
+ ...thing,
55
+ data
56
+ };
57
+ });
58
+ }
59
+ /** Whether the map has a point or a path of this name */
60
+ has(name) {
61
+ return this.points.some((point) => point.name === name) || this.paths.some((path) => path.name === name);
62
+ }
63
+ /** A point of the map. Throws for one it does not have: a name in the code that is not on the map is a mistake */
64
+ point(name) {
65
+ const point = this.points.find((point) => point.name === name);
66
+ if (!point) throw new Error(`The map${this.named} has no point "${name}"`);
67
+ return {
68
+ x: point.x,
69
+ z: point.z,
70
+ facing: point.facing
71
+ };
72
+ }
73
+ /** A path of the map, to ask how long it is, where along it, what is on it. Throws for one it does not have */
74
+ path(name) {
75
+ const path = this.paths.find((path) => path.name === name);
76
+ if (!path) throw new Error(`The map${this.named} has no path "${name}"`);
77
+ return new Path(path.points, path.width);
78
+ }
79
+ /** What the map looks like, for the screens: its water. Nothing for a world made without a map */
80
+ get environment() {
81
+ return this.info.environment;
82
+ }
83
+ /** The regions of the map, for the screens: what mist in places lies over by name. The rules know them as areas */
84
+ get regions() {
85
+ return this.info.regions ?? [];
86
+ }
87
+ /** The scenery of the map, for the screens: the rules never see it, but where it blocks, which the terrain has */
88
+ get doodads() {
89
+ return this.info.doodads ?? [];
90
+ }
91
+ /** What the map says of a player: who plays them (a person, the computer, nobody) and the game's own fields */
92
+ player(id) {
93
+ return this.info.players?.find((player) => player.id === id);
94
+ }
95
+ /** An item table of the map, by name: what something placed on it drops when it dies */
96
+ itemTable(name) {
97
+ return this.info.itemTables?.find((table) => table.name === name);
98
+ }
99
+ /** The teams of the map, named, and what their players share */
100
+ get forces() {
101
+ return this.info.forces ?? [];
102
+ }
103
+ /** The views of the map saved under names, for the screens */
104
+ get cameras() {
105
+ return this.info.cameras ?? [];
106
+ }
107
+ /** The points of the map, as it has them. None in a world saved before maps had points */
108
+ get points() {
109
+ return this.info.points ?? [];
110
+ }
111
+ /** The paths of the map, as it has them */
112
+ get paths() {
113
+ return this.info.paths ?? [];
114
+ }
115
+ get named() {
116
+ return this.info.name ? ` "${this.info.name}"` : "";
117
+ }
118
+ };
119
+ //#endregion
120
+ export { WorldMap, mapInfo, names };
121
+
122
+ //# sourceMappingURL=names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.js","names":[],"sources":["../src/names.ts"],"sourcesContent":["import type { GameData } from './gameData'\nimport { defineComponent } from './components'\nimport type { EntityId } from './entity'\nimport type { MapCamera, MapDoodad, MapEnvironment, MapForce, MapItemTable, MapPath, MapPlayer, MapPoint, MapRegion } from './map'\nimport { type MapFieldDef, type MapThing, mapThings } from './mapFields'\nimport { Path, type Spot } from './paths'\n\n/**\n * Entities by the names they were given: on a map, where the editor names what the rules have to find (`MapObject.name`),\n * or in code (`SpawnOptions.name`, `world.setName`). The rules ask for \"the gate\", never for a number or a spot on\n * the map. Kept in the world, so that a save has them\n */\nexport const names = defineComponent<Record<string, EntityId>>({ id: 'core.names', default: () => ({}) })\n\n/**\n * What the map a world was made from says that is not an entity, as it is kept in the world: plain data, for a save\n *\n * @beta\n */\nexport interface MapInfo {\n\t/** The map's name (`GameMap.name`) */\n\tname: string\n\t/** What the game kept with the map (`GameMap.data`), plain data the engine never looks inside */\n\tdata: Record<string, unknown>\n\t/** The map's named points, as `world.map.point(name)` finds them */\n\tpoints: MapPoint[]\n\t/** The map's named paths, as `world.map.path(name)` finds them */\n\tpaths: MapPath[]\n\t/** What the map looks like, for the screens (`GameSession.environment`) */\n\tenvironment?: MapEnvironment\n\t/** Its scenery, for the screens (`GameSession.doodads`) */\n\tdoodads?: MapDoodad[]\n\t/** Its regions, for the screens (`GameSession.regions`): what mist in places lies over by name. The rules know them as areas */\n\tregions?: MapRegion[]\n\t/** Its views saved under names, for the screens (`GameSession.cameras`) */\n\tcameras?: MapCamera[]\n\t/** Who plays each player, and the game's own fields of each (with what they are when not set) */\n\tplayers?: MapPlayerInfo[]\n\t/** Its teams, named, and what they share */\n\tforces?: MapForce[]\n\t/** What things placed on it drop when they die (`MapObject.drops`) */\n\titemTables?: MapItemTable[]\n\t/** The map's own definitions (`GameMap.definitions`): what a load of the world lays over the game again */\n\tdefinitions?: GameData\n}\n\n/**\n * What the map says of a player beyond what the world has of them: who plays them, and the game's own fields\n *\n * @beta\n */\nexport interface MapPlayerInfo {\n\t/** The player's id */\n\tid: number\n\t/** Who plays the player: a person, the computer or nobody; the game's to say when left out */\n\tcontroller?: MapPlayer['controller']\n\t/** The game's own fields for the player (`MapPlayer.data`), with the defaults of those not set */\n\tdata: Record<string, unknown>\n}\n\nexport const mapInfo = defineComponent<MapInfo>({ id: 'core.map', default: () => ({ name: '', data: {}, points: [], paths: [] }) })\n\n/**\n * What the map a world was made from says that is not an entity (`World.map`): its name, what the game kept with it,\n * and its points and paths by name. A game can say which names there are: `world.map.path<RoadPaths>('road')`\n *\n * @beta\n */\nexport class WorldMap {\n\tconstructor(private readonly info: MapInfo) {}\n\n\t/** The name of the map. Empty for a world made without one */\n\tget name(): string {\n\t\treturn this.info.name\n\t}\n\n\t/** What the game kept with the map (`GameMap.data`): a difficulty, the waves of this level */\n\tget data(): Record<string, unknown> {\n\t\treturn this.info.data\n\t}\n\n\t/**\n\t * The things of a kind of the game's own that were put on the map (`MapThing`): a tower defense's ground kept clear,\n\t * a MOBA's lanes. None for a kind the map has nothing of. With `fields`, each thing's own (`data`) has what was not\n\t * set at its default: `world.map.things('td.clearings', clearingFields)`\n\t */\n\tthings(kind: string, fields: readonly Pick<MapFieldDef, 'id' | 'default'>[] = []): MapThing[] {\n\t\tconst things = mapThings(this.info, kind)\n\t\tif (!fields.length) return things\n\t\treturn things.map((thing) => {\n\t\t\tconst data = { ...thing.data }\n\t\t\tfor (const field of fields) if (data[field.id] === undefined && field.default !== undefined) data[field.id] = field.default\n\t\t\treturn { ...thing, data }\n\t\t})\n\t}\n\n\t/** Whether the map has a point or a path of this name */\n\thas(name: string): boolean {\n\t\treturn this.points.some((point) => point.name === name) || this.paths.some((path) => path.name === name)\n\t}\n\n\t/** A point of the map. Throws for one it does not have: a name in the code that is not on the map is a mistake */\n\tpoint<Name extends string = string>(name: Name): Spot {\n\t\tconst point = this.points.find((point) => point.name === name)\n\t\tif (!point) throw new Error(`The map${this.named} has no point \"${name}\"`)\n\t\treturn { x: point.x, z: point.z, facing: point.facing }\n\t}\n\n\t/** A path of the map, to ask how long it is, where along it, what is on it. Throws for one it does not have */\n\tpath<Name extends string = string>(name: Name): Path {\n\t\tconst path = this.paths.find((path) => path.name === name)\n\t\tif (!path) throw new Error(`The map${this.named} has no path \"${name}\"`)\n\t\treturn new Path(path.points, path.width)\n\t}\n\n\t/** What the map looks like, for the screens: its water. Nothing for a world made without a map */\n\tget environment(): MapEnvironment | undefined {\n\t\treturn this.info.environment\n\t}\n\n\t/** The regions of the map, for the screens: what mist in places lies over by name. The rules know them as areas */\n\tget regions(): readonly MapRegion[] {\n\t\treturn this.info.regions ?? []\n\t}\n\n\t/** The scenery of the map, for the screens: the rules never see it, but where it blocks, which the terrain has */\n\tget doodads(): readonly MapDoodad[] {\n\t\treturn this.info.doodads ?? []\n\t}\n\n\t/** What the map says of a player: who plays them (a person, the computer, nobody) and the game's own fields */\n\tplayer(id: number): MapPlayerInfo | undefined {\n\t\treturn this.info.players?.find((player) => player.id === id)\n\t}\n\n\t/** An item table of the map, by name: what something placed on it drops when it dies */\n\titemTable(name: string): MapItemTable | undefined {\n\t\treturn this.info.itemTables?.find((table) => table.name === name)\n\t}\n\n\t/** The teams of the map, named, and what their players share */\n\tget forces(): readonly MapForce[] {\n\t\treturn this.info.forces ?? []\n\t}\n\n\t/** The views of the map saved under names, for the screens */\n\tget cameras(): readonly MapCamera[] {\n\t\treturn this.info.cameras ?? []\n\t}\n\n\t/** The points of the map, as it has them. None in a world saved before maps had points */\n\tget points(): readonly MapPoint[] {\n\t\treturn this.info.points ?? []\n\t}\n\n\t/** The paths of the map, as it has them */\n\tget paths(): readonly MapPath[] {\n\t\treturn this.info.paths ?? []\n\t}\n\n\tprivate get named(): string {\n\t\treturn this.info.name ? ` \"${this.info.name}\"` : ''\n\t}\n}\n"],"mappings":";;;;;;;;;AAYA,IAAa,QAAQ,gBAA0C;CAAE,IAAI;CAAc,gBAAgB,CAAC;AAAG,CAAC;AAgDxG,IAAa,UAAU,gBAAyB;CAAE,IAAI;CAAY,gBAAgB;EAAE,MAAM;EAAI,MAAM,CAAC;EAAG,QAAQ,CAAC;EAAG,OAAO,CAAC;CAAE;AAAG,CAAC;;;;;;;AAQlI,IAAa,WAAb,MAAsB;CACQ;CAA7B,YAAY,MAAgC;EAAf,KAAA,OAAA;CAAgB;;CAG7C,IAAI,OAAe;EAClB,OAAO,KAAK,KAAK;CAClB;;CAGA,IAAI,OAAgC;EACnC,OAAO,KAAK,KAAK;CAClB;;;;;;CAOA,OAAO,MAAc,SAAyD,CAAC,GAAe;EAC7F,MAAM,SAAS,UAAU,KAAK,MAAM,IAAI;EACxC,IAAI,CAAC,OAAO,QAAQ,OAAO;EAC3B,OAAO,OAAO,KAAK,UAAU;GAC5B,MAAM,OAAO,EAAE,GAAG,MAAM,KAAK;GAC7B,KAAK,MAAM,SAAS,QAAQ,IAAI,KAAK,MAAM,QAAQ,KAAA,KAAa,MAAM,YAAY,KAAA,GAAW,KAAK,MAAM,MAAM,MAAM;GACpH,OAAO;IAAE,GAAG;IAAO;GAAK;EACzB,CAAC;CACF;;CAGA,IAAI,MAAuB;EAC1B,OAAO,KAAK,OAAO,MAAM,UAAU,MAAM,SAAS,IAAI,KAAK,KAAK,MAAM,MAAM,SAAS,KAAK,SAAS,IAAI;CACxG;;CAGA,MAAoC,MAAkB;EACrD,MAAM,QAAQ,KAAK,OAAO,MAAM,UAAU,MAAM,SAAS,IAAI;EAC7D,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,UAAU,KAAK,MAAM,iBAAiB,KAAK,EAAE;EACzE,OAAO;GAAE,GAAG,MAAM;GAAG,GAAG,MAAM;GAAG,QAAQ,MAAM;EAAO;CACvD;;CAGA,KAAmC,MAAkB;EACpD,MAAM,OAAO,KAAK,MAAM,MAAM,SAAS,KAAK,SAAS,IAAI;EACzD,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,UAAU,KAAK,MAAM,gBAAgB,KAAK,EAAE;EACvE,OAAO,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK;CACxC;;CAGA,IAAI,cAA0C;EAC7C,OAAO,KAAK,KAAK;CAClB;;CAGA,IAAI,UAAgC;EACnC,OAAO,KAAK,KAAK,WAAW,CAAC;CAC9B;;CAGA,IAAI,UAAgC;EACnC,OAAO,KAAK,KAAK,WAAW,CAAC;CAC9B;;CAGA,OAAO,IAAuC;EAC7C,OAAO,KAAK,KAAK,SAAS,MAAM,WAAW,OAAO,OAAO,EAAE;CAC5D;;CAGA,UAAU,MAAwC;EACjD,OAAO,KAAK,KAAK,YAAY,MAAM,UAAU,MAAM,SAAS,IAAI;CACjE;;CAGA,IAAI,SAA8B;EACjC,OAAO,KAAK,KAAK,UAAU,CAAC;CAC7B;;CAGA,IAAI,UAAgC;EACnC,OAAO,KAAK,KAAK,WAAW,CAAC;CAC9B;;CAGA,IAAI,SAA8B;EACjC,OAAO,KAAK,KAAK,UAAU,CAAC;CAC7B;;CAGA,IAAI,QAA4B;EAC/B,OAAO,KAAK,KAAK,SAAS,CAAC;CAC5B;CAEA,IAAY,QAAgB;EAC3B,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK;CAClD;AACD"}
@@ -0,0 +1,14 @@
1
+ //#region src/navigation/agentParams.ts
2
+ /** What the navigation is told of a unit when it takes it on as an agent: one place for every site that adds one again */
3
+ function agentParamsOf(entity, speed) {
4
+ return {
5
+ radius: entity.def.radius,
6
+ speed,
7
+ flying: entity.flying,
8
+ naval: entity.def.naval
9
+ };
10
+ }
11
+ //#endregion
12
+ export { agentParamsOf };
13
+
14
+ //# sourceMappingURL=agentParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentParams.js","names":[],"sources":["../../src/navigation/agentParams.ts"],"sourcesContent":["import type { Entity } from '#engine/entity'\nimport type { AgentParams } from './navigation'\n\n/** What the navigation is told of a unit when it takes it on as an agent: one place for every site that adds one again */\nexport function agentParamsOf(entity: Entity, speed: number): AgentParams {\n\treturn { radius: entity.def.radius, speed, flying: entity.flying, naval: entity.def.naval }\n}\n"],"mappings":";;AAIA,SAAgB,cAAc,QAAgB,OAA4B;CACzE,OAAO;EAAE,QAAQ,OAAO,IAAI;EAAQ;EAAO,QAAQ,OAAO;EAAQ,OAAO,OAAO,IAAI;CAAM;AAC3F"}
@@ -1,5 +1,5 @@
1
1
  import type { Rect, Vec2 } from '#engine/math';
2
- import type { AgentParams, AgentSave, AgentState, NavDebugGeometry, Navigation } from './navigation';
2
+ import type { AgentParams, AgentSave, AgentState, CellArea, NavDebugGeometry, Navigation } from './navigation';
3
3
  /**
4
4
  * Where flyers move. There is nothing in the way up there but other flyers and the edge of the map,
5
5
  * so they go straight to where they are sent and only keep from flying inside one another.
@@ -23,6 +23,7 @@ export declare class AirNavigation implements Navigation {
23
23
  teleport(id: number, position: Vec2): void;
24
24
  setAnchored(id: number, anchored: boolean): void;
25
25
  setGhost(id: number, ghost: boolean): void;
26
+ setPhasing(id: number, phasing: boolean): void;
26
27
  setSpeed(id: number, speed: number): void;
27
28
  readAgent(id: number, out: AgentState): boolean;
28
29
  update(dt: number): void;
@@ -66,6 +67,7 @@ export declare class LayeredNavigation implements Navigation {
66
67
  teleport(id: number, position: Vec2): void;
67
68
  setAnchored(id: number, anchored: boolean): void;
68
69
  setGhost(id: number, ghost: boolean): void;
70
+ setPhasing(id: number, phasing: boolean): void;
69
71
  setSpeed(id: number, speed: number): void;
70
72
  readAgent(id: number, out: AgentState): boolean;
71
73
  saveAgent(id: number): AgentSave | undefined;
@@ -73,9 +75,11 @@ export declare class LayeredNavigation implements Navigation {
73
75
  reseat(agents: readonly (readonly [id: number, save: AgentSave])[]): void;
74
76
  settle(version: number): void;
75
77
  /** Slow ground is the ground's: what flies or sails goes at one speed (EN2) */
76
- groundChanged(cells: readonly number[]): void;
78
+ groundChanged(cells: readonly number[], walkability?: boolean): void;
77
79
  /** The ground's and the water's cut again of the ground as it is now: what flies goes over it all the same */
78
- reshape(): boolean;
80
+ reshape(area?: CellArea): boolean;
81
+ /** What the ground's changes asked of the ground's and the water's navigations done now */
82
+ settleGround(): void;
79
83
  update(dt: number): void;
80
84
  addObstacle(key: number, rect: Rect): boolean;
81
85
  obstacleRoom(): number;
@@ -0,0 +1,401 @@
1
+ import { hypot } from "../exactMath.js";
2
+ //#region src/navigation/air.ts
3
+ /** How hard flyers that overlap push each other apart, in units per second per unit of overlap */
4
+ var SEPARATION = 6;
5
+ /** Seconds a flyer takes to get up to speed or to turn around */
6
+ var INERTIA = .15;
7
+ /** A cell's key is its column times this, plus its row: room for a map's cells however small they are */
8
+ var CELL_ROW = 1 << 20;
9
+ /**
10
+ * Where flyers move. There is nothing in the way up there but other flyers and the edge of the map,
11
+ * so they go straight to where they are sent and only keep from flying inside one another.
12
+ */
13
+ var AirNavigation = class {
14
+ width;
15
+ depth;
16
+ version = 0;
17
+ flyers = /* @__PURE__ */ new Map();
18
+ constructor(width, depth) {
19
+ this.width = width;
20
+ this.depth = depth;
21
+ }
22
+ inside(point) {
23
+ return {
24
+ x: Math.min(Math.max(point.x, .5), this.width - .5),
25
+ z: Math.min(Math.max(point.z, .5), this.depth - .5)
26
+ };
27
+ }
28
+ addAgent(id, position, params) {
29
+ const { x, z } = this.inside(position);
30
+ this.flyers.set(id, {
31
+ id,
32
+ x,
33
+ z,
34
+ vx: 0,
35
+ vz: 0,
36
+ radius: params.radius,
37
+ speed: params.speed,
38
+ target: null,
39
+ anchored: false,
40
+ ghost: false
41
+ });
42
+ }
43
+ removeAgent(id) {
44
+ this.flyers.delete(id);
45
+ }
46
+ saveAgent(id) {
47
+ const flyer = this.flyers.get(id);
48
+ if (!flyer) return void 0;
49
+ const { x, z, vx, vz, radius, speed, target, anchored, ghost, phasing } = flyer;
50
+ return {
51
+ x,
52
+ z,
53
+ vx,
54
+ vz,
55
+ radius,
56
+ speed,
57
+ flying: true,
58
+ target: target && {
59
+ x: target.x,
60
+ z: target.z
61
+ },
62
+ anchored,
63
+ ghost,
64
+ ...phasing && { phasing }
65
+ };
66
+ }
67
+ reseat(agents) {
68
+ this.flyers.clear();
69
+ for (const [id, save] of agents) this.restoreAgent(id, save);
70
+ }
71
+ restoreAgent(id, save) {
72
+ const { x, z, vx, vz, radius, speed, target, anchored, ghost, phasing } = save;
73
+ this.flyers.set(id, {
74
+ id,
75
+ x,
76
+ z,
77
+ vx,
78
+ vz,
79
+ radius,
80
+ speed,
81
+ target: target && {
82
+ x: target.x,
83
+ z: target.z
84
+ },
85
+ anchored,
86
+ ghost,
87
+ ...phasing && { phasing }
88
+ });
89
+ }
90
+ settle() {}
91
+ hasAgent(id) {
92
+ return this.flyers.has(id);
93
+ }
94
+ setDestination(id, target) {
95
+ const flyer = this.flyers.get(id);
96
+ if (!flyer) return false;
97
+ flyer.target = this.inside(target);
98
+ flyer.anchored = false;
99
+ return true;
100
+ }
101
+ clearDestination(id) {
102
+ const flyer = this.flyers.get(id);
103
+ if (flyer) flyer.target = null;
104
+ }
105
+ teleport(id, position) {
106
+ const flyer = this.flyers.get(id);
107
+ if (!flyer) return;
108
+ const { x, z } = this.inside(position);
109
+ flyer.x = x;
110
+ flyer.z = z;
111
+ }
112
+ setAnchored(id, anchored) {
113
+ const flyer = this.flyers.get(id);
114
+ if (!flyer) return;
115
+ flyer.anchored = anchored;
116
+ if (anchored) flyer.target = null;
117
+ }
118
+ setGhost(id, ghost) {
119
+ const flyer = this.flyers.get(id);
120
+ if (flyer) flyer.ghost = ghost;
121
+ }
122
+ setPhasing(id, phasing) {
123
+ const flyer = this.flyers.get(id);
124
+ if (!flyer) return;
125
+ if (phasing) flyer.phasing = true;
126
+ else delete flyer.phasing;
127
+ }
128
+ setSpeed(id, speed) {
129
+ const flyer = this.flyers.get(id);
130
+ if (flyer) flyer.speed = speed;
131
+ }
132
+ readAgent(id, out) {
133
+ const flyer = this.flyers.get(id);
134
+ if (!flyer) return false;
135
+ out.x = flyer.x;
136
+ out.z = flyer.z;
137
+ out.vx = flyer.vx;
138
+ out.vz = flyer.vz;
139
+ out.cx = out.nx = flyer.target?.x ?? flyer.x;
140
+ out.cz = out.nz = flyer.target?.z ?? flyer.z;
141
+ return true;
142
+ }
143
+ update(dt) {
144
+ const flyers = [...this.flyers.values()];
145
+ const blend = Math.min(dt / INERTIA, 1);
146
+ const cells = this.cellsOf(flyers);
147
+ const near = [];
148
+ for (let i = 0; i < flyers.length; i++) {
149
+ const flyer = flyers[i];
150
+ let wantX = 0;
151
+ let wantZ = 0;
152
+ if (flyer.target && !flyer.anchored) {
153
+ const dx = flyer.target.x - flyer.x;
154
+ const dz = flyer.target.z - flyer.z;
155
+ const distance = hypot(dx, dz);
156
+ if (distance > 1e-4) {
157
+ const speed = Math.min(flyer.speed, distance / dt);
158
+ wantX = dx / distance * speed;
159
+ wantZ = dz / distance * speed;
160
+ }
161
+ }
162
+ if (!flyer.anchored && !flyer.ghost && !flyer.phasing) {
163
+ near.length = 0;
164
+ const cx = Math.floor(flyer.x / cells.size);
165
+ const cz = Math.floor(flyer.z / cells.size);
166
+ for (let x = cx - 1; x <= cx + 1; x++) for (let z = cz - 1; z <= cz + 1; z++) {
167
+ const cell = cells.of.get(x * CELL_ROW + z);
168
+ if (cell) for (const j of cell) near.push(j);
169
+ }
170
+ near.sort((a, b) => a - b);
171
+ for (const j of near) {
172
+ const other = flyers[j];
173
+ if (other === flyer) continue;
174
+ const dx = flyer.x - other.x;
175
+ const dz = flyer.z - other.z;
176
+ const reach = flyer.radius + other.radius;
177
+ const distance = hypot(dx, dz);
178
+ if (distance >= reach) continue;
179
+ const push = (reach - distance) * SEPARATION;
180
+ const nx = distance > 1e-4 ? dx / distance : flyer.id < other.id ? 1 : -1;
181
+ const nz = distance > 1e-4 ? dz / distance : 0;
182
+ wantX += nx * push;
183
+ wantZ += nz * push;
184
+ }
185
+ }
186
+ flyer.vx += (wantX - flyer.vx) * blend;
187
+ flyer.vz += (wantZ - flyer.vz) * blend;
188
+ }
189
+ for (const flyer of flyers) {
190
+ if (flyer.anchored) {
191
+ flyer.vx = flyer.vz = 0;
192
+ continue;
193
+ }
194
+ const { x, z } = this.inside({
195
+ x: flyer.x + flyer.vx * dt,
196
+ z: flyer.z + flyer.vz * dt
197
+ });
198
+ flyer.x = x;
199
+ flyer.z = z;
200
+ }
201
+ }
202
+ /**
203
+ * The flyers that push (all but ghosts), by cells twice the widest one's radius across: two that overlap are in the
204
+ * same cell or next to each other, so each looks at its own cell and the eight about it, not at every flyer
205
+ */
206
+ cellsOf(flyers) {
207
+ let widest = 0;
208
+ for (const flyer of flyers) if (!flyer.ghost && !flyer.phasing) widest = Math.max(widest, flyer.radius);
209
+ const size = widest * 2 * 1.001 + 1e-6;
210
+ const of = /* @__PURE__ */ new Map();
211
+ for (let i = 0; i < flyers.length; i++) {
212
+ const flyer = flyers[i];
213
+ if (flyer.ghost || flyer.phasing) continue;
214
+ const key = Math.floor(flyer.x / size) * CELL_ROW + Math.floor(flyer.z / size);
215
+ const cell = of.get(key);
216
+ if (cell) cell.push(i);
217
+ else of.set(key, [i]);
218
+ }
219
+ return {
220
+ size,
221
+ of
222
+ };
223
+ }
224
+ addObstacle(_key, _rect) {
225
+ return true;
226
+ }
227
+ obstacleRoom() {
228
+ return Infinity;
229
+ }
230
+ removeObstacle(_key) {}
231
+ closestPoint(point) {
232
+ return this.inside(point);
233
+ }
234
+ findPath(from, to) {
235
+ return [this.inside(from), this.inside(to)];
236
+ }
237
+ debugGeometry() {
238
+ return {
239
+ triangles: /* @__PURE__ */ new Float32Array(0),
240
+ lines: /* @__PURE__ */ new Float32Array(0)
241
+ };
242
+ }
243
+ dispose() {
244
+ this.flyers.clear();
245
+ }
246
+ };
247
+ /** How far from the water a boat sent onto land still finds the water nearest where it was sent */
248
+ var NAVAL_REACH = 40;
249
+ /**
250
+ * The ground, the air and the water as one: agents are told apart when they are added and find their own layer from
251
+ * then on. Everything that is not about an agent, like obstacles and looking for walkable ground, is about the ground.
252
+ * Boats go on the ground where the map has no water to go on (`water` is left out)
253
+ */
254
+ var LayeredNavigation = class {
255
+ ground;
256
+ air;
257
+ water;
258
+ flying = /* @__PURE__ */ new Set();
259
+ naval = /* @__PURE__ */ new Set();
260
+ constructor(ground, air, water) {
261
+ this.ground = ground;
262
+ this.air = air;
263
+ this.water = water;
264
+ }
265
+ get version() {
266
+ return this.ground.version;
267
+ }
268
+ of(id) {
269
+ return this.flying.has(id) ? this.air : this.naval.has(id) && this.water ? this.water : this.ground;
270
+ }
271
+ /** The layer of a kind of agent: for finding where one can be put */
272
+ layer(kind) {
273
+ return kind.flying ? this.air : kind.naval && this.water ? this.water : this.ground;
274
+ }
275
+ addAgent(id, position, params) {
276
+ this.removeAgent(id);
277
+ if (params.flying) this.flying.add(id);
278
+ else if (params.naval) this.naval.add(id);
279
+ this.of(id).addAgent(id, position, params);
280
+ }
281
+ removeAgent(id) {
282
+ this.of(id).removeAgent(id);
283
+ this.flying.delete(id);
284
+ this.naval.delete(id);
285
+ }
286
+ hasAgent(id) {
287
+ return this.of(id).hasAgent(id);
288
+ }
289
+ setDestination(id, target) {
290
+ const layer = this.of(id);
291
+ if (this.naval.has(id) && layer === this.water) return layer.setDestination(id, layer.closestPoint(target, NAVAL_REACH) ?? target);
292
+ return layer.setDestination(id, target);
293
+ }
294
+ clearDestination(id) {
295
+ this.of(id).clearDestination(id);
296
+ }
297
+ teleport(id, position) {
298
+ this.of(id).teleport(id, position);
299
+ }
300
+ setAnchored(id, anchored) {
301
+ this.of(id).setAnchored(id, anchored);
302
+ }
303
+ setGhost(id, ghost) {
304
+ this.of(id).setGhost(id, ghost);
305
+ }
306
+ setPhasing(id, phasing) {
307
+ const layer = this.of(id);
308
+ if (layer.setPhasing) layer.setPhasing(id, phasing);
309
+ else layer.setGhost(id, phasing);
310
+ }
311
+ setSpeed(id, speed) {
312
+ this.of(id).setSpeed(id, speed);
313
+ }
314
+ readAgent(id, out) {
315
+ return this.of(id).readAgent(id, out);
316
+ }
317
+ saveAgent(id) {
318
+ const save = this.of(id).saveAgent(id);
319
+ return save && {
320
+ ...save,
321
+ flying: this.flying.has(id) || void 0,
322
+ naval: this.naval.has(id) || void 0
323
+ };
324
+ }
325
+ restoreAgent(id, save) {
326
+ this.removeAgent(id);
327
+ if (save.flying) this.flying.add(id);
328
+ else if (save.naval) this.naval.add(id);
329
+ this.of(id).restoreAgent(id, save);
330
+ }
331
+ reseat(agents) {
332
+ this.flying.clear();
333
+ this.naval.clear();
334
+ for (const [id, save] of agents) if (save.flying) this.flying.add(id);
335
+ else if (save.naval) this.naval.add(id);
336
+ const sails = (save) => !save.flying && !!save.naval && !!this.water;
337
+ this.ground.reseat(agents.filter(([, save]) => !save.flying && !sails(save)));
338
+ this.air.reseat(agents.filter(([, save]) => !!save.flying));
339
+ this.water?.reseat(agents.filter(([, save]) => sails(save)));
340
+ }
341
+ settle(version) {
342
+ this.ground.settle(version);
343
+ this.air.settle(version);
344
+ this.water?.settle(version);
345
+ }
346
+ /** Slow ground is the ground's: what flies or sails goes at one speed (EN2) */
347
+ groundChanged(cells, walkability) {
348
+ this.ground.groundChanged?.(cells, walkability);
349
+ }
350
+ /** The ground's and the water's cut again of the ground as it is now: what flies goes over it all the same */
351
+ reshape(area) {
352
+ const ground = !!this.ground.reshape?.(area);
353
+ const water = !!this.water?.reshape?.(area);
354
+ return ground || water;
355
+ }
356
+ /** What the ground's changes asked of the ground's and the water's navigations done now */
357
+ settleGround() {
358
+ this.ground.settleGround?.();
359
+ this.water?.settleGround?.();
360
+ }
361
+ update(dt) {
362
+ this.ground.update(dt);
363
+ this.air.update(dt);
364
+ this.water?.update(dt);
365
+ }
366
+ addObstacle(key, rect) {
367
+ return this.ground.addObstacle(key, rect);
368
+ }
369
+ obstacleRoom() {
370
+ return this.ground.obstacleRoom();
371
+ }
372
+ holdObstacles(hold) {
373
+ this.ground.holdObstacles?.(hold);
374
+ }
375
+ removeObstacle(key) {
376
+ this.ground.removeObstacle(key);
377
+ }
378
+ sameCrowd(a, b) {
379
+ const layer = this.of(a);
380
+ if (layer !== this.of(b)) return false;
381
+ return layer.sameCrowd?.(a, b) ?? true;
382
+ }
383
+ closestPoint(point, searchRadius) {
384
+ return this.ground.closestPoint(point, searchRadius);
385
+ }
386
+ findPath(from, to) {
387
+ return this.ground.findPath(from, to);
388
+ }
389
+ debugGeometry() {
390
+ return this.ground.debugGeometry();
391
+ }
392
+ dispose() {
393
+ this.ground.dispose();
394
+ this.air.dispose();
395
+ this.water?.dispose();
396
+ }
397
+ };
398
+ //#endregion
399
+ export { AirNavigation, LayeredNavigation };
400
+
401
+ //# sourceMappingURL=air.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"air.js","names":[],"sources":["../../src/navigation/air.ts"],"sourcesContent":["import type { Rect, Vec2 } from '#engine/math'\nimport type { AgentParams, AgentSave, AgentState, CellArea, NavDebugGeometry, Navigation } from './navigation'\nimport { hypot } from '#engine/exactMath'\n\ninterface Flyer {\n\tid: number\n\tx: number\n\tz: number\n\tvx: number\n\tvz: number\n\tradius: number\n\tspeed: number\n\ttarget: Vec2 | null\n\tanchored: boolean\n\tghost: boolean\n\t/** It phases (`setPhasing`): pushes nobody and is pushed by nobody, as a ghost */\n\tphasing?: boolean\n}\n\n/** How hard flyers that overlap push each other apart, in units per second per unit of overlap */\nconst SEPARATION = 6\n/** Seconds a flyer takes to get up to speed or to turn around */\nconst INERTIA = 0.15\n/** A cell's key is its column times this, plus its row: room for a map's cells however small they are */\nconst CELL_ROW = 1 << 20\n\n/**\n * Where flyers move. There is nothing in the way up there but other flyers and the edge of the map,\n * so they go straight to where they are sent and only keep from flying inside one another.\n */\nexport class AirNavigation implements Navigation {\n\treadonly version = 0\n\tprivate readonly flyers = new Map<number, Flyer>()\n\n\tconstructor(\n\t\tprivate readonly width: number,\n\t\tprivate readonly depth: number\n\t) {}\n\n\tprivate inside(point: Vec2): Vec2 {\n\t\treturn { x: Math.min(Math.max(point.x, 0.5), this.width - 0.5), z: Math.min(Math.max(point.z, 0.5), this.depth - 0.5) }\n\t}\n\n\taddAgent(id: number, position: Vec2, params: AgentParams): void {\n\t\tconst { x, z } = this.inside(position)\n\t\tthis.flyers.set(id, { id, x, z, vx: 0, vz: 0, radius: params.radius, speed: params.speed, target: null, anchored: false, ghost: false })\n\t}\n\n\tremoveAgent(id: number): void {\n\t\tthis.flyers.delete(id)\n\t}\n\n\tsaveAgent(id: number): AgentSave | undefined {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return undefined\n\t\tconst { x, z, vx, vz, radius, speed, target, anchored, ghost, phasing } = flyer\n\t\treturn { x, z, vx, vz, radius, speed, flying: true, target: target && { x: target.x, z: target.z }, anchored, ghost, ...(phasing && { phasing }) }\n\t}\n\n\treseat(agents: readonly (readonly [id: number, save: AgentSave])[]): void {\n\t\t// flyers are gone through in the order they came: the save's, as a world loaded from it has them\n\t\tthis.flyers.clear()\n\t\tfor (const [id, save] of agents) this.restoreAgent(id, save)\n\t}\n\n\t// up here nothing is worked out ahead, so a flyer comes back exactly as it was\n\trestoreAgent(id: number, save: AgentSave): void {\n\t\tconst { x, z, vx, vz, radius, speed, target, anchored, ghost, phasing } = save\n\t\tthis.flyers.set(id, { id, x, z, vx, vz, radius, speed, target: target && { x: target.x, z: target.z }, anchored, ghost, ...(phasing && { phasing }) })\n\t}\n\n\tsettle(): void {}\n\n\thasAgent(id: number): boolean {\n\t\treturn this.flyers.has(id)\n\t}\n\n\tsetDestination(id: number, target: Vec2): boolean {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return false\n\t\tflyer.target = this.inside(target)\n\t\tflyer.anchored = false\n\t\treturn true\n\t}\n\n\tclearDestination(id: number): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (flyer) flyer.target = null\n\t}\n\n\tteleport(id: number, position: Vec2): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return\n\t\tconst { x, z } = this.inside(position)\n\t\tflyer.x = x\n\t\tflyer.z = z\n\t}\n\n\tsetAnchored(id: number, anchored: boolean): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return\n\t\tflyer.anchored = anchored\n\t\tif (anchored) flyer.target = null\n\t}\n\n\tsetGhost(id: number, ghost: boolean): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (flyer) flyer.ghost = ghost\n\t}\n\n\tsetPhasing(id: number, phasing: boolean): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return\n\t\tif (phasing) flyer.phasing = true\n\t\telse delete flyer.phasing\n\t}\n\n\tsetSpeed(id: number, speed: number): void {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (flyer) flyer.speed = speed\n\t}\n\n\treadAgent(id: number, out: AgentState): boolean {\n\t\tconst flyer = this.flyers.get(id)\n\t\tif (!flyer) return false\n\t\tout.x = flyer.x\n\t\tout.z = flyer.z\n\t\tout.vx = flyer.vx\n\t\tout.vz = flyer.vz\n\t\t// nothing to go around up here\n\t\tout.cx = out.nx = flyer.target?.x ?? flyer.x\n\t\tout.cz = out.nz = flyer.target?.z ?? flyer.z\n\t\treturn true\n\t}\n\n\tupdate(dt: number): void {\n\t\tconst flyers = [...this.flyers.values()]\n\t\tconst blend = Math.min(dt / INERTIA, 1)\n\t\tconst cells = this.cellsOf(flyers)\n\t\tconst near: number[] = []\n\t\tfor (let i = 0; i < flyers.length; i++) {\n\t\t\tconst flyer = flyers[i]\n\t\t\tlet wantX = 0\n\t\t\tlet wantZ = 0\n\t\t\tif (flyer.target && !flyer.anchored) {\n\t\t\t\tconst dx = flyer.target.x - flyer.x\n\t\t\t\tconst dz = flyer.target.z - flyer.z\n\t\t\t\tconst distance = hypot(dx, dz)\n\t\t\t\tif (distance > 1e-4) {\n\t\t\t\t\t// no faster than it takes to get there in this tick\n\t\t\t\t\tconst speed = Math.min(flyer.speed, distance / dt)\n\t\t\t\t\twantX = (dx / distance) * speed\n\t\t\t\t\twantZ = (dz / distance) * speed\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!flyer.anchored && !flyer.ghost && !flyer.phasing) {\n\t\t\t\t// those in the cells about it, in the order they came, as going through them all adds them up (RV42)\n\t\t\t\tnear.length = 0\n\t\t\t\tconst cx = Math.floor(flyer.x / cells.size)\n\t\t\t\tconst cz = Math.floor(flyer.z / cells.size)\n\t\t\t\tfor (let x = cx - 1; x <= cx + 1; x++) {\n\t\t\t\t\tfor (let z = cz - 1; z <= cz + 1; z++) {\n\t\t\t\t\t\tconst cell = cells.of.get(x * CELL_ROW + z)\n\t\t\t\t\t\tif (cell) for (const j of cell) near.push(j)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnear.sort((a, b) => a - b)\n\t\t\t\tfor (const j of near) {\n\t\t\t\t\tconst other = flyers[j]\n\t\t\t\t\tif (other === flyer) continue\n\t\t\t\t\tconst dx = flyer.x - other.x\n\t\t\t\t\tconst dz = flyer.z - other.z\n\t\t\t\t\tconst reach = flyer.radius + other.radius\n\t\t\t\t\tconst distance = hypot(dx, dz)\n\t\t\t\t\tif (distance >= reach) continue\n\t\t\t\t\tconst push = (reach - distance) * SEPARATION\n\t\t\t\t\t// right on top of each other: apart along a line that is the same every time\n\t\t\t\t\tconst nx = distance > 1e-4 ? dx / distance : flyer.id < other.id ? 1 : -1\n\t\t\t\t\tconst nz = distance > 1e-4 ? dz / distance : 0\n\t\t\t\t\twantX += nx * push\n\t\t\t\t\twantZ += nz * push\n\t\t\t\t}\n\t\t\t}\n\t\t\tflyer.vx += (wantX - flyer.vx) * blend\n\t\t\tflyer.vz += (wantZ - flyer.vz) * blend\n\t\t}\n\t\tfor (const flyer of flyers) {\n\t\t\tif (flyer.anchored) {\n\t\t\t\tflyer.vx = flyer.vz = 0\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { x, z } = this.inside({ x: flyer.x + flyer.vx * dt, z: flyer.z + flyer.vz * dt })\n\t\t\tflyer.x = x\n\t\t\tflyer.z = z\n\t\t}\n\t}\n\n\t/**\n\t * The flyers that push (all but ghosts), by cells twice the widest one's radius across: two that overlap are in the\n\t * same cell or next to each other, so each looks at its own cell and the eight about it, not at every flyer\n\t */\n\tprivate cellsOf(flyers: readonly Flyer[]): { size: number; of: Map<number, number[]> } {\n\t\tlet widest = 0\n\t\tfor (const flyer of flyers) if (!flyer.ghost && !flyer.phasing) widest = Math.max(widest, flyer.radius)\n\t\t// a hair more, so that rounding never puts two that touch two cells apart\n\t\tconst size = widest * 2 * 1.001 + 1e-6\n\t\tconst of = new Map<number, number[]>()\n\t\tfor (let i = 0; i < flyers.length; i++) {\n\t\t\tconst flyer = flyers[i]\n\t\t\tif (flyer.ghost || flyer.phasing) continue\n\t\t\tconst key = Math.floor(flyer.x / size) * CELL_ROW + Math.floor(flyer.z / size)\n\t\t\tconst cell = of.get(key)\n\t\t\tif (cell) cell.push(i)\n\t\t\telse of.set(key, [i])\n\t\t}\n\t\treturn { size, of }\n\t}\n\n\taddObstacle(_key: number, _rect: Rect): boolean {\n\t\treturn true\n\t}\n\n\tobstacleRoom(): number {\n\t\treturn Infinity\n\t}\n\n\tremoveObstacle(_key: number): void {}\n\n\tclosestPoint(point: Vec2): Vec2 {\n\t\treturn this.inside(point)\n\t}\n\n\tfindPath(from: Vec2, to: Vec2): Vec2[] {\n\t\treturn [this.inside(from), this.inside(to)]\n\t}\n\n\tdebugGeometry(): NavDebugGeometry {\n\t\treturn { triangles: new Float32Array(0), lines: new Float32Array(0) }\n\t}\n\n\tdispose(): void {\n\t\tthis.flyers.clear()\n\t}\n}\n\n/** How far from the water a boat sent onto land still finds the water nearest where it was sent */\nconst NAVAL_REACH = 40\n\n/**\n * The ground, the air and the water as one: agents are told apart when they are added and find their own layer from\n * then on. Everything that is not about an agent, like obstacles and looking for walkable ground, is about the ground.\n * Boats go on the ground where the map has no water to go on (`water` is left out)\n */\nexport class LayeredNavigation implements Navigation {\n\tprivate readonly flying = new Set<number>()\n\tprivate readonly naval = new Set<number>()\n\n\tconstructor(\n\t\treadonly ground: Navigation,\n\t\treadonly air: Navigation,\n\t\treadonly water?: Navigation\n\t) {}\n\n\tget version(): number {\n\t\treturn this.ground.version\n\t}\n\n\tprivate of(id: number): Navigation {\n\t\treturn this.flying.has(id) ? this.air : this.naval.has(id) && this.water ? this.water : this.ground\n\t}\n\n\t/** The layer of a kind of agent: for finding where one can be put */\n\tlayer(kind: { flying?: boolean; naval?: boolean }): Navigation {\n\t\treturn kind.flying ? this.air : kind.naval && this.water ? this.water : this.ground\n\t}\n\n\taddAgent(id: number, position: Vec2, params: AgentParams): void {\n\t\tthis.removeAgent(id)\n\t\tif (params.flying) this.flying.add(id)\n\t\telse if (params.naval) this.naval.add(id)\n\t\tthis.of(id).addAgent(id, position, params)\n\t}\n\n\tremoveAgent(id: number): void {\n\t\tthis.of(id).removeAgent(id)\n\t\tthis.flying.delete(id)\n\t\tthis.naval.delete(id)\n\t}\n\n\thasAgent(id: number): boolean {\n\t\treturn this.of(id).hasAgent(id)\n\t}\n\n\tsetDestination(id: number, target: Vec2): boolean {\n\t\tconst layer = this.of(id)\n\t\t// a boat sent onto land goes to the water nearest it\n\t\tif (this.naval.has(id) && layer === this.water) return layer.setDestination(id, layer.closestPoint(target, NAVAL_REACH) ?? target)\n\t\treturn layer.setDestination(id, target)\n\t}\n\n\tclearDestination(id: number): void {\n\t\tthis.of(id).clearDestination(id)\n\t}\n\n\tteleport(id: number, position: Vec2): void {\n\t\tthis.of(id).teleport(id, position)\n\t}\n\n\tsetAnchored(id: number, anchored: boolean): void {\n\t\tthis.of(id).setAnchored(id, anchored)\n\t}\n\n\tsetGhost(id: number, ghost: boolean): void {\n\t\tthis.of(id).setGhost(id, ghost)\n\t}\n\n\tsetPhasing(id: number, phasing: boolean): void {\n\t\tconst layer = this.of(id)\n\t\tif (layer.setPhasing) layer.setPhasing(id, phasing)\n\t\telse layer.setGhost(id, phasing)\n\t}\n\n\tsetSpeed(id: number, speed: number): void {\n\t\tthis.of(id).setSpeed(id, speed)\n\t}\n\n\treadAgent(id: number, out: AgentState): boolean {\n\t\treturn this.of(id).readAgent(id, out)\n\t}\n\n\tsaveAgent(id: number): AgentSave | undefined {\n\t\tconst save = this.of(id).saveAgent(id)\n\t\treturn save && { ...save, flying: this.flying.has(id) || undefined, naval: this.naval.has(id) || undefined }\n\t}\n\n\trestoreAgent(id: number, save: AgentSave): void {\n\t\tthis.removeAgent(id)\n\t\tif (save.flying) this.flying.add(id)\n\t\telse if (save.naval) this.naval.add(id)\n\t\tthis.of(id).restoreAgent(id, save)\n\t}\n\n\treseat(agents: readonly (readonly [id: number, save: AgentSave])[]): void {\n\t\t// each layer anew, with the agents of it in the save's order; who flies and who sails as the save says\n\t\tthis.flying.clear()\n\t\tthis.naval.clear()\n\t\tfor (const [id, save] of agents) {\n\t\t\tif (save.flying) this.flying.add(id)\n\t\t\telse if (save.naval) this.naval.add(id)\n\t\t}\n\t\t// a boat where there is no water layer goes on the ground's, as `of` puts it\n\t\tconst sails = (save: AgentSave) => !save.flying && !!save.naval && !!this.water\n\t\tthis.ground.reseat(agents.filter(([, save]) => !save.flying && !sails(save)))\n\t\tthis.air.reseat(agents.filter(([, save]) => !!save.flying))\n\t\tthis.water?.reseat(agents.filter(([, save]) => sails(save)))\n\t}\n\n\tsettle(version: number): void {\n\t\tthis.ground.settle(version)\n\t\tthis.air.settle(version)\n\t\tthis.water?.settle(version)\n\t}\n\n\t/** Slow ground is the ground's: what flies or sails goes at one speed (EN2) */\n\tgroundChanged(cells: readonly number[], walkability?: boolean): void {\n\t\tthis.ground.groundChanged?.(cells, walkability)\n\t}\n\n\t/** The ground's and the water's cut again of the ground as it is now: what flies goes over it all the same */\n\treshape(area?: CellArea): boolean {\n\t\tconst ground = !!this.ground.reshape?.(area)\n\t\tconst water = !!this.water?.reshape?.(area)\n\t\treturn ground || water\n\t}\n\n\t/** What the ground's changes asked of the ground's and the water's navigations done now */\n\tsettleGround(): void {\n\t\tthis.ground.settleGround?.()\n\t\tthis.water?.settleGround?.()\n\t}\n\n\tupdate(dt: number): void {\n\t\tthis.ground.update(dt)\n\t\tthis.air.update(dt)\n\t\tthis.water?.update(dt)\n\t}\n\n\taddObstacle(key: number, rect: Rect): boolean {\n\t\treturn this.ground.addObstacle(key, rect)\n\t}\n\n\tobstacleRoom(): number {\n\t\treturn this.ground.obstacleRoom()\n\t}\n\n\tholdObstacles(hold: boolean): void {\n\t\tthis.ground.holdObstacles?.(hold)\n\t}\n\n\tremoveObstacle(key: number): void {\n\t\tthis.ground.removeObstacle(key)\n\t}\n\n\tsameCrowd(a: number, b: number): boolean {\n\t\tconst layer = this.of(a)\n\t\tif (layer !== this.of(b)) return false\n\t\treturn layer.sameCrowd?.(a, b) ?? true\n\t}\n\n\tclosestPoint(point: Vec2, searchRadius?: number): Vec2 | null {\n\t\treturn this.ground.closestPoint(point, searchRadius)\n\t}\n\n\tfindPath(from: Vec2, to: Vec2): Vec2[] | null {\n\t\treturn this.ground.findPath(from, to)\n\t}\n\n\tdebugGeometry(): NavDebugGeometry {\n\t\treturn this.ground.debugGeometry()\n\t}\n\n\tdispose(): void {\n\t\tthis.ground.dispose()\n\t\tthis.air.dispose()\n\t\tthis.water?.dispose()\n\t}\n}\n"],"mappings":"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"}