@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
@@ -1,460 +0,0 @@
1
- import { ChunkIdsArray, Detour, DetourTileCacheParams, NavMesh, NavMeshParams, Raw, RecastBuildContext, RecastChunkyTriMesh, TileCache, TileCacheData, TileCacheMeshProcess, TriangleAreasArray, TrianglesArray, VerticesArray, allocCompactHeightfield, allocHeightfield, allocHeightfieldLayerSet, buildCompactHeightfield, buildHeightfieldLayers, buildTileCacheLayer, calcGridSize, cloneRcConfig, createHeightfield, createRcConfig, erodeWalkableArea, exportTileCache, filterLedgeSpans, filterLowHangingWalkableObstacles, filterWalkableLowHeightSpans, freeCompactHeightfield, freeHeightfield, freeHeightfieldLayerSet, getHeightfieldLayerAreas, getHeightfieldLayerCons, getHeightfieldLayerHeights, init, markWalkableTriangles, rasterizeTriangles, recastConfigDefaults, statusFailed, vec3 } from "@recast-navigation/core";
2
- import { dtIlog2, dtNextPow2, generateTileCache, getBoundingBox } from "@recast-navigation/generators";
3
- //#region src/navigation/groundAreas.ts
4
- /** The areas of slow (or quick) ground: a speed in steps of a sixteenth, 1..62. 0 is ordinary ground, 63 Recast's walkable */
5
- var STEPS = 16;
6
- var WALKABLE = 63;
7
- /** The area of ground of this speed: 0 for ordinary ground, else its speed in sixteenths, 1 at the least and 62 at the most */
8
- function areaOfSpeed(speed) {
9
- if (speed === 1 || !(speed >= 0)) return 0;
10
- const steps = Math.round(speed * STEPS);
11
- return steps === STEPS ? 0 : Math.min(Math.max(steps, 1), 62);
12
- }
13
- /** What a path pays for each area of slow ground, on a filter: `1 / speed`, ordinary ground 1 */
14
- function setAreaCosts(filter) {
15
- for (let area = 1; area < WALKABLE; area++) filter.setAreaCost(area, STEPS / area);
16
- }
17
- /** The speed of a cell of a build's grid: 1 off it, or with no grid */
18
- function speedOfBuild(speeds, x, z) {
19
- if (!speeds) return 1;
20
- const column = Math.floor(x);
21
- const row = Math.floor(z);
22
- if (column < 0 || row < 0 || column >= speeds.width || row >= speeds.depth) return 1;
23
- return speeds.values[row * speeds.width + column];
24
- }
25
- /**
26
- * What makes a tile's polygons, as Recast's tile cache asks: each walkable (flags 1), its area the speed of the ground
27
- * under its middle (`speedAt`). Without one, every polygon is ordinary ground, as Recast's default makes them
28
- */
29
- function groundMeshProcess(speedAt) {
30
- return new TileCacheMeshProcess((params, polyAreas, polyFlags) => {
31
- const count = params.polyCount();
32
- if (!speedAt) {
33
- for (let i = 0; i < count; i++) {
34
- polyAreas.set(i, 0);
35
- polyFlags.set(i, 1);
36
- }
37
- return;
38
- }
39
- const nvp = params.nvp();
40
- const raw = params.raw;
41
- const cs = raw.cs;
42
- const originX = raw.get_bmin(0);
43
- const originZ = raw.get_bmin(2);
44
- for (let i = 0; i < count; i++) {
45
- let x = 0;
46
- let z = 0;
47
- let corners = 0;
48
- for (let j = 0; j < nvp; j++) {
49
- const vertex = params.polys(i * nvp * 2 + j);
50
- if (vertex === 65535) break;
51
- x += params.verts(vertex * 3);
52
- z += params.verts(vertex * 3 + 2);
53
- corners++;
54
- }
55
- const speed = corners ? speedAt(originX + x / corners * cs, originZ + z / corners * cs) : 1;
56
- polyAreas.set(i, areaOfSpeed(speed));
57
- polyFlags.set(i, 1);
58
- }
59
- });
60
- }
61
- /**
62
- * Builds a tile cache and its navmesh from a build, as Recast's `generateTileCache` does, but with each triangle of the
63
- * ground marked with its cell's speed (`NavigationBuild.speeds`) before it is rasterised. What it gives is Recast's own;
64
- * the caller exports and lets go of it
65
- */
66
- function generateGroundTileCache(build) {
67
- const { positions, indices, speeds } = build;
68
- const buildContext = new RecastBuildContext();
69
- const tileCache = new TileCache();
70
- const navMesh = new NavMesh();
71
- const process = groundMeshProcess((x, z) => speedOfBuild(speeds, x, z));
72
- const verticesArray = new VerticesArray();
73
- verticesArray.copy(positions);
74
- const numVertices = indices.length;
75
- const trianglesArray = new TrianglesArray();
76
- trianglesArray.copy(indices);
77
- const numTriangles = indices.length / 3;
78
- const { bbMin, bbMax } = getBoundingBox(positions, indices);
79
- const { expectedLayersPerTile, maxObstacles, ...recastConfig } = {
80
- ...recastConfigDefaults,
81
- ...build.config
82
- };
83
- const chunkyTriMesh = new RecastChunkyTriMesh();
84
- const fail = (error) => {
85
- verticesArray.destroy();
86
- trianglesArray.destroy();
87
- tileCache.destroy();
88
- navMesh.destroy();
89
- throw new Error(`Navmesh generation failed: ${error}`);
90
- };
91
- const config = createRcConfig(recastConfig);
92
- const gridSize = calcGridSize(bbMin, bbMax, config.cs);
93
- config.width = gridSize.width;
94
- config.height = gridSize.height;
95
- config.minRegionArea = config.minRegionArea * config.minRegionArea;
96
- config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea;
97
- config.detailSampleDist = config.detailSampleDist < .9 ? 0 : config.cs * config.detailSampleDist;
98
- config.detailSampleMaxError = config.ch * config.detailSampleMaxError;
99
- const tileSize = Math.floor(config.tileSize);
100
- const tileWidth = Math.floor((config.width + tileSize - 1) / tileSize);
101
- const tileHeight = Math.floor((config.height + tileSize - 1) / tileSize);
102
- config.borderSize = config.walkableRadius + 3;
103
- config.width = config.tileSize + config.borderSize * 2;
104
- config.height = config.tileSize + config.borderSize * 2;
105
- const tileCacheParams = DetourTileCacheParams.create({
106
- orig: bbMin,
107
- cs: config.cs,
108
- ch: config.ch,
109
- width: config.tileSize,
110
- height: config.tileSize,
111
- walkableHeight: config.walkableHeight * config.ch,
112
- walkableRadius: config.walkableRadius * config.cs,
113
- walkableClimb: config.walkableClimb * config.ch,
114
- maxSimplificationError: config.maxSimplificationError,
115
- maxTiles: tileWidth * tileHeight * expectedLayersPerTile,
116
- maxObstacles
117
- });
118
- const allocator = new Raw.RecastLinearAllocator(32e3);
119
- const compressor = new Raw.RecastFastLZCompressor();
120
- if (!tileCache.init(tileCacheParams, allocator, compressor, process)) fail("Failed to initialize tile cache");
121
- const tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight * expectedLayersPerTile))), 14);
122
- const navMeshParams = NavMeshParams.create({
123
- orig: vec3.fromArray(bbMin),
124
- tileWidth: config.tileSize * config.cs,
125
- tileHeight: config.tileSize * config.cs,
126
- maxTiles: 1 << tileBits,
127
- maxPolys: 1 << 22 - tileBits
128
- });
129
- if (!navMesh.initTiled(navMeshParams)) fail("Failed to initialize tiled navmesh");
130
- if (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, 256)) fail("Failed to build chunky triangle mesh");
131
- /** The speed's area of the `t`th triangle of a chunk (its corners, as indices of the ground's vertices), by its middle */
132
- const areaOf = (corners, t) => {
133
- let x = 0;
134
- let z = 0;
135
- for (let k = 0; k < 3; k++) {
136
- const vertex = corners.get(t * 3 + k);
137
- x += positions[vertex * 3];
138
- z += positions[vertex * 3 + 2];
139
- }
140
- const area = areaOfSpeed(speedOfBuild(speeds, x / 3, z / 3));
141
- return area === 0 ? WALKABLE : area;
142
- };
143
- const rasterizeTileLayers = (tileX, tileY) => {
144
- const tcs = config.tileSize * config.cs;
145
- const tileConfig = cloneRcConfig(config);
146
- const tileBoundsMin = [
147
- bbMin[0] + tileX * tcs - config.borderSize * config.cs,
148
- bbMin[1],
149
- bbMin[2] + tileY * tcs - config.borderSize * config.cs
150
- ];
151
- const tileBoundsMax = [
152
- bbMin[0] + (tileX + 1) * tcs + config.borderSize * config.cs,
153
- bbMax[1],
154
- bbMin[2] + (tileY + 1) * tcs + config.borderSize * config.cs
155
- ];
156
- for (let i = 0; i < 3; i++) {
157
- tileConfig.set_bmin(i, tileBoundsMin[i]);
158
- tileConfig.set_bmax(i, tileBoundsMax[i]);
159
- }
160
- const heightfield = allocHeightfield();
161
- if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, tileBoundsMin, tileBoundsMax, tileConfig.cs, tileConfig.ch)) {
162
- freeHeightfield(heightfield);
163
- return [];
164
- }
165
- const maxChunkIds = 512;
166
- const chunkIdsArray = new ChunkIdsArray();
167
- chunkIdsArray.resize(maxChunkIds);
168
- const overlapping = chunkyTriMesh.getChunksOverlappingRect([tileBoundsMin[0], tileBoundsMin[2]], [tileBoundsMax[0], tileBoundsMax[2]], chunkIdsArray, maxChunkIds);
169
- for (let i = 0; i < overlapping; ++i) {
170
- const nodeId = chunkIdsArray.get(i);
171
- const node = chunkyTriMesh.nodes(nodeId);
172
- const nodeTris = chunkyTriMesh.getNodeTris(nodeId);
173
- const areas = new TriangleAreasArray();
174
- areas.resize(node.n);
175
- markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, nodeTris, node.n, areas);
176
- if (speeds) {
177
- for (let t = 0; t < node.n; t++) if (areas.get(t) === WALKABLE) areas.set(t, areaOf(nodeTris, t));
178
- }
179
- const rasterized = rasterizeTriangles(buildContext, verticesArray, numVertices, nodeTris, areas, node.n, heightfield, tileConfig.walkableClimb);
180
- areas.destroy();
181
- if (!rasterized) {
182
- chunkIdsArray.destroy();
183
- freeHeightfield(heightfield);
184
- return [];
185
- }
186
- }
187
- chunkIdsArray.destroy();
188
- filterLowHangingWalkableObstacles(buildContext, config.walkableClimb, heightfield);
189
- filterLedgeSpans(buildContext, config.walkableHeight, config.walkableClimb, heightfield);
190
- filterWalkableLowHeightSpans(buildContext, config.walkableHeight, heightfield);
191
- const compactHeightfield = allocCompactHeightfield();
192
- const compacted = buildCompactHeightfield(buildContext, config.walkableHeight, config.walkableClimb, heightfield, compactHeightfield);
193
- freeHeightfield(heightfield);
194
- if (!compacted || !erodeWalkableArea(buildContext, config.walkableRadius, compactHeightfield)) {
195
- freeCompactHeightfield(compactHeightfield);
196
- return [];
197
- }
198
- const layerSet = allocHeightfieldLayerSet();
199
- const layered = buildHeightfieldLayers(buildContext, compactHeightfield, config.borderSize, config.walkableHeight, layerSet);
200
- freeCompactHeightfield(compactHeightfield);
201
- if (!layered) {
202
- freeHeightfieldLayerSet(layerSet);
203
- return [];
204
- }
205
- const tiles = [];
206
- for (let i = 0; i < layerSet.nlayers(); i++) {
207
- const tile = new TileCacheData();
208
- const layer = layerSet.layers(i);
209
- const header = new Raw.dtTileCacheLayerHeader();
210
- header.magic = Detour.DT_TILECACHE_MAGIC;
211
- header.version = Detour.DT_TILECACHE_VERSION;
212
- header.tx = tileX;
213
- header.ty = tileY;
214
- header.tlayer = i;
215
- const min = layer.bmin();
216
- const max = layer.bmax();
217
- header.set_bmin(0, min.x);
218
- header.set_bmin(1, min.y);
219
- header.set_bmin(2, min.z);
220
- header.set_bmax(0, max.x);
221
- header.set_bmax(1, max.y);
222
- header.set_bmax(2, max.z);
223
- header.width = layer.width();
224
- header.height = layer.height();
225
- header.minx = layer.minx();
226
- header.maxx = layer.maxx();
227
- header.miny = layer.miny();
228
- header.maxy = layer.maxy();
229
- header.hmin = layer.hmin();
230
- header.hmax = layer.hmax();
231
- const status = buildTileCacheLayer(compressor, header, getHeightfieldLayerHeights(layer), getHeightfieldLayerAreas(layer), getHeightfieldLayerCons(layer), tile);
232
- if (statusFailed(status)) break;
233
- tiles.push(tile);
234
- }
235
- freeHeightfieldLayerSet(layerSet);
236
- return tiles;
237
- };
238
- for (let y = 0; y < tileHeight; ++y) for (let x = 0; x < tileWidth; ++x) for (const tile of rasterizeTileLayers(x, y)) tileCache.addTile(tile);
239
- for (let y = 0; y < tileHeight; y++) for (let x = 0; x < tileWidth; x++) if (statusFailed(tileCache.buildNavMeshTilesAt(x, y, navMesh))) fail(`Failed to build nav mesh tiles at ${x}, ${y}`);
240
- verticesArray.destroy();
241
- trianglesArray.destroy();
242
- return {
243
- navMesh,
244
- tileCache,
245
- process
246
- };
247
- }
248
- //#endregion
249
- //#region src/navigation/builds.ts
250
- var initialized;
251
- /** Recast's WebAssembly, once for each thread */
252
- var initRecast = () => initialized ??= init();
253
- /**
254
- * Builds a navigation on this thread, and gives back what was built: what a worker does too
255
- *
256
- * @beta
257
- */
258
- async function buildNavigationData(build) {
259
- await initRecast();
260
- return buildNavigationNow(build);
261
- }
262
- /**
263
- * Builds a navigation on this thread at once, Recast's WebAssembly there already (`initRecast`): a navigation made
264
- * again in the middle of a tick, its ground reshaped (`RecastNavigation.reshape`)
265
- *
266
- * @internal
267
- */
268
- function buildNavigationNow(build) {
269
- if (build.speeds) {
270
- const { navMesh, tileCache } = generateGroundTileCache(build);
271
- try {
272
- return exportTileCache(navMesh, tileCache);
273
- } finally {
274
- tileCache.destroy();
275
- navMesh.destroy();
276
- }
277
- }
278
- const result = generateTileCache(build.positions, build.indices, build.config);
279
- if (!result.success) throw new Error(`Navmesh generation failed: ${result.error}`);
280
- const { navMesh, tileCache } = result;
281
- try {
282
- return exportTileCache(navMesh, tileCache);
283
- } finally {
284
- tileCache.destroy();
285
- navMesh.destroy();
286
- }
287
- }
288
- /**
289
- * Kept in memory, the last built first, up to `maxBytes` of them (64 MB when left out): a map of 512 cells a side is
290
- * under a megabyte
291
- *
292
- * @beta
293
- */
294
- function memoryNavigationCache(maxBytes = 67108864) {
295
- const kept = /* @__PURE__ */ new Map();
296
- let bytes = 0;
297
- return {
298
- get(key) {
299
- const data = kept.get(key);
300
- if (!data) return void 0;
301
- kept.delete(key);
302
- kept.set(key, data);
303
- return data;
304
- },
305
- set(key, data) {
306
- const before = kept.get(key);
307
- if (before) bytes -= before.byteLength;
308
- kept.delete(key);
309
- kept.set(key, data);
310
- bytes += data.byteLength;
311
- for (const [old, value] of kept) {
312
- if (bytes <= maxBytes || old === key) break;
313
- kept.delete(old);
314
- bytes -= value.byteLength;
315
- }
316
- }
317
- };
318
- }
319
- /**
320
- * The key of a build: a hash of the triangles and of how they are cut. Two builds of the same key make the same
321
- * navigation
322
- *
323
- * @internal
324
- */
325
- function navigationKey(build) {
326
- let a = 2166136261;
327
- let b = 1523705862;
328
- const mix = (word) => {
329
- a = Math.imul(a ^ word, 16777619);
330
- b = Math.imul(b ^ word, 1540483477);
331
- };
332
- const positions = new Uint32Array(build.positions.buffer, build.positions.byteOffset, build.positions.length);
333
- for (let i = 0; i < positions.length; i++) mix(positions[i]);
334
- mix(4294967295);
335
- for (let i = 0; i < build.indices.length; i++) mix(build.indices[i]);
336
- const config = JSON.stringify(build.config, Object.keys(build.config).sort());
337
- for (let i = 0; i < config.length; i++) mix(config.charCodeAt(i));
338
- if (build.speeds) {
339
- mix(4294967294);
340
- mix(build.speeds.width);
341
- const speeds = new Uint32Array(build.speeds.values.buffer, build.speeds.values.byteOffset, build.speeds.values.length);
342
- for (let i = 0; i < speeds.length; i++) mix(speeds[i]);
343
- }
344
- return `${(a >>> 0).toString(16).padStart(8, "0")}${(b >>> 0).toString(16).padStart(8, "0")}-${positions.length}`;
345
- }
346
- /**
347
- * A builder that builds in a worker: one whose file serves builds (`serveNavigationBuilds`). In a page, the page makes
348
- * the worker, as its bundler wants it: the library makes no worker of its own there.
349
- *
350
- * A worker's file of two lines (`serveNavigationBuilds` imported from the engine, and called), and the page:
351
- * `navigationWorker(() => new Worker(new URL('./navigation.worker.ts', import.meta.url), { type: 'module' }))`, the
352
- * builder of every world it makes (`NavigationBuilds`).
353
- * Given as a function, the worker is made at the first build: a page whose menu builds nothing fetches none of it
354
- * until a world is made (OF2); given made, it is used as it is
355
- *
356
- * @beta
357
- */
358
- function navigationWorker(given) {
359
- let next = 0;
360
- const waiting = /* @__PURE__ */ new Map();
361
- const answered = (answer) => {
362
- const wait = waiting.get(answer.id);
363
- if (!wait) return;
364
- waiting.delete(answer.id);
365
- if (answer.data) wait.done(answer.data);
366
- else wait.failed(new Error(answer.error ?? "The navigation could not be built"));
367
- };
368
- const broke = (error) => {
369
- const reason = /* @__PURE__ */ new Error(`The navigation's worker stopped: ${error instanceof Error ? error.message : String(error?.message ?? error)}`);
370
- for (const wait of waiting.values()) wait.failed(reason);
371
- waiting.clear();
372
- };
373
- let made;
374
- const worker = () => {
375
- if (made) return made;
376
- made = typeof given === "function" ? given() : given;
377
- if (made.on) {
378
- made.on("message", (value) => answered(value));
379
- made.on("error", broke);
380
- } else {
381
- made.addEventListener?.("message", (event) => answered(event.data));
382
- made.addEventListener?.("error", broke);
383
- }
384
- return made;
385
- };
386
- if (typeof given !== "function") worker();
387
- return (build) => new Promise((done, failed) => {
388
- const id = ++next;
389
- waiting.set(id, {
390
- done,
391
- failed
392
- });
393
- worker().postMessage({
394
- id,
395
- build: {
396
- positions: build.positions.slice(),
397
- indices: build.indices.slice(),
398
- config: build.config,
399
- ...build.speeds && { speeds: {
400
- ...build.speeds,
401
- values: build.speeds.values.slice()
402
- } }
403
- }
404
- });
405
- });
406
- }
407
- /**
408
- * What a navigation worker's file does: it builds what it is sent and sends back what it built. `port` is where it
409
- * hears: the worker's own scope when left out (a page's worker)
410
- *
411
- * @beta
412
- */
413
- function serveNavigationBuilds(port = globalThis) {
414
- const asked = async (message) => {
415
- const { id, build } = message;
416
- try {
417
- const data = await buildNavigationData(build);
418
- port.postMessage({
419
- id,
420
- data
421
- }, [data.buffer]);
422
- } catch (error) {
423
- port.postMessage({
424
- id,
425
- error: error instanceof Error ? error.message : String(error)
426
- });
427
- }
428
- };
429
- if (port.on) port.on("message", (value) => void asked(value));
430
- else port.addEventListener?.("message", (event) => void asked(event.data));
431
- }
432
- /** Where a world says nothing: this thread, and kept in the process's memory, which every world's ground may read */
433
- var defaults = {
434
- builder: buildNavigationData,
435
- cache: memoryNavigationCache()
436
- };
437
- /**
438
- * What was built from this: kept, or built now (by the builder set) and kept. A builder that fails falls back to this
439
- * thread once, and says why in what it throws only when that fails too
440
- */
441
- async function navigationData(build, using = {}) {
442
- const cache = using.cache !== void 0 ? using.cache : defaults.cache;
443
- const builder = using.builder ?? defaults.builder;
444
- const key = cache ? navigationKey(build) : "";
445
- const kept = cache ? await cache.get(key) : void 0;
446
- if (kept) return kept;
447
- let data;
448
- try {
449
- data = await builder(build);
450
- } catch (error) {
451
- if (builder === buildNavigationData) throw error;
452
- data = await buildNavigationData(build);
453
- }
454
- if (cache) await cache.set(key, data);
455
- return data;
456
- }
457
- //#endregion
458
- export { navigationData as a, serveNavigationBuilds as c, memoryNavigationCache as i, groundMeshProcess as l, buildNavigationNow as n, navigationKey as o, initRecast as r, navigationWorker as s, buildNavigationData as t, setAreaCosts as u };
459
-
460
- //# sourceMappingURL=builds-C6LfgvEU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builds-C6LfgvEU.js","names":[],"sources":["../src/navigation/groundAreas.ts","../src/navigation/builds.ts"],"sourcesContent":["import {\n\tallocCompactHeightfield,\n\tallocHeightfield,\n\tallocHeightfieldLayerSet,\n\tbuildCompactHeightfield,\n\tbuildHeightfieldLayers,\n\tbuildTileCacheLayer,\n\tcalcGridSize,\n\tChunkIdsArray,\n\tcloneRcConfig,\n\tcreateHeightfield,\n\tcreateRcConfig,\n\tDetour,\n\tDetourTileCacheParams,\n\terodeWalkableArea,\n\tfilterLedgeSpans,\n\tfilterLowHangingWalkableObstacles,\n\tfilterWalkableLowHeightSpans,\n\tfreeCompactHeightfield,\n\tfreeHeightfield,\n\tfreeHeightfieldLayerSet,\n\tgetHeightfieldLayerAreas,\n\tgetHeightfieldLayerCons,\n\tgetHeightfieldLayerHeights,\n\tmarkWalkableTriangles,\n\tNavMesh,\n\ttype NavMeshCreateParams,\n\tNavMeshParams,\n\ttype QueryFilter,\n\trasterizeTriangles,\n\tRaw,\n\tRecastBuildContext,\n\tRecastChunkyTriMesh,\n\trecastConfigDefaults,\n\tstatusFailed,\n\tTileCache,\n\tTileCacheData,\n\tTileCacheMeshProcess,\n\tTriangleAreasArray,\n\tTrianglesArray,\n\tvec3,\n\tVerticesArray\n} from '@recast-navigation/core'\nimport { dtIlog2, dtNextPow2, getBoundingBox } from '@recast-navigation/generators'\nimport type { NavigationBuild, NavigationSpeeds } from './builds'\n\n/*\n * Ground that slows, in the ways units are sent (EN2). A cell's speed (its tile's and its layers', `groundSpeedOfCell`)\n * is an area of the navigation's: each triangle of the ground is marked with its cell's as it is cut, so the\n * navigation's polygons part where the speed does, and a path weighs each polygon by `1 / speed` (`setAreaCosts`), so a\n * road around the mud wins when it is quicker. Ordinary ground (speed 1) is area 0 as it always was: a map without slow\n * ground is cut and walked exactly as before. Each polygon's area is the speed under its middle, worked out whenever a\n * tile is made (`groundMeshProcess`): as it is built, as it is read again, as a building comes or goes on it, and as a\n * slowing layer of cells changes there in play (`RecastNavigation.groundChanged`), which makes its tiles again\n */\n\n/** The areas of slow (or quick) ground: a speed in steps of a sixteenth, 1..62. 0 is ordinary ground, 63 Recast's walkable */\nconst STEPS = 16\nconst WALKABLE = 63\n\n/** The area of ground of this speed: 0 for ordinary ground, else its speed in sixteenths, 1 at the least and 62 at the most */\nexport function areaOfSpeed(speed: number): number {\n\tif (speed === 1 || !(speed >= 0)) return 0\n\tconst steps = Math.round(speed * STEPS)\n\treturn steps === STEPS ? 0 : Math.min(Math.max(steps, 1), WALKABLE - 1)\n}\n\n/** What a path pays for each area of slow ground, on a filter: `1 / speed`, ordinary ground 1 */\nexport function setAreaCosts(filter: QueryFilter): void {\n\tfor (let area = 1; area < WALKABLE; area++) filter.setAreaCost(area, STEPS / area)\n}\n\n/** The speed of a cell of a build's grid: 1 off it, or with no grid */\nexport function speedOfBuild(speeds: NavigationSpeeds | undefined, x: number, z: number): number {\n\tif (!speeds) return 1\n\tconst column = Math.floor(x)\n\tconst row = Math.floor(z)\n\tif (column < 0 || row < 0 || column >= speeds.width || row >= speeds.depth) return 1\n\treturn speeds.values[row * speeds.width + column]\n}\n\n/**\n * What makes a tile's polygons, as Recast's tile cache asks: each walkable (flags 1), its area the speed of the ground\n * under its middle (`speedAt`). Without one, every polygon is ordinary ground, as Recast's default makes them\n */\nexport function groundMeshProcess(speedAt?: (x: number, z: number) => number): TileCacheMeshProcess {\n\treturn new TileCacheMeshProcess((params: NavMeshCreateParams, polyAreas, polyFlags) => {\n\t\tconst count = params.polyCount()\n\t\tif (!speedAt) {\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tpolyAreas.set(i, 0)\n\t\t\t\tpolyFlags.set(i, 1)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\t// a polygon's corners, as indices into the tile's vertices (voxels from its corner), then as many for its neighbours\n\t\tconst nvp = params.nvp()\n\t\tconst raw = params.raw\n\t\tconst cs = raw.cs\n\t\tconst originX = raw.get_bmin(0)\n\t\tconst originZ = raw.get_bmin(2)\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tlet x = 0\n\t\t\tlet z = 0\n\t\t\tlet corners = 0\n\t\t\tfor (let j = 0; j < nvp; j++) {\n\t\t\t\tconst vertex = params.polys(i * nvp * 2 + j)\n\t\t\t\t// Recast's \"no more corners\"\n\t\t\t\tif (vertex === 0xffff) break\n\t\t\t\tx += params.verts(vertex * 3)\n\t\t\t\tz += params.verts(vertex * 3 + 2)\n\t\t\t\tcorners++\n\t\t\t}\n\t\t\tconst speed = corners ? speedAt(originX + (x / corners) * cs, originZ + (z / corners) * cs) : 1\n\t\t\tpolyAreas.set(i, areaOfSpeed(speed))\n\t\t\tpolyFlags.set(i, 1)\n\t\t}\n\t})\n}\n\n/**\n * Builds a tile cache and its navmesh from a build, as Recast's `generateTileCache` does, but with each triangle of the\n * ground marked with its cell's speed (`NavigationBuild.speeds`) before it is rasterised. What it gives is Recast's own;\n * the caller exports and lets go of it\n */\nexport function generateGroundTileCache(build: NavigationBuild): { navMesh: NavMesh; tileCache: TileCache; process: TileCacheMeshProcess } {\n\tconst { positions, indices, speeds } = build\n\tconst buildContext = new RecastBuildContext()\n\tconst tileCache = new TileCache()\n\tconst navMesh = new NavMesh()\n\tconst process = groundMeshProcess((x, z) => speedOfBuild(speeds, x, z))\n\tconst verticesArray = new VerticesArray()\n\tverticesArray.copy(positions as unknown as number[])\n\tconst numVertices = indices.length\n\tconst trianglesArray = new TrianglesArray()\n\ttrianglesArray.copy(indices as unknown as number[])\n\tconst numTriangles = indices.length / 3\n\tconst { bbMin, bbMax } = getBoundingBox(positions as unknown as number[], indices as unknown as number[])\n\tconst { expectedLayersPerTile, maxObstacles, ...recastConfig } = { ...recastConfigDefaults, ...build.config }\n\tconst chunkyTriMesh = new RecastChunkyTriMesh()\n\tconst fail = (error: string): never => {\n\t\tverticesArray.destroy()\n\t\ttrianglesArray.destroy()\n\t\ttileCache.destroy()\n\t\tnavMesh.destroy()\n\t\tthrow new Error(`Navmesh generation failed: ${error}`)\n\t}\n\tconst config = createRcConfig(recastConfig)\n\tconst gridSize = calcGridSize(bbMin, bbMax, config.cs)\n\tconfig.width = gridSize.width\n\tconfig.height = gridSize.height\n\tconfig.minRegionArea = config.minRegionArea * config.minRegionArea\n\tconfig.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea\n\tconfig.detailSampleDist = config.detailSampleDist < 0.9 ? 0 : config.cs * config.detailSampleDist\n\tconfig.detailSampleMaxError = config.ch * config.detailSampleMaxError\n\tconst tileSize = Math.floor(config.tileSize)\n\tconst tileWidth = Math.floor((config.width + tileSize - 1) / tileSize)\n\tconst tileHeight = Math.floor((config.height + tileSize - 1) / tileSize)\n\tconfig.borderSize = config.walkableRadius + 3\n\tconfig.width = config.tileSize + config.borderSize * 2\n\tconfig.height = config.tileSize + config.borderSize * 2\n\tconst tileCacheParams = DetourTileCacheParams.create({\n\t\torig: bbMin,\n\t\tcs: config.cs,\n\t\tch: config.ch,\n\t\twidth: config.tileSize,\n\t\theight: config.tileSize,\n\t\twalkableHeight: config.walkableHeight * config.ch,\n\t\twalkableRadius: config.walkableRadius * config.cs,\n\t\twalkableClimb: config.walkableClimb * config.ch,\n\t\tmaxSimplificationError: config.maxSimplificationError,\n\t\tmaxTiles: tileWidth * tileHeight * expectedLayersPerTile,\n\t\tmaxObstacles\n\t})\n\tconst allocator = new Raw.RecastLinearAllocator(32000)\n\tconst compressor = new Raw.RecastFastLZCompressor()\n\tif (!tileCache.init(tileCacheParams, allocator, compressor, process)) fail('Failed to initialize tile cache')\n\tconst tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight * expectedLayersPerTile))), 14)\n\tconst navMeshParams = NavMeshParams.create({\n\t\torig: vec3.fromArray(bbMin),\n\t\ttileWidth: config.tileSize * config.cs,\n\t\ttileHeight: config.tileSize * config.cs,\n\t\tmaxTiles: 1 << tileBits,\n\t\tmaxPolys: 1 << (22 - tileBits)\n\t})\n\tif (!navMesh.initTiled(navMeshParams)) fail('Failed to initialize tiled navmesh')\n\tif (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, 256)) fail('Failed to build chunky triangle mesh')\n\n\t/** The speed's area of the `t`th triangle of a chunk (its corners, as indices of the ground's vertices), by its middle */\n\tconst areaOf = (corners: { get(index: number): number }, t: number) => {\n\t\tlet x = 0\n\t\tlet z = 0\n\t\tfor (let k = 0; k < 3; k++) {\n\t\t\tconst vertex = corners.get(t * 3 + k)\n\t\t\tx += positions[vertex * 3]\n\t\t\tz += positions[vertex * 3 + 2]\n\t\t}\n\t\tconst area = areaOfSpeed(speedOfBuild(speeds, x / 3, z / 3))\n\t\treturn area === 0 ? WALKABLE : area\n\t}\n\n\tconst rasterizeTileLayers = (tileX: number, tileY: number): InstanceType<typeof TileCacheData>[] => {\n\t\tconst tcs = config.tileSize * config.cs\n\t\tconst tileConfig = cloneRcConfig(config)\n\t\tconst tileBoundsMin: [number, number, number] = [\n\t\t\tbbMin[0] + tileX * tcs - config.borderSize * config.cs,\n\t\t\tbbMin[1],\n\t\t\tbbMin[2] + tileY * tcs - config.borderSize * config.cs\n\t\t]\n\t\tconst tileBoundsMax: [number, number, number] = [\n\t\t\tbbMin[0] + (tileX + 1) * tcs + config.borderSize * config.cs,\n\t\t\tbbMax[1],\n\t\t\tbbMin[2] + (tileY + 1) * tcs + config.borderSize * config.cs\n\t\t]\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\ttileConfig.set_bmin(i, tileBoundsMin[i])\n\t\t\ttileConfig.set_bmax(i, tileBoundsMax[i])\n\t\t}\n\t\tconst heightfield = allocHeightfield()\n\t\tif (\n\t\t\t!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, tileBoundsMin, tileBoundsMax, tileConfig.cs, tileConfig.ch)\n\t\t) {\n\t\t\tfreeHeightfield(heightfield)\n\t\t\treturn []\n\t\t}\n\t\tconst maxChunkIds = 512\n\t\tconst chunkIdsArray = new ChunkIdsArray()\n\t\tchunkIdsArray.resize(maxChunkIds)\n\t\tconst overlapping = chunkyTriMesh.getChunksOverlappingRect(\n\t\t\t[tileBoundsMin[0], tileBoundsMin[2]],\n\t\t\t[tileBoundsMax[0], tileBoundsMax[2]],\n\t\t\tchunkIdsArray,\n\t\t\tmaxChunkIds\n\t\t)\n\t\tfor (let i = 0; i < overlapping; ++i) {\n\t\t\tconst nodeId = chunkIdsArray.get(i)\n\t\t\tconst node = chunkyTriMesh.nodes(nodeId)\n\t\t\tconst nodeTris = chunkyTriMesh.getNodeTris(nodeId)\n\t\t\tconst areas = new TriangleAreasArray()\n\t\t\tareas.resize(node.n)\n\t\t\tmarkWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, nodeTris, node.n, areas)\n\t\t\t// what is walkable takes its cell's speed: the one change from Recast's own\n\t\t\tif (speeds) for (let t = 0; t < node.n; t++) if (areas.get(t) === WALKABLE) areas.set(t, areaOf(nodeTris, t))\n\t\t\tconst rasterized = rasterizeTriangles(buildContext, verticesArray, numVertices, nodeTris, areas, node.n, heightfield, tileConfig.walkableClimb)\n\t\t\tareas.destroy()\n\t\t\tif (!rasterized) {\n\t\t\t\tchunkIdsArray.destroy()\n\t\t\t\tfreeHeightfield(heightfield)\n\t\t\t\treturn []\n\t\t\t}\n\t\t}\n\t\tchunkIdsArray.destroy()\n\t\tfilterLowHangingWalkableObstacles(buildContext, config.walkableClimb, heightfield)\n\t\tfilterLedgeSpans(buildContext, config.walkableHeight, config.walkableClimb, heightfield)\n\t\tfilterWalkableLowHeightSpans(buildContext, config.walkableHeight, heightfield)\n\t\tconst compactHeightfield = allocCompactHeightfield()\n\t\tconst compacted = buildCompactHeightfield(buildContext, config.walkableHeight, config.walkableClimb, heightfield, compactHeightfield)\n\t\tfreeHeightfield(heightfield)\n\t\tif (!compacted || !erodeWalkableArea(buildContext, config.walkableRadius, compactHeightfield)) {\n\t\t\tfreeCompactHeightfield(compactHeightfield)\n\t\t\treturn []\n\t\t}\n\t\tconst layerSet = allocHeightfieldLayerSet()\n\t\tconst layered = buildHeightfieldLayers(buildContext, compactHeightfield, config.borderSize, config.walkableHeight, layerSet)\n\t\tfreeCompactHeightfield(compactHeightfield)\n\t\tif (!layered) {\n\t\t\tfreeHeightfieldLayerSet(layerSet)\n\t\t\treturn []\n\t\t}\n\t\tconst tiles: InstanceType<typeof TileCacheData>[] = []\n\t\tfor (let i = 0; i < layerSet.nlayers(); i++) {\n\t\t\tconst tile = new TileCacheData()\n\t\t\tconst layer = layerSet.layers(i)\n\t\t\tconst header = new Raw.dtTileCacheLayerHeader()\n\t\t\theader.magic = Detour.DT_TILECACHE_MAGIC\n\t\t\theader.version = Detour.DT_TILECACHE_VERSION\n\t\t\theader.tx = tileX\n\t\t\theader.ty = tileY\n\t\t\theader.tlayer = i\n\t\t\tconst min = layer.bmin()\n\t\t\tconst max = layer.bmax()\n\t\t\theader.set_bmin(0, min.x)\n\t\t\theader.set_bmin(1, min.y)\n\t\t\theader.set_bmin(2, min.z)\n\t\t\theader.set_bmax(0, max.x)\n\t\t\theader.set_bmax(1, max.y)\n\t\t\theader.set_bmax(2, max.z)\n\t\t\theader.width = layer.width()\n\t\t\theader.height = layer.height()\n\t\t\theader.minx = layer.minx()\n\t\t\theader.maxx = layer.maxx()\n\t\t\theader.miny = layer.miny()\n\t\t\theader.maxy = layer.maxy()\n\t\t\theader.hmin = layer.hmin()\n\t\t\theader.hmax = layer.hmax()\n\t\t\tconst status = buildTileCacheLayer(\n\t\t\t\tcompressor,\n\t\t\t\theader,\n\t\t\t\tgetHeightfieldLayerHeights(layer),\n\t\t\t\tgetHeightfieldLayerAreas(layer),\n\t\t\t\tgetHeightfieldLayerCons(layer),\n\t\t\t\ttile\n\t\t\t)\n\t\t\tif (statusFailed(status)) break\n\t\t\ttiles.push(tile)\n\t\t}\n\t\tfreeHeightfieldLayerSet(layerSet)\n\t\treturn tiles\n\t}\n\n\tfor (let y = 0; y < tileHeight; ++y) {\n\t\tfor (let x = 0; x < tileWidth; ++x) for (const tile of rasterizeTileLayers(x, y)) tileCache.addTile(tile)\n\t}\n\tfor (let y = 0; y < tileHeight; y++) {\n\t\tfor (let x = 0; x < tileWidth; x++)\n\t\t\tif (statusFailed(tileCache.buildNavMeshTilesAt(x, y, navMesh))) fail(`Failed to build nav mesh tiles at ${x}, ${y}`)\n\t}\n\tverticesArray.destroy()\n\ttrianglesArray.destroy()\n\treturn { navMesh, tileCache, process }\n}\n","import { exportTileCache, init } from '@recast-navigation/core'\nimport { generateTileCache } from '@recast-navigation/generators'\nimport { generateGroundTileCache } from './groundAreas'\n\n/*\n * Building a navigation off the thread that runs the game, and not again for ground it was built for (S37). A build of\n * the whole map blocks: 0.1 s for 128 cells a side, 0.4 s for 256, 2 s for 512, on every world made or loaded. What a\n * build makes is data (Recast's tile cache, exported): built once, it is kept by a hash of what it was built from, and\n * a world made again on the same ground (a restart, a load, Play here) reads it in a few milliseconds. Every navigation\n * is read from that data, built just now or kept, so the two are the same navigation: nothing depends on whether a\n * build was kept, nor on how long it took, and the world does not step until it is there.\n */\n\n/**\n * How Recast is told to cut the ground: what the tile cache is generated with\n *\n * @beta\n */\nexport interface NavigationBuildConfig {\n\tcs: number\n\tch: number\n\ttileSize: number\n\twalkableSlopeAngle: number\n\twalkableHeight: number\n\twalkableClimb: number\n\twalkableRadius: number\n\tmaxSimplificationError: number\n\tmergeRegionArea: number\n\tmaxVertsPerPoly: number\n\tdetailSampleDist: number\n\tdetailSampleMaxError: number\n\texpectedLayersPerTile: number\n\tmaxObstacles: number\n}\n\n/**\n * What a navigation is built from: the ground's (or the water's) triangles, and how to cut them. Plain data, sent to a worker as it is\n *\n * @beta\n */\nexport interface NavigationBuild {\n\tpositions: Float32Array\n\tindices: Uint32Array\n\tconfig: NavigationBuildConfig\n\t/**\n\t * How fast one on foot goes over each cell of the ground (`groundSpeedOfCell`), for a path to weigh: none where every\n\t * cell is 1, which cuts the ground as it always was\n\t */\n\tspeeds?: NavigationSpeeds\n}\n\n/**\n * Each cell's speed on the ground, row by row (`NavigationBuild.speeds`)\n *\n * @beta\n */\nexport interface NavigationSpeeds {\n\twidth: number\n\tdepth: number\n\tvalues: Float32Array\n}\n\n/**\n * What builds a navigation: given what to build, gives back what was built (Recast's tile cache, exported). On this\n * thread (`buildNavigationData`), or in a worker (`navigationWorker`)\n *\n * @beta\n */\nexport type NavigationBuilder = (build: NavigationBuild) => Promise<Uint8Array>\n\n/**\n * Where what was built is kept, by a hash of what it was built from: in memory when nothing else is said\n * (`memoryNavigationCache`). A game keeps it elsewhere with one of its own (the browser's storage, a file)\n *\n * @beta\n */\nexport interface NavigationCache {\n\tget(key: string): Uint8Array | undefined | Promise<Uint8Array | undefined>\n\tset(key: string, data: Uint8Array): void | Promise<void>\n}\n\nlet initialized: Promise<void> | undefined\n\n/** Recast's WebAssembly, once for each thread */\nexport const initRecast = (): Promise<void> => (initialized ??= init())\n\n/**\n * Builds a navigation on this thread, and gives back what was built: what a worker does too\n *\n * @beta\n */\nexport async function buildNavigationData(build: NavigationBuild): Promise<Uint8Array> {\n\tawait initRecast()\n\treturn buildNavigationNow(build)\n}\n\n/**\n * Builds a navigation on this thread at once, Recast's WebAssembly there already (`initRecast`): a navigation made\n * again in the middle of a tick, its ground reshaped (`RecastNavigation.reshape`)\n *\n * @internal\n */\nexport function buildNavigationNow(build: NavigationBuild): Uint8Array {\n\t// slow ground marked as it is cut (EN2); ground without any, as Recast cuts it\n\tif (build.speeds) {\n\t\tconst { navMesh, tileCache } = generateGroundTileCache(build)\n\t\ttry {\n\t\t\treturn exportTileCache(navMesh, tileCache)\n\t\t} finally {\n\t\t\ttileCache.destroy()\n\t\t\tnavMesh.destroy()\n\t\t}\n\t}\n\tconst result = generateTileCache(build.positions, build.indices, build.config)\n\tif (!result.success) throw new Error(`Navmesh generation failed: ${result.error}`)\n\tconst { navMesh, tileCache } = result\n\ttry {\n\t\treturn exportTileCache(navMesh, tileCache)\n\t} finally {\n\t\ttileCache.destroy()\n\t\tnavMesh.destroy()\n\t}\n}\n\n/**\n * Kept in memory, the last built first, up to `maxBytes` of them (64 MB when left out): a map of 512 cells a side is\n * under a megabyte\n *\n * @beta\n */\nexport function memoryNavigationCache(maxBytes = 64 * 1024 * 1024): NavigationCache {\n\tconst kept = new Map<string, Uint8Array>()\n\tlet bytes = 0\n\treturn {\n\t\tget(key) {\n\t\t\tconst data = kept.get(key)\n\t\t\tif (!data) return undefined\n\t\t\t// used: the last to go\n\t\t\tkept.delete(key)\n\t\t\tkept.set(key, data)\n\t\t\treturn data\n\t\t},\n\t\tset(key, data) {\n\t\t\tconst before = kept.get(key)\n\t\t\tif (before) bytes -= before.byteLength\n\t\t\tkept.delete(key)\n\t\t\tkept.set(key, data)\n\t\t\tbytes += data.byteLength\n\t\t\tfor (const [old, value] of kept) {\n\t\t\t\tif (bytes <= maxBytes || old === key) break\n\t\t\t\tkept.delete(old)\n\t\t\t\tbytes -= value.byteLength\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The key of a build: a hash of the triangles and of how they are cut. Two builds of the same key make the same\n * navigation\n *\n * @internal\n */\nexport function navigationKey(build: NavigationBuild): string {\n\t// FNV-1a over the words, twice over with different starts, for 64 bits: enough to tell grounds apart, not a secret\n\tlet a = 0x811c9dc5\n\tlet b = 0x01000193 ^ 0x5bd1e995\n\tconst mix = (word: number) => {\n\t\ta = Math.imul(a ^ word, 0x01000193)\n\t\tb = Math.imul(b ^ word, 0x5bd1e995)\n\t}\n\tconst positions = new Uint32Array(build.positions.buffer, build.positions.byteOffset, build.positions.length)\n\tfor (let i = 0; i < positions.length; i++) mix(positions[i])\n\tmix(0xffffffff)\n\tfor (let i = 0; i < build.indices.length; i++) mix(build.indices[i])\n\tconst config = JSON.stringify(build.config, Object.keys(build.config).sort())\n\tfor (let i = 0; i < config.length; i++) mix(config.charCodeAt(i))\n\t// the paint's speeds too, where there are any: a build of none is keyed as one always was\n\tif (build.speeds) {\n\t\tmix(0xfffffffe)\n\t\tmix(build.speeds.width)\n\t\tconst speeds = new Uint32Array(build.speeds.values.buffer, build.speeds.values.byteOffset, build.speeds.values.length)\n\t\tfor (let i = 0; i < speeds.length; i++) mix(speeds[i])\n\t}\n\treturn `${(a >>> 0).toString(16).padStart(8, '0')}${(b >>> 0).toString(16).padStart(8, '0')}-${positions.length}`\n}\n\n/**\n * What a worker is, as far as building goes: a page's `Worker`, or Node's `worker_threads` one\n *\n * @beta\n */\nexport interface NavigationWorkerLike {\n\tpostMessage(message: unknown, transfer?: unknown[]): void\n\taddEventListener?(type: 'message' | 'error', listener: (event: { data?: unknown; message?: string }) => void): void\n\ton?(type: 'message' | 'error', listener: (value: unknown) => void): void\n}\n\ninterface BuildAnswer {\n\tid: number\n\tdata?: Uint8Array\n\terror?: string\n}\n\n/**\n * A builder that builds in a worker: one whose file serves builds (`serveNavigationBuilds`). In a page, the page makes\n * the worker, as its bundler wants it: the library makes no worker of its own there.\n *\n * A worker's file of two lines (`serveNavigationBuilds` imported from the engine, and called), and the page:\n * `navigationWorker(() => new Worker(new URL('./navigation.worker.ts', import.meta.url), { type: 'module' }))`, the\n * builder of every world it makes (`NavigationBuilds`).\n * Given as a function, the worker is made at the first build: a page whose menu builds nothing fetches none of it\n * until a world is made (OF2); given made, it is used as it is\n *\n * @beta\n */\nexport function navigationWorker(given: NavigationWorkerLike | (() => NavigationWorkerLike)): NavigationBuilder {\n\tlet next = 0\n\tconst waiting = new Map<number, { done: (data: Uint8Array) => void; failed: (error: Error) => void }>()\n\tconst answered = (answer: BuildAnswer) => {\n\t\tconst wait = waiting.get(answer.id)\n\t\tif (!wait) return\n\t\twaiting.delete(answer.id)\n\t\tif (answer.data) wait.done(answer.data)\n\t\telse wait.failed(new Error(answer.error ?? 'The navigation could not be built'))\n\t}\n\tconst broke = (error: unknown) => {\n\t\tconst reason = new Error(\n\t\t\t`The navigation's worker stopped: ${error instanceof Error ? error.message : String((error as { message?: string })?.message ?? error)}`\n\t\t)\n\t\tfor (const wait of waiting.values()) wait.failed(reason)\n\t\twaiting.clear()\n\t}\n\tlet made: NavigationWorkerLike | undefined\n\tconst worker = () => {\n\t\tif (made) return made\n\t\tmade = typeof given === 'function' ? given() : given\n\t\tif (made.on) {\n\t\t\tmade.on('message', (value) => answered(value as BuildAnswer))\n\t\t\tmade.on('error', broke)\n\t\t} else {\n\t\t\tmade.addEventListener?.('message', (event) => answered(event.data as BuildAnswer))\n\t\t\tmade.addEventListener?.('error', broke)\n\t\t}\n\t\treturn made\n\t}\n\t// a worker given made is listened to now; one given as what makes it is made at the first build\n\tif (typeof given !== 'function') worker()\n\treturn (build) =>\n\t\tnew Promise<Uint8Array>((done, failed) => {\n\t\t\tconst id = ++next\n\t\t\twaiting.set(id, { done, failed })\n\t\t\t// copies: the triangles are the terrain's, and stay where they are\n\t\t\tworker().postMessage({\n\t\t\t\tid,\n\t\t\t\tbuild: {\n\t\t\t\t\tpositions: build.positions.slice(),\n\t\t\t\t\tindices: build.indices.slice(),\n\t\t\t\t\tconfig: build.config,\n\t\t\t\t\t...(build.speeds && { speeds: { ...build.speeds, values: build.speeds.values.slice() } })\n\t\t\t\t}\n\t\t\t})\n\t\t})\n}\n\n/**\n * Where a worker hears and answers: a page's worker scope, or Node's `parentPort`\n *\n * @beta\n */\nexport interface NavigationPort {\n\tpostMessage(message: unknown, transfer?: unknown[]): void\n\taddEventListener?(type: 'message', listener: (event: { data: unknown }) => void): void\n\ton?(type: 'message', listener: (value: unknown) => void): void\n}\n\n/**\n * What a navigation worker's file does: it builds what it is sent and sends back what it built. `port` is where it\n * hears: the worker's own scope when left out (a page's worker)\n *\n * @beta\n */\nexport function serveNavigationBuilds(port: NavigationPort = globalThis as unknown as NavigationPort): void {\n\tconst asked = async (message: unknown) => {\n\t\tconst { id, build } = message as { id: number; build: NavigationBuild }\n\t\ttry {\n\t\t\tconst data = await buildNavigationData(build)\n\t\t\tport.postMessage({ id, data } satisfies BuildAnswer, [data.buffer])\n\t\t} catch (error) {\n\t\t\tport.postMessage({ id, error: error instanceof Error ? error.message : String(error) } satisfies BuildAnswer)\n\t\t}\n\t}\n\tif (port.on) port.on('message', (value) => void asked(value))\n\telse port.addEventListener?.('message', (event) => void asked(event.data))\n}\n\n/**\n * Who builds a world's navigations and where what was built is kept (`CreateWorldOptions.navigation.builds`): this\n * thread when the builder is left out (a worker of the page's own: `navigationWorker`), the process's memory when the\n * cache is, `cache: null` for nowhere (every world built anew). What an app hands every world it makes (`launch`,\n * `startApp`, `GameServer.start`)\n *\n * @beta\n */\nexport interface NavigationBuilds {\n\tbuilder?: NavigationBuilder\n\tcache?: NavigationCache | null\n}\n\n/** Where a world says nothing: this thread, and kept in the process's memory, which every world's ground may read */\nconst defaults: { readonly builder: NavigationBuilder; readonly cache: NavigationCache } = {\n\tbuilder: buildNavigationData,\n\tcache: memoryNavigationCache()\n}\n\n/**\n * What was built from this: kept, or built now (by the builder set) and kept. A builder that fails falls back to this\n * thread once, and says why in what it throws only when that fails too\n */\nexport async function navigationData(build: NavigationBuild, using: NavigationBuilds = {}): Promise<Uint8Array> {\n\t// `using`: who builds this one and where it is kept (a page's worker, a game's worker asked by its page: S54)\n\tconst cache = using.cache !== undefined ? using.cache : defaults.cache\n\tconst builder = using.builder ?? defaults.builder\n\tconst key = cache ? navigationKey(build) : ''\n\tconst kept = cache ? await cache.get(key) : undefined\n\tif (kept) return kept\n\tlet data: Uint8Array\n\ttry {\n\t\tdata = await builder(build)\n\t} catch (error) {\n\t\tif (builder === buildNavigationData) throw error\n\t\tdata = await buildNavigationData(build)\n\t}\n\tif (cache) await cache.set(key, data)\n\treturn data\n}\n"],"mappings":"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"}