@v12-engine/engine 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
@@ -0,0 +1,407 @@
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, filterLedgeSpans, filterLowHangingWalkableObstacles, filterWalkableLowHeightSpans, freeCompactHeightfield, freeHeightfield, freeHeightfieldLayerSet, getHeightfieldLayerAreas, getHeightfieldLayerCons, getHeightfieldLayerHeights, markWalkableTriangles, rasterizeTriangles, recastConfigDefaults, statusFailed, vec3 } from "@recast-navigation/core";
2
+ import { dtIlog2, dtNextPow2, 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
+ /** How a build is cut into tiles, as Recast's `generateTileCache` works it out */
62
+ function tileCutOf(build) {
63
+ const { bbMin, bbMax } = getBoundingBox(build.positions, build.indices);
64
+ const { expectedLayersPerTile, maxObstacles, ...recastConfig } = {
65
+ ...recastConfigDefaults,
66
+ ...build.config
67
+ };
68
+ const config = createRcConfig(recastConfig);
69
+ const gridSize = calcGridSize(bbMin, bbMax, config.cs);
70
+ config.width = gridSize.width;
71
+ config.height = gridSize.height;
72
+ config.minRegionArea = config.minRegionArea * config.minRegionArea;
73
+ config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea;
74
+ config.detailSampleDist = config.detailSampleDist < .9 ? 0 : config.cs * config.detailSampleDist;
75
+ config.detailSampleMaxError = config.ch * config.detailSampleMaxError;
76
+ const tileSize = Math.floor(config.tileSize);
77
+ const tileWidth = Math.floor((config.width + tileSize - 1) / tileSize);
78
+ const tileHeight = Math.floor((config.height + tileSize - 1) / tileSize);
79
+ config.borderSize = config.walkableRadius + 3;
80
+ config.width = config.tileSize + config.borderSize * 2;
81
+ config.height = config.tileSize + config.borderSize * 2;
82
+ return {
83
+ config,
84
+ bbMin: [...bbMin],
85
+ bbMax: [...bbMax],
86
+ tileWidth,
87
+ tileHeight,
88
+ expectedLayersPerTile,
89
+ maxObstacles
90
+ };
91
+ }
92
+ /** The tile cache's parameters of a cut: room for every tile of it and its obstacles, or as much as `room` says */
93
+ function tileCacheParamsOf({ config, bbMin, tileWidth, tileHeight, expectedLayersPerTile, maxObstacles }, room) {
94
+ return DetourTileCacheParams.create({
95
+ orig: bbMin,
96
+ cs: config.cs,
97
+ ch: config.ch,
98
+ width: config.tileSize,
99
+ height: config.tileSize,
100
+ walkableHeight: config.walkableHeight * config.ch,
101
+ walkableRadius: config.walkableRadius * config.cs,
102
+ walkableClimb: config.walkableClimb * config.ch,
103
+ maxSimplificationError: config.maxSimplificationError,
104
+ maxTiles: room?.tiles ?? tileWidth * tileHeight * expectedLayersPerTile,
105
+ maxObstacles: room?.obstacles ?? maxObstacles
106
+ });
107
+ }
108
+ /**
109
+ * What rasterises the tiles of a build into their compressed layers, from the triangles given (indices into its
110
+ * positions, three to a triangle; all of them when left out): a tile is made of the triangles under it and its border,
111
+ * so a tile made from fewer triangles, those that reach it among them, is the same tile. Undefined where its triangles
112
+ * could not be sorted into chunks
113
+ */
114
+ function tileRasterizer(build, cut, compressor, chunked = true, speedOf = build.speeds && ((x, z) => speedOfBuild(build.speeds, x, z))) {
115
+ const { positions } = build;
116
+ const { config, bbMin, bbMax } = cut;
117
+ const buildContext = new RecastBuildContext();
118
+ const verticesArray = new VerticesArray();
119
+ verticesArray.copy(positions);
120
+ const numVertices = build.indices.length;
121
+ const trianglesArray = new TrianglesArray();
122
+ const chunkyTriMesh = new RecastChunkyTriMesh();
123
+ const destroy = () => {
124
+ verticesArray.destroy();
125
+ trianglesArray.destroy();
126
+ };
127
+ if (chunked) {
128
+ trianglesArray.copy(build.indices);
129
+ if (!chunkyTriMesh.init(verticesArray, trianglesArray, build.indices.length / 3, 256)) {
130
+ destroy();
131
+ return;
132
+ }
133
+ }
134
+ /** The speed's area of the `t`th triangle of a chunk (its corners, as indices of the ground's vertices), by its middle */
135
+ const areaOf = (corners, t) => {
136
+ let x = 0;
137
+ let z = 0;
138
+ for (let k = 0; k < 3; k++) {
139
+ const vertex = corners.get(t * 3 + k);
140
+ x += positions[vertex * 3];
141
+ z += positions[vertex * 3 + 2];
142
+ }
143
+ const speed = speedOf(x / 3, z / 3);
144
+ if (speed < 0) return 0;
145
+ const area = areaOfSpeed(speed);
146
+ return area === 0 ? WALKABLE : area;
147
+ };
148
+ /** Marks a run of triangles walkable (with their speeds) and rasterises them into the heightfield: false where Recast could not */
149
+ const rasterizeRun = (tileConfig, heightfield, tris, count) => {
150
+ const areas = new TriangleAreasArray();
151
+ areas.resize(count);
152
+ markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, tris, count, areas);
153
+ if (speedOf) {
154
+ for (let t = 0; t < count; t++) if (areas.get(t) === WALKABLE) areas.set(t, areaOf(tris, t));
155
+ }
156
+ const rasterized = rasterizeTriangles(buildContext, verticesArray, numVertices, tris, areas, count, heightfield, tileConfig.walkableClimb);
157
+ areas.destroy();
158
+ return rasterized;
159
+ };
160
+ const rasterize = (tileX, tileY, own) => {
161
+ const tcs = config.tileSize * config.cs;
162
+ const tileConfig = cloneRcConfig(config);
163
+ const tileBoundsMin = [
164
+ bbMin[0] + tileX * tcs - config.borderSize * config.cs,
165
+ bbMin[1],
166
+ bbMin[2] + tileY * tcs - config.borderSize * config.cs
167
+ ];
168
+ const tileBoundsMax = [
169
+ bbMin[0] + (tileX + 1) * tcs + config.borderSize * config.cs,
170
+ bbMax[1],
171
+ bbMin[2] + (tileY + 1) * tcs + config.borderSize * config.cs
172
+ ];
173
+ for (let i = 0; i < 3; i++) {
174
+ tileConfig.set_bmin(i, tileBoundsMin[i]);
175
+ tileConfig.set_bmax(i, tileBoundsMax[i]);
176
+ }
177
+ const heightfield = allocHeightfield();
178
+ if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, tileBoundsMin, tileBoundsMax, tileConfig.cs, tileConfig.ch)) {
179
+ freeHeightfield(heightfield);
180
+ return [];
181
+ }
182
+ if (own) {
183
+ if (own.length) {
184
+ trianglesArray.copy(own);
185
+ if (!rasterizeRun(tileConfig, heightfield, trianglesArray, own.length / 3)) {
186
+ freeHeightfield(heightfield);
187
+ return [];
188
+ }
189
+ }
190
+ } else {
191
+ const maxChunkIds = 512;
192
+ const chunkIdsArray = new ChunkIdsArray();
193
+ chunkIdsArray.resize(maxChunkIds);
194
+ const overlapping = chunkyTriMesh.getChunksOverlappingRect([tileBoundsMin[0], tileBoundsMin[2]], [tileBoundsMax[0], tileBoundsMax[2]], chunkIdsArray, maxChunkIds);
195
+ for (let i = 0; i < overlapping; ++i) {
196
+ const nodeId = chunkIdsArray.get(i);
197
+ if (!rasterizeRun(tileConfig, heightfield, chunkyTriMesh.getNodeTris(nodeId), chunkyTriMesh.nodes(nodeId).n)) {
198
+ chunkIdsArray.destroy();
199
+ freeHeightfield(heightfield);
200
+ return [];
201
+ }
202
+ }
203
+ chunkIdsArray.destroy();
204
+ }
205
+ filterLowHangingWalkableObstacles(buildContext, config.walkableClimb, heightfield);
206
+ filterLedgeSpans(buildContext, config.walkableHeight, config.walkableClimb, heightfield);
207
+ filterWalkableLowHeightSpans(buildContext, config.walkableHeight, heightfield);
208
+ const compactHeightfield = allocCompactHeightfield();
209
+ const compacted = buildCompactHeightfield(buildContext, config.walkableHeight, config.walkableClimb, heightfield, compactHeightfield);
210
+ freeHeightfield(heightfield);
211
+ if (!compacted || !erodeWalkableArea(buildContext, config.walkableRadius, compactHeightfield)) {
212
+ freeCompactHeightfield(compactHeightfield);
213
+ return [];
214
+ }
215
+ const layerSet = allocHeightfieldLayerSet();
216
+ const layered = buildHeightfieldLayers(buildContext, compactHeightfield, config.borderSize, config.walkableHeight, layerSet);
217
+ freeCompactHeightfield(compactHeightfield);
218
+ if (!layered) {
219
+ freeHeightfieldLayerSet(layerSet);
220
+ return [];
221
+ }
222
+ const tiles = [];
223
+ for (let i = 0; i < layerSet.nlayers(); i++) {
224
+ const tile = new TileCacheData();
225
+ const layer = layerSet.layers(i);
226
+ const header = new Raw.dtTileCacheLayerHeader();
227
+ header.magic = Detour.DT_TILECACHE_MAGIC;
228
+ header.version = Detour.DT_TILECACHE_VERSION;
229
+ header.tx = tileX;
230
+ header.ty = tileY;
231
+ header.tlayer = i;
232
+ const min = layer.bmin();
233
+ const max = layer.bmax();
234
+ header.set_bmin(0, min.x);
235
+ header.set_bmin(1, min.y);
236
+ header.set_bmin(2, min.z);
237
+ header.set_bmax(0, max.x);
238
+ header.set_bmax(1, max.y);
239
+ header.set_bmax(2, max.z);
240
+ header.width = layer.width();
241
+ header.height = layer.height();
242
+ header.minx = layer.minx();
243
+ header.maxx = layer.maxx();
244
+ header.miny = layer.miny();
245
+ header.maxy = layer.maxy();
246
+ header.hmin = layer.hmin();
247
+ header.hmax = layer.hmax();
248
+ const status = buildTileCacheLayer(compressor, header, getHeightfieldLayerHeights(layer), getHeightfieldLayerAreas(layer), getHeightfieldLayerCons(layer), tile);
249
+ if (statusFailed(status)) break;
250
+ tiles.push(tile);
251
+ }
252
+ freeHeightfieldLayerSet(layerSet);
253
+ return tiles;
254
+ };
255
+ return {
256
+ rasterize,
257
+ destroy
258
+ };
259
+ }
260
+ /**
261
+ * Builds a tile cache and its navmesh from a build, as Recast's `generateTileCache` does, but with each triangle of the
262
+ * ground marked with its cell's speed (`NavigationBuild.speeds`) before it is rasterised. What it gives is Recast's own;
263
+ * the caller exports and lets go of it
264
+ */
265
+ function generateGroundTileCache(build) {
266
+ const { speeds } = build;
267
+ const tileCache = new TileCache();
268
+ const navMesh = new NavMesh();
269
+ const process = groundMeshProcess((x, z) => speedOfBuild(speeds, x, z));
270
+ const cut = tileCutOf(build);
271
+ const { config, bbMin, tileWidth, tileHeight, expectedLayersPerTile } = cut;
272
+ let rasterizer;
273
+ const fail = (error) => {
274
+ rasterizer?.destroy();
275
+ tileCache.destroy();
276
+ navMesh.destroy();
277
+ throw new Error(`Navmesh generation failed: ${error}`);
278
+ };
279
+ const allocator = new Raw.RecastLinearAllocator(32e3);
280
+ const compressor = new Raw.RecastFastLZCompressor();
281
+ if (!tileCache.init(tileCacheParamsOf(cut), allocator, compressor, process)) fail("Failed to initialize tile cache");
282
+ const tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight * expectedLayersPerTile))), 14);
283
+ const navMeshParams = NavMeshParams.create({
284
+ orig: vec3.fromArray(bbMin),
285
+ tileWidth: config.tileSize * config.cs,
286
+ tileHeight: config.tileSize * config.cs,
287
+ maxTiles: 1 << tileBits,
288
+ maxPolys: 1 << 22 - tileBits
289
+ });
290
+ if (!navMesh.initTiled(navMeshParams)) fail("Failed to initialize tiled navmesh");
291
+ rasterizer = tileRasterizer(build, cut, compressor);
292
+ if (!rasterizer) return fail("Failed to build chunky triangle mesh");
293
+ for (let y = 0; y < tileHeight; ++y) for (let x = 0; x < tileWidth; ++x) for (const tile of rasterizer.rasterize(x, y)) tileCache.addTile(tile);
294
+ 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}`);
295
+ rasterizer.destroy();
296
+ return {
297
+ navMesh,
298
+ tileCache,
299
+ process
300
+ };
301
+ }
302
+ /** A tile of the grid by its column and row: `tx * 65536 + ty` */
303
+ var tileKey = (tx, ty) => tx * 65536 + ty;
304
+ /**
305
+ * Some tiles of a build made again (`RecastNavigation.reshape`): each tile's compressed layers, made as
306
+ * `generateGroundTileCache` makes them, from the triangles that reach it. Also the bounds of the whole build, for the
307
+ * caller to know the tiles are cut on the grid it has (a build of other bounds is cut on another). `speedOf` is the speed
308
+ * of the ground at a point where the build has no speeds of its own (a part of the ground, `RecastNavigation.groundChanged`).
309
+ * Undefined where they could not be made
310
+ */
311
+ function groundTileLayers(build, tiles, cut = tileCutOf(build), speedOf) {
312
+ const { config, bbMin, tileWidth, tileHeight } = cut;
313
+ const tcs = config.tileSize * config.cs;
314
+ const border = config.borderSize * config.cs;
315
+ const own = new Map(tiles.map((key) => [key, []]));
316
+ const { positions, indices } = build;
317
+ for (let t = 0; t < indices.length; t += 3) {
318
+ let x0 = Infinity;
319
+ let x1 = -Infinity;
320
+ let z0 = Infinity;
321
+ let z1 = -Infinity;
322
+ for (let k = 0; k < 3; k++) {
323
+ const v = indices[t + k] * 3;
324
+ x0 = Math.min(x0, positions[v]);
325
+ x1 = Math.max(x1, positions[v]);
326
+ z0 = Math.min(z0, positions[v + 2]);
327
+ z1 = Math.max(z1, positions[v + 2]);
328
+ }
329
+ const tx0 = Math.max(0, Math.floor((x0 - border - bbMin[0]) / tcs));
330
+ const tx1 = Math.min(tileWidth - 1, Math.floor((x1 + border - bbMin[0]) / tcs));
331
+ const ty0 = Math.max(0, Math.floor((z0 - border - bbMin[2]) / tcs));
332
+ const ty1 = Math.min(tileHeight - 1, Math.floor((z1 + border - bbMin[2]) / tcs));
333
+ for (let tx = tx0; tx <= tx1; tx++) for (let ty = ty0; ty <= ty1; ty++) own.get(tileKey(tx, ty))?.push(indices[t], indices[t + 1], indices[t + 2]);
334
+ }
335
+ const made = /* @__PURE__ */ new Map();
336
+ const compressor = new Raw.RecastFastLZCompressor();
337
+ const rasterizer = speedOf ? tileRasterizer(build, cut, compressor, false, speedOf) : tileRasterizer(build, cut, compressor, false);
338
+ if (!rasterizer) {
339
+ Raw.destroy(compressor);
340
+ return;
341
+ }
342
+ try {
343
+ for (const key of tiles) {
344
+ const layers = rasterizer.rasterize(Math.floor(key / 65536), key % 65536, Uint32Array.from(own.get(key)));
345
+ made.set(key, layers.map((layer) => {
346
+ const bytes = layer.toTypedArray().slice();
347
+ layer.destroy();
348
+ return bytes;
349
+ }));
350
+ }
351
+ } finally {
352
+ rasterizer.destroy();
353
+ Raw.destroy(compressor);
354
+ }
355
+ return made;
356
+ }
357
+ /**
358
+ * The grid a build is cut on: its bounds and its tiles across and down. A build of the same grid as another's is cut
359
+ * into the same tiles, so a tile of one may be made again alone from the other (`groundTileLayers`)
360
+ */
361
+ function tileGridOf(build) {
362
+ const cut = tileCutOf(build);
363
+ const { bbMin, bbMax, tileWidth, tileHeight, config } = cut;
364
+ return {
365
+ bbMin,
366
+ bbMax,
367
+ tileWidth,
368
+ tileHeight,
369
+ tileSize: config.tileSize * config.cs,
370
+ border: config.borderSize * config.cs,
371
+ cut
372
+ };
373
+ }
374
+ /**
375
+ * A tile cache of the grid a build is cut on (`tileGridOf`), empty, with room for `room`'s tiles and obstacles: what
376
+ * a column of tiles made again alone is made into the navmesh's tiles through (`RecastNavigation.groundChanged`,
377
+ * `reshape`), as the whole's tile cache would make them. It works in the allocator and compressor given (the whole's:
378
+ * a tile is made in one call, and each starts the allocator over), which it does not take. Undefined where Recast
379
+ * would not make it
380
+ */
381
+ function columnTileCache(cut, process, room, allocator, compressor) {
382
+ const tileCache = new TileCache();
383
+ const params = tileCacheParamsOf(cut, room);
384
+ const made = tileCache.init(params, allocator, compressor, process);
385
+ Raw.destroy(params.raw);
386
+ if (made) return tileCache;
387
+ tileCache.destroy();
388
+ }
389
+ /**
390
+ * Puts a compressed layer (`groundTileLayers`) in a tile cache, which does not take it: its copy is given back, to be let
391
+ * go of (`destroy`) once the tile cache is. Undefined where the tile cache would not take it
392
+ */
393
+ function addTileLayer(tileCache, bytes) {
394
+ const data = new TileCacheData();
395
+ data.copy(bytes);
396
+ if (!statusFailed(tileCache.addTile(data, 0).status)) return data;
397
+ data.destroy();
398
+ }
399
+ /**
400
+ * Which layer of its column a compressed layer (`groundTileLayers`) is: the navmesh's tile made of it is at that layer.
401
+ * Its header (Detour's `dtTileCacheLayerHeader`) leads it uncompressed: magic, version, tx, ty, then the layer, each an int
402
+ */
403
+ var layerOf = (bytes) => new DataView(bytes.buffer, bytes.byteOffset, 20).getInt32(16, true);
404
+ //#endregion
405
+ export { addTileLayer, areaOfSpeed, columnTileCache, generateGroundTileCache, groundMeshProcess, groundTileLayers, layerOf, setAreaCosts, speedOfBuild, tileGridOf, tileKey };
406
+
407
+ //# sourceMappingURL=groundAreas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groundAreas.js","names":[],"sources":["../../src/navigation/groundAreas.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. Where a\n * slowing layer of cells changes in play (`RecastNavigation.groundChanged`), the tiles it reaches are cut again from the\n * ground with its speeds as they are now (`groundTileLayers`), as a world made or loaded now cuts them: made again only\n * from the layers they were first cut into, their polygons would part where the speed did then\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/** How a build is cut into tiles: Recast's config for one tile with its border, the bounds of the whole, the grid of tiles */\nexport interface TileCut {\n\tconfig: ReturnType<typeof createRcConfig>\n\tbbMin: [number, number, number]\n\tbbMax: [number, number, number]\n\t/** Tiles across and down */\n\ttileWidth: number\n\ttileHeight: number\n\texpectedLayersPerTile: number\n\tmaxObstacles: number\n}\n\n/** How a build is cut into tiles, as Recast's `generateTileCache` works it out */\nfunction tileCutOf(build: NavigationBuild): TileCut {\n\tconst { bbMin, bbMax } = getBoundingBox(build.positions as unknown as number[], build.indices as unknown as number[])\n\tconst { expectedLayersPerTile, maxObstacles, ...recastConfig } = { ...recastConfigDefaults, ...build.config }\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\treturn { config, bbMin: [...bbMin] as TileCut['bbMin'], bbMax: [...bbMax] as TileCut['bbMax'], tileWidth, tileHeight, expectedLayersPerTile, maxObstacles }\n}\n\n/** The tile cache's parameters of a cut: room for every tile of it and its obstacles, or as much as `room` says */\nfunction tileCacheParamsOf(\n\t{ config, bbMin, tileWidth, tileHeight, expectedLayersPerTile, maxObstacles }: TileCut,\n\troom?: { tiles: number; obstacles: number }\n): DetourTileCacheParams {\n\treturn 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: room?.tiles ?? tileWidth * tileHeight * expectedLayersPerTile,\n\t\tmaxObstacles: room?.obstacles ?? maxObstacles\n\t})\n}\n\n/**\n * What rasterises the tiles of a build into their compressed layers, from the triangles given (indices into its\n * positions, three to a triangle; all of them when left out): a tile is made of the triangles under it and its border,\n * so a tile made from fewer triangles, those that reach it among them, is the same tile. Undefined where its triangles\n * could not be sorted into chunks\n */\nfunction tileRasterizer(\n\tbuild: NavigationBuild,\n\tcut: TileCut,\n\tcompressor: InstanceType<typeof Raw.RecastFastLZCompressor>,\n\t/** Sorted into Recast's chunks (all the build's triangles, for every tile), or none where each tile is given its own */\n\tchunked = true,\n\t/** The speed of the ground at a point, where it is not the build's own (`NavigationBuild.speeds`) */\n\tspeedOf: ((x: number, z: number) => number) | undefined = build.speeds && ((x, z) => speedOfBuild(build.speeds, x, z))\n): { rasterize(tileX: number, tileY: number, own?: Uint32Array): InstanceType<typeof TileCacheData>[]; destroy(): void } | undefined {\n\tconst { positions } = build\n\tconst { config, bbMin, bbMax } = cut\n\tconst buildContext = new RecastBuildContext()\n\tconst verticesArray = new VerticesArray()\n\tverticesArray.copy(positions as unknown as number[])\n\t// as Recast's own counts it: the number of indices of the whole build\n\tconst numVertices = build.indices.length\n\tconst trianglesArray = new TrianglesArray()\n\tconst chunkyTriMesh = new RecastChunkyTriMesh()\n\tconst destroy = () => {\n\t\tverticesArray.destroy()\n\t\ttrianglesArray.destroy()\n\t}\n\tif (chunked) {\n\t\ttrianglesArray.copy(build.indices as unknown as number[])\n\t\tif (!chunkyTriMesh.init(verticesArray, trianglesArray, build.indices.length / 3, 256)) {\n\t\t\tdestroy()\n\t\t\treturn undefined\n\t\t}\n\t}\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 speed = speedOf!(x / 3, z / 3)\n\t\t// ground nobody on foot goes through (a thicket, `navigationSpeedOn`): left out, as a wall's is\n\t\tif (speed < 0) return 0\n\t\tconst area = areaOfSpeed(speed)\n\t\treturn area === 0 ? WALKABLE : area\n\t}\n\n\t/** Marks a run of triangles walkable (with their speeds) and rasterises them into the heightfield: false where Recast could not */\n\tconst rasterizeRun = (tileConfig: ReturnType<typeof cloneRcConfig>, heightfield: ReturnType<typeof allocHeightfield>, tris: InstanceType<typeof TrianglesArray>, count: number) => {\n\t\tconst areas = new TriangleAreasArray()\n\t\tareas.resize(count)\n\t\tmarkWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, tris, count, areas)\n\t\t// what is walkable takes its cell's speed: the one change from Recast's own\n\t\tif (speedOf) for (let t = 0; t < count; t++) if (areas.get(t) === WALKABLE) areas.set(t, areaOf(tris, t))\n\t\tconst rasterized = rasterizeTriangles(buildContext, verticesArray, numVertices, tris, areas, count, heightfield, tileConfig.walkableClimb)\n\t\tareas.destroy()\n\t\treturn rasterized\n\t}\n\n\tconst rasterize = (tileX: number, tileY: number, own?: Uint32Array): 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\tif (own) {\n\t\t\t// the tile's own triangles, as one run\n\t\t\tif (own.length) {\n\t\t\t\ttrianglesArray.copy(own as unknown as number[])\n\t\t\t\tif (!rasterizeRun(tileConfig, heightfield, trianglesArray, own.length / 3)) {\n\t\t\t\t\tfreeHeightfield(heightfield)\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst maxChunkIds = 512\n\t\t\tconst chunkIdsArray = new ChunkIdsArray()\n\t\t\tchunkIdsArray.resize(maxChunkIds)\n\t\t\tconst overlapping = chunkyTriMesh.getChunksOverlappingRect(\n\t\t\t\t[tileBoundsMin[0], tileBoundsMin[2]],\n\t\t\t\t[tileBoundsMax[0], tileBoundsMax[2]],\n\t\t\t\tchunkIdsArray,\n\t\t\t\tmaxChunkIds\n\t\t\t)\n\t\t\tfor (let i = 0; i < overlapping; ++i) {\n\t\t\t\tconst nodeId = chunkIdsArray.get(i)\n\t\t\t\tif (!rasterizeRun(tileConfig, heightfield, chunkyTriMesh.getNodeTris(nodeId), chunkyTriMesh.nodes(nodeId).n)) {\n\t\t\t\t\tchunkIdsArray.destroy()\n\t\t\t\t\tfreeHeightfield(heightfield)\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t}\n\t\t\tchunkIdsArray.destroy()\n\t\t}\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\treturn { rasterize, destroy }\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 { speeds } = build\n\tconst tileCache = new TileCache()\n\tconst navMesh = new NavMesh()\n\tconst process = groundMeshProcess((x, z) => speedOfBuild(speeds, x, z))\n\tconst cut = tileCutOf(build)\n\tconst { config, bbMin, tileWidth, tileHeight, expectedLayersPerTile } = cut\n\tlet rasterizer: ReturnType<typeof tileRasterizer>\n\tconst fail = (error: string): never => {\n\t\trasterizer?.destroy()\n\t\ttileCache.destroy()\n\t\tnavMesh.destroy()\n\t\tthrow new Error(`Navmesh generation failed: ${error}`)\n\t}\n\tconst allocator = new Raw.RecastLinearAllocator(32000)\n\tconst compressor = new Raw.RecastFastLZCompressor()\n\tif (!tileCache.init(tileCacheParamsOf(cut), 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\trasterizer = tileRasterizer(build, cut, compressor)\n\tif (!rasterizer) return fail('Failed to build chunky triangle mesh')\n\tfor (let y = 0; y < tileHeight; ++y) {\n\t\tfor (let x = 0; x < tileWidth; ++x) for (const tile of rasterizer.rasterize(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\trasterizer.destroy()\n\treturn { navMesh, tileCache, process }\n}\n\n/** A tile of the grid by its column and row: `tx * 65536 + ty` */\nexport const tileKey = (tx: number, ty: number): number => tx * 65536 + ty\n\n/**\n * Some tiles of a build made again (`RecastNavigation.reshape`): each tile's compressed layers, made as\n * `generateGroundTileCache` makes them, from the triangles that reach it. Also the bounds of the whole build, for the\n * caller to know the tiles are cut on the grid it has (a build of other bounds is cut on another). `speedOf` is the speed\n * of the ground at a point where the build has no speeds of its own (a part of the ground, `RecastNavigation.groundChanged`).\n * Undefined where they could not be made\n */\nexport function groundTileLayers(\n\tbuild: NavigationBuild,\n\ttiles: readonly number[],\n\tcut: TileCut = tileCutOf(build),\n\tspeedOf?: (x: number, z: number) => number\n): Map<number, Uint8Array[]> | undefined {\n\tconst { config, bbMin, tileWidth, tileHeight } = cut\n\tconst tcs = config.tileSize * config.cs\n\tconst border = config.borderSize * config.cs\n\t// each tile wanted, the triangles that reach it with its border, in the build's order\n\tconst own = new Map<number, number[]>(tiles.map((key) => [key, []]))\n\tconst { positions, indices } = build\n\tfor (let t = 0; t < indices.length; t += 3) {\n\t\tlet x0 = Infinity\n\t\tlet x1 = -Infinity\n\t\tlet z0 = Infinity\n\t\tlet z1 = -Infinity\n\t\tfor (let k = 0; k < 3; k++) {\n\t\t\tconst v = indices[t + k] * 3\n\t\t\tx0 = Math.min(x0, positions[v])\n\t\t\tx1 = Math.max(x1, positions[v])\n\t\t\tz0 = Math.min(z0, positions[v + 2])\n\t\t\tz1 = Math.max(z1, positions[v + 2])\n\t\t}\n\t\tconst tx0 = Math.max(0, Math.floor((x0 - border - bbMin[0]) / tcs))\n\t\tconst tx1 = Math.min(tileWidth - 1, Math.floor((x1 + border - bbMin[0]) / tcs))\n\t\tconst ty0 = Math.max(0, Math.floor((z0 - border - bbMin[2]) / tcs))\n\t\tconst ty1 = Math.min(tileHeight - 1, Math.floor((z1 + border - bbMin[2]) / tcs))\n\t\tfor (let tx = tx0; tx <= tx1; tx++) for (let ty = ty0; ty <= ty1; ty++) own.get(tileKey(tx, ty))?.push(indices[t], indices[t + 1], indices[t + 2])\n\t}\n\tconst made = new Map<number, Uint8Array[]>()\n\tconst compressor = new Raw.RecastFastLZCompressor()\n\tconst rasterizer = speedOf ? tileRasterizer(build, cut, compressor, false, speedOf) : tileRasterizer(build, cut, compressor, false)\n\tif (!rasterizer) {\n\t\tRaw.destroy(compressor)\n\t\treturn undefined\n\t}\n\ttry {\n\t\tfor (const key of tiles) {\n\t\t\tconst layers = rasterizer.rasterize(Math.floor(key / 65536), key % 65536, Uint32Array.from(own.get(key)!))\n\t\t\tmade.set(\n\t\t\t\tkey,\n\t\t\t\tlayers.map((layer) => {\n\t\t\t\t\tconst bytes = layer.toTypedArray().slice()\n\t\t\t\t\t// made by Recast (dtBuildTileCacheLayer), in no tile cache: let go of here\n\t\t\t\t\tlayer.destroy()\n\t\t\t\t\treturn bytes\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t} finally {\n\t\trasterizer.destroy()\n\t\tRaw.destroy(compressor)\n\t}\n\treturn made\n}\n\n/**\n * The grid a build is cut on: its bounds and its tiles across and down. A build of the same grid as another's is cut\n * into the same tiles, so a tile of one may be made again alone from the other (`groundTileLayers`)\n */\nexport function tileGridOf(build: NavigationBuild): {\n\tbbMin: readonly number[]\n\tbbMax: readonly number[]\n\ttileWidth: number\n\ttileHeight: number\n\t/** A tile's side, in ground units */\n\ttileSize: number\n\t/** How far round a tile the ground it is made of reaches, in ground units */\n\tborder: number\n\t/** The whole of how it is cut, for `groundTileLayers` and `emptyTileCache` not to work it out again */\n\tcut: TileCut\n} {\n\tconst cut = tileCutOf(build)\n\tconst { bbMin, bbMax, tileWidth, tileHeight, config } = cut\n\treturn { bbMin, bbMax, tileWidth, tileHeight, tileSize: config.tileSize * config.cs, border: config.borderSize * config.cs, cut }\n}\n\n/**\n * A tile cache of the grid a build is cut on (`tileGridOf`), empty, with room for `room`'s tiles and obstacles: what\n * a column of tiles made again alone is made into the navmesh's tiles through (`RecastNavigation.groundChanged`,\n * `reshape`), as the whole's tile cache would make them. It works in the allocator and compressor given (the whole's:\n * a tile is made in one call, and each starts the allocator over), which it does not take. Undefined where Recast\n * would not make it\n */\nexport function columnTileCache(\n\tcut: TileCut,\n\tprocess: TileCacheMeshProcess,\n\troom: { tiles: number; obstacles: number },\n\tallocator: InstanceType<typeof Raw.RecastLinearAllocator>,\n\tcompressor: InstanceType<typeof Raw.RecastFastLZCompressor>\n): TileCache | undefined {\n\tconst tileCache = new TileCache()\n\tconst params = tileCacheParamsOf(cut, room)\n\tconst made = tileCache.init(params, allocator, compressor, process)\n\t// Detour copies them in: let go of here, as a column may be made many times a game\n\tRaw.destroy(params.raw)\n\tif (made) return tileCache\n\ttileCache.destroy()\n\treturn undefined\n}\n\n/**\n * Puts a compressed layer (`groundTileLayers`) in a tile cache, which does not take it: its copy is given back, to be let\n * go of (`destroy`) once the tile cache is. Undefined where the tile cache would not take it\n */\nexport function addTileLayer(tileCache: TileCache, bytes: Uint8Array): InstanceType<typeof TileCacheData> | undefined {\n\tconst data = new TileCacheData()\n\tdata.copy(bytes)\n\tif (!statusFailed(tileCache.addTile(data, 0).status)) return data\n\tdata.destroy()\n\treturn undefined\n}\n\n/**\n * Which layer of its column a compressed layer (`groundTileLayers`) is: the navmesh's tile made of it is at that layer.\n * Its header (Detour's `dtTileCacheLayerHeader`) leads it uncompressed: magic, version, tx, ty, then the layer, each an int\n */\nexport const layerOf = (bytes: Uint8Array): number => new DataView(bytes.buffer, bytes.byteOffset, 20).getInt32(16, true)\n"],"mappings":";;;;AA2DA,IAAM,QAAQ;AACd,IAAM,WAAW;;AAGjB,SAAgB,YAAY,OAAuB;CAClD,IAAI,UAAU,KAAK,EAAE,SAAS,IAAI,OAAO;CACzC,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK;CACtC,OAAO,UAAU,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,EAAY;AACvE;;AAGA,SAAgB,aAAa,QAA2B;CACvD,KAAK,IAAI,OAAO,GAAG,OAAO,UAAU,QAAQ,OAAO,YAAY,MAAM,QAAQ,IAAI;AAClF;;AAGA,SAAgB,aAAa,QAAsC,GAAW,GAAmB;CAChG,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,SAAS,KAAK,MAAM,CAAC;CAC3B,MAAM,MAAM,KAAK,MAAM,CAAC;CACxB,IAAI,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,SAAS,OAAO,OAAO,OAAO,OAAO;CACnF,OAAO,OAAO,OAAO,MAAM,OAAO,QAAQ;AAC3C;;;;;AAMA,SAAgB,kBAAkB,SAAkE;CACnG,OAAO,IAAI,sBAAsB,QAA6B,WAAW,cAAc;EACtF,MAAM,QAAQ,OAAO,UAAU;EAC/B,IAAI,CAAC,SAAS;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;IAC/B,UAAU,IAAI,GAAG,CAAC;IAClB,UAAU,IAAI,GAAG,CAAC;GACnB;GACA;EACD;EAEA,MAAM,MAAM,OAAO,IAAI;EACvB,MAAM,MAAM,OAAO;EACnB,MAAM,KAAK,IAAI;EACf,MAAM,UAAU,IAAI,SAAS,CAAC;EAC9B,MAAM,UAAU,IAAI,SAAS,CAAC;EAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,IAAI,IAAI;GACR,IAAI,IAAI;GACR,IAAI,UAAU;GACd,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;IAC7B,MAAM,SAAS,OAAO,MAAM,IAAI,MAAM,IAAI,CAAC;IAE3C,IAAI,WAAW,OAAQ;IACvB,KAAK,OAAO,MAAM,SAAS,CAAC;IAC5B,KAAK,OAAO,MAAM,SAAS,IAAI,CAAC;IAChC;GACD;GACA,MAAM,QAAQ,UAAU,QAAQ,UAAW,IAAI,UAAW,IAAI,UAAW,IAAI,UAAW,EAAE,IAAI;GAC9F,UAAU,IAAI,GAAG,YAAY,KAAK,CAAC;GACnC,UAAU,IAAI,GAAG,CAAC;EACnB;CACD,CAAC;AACF;;AAeA,SAAS,UAAU,OAAiC;CACnD,MAAM,EAAE,OAAO,UAAU,eAAe,MAAM,WAAkC,MAAM,OAA8B;CACpH,MAAM,EAAE,uBAAuB,cAAc,GAAG,iBAAiB;EAAE,GAAG;EAAsB,GAAG,MAAM;CAAO;CAC5G,MAAM,SAAS,eAAe,YAAY;CAC1C,MAAM,WAAW,aAAa,OAAO,OAAO,OAAO,EAAE;CACrD,OAAO,QAAQ,SAAS;CACxB,OAAO,SAAS,SAAS;CACzB,OAAO,gBAAgB,OAAO,gBAAgB,OAAO;CACrD,OAAO,kBAAkB,OAAO,kBAAkB,OAAO;CACzD,OAAO,mBAAmB,OAAO,mBAAmB,KAAM,IAAI,OAAO,KAAK,OAAO;CACjF,OAAO,uBAAuB,OAAO,KAAK,OAAO;CACjD,MAAM,WAAW,KAAK,MAAM,OAAO,QAAQ;CAC3C,MAAM,YAAY,KAAK,OAAO,OAAO,QAAQ,WAAW,KAAK,QAAQ;CACrE,MAAM,aAAa,KAAK,OAAO,OAAO,SAAS,WAAW,KAAK,QAAQ;CACvE,OAAO,aAAa,OAAO,iBAAiB;CAC5C,OAAO,QAAQ,OAAO,WAAW,OAAO,aAAa;CACrD,OAAO,SAAS,OAAO,WAAW,OAAO,aAAa;CACtD,OAAO;EAAE;EAAQ,OAAO,CAAC,GAAG,KAAK;EAAuB,OAAO,CAAC,GAAG,KAAK;EAAuB;EAAW;EAAY;EAAuB;CAAa;AAC3J;;AAGA,SAAS,kBACR,EAAE,QAAQ,OAAO,WAAW,YAAY,uBAAuB,gBAC/D,MACwB;CACxB,OAAO,sBAAsB,OAAO;EACnC,MAAM;EACN,IAAI,OAAO;EACX,IAAI,OAAO;EACX,OAAO,OAAO;EACd,QAAQ,OAAO;EACf,gBAAgB,OAAO,iBAAiB,OAAO;EAC/C,gBAAgB,OAAO,iBAAiB,OAAO;EAC/C,eAAe,OAAO,gBAAgB,OAAO;EAC7C,wBAAwB,OAAO;EAC/B,UAAU,MAAM,SAAS,YAAY,aAAa;EAClD,cAAc,MAAM,aAAa;CAClC,CAAC;AACF;;;;;;;AAQA,SAAS,eACR,OACA,KACA,YAEA,UAAU,MAEV,UAA0D,MAAM,YAAY,GAAG,MAAM,aAAa,MAAM,QAAQ,GAAG,CAAC,IACgB;CACpI,MAAM,EAAE,cAAc;CACtB,MAAM,EAAE,QAAQ,OAAO,UAAU;CACjC,MAAM,eAAe,IAAI,mBAAmB;CAC5C,MAAM,gBAAgB,IAAI,cAAc;CACxC,cAAc,KAAK,SAAgC;CAEnD,MAAM,cAAc,MAAM,QAAQ;CAClC,MAAM,iBAAiB,IAAI,eAAe;CAC1C,MAAM,gBAAgB,IAAI,oBAAoB;CAC9C,MAAM,gBAAgB;EACrB,cAAc,QAAQ;EACtB,eAAe,QAAQ;CACxB;CACA,IAAI,SAAS;EACZ,eAAe,KAAK,MAAM,OAA8B;EACxD,IAAI,CAAC,cAAc,KAAK,eAAe,gBAAgB,MAAM,QAAQ,SAAS,GAAG,GAAG,GAAG;GACtF,QAAQ;GACR;EACD;CACD;;CAGA,MAAM,UAAU,SAAyC,MAAc;EACtE,IAAI,IAAI;EACR,IAAI,IAAI;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3B,MAAM,SAAS,QAAQ,IAAI,IAAI,IAAI,CAAC;GACpC,KAAK,UAAU,SAAS;GACxB,KAAK,UAAU,SAAS,IAAI;EAC7B;EACA,MAAM,QAAQ,QAAS,IAAI,GAAG,IAAI,CAAC;EAEnC,IAAI,QAAQ,GAAG,OAAO;EACtB,MAAM,OAAO,YAAY,KAAK;EAC9B,OAAO,SAAS,IAAI,WAAW;CAChC;;CAGA,MAAM,gBAAgB,YAA8C,aAAkD,MAA2C,UAAkB;EAClL,MAAM,QAAQ,IAAI,mBAAmB;EACrC,MAAM,OAAO,KAAK;EAClB,sBAAsB,cAAc,WAAW,oBAAoB,eAAe,aAAa,MAAM,OAAO,KAAK;EAEjH,IAAI,SAAc;QAAA,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,UAAU,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,CAAC;EAAA;EACxG,MAAM,aAAa,mBAAmB,cAAc,eAAe,aAAa,MAAM,OAAO,OAAO,aAAa,WAAW,aAAa;EACzI,MAAM,QAAQ;EACd,OAAO;CACR;CAEA,MAAM,aAAa,OAAe,OAAe,QAA4D;EAC5G,MAAM,MAAM,OAAO,WAAW,OAAO;EACrC,MAAM,aAAa,cAAc,MAAM;EACvC,MAAM,gBAA0C;GAC/C,MAAM,KAAK,QAAQ,MAAM,OAAO,aAAa,OAAO;GACpD,MAAM;GACN,MAAM,KAAK,QAAQ,MAAM,OAAO,aAAa,OAAO;EACrD;EACA,MAAM,gBAA0C;GAC/C,MAAM,MAAM,QAAQ,KAAK,MAAM,OAAO,aAAa,OAAO;GAC1D,MAAM;GACN,MAAM,MAAM,QAAQ,KAAK,MAAM,OAAO,aAAa,OAAO;EAC3D;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3B,WAAW,SAAS,GAAG,cAAc,EAAE;GACvC,WAAW,SAAS,GAAG,cAAc,EAAE;EACxC;EACA,MAAM,cAAc,iBAAiB;EACrC,IACC,CAAC,kBAAkB,cAAc,aAAa,WAAW,OAAO,WAAW,QAAQ,eAAe,eAAe,WAAW,IAAI,WAAW,EAAE,GAC5I;GACD,gBAAgB,WAAW;GAC3B,OAAO,CAAC;EACT;EACA,IAAI,KAEC;OAAA,IAAI,QAAQ;IACf,eAAe,KAAK,GAA0B;IAC9C,IAAI,CAAC,aAAa,YAAY,aAAa,gBAAgB,IAAI,SAAS,CAAC,GAAG;KAC3E,gBAAgB,WAAW;KAC3B,OAAO,CAAC;IACT;GACD;SACM;GACN,MAAM,cAAc;GACpB,MAAM,gBAAgB,IAAI,cAAc;GACxC,cAAc,OAAO,WAAW;GAChC,MAAM,cAAc,cAAc,yBACjC,CAAC,cAAc,IAAI,cAAc,EAAE,GACnC,CAAC,cAAc,IAAI,cAAc,EAAE,GACnC,eACA,WACD;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;IACrC,MAAM,SAAS,cAAc,IAAI,CAAC;IAClC,IAAI,CAAC,aAAa,YAAY,aAAa,cAAc,YAAY,MAAM,GAAG,cAAc,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG;KAC7G,cAAc,QAAQ;KACtB,gBAAgB,WAAW;KAC3B,OAAO,CAAC;IACT;GACD;GACA,cAAc,QAAQ;EACvB;EACA,kCAAkC,cAAc,OAAO,eAAe,WAAW;EACjF,iBAAiB,cAAc,OAAO,gBAAgB,OAAO,eAAe,WAAW;EACvF,6BAA6B,cAAc,OAAO,gBAAgB,WAAW;EAC7E,MAAM,qBAAqB,wBAAwB;EACnD,MAAM,YAAY,wBAAwB,cAAc,OAAO,gBAAgB,OAAO,eAAe,aAAa,kBAAkB;EACpI,gBAAgB,WAAW;EAC3B,IAAI,CAAC,aAAa,CAAC,kBAAkB,cAAc,OAAO,gBAAgB,kBAAkB,GAAG;GAC9F,uBAAuB,kBAAkB;GACzC,OAAO,CAAC;EACT;EACA,MAAM,WAAW,yBAAyB;EAC1C,MAAM,UAAU,uBAAuB,cAAc,oBAAoB,OAAO,YAAY,OAAO,gBAAgB,QAAQ;EAC3H,uBAAuB,kBAAkB;EACzC,IAAI,CAAC,SAAS;GACb,wBAAwB,QAAQ;GAChC,OAAO,CAAC;EACT;EACA,MAAM,QAA8C,CAAC;EACrD,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,GAAG,KAAK;GAC5C,MAAM,OAAO,IAAI,cAAc;GAC/B,MAAM,QAAQ,SAAS,OAAO,CAAC;GAC/B,MAAM,SAAS,IAAI,IAAI,uBAAuB;GAC9C,OAAO,QAAQ,OAAO;GACtB,OAAO,UAAU,OAAO;GACxB,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,OAAO,SAAS;GAChB,MAAM,MAAM,MAAM,KAAK;GACvB,MAAM,MAAM,MAAM,KAAK;GACvB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,SAAS,GAAG,IAAI,CAAC;GACxB,OAAO,QAAQ,MAAM,MAAM;GAC3B,OAAO,SAAS,MAAM,OAAO;GAC7B,OAAO,OAAO,MAAM,KAAK;GACzB,OAAO,OAAO,MAAM,KAAK;GACzB,OAAO,OAAO,MAAM,KAAK;GACzB,OAAO,OAAO,MAAM,KAAK;GACzB,OAAO,OAAO,MAAM,KAAK;GACzB,OAAO,OAAO,MAAM,KAAK;GACzB,MAAM,SAAS,oBACd,YACA,QACA,2BAA2B,KAAK,GAChC,yBAAyB,KAAK,GAC9B,wBAAwB,KAAK,GAC7B,IACD;GACA,IAAI,aAAa,MAAM,GAAG;GAC1B,MAAM,KAAK,IAAI;EAChB;EACA,wBAAwB,QAAQ;EAChC,OAAO;CACR;CACA,OAAO;EAAE;EAAW;CAAQ;AAC7B;;;;;;AAOA,SAAgB,wBAAwB,OAAmG;CAC1I,MAAM,EAAE,WAAW;CACnB,MAAM,YAAY,IAAI,UAAU;CAChC,MAAM,UAAU,IAAI,QAAQ;CAC5B,MAAM,UAAU,mBAAmB,GAAG,MAAM,aAAa,QAAQ,GAAG,CAAC,CAAC;CACtE,MAAM,MAAM,UAAU,KAAK;CAC3B,MAAM,EAAE,QAAQ,OAAO,WAAW,YAAY,0BAA0B;CACxE,IAAI;CACJ,MAAM,QAAQ,UAAyB;EACtC,YAAY,QAAQ;EACpB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,MAAM,IAAI,MAAM,8BAA8B,OAAO;CACtD;CACA,MAAM,YAAY,IAAI,IAAI,sBAAsB,IAAK;CACrD,MAAM,aAAa,IAAI,IAAI,uBAAuB;CAClD,IAAI,CAAC,UAAU,KAAK,kBAAkB,GAAG,GAAG,WAAW,YAAY,OAAO,GAAG,KAAK,iCAAiC;CACnH,MAAM,WAAW,KAAK,IAAI,KAAK,MAAM,QAAQ,WAAW,YAAY,aAAa,qBAAqB,CAAC,CAAC,GAAG,EAAE;CAC7G,MAAM,gBAAgB,cAAc,OAAO;EAC1C,MAAM,KAAK,UAAU,KAAK;EAC1B,WAAW,OAAO,WAAW,OAAO;EACpC,YAAY,OAAO,WAAW,OAAO;EACrC,UAAU,KAAK;EACf,UAAU,KAAM,KAAK;CACtB,CAAC;CACD,IAAI,CAAC,QAAQ,UAAU,aAAa,GAAG,KAAK,oCAAoC;CAChF,aAAa,eAAe,OAAO,KAAK,UAAU;CAClD,IAAI,CAAC,YAAY,OAAO,KAAK,sCAAsC;CACnE,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,EAAE,GACjC,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,EAAE,GAAG,KAAK,MAAM,QAAQ,WAAW,UAAU,GAAG,CAAC,GAAG,UAAU,QAAQ,IAAI;CAE1G,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAC9B,IAAI,aAAa,UAAU,oBAAoB,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,qCAAqC,EAAE,IAAI,GAAG;CAErH,WAAW,QAAQ;CACnB,OAAO;EAAE;EAAS;EAAW;CAAQ;AACtC;;AAGA,IAAa,WAAW,IAAY,OAAuB,KAAK,QAAQ;;;;;;;;AASxE,SAAgB,iBACf,OACA,OACA,MAAe,UAAU,KAAK,GAC9B,SACwC;CACxC,MAAM,EAAE,QAAQ,OAAO,WAAW,eAAe;CACjD,MAAM,MAAM,OAAO,WAAW,OAAO;CACrC,MAAM,SAAS,OAAO,aAAa,OAAO;CAE1C,MAAM,MAAM,IAAI,IAAsB,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACnE,MAAM,EAAE,WAAW,YAAY;CAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;EAC3C,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,KAAK;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3B,MAAM,IAAI,QAAQ,IAAI,KAAK;GAC3B,KAAK,KAAK,IAAI,IAAI,UAAU,EAAE;GAC9B,KAAK,KAAK,IAAI,IAAI,UAAU,EAAE;GAC9B,KAAK,KAAK,IAAI,IAAI,UAAU,IAAI,EAAE;GAClC,KAAK,KAAK,IAAI,IAAI,UAAU,IAAI,EAAE;EACnC;EACA,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,MAAM,MAAM,GAAG,CAAC;EAClE,MAAM,MAAM,KAAK,IAAI,YAAY,GAAG,KAAK,OAAO,KAAK,SAAS,MAAM,MAAM,GAAG,CAAC;EAC9E,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,MAAM,MAAM,GAAG,CAAC;EAClE,MAAM,MAAM,KAAK,IAAI,aAAa,GAAG,KAAK,OAAO,KAAK,SAAS,MAAM,MAAM,GAAG,CAAC;EAC/E,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;CAClJ;CACA,MAAM,uBAAO,IAAI,IAA0B;CAC3C,MAAM,aAAa,IAAI,IAAI,uBAAuB;CAClD,MAAM,aAAa,UAAU,eAAe,OAAO,KAAK,YAAY,OAAO,OAAO,IAAI,eAAe,OAAO,KAAK,YAAY,KAAK;CAClI,IAAI,CAAC,YAAY;EAChB,IAAI,QAAQ,UAAU;EACtB;CACD;CACA,IAAI;EACH,KAAK,MAAM,OAAO,OAAO;GACxB,MAAM,SAAS,WAAW,UAAU,KAAK,MAAM,MAAM,KAAK,GAAG,MAAM,OAAO,YAAY,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC;GACzG,KAAK,IACJ,KACA,OAAO,KAAK,UAAU;IACrB,MAAM,QAAQ,MAAM,aAAa,CAAC,CAAC,MAAM;IAEzC,MAAM,QAAQ;IACd,OAAO;GACR,CAAC,CACF;EACD;CACD,UAAU;EACT,WAAW,QAAQ;EACnB,IAAI,QAAQ,UAAU;CACvB;CACA,OAAO;AACR;;;;;AAMA,SAAgB,WAAW,OAWzB;CACD,MAAM,MAAM,UAAU,KAAK;CAC3B,MAAM,EAAE,OAAO,OAAO,WAAW,YAAY,WAAW;CACxD,OAAO;EAAE;EAAO;EAAO;EAAW;EAAY,UAAU,OAAO,WAAW,OAAO;EAAI,QAAQ,OAAO,aAAa,OAAO;EAAI;CAAI;AACjI;;;;;;;;AASA,SAAgB,gBACf,KACA,SACA,MACA,WACA,YACwB;CACxB,MAAM,YAAY,IAAI,UAAU;CAChC,MAAM,SAAS,kBAAkB,KAAK,IAAI;CAC1C,MAAM,OAAO,UAAU,KAAK,QAAQ,WAAW,YAAY,OAAO;CAElE,IAAI,QAAQ,OAAO,GAAG;CACtB,IAAI,MAAM,OAAO;CACjB,UAAU,QAAQ;AAEnB;;;;;AAMA,SAAgB,aAAa,WAAsB,OAAmE;CACrH,MAAM,OAAO,IAAI,cAAc;CAC/B,KAAK,KAAK,KAAK;CACf,IAAI,CAAC,aAAa,UAAU,QAAQ,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO;CAC7D,KAAK,QAAQ;AAEd;;;;;AAMA,IAAa,WAAW,UAA8B,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI"}
@@ -25,30 +25,62 @@ export interface AgentState {
25
25
  * @beta
26
26
  */
27
27
  export interface AgentSave {
28
+ /** Where the agent is on the map's x axis, in cells */
28
29
  x: number;
30
+ /** Where the agent is on the map's z axis, in cells */
29
31
  z: number;
32
+ /** Its velocity along x, in cells per second */
30
33
  vx: number;
34
+ /** Its velocity along z, in cells per second */
31
35
  vz: number;
36
+ /** Its radius, in cells */
32
37
  radius: number;
38
+ /** How fast it goes, in cells per second */
33
39
  speed: number;
34
40
  /** How fast it gets up to speed, where that is not what follows from the speed */
35
41
  acceleration?: number;
42
+ /** Whether it flies, over what blocks the ground */
36
43
  flying?: boolean;
44
+ /** Whether it sails, on deep water instead of the ground */
37
45
  naval?: boolean;
38
46
  /** Where it was sent, snapped to where it can go. Null when it was not */
39
47
  target: Vec2 | null;
48
+ /** Whether it holds its ground, so that others walk around it */
40
49
  anchored: boolean;
41
50
  /** Where an anchored agent holds its ground */
42
51
  anchor?: Vec2;
52
+ /** Whether it ignores other agents */
43
53
  ghost: boolean;
54
+ /** Whether it walks through every other agent and they through it (`Navigation.setPhasing`) */
55
+ phasing?: boolean;
44
56
  }
45
- /** @beta */
57
+ /**
58
+ * A mesh of the navigation, for drawing: `triangles` and `lines` of it
59
+ *
60
+ * @beta
61
+ */
46
62
  export interface NavDebugGeometry {
47
63
  /** xyz triples, 3 vertices per triangle */
48
64
  triangles: Float32Array;
49
65
  /** xyz triples, 2 vertices per line */
50
66
  lines: Float32Array;
51
67
  }
68
+ /**
69
+ * A part of the ground, in cells: the first cell, and how many across and down (what `World.reshapeGround` changed,
70
+ * as its `TerrainPatch` says)
71
+ *
72
+ * @beta
73
+ */
74
+ export interface CellArea {
75
+ /** The first cell on the x axis */
76
+ x: number;
77
+ /** The first cell on the z axis */
78
+ z: number;
79
+ /** How many cells across */
80
+ width: number;
81
+ /** How many cells down */
82
+ depth: number;
83
+ }
52
84
  /**
53
85
  * Pathfinding and local avoidance. The simulation only talks to this interface,
54
86
  * so the backing implementation can be replaced without touching game logic.
@@ -58,18 +90,31 @@ export interface NavDebugGeometry {
58
90
  export interface Navigation {
59
91
  /** Bumped whenever walkable space changes (obstacles added or removed) */
60
92
  readonly version: number;
93
+ /** Puts an agent in the crowd by its id (the entity's), at a position and with its radius, speed and the like */
61
94
  addAgent(id: number, position: Vec2, params: AgentParams): void;
95
+ /** Takes the agent out of the crowd */
62
96
  removeAgent(id: number): void;
97
+ /** Whether an agent by this id is in the crowd */
63
98
  hasAgent(id: number): boolean;
64
99
  /** Path towards `target`. The target is snapped to walkable space; returns false when nothing walkable is near it. */
65
100
  setDestination(id: number, target: Vec2): boolean;
101
+ /** Forgets where the agent was sent; it stops where it is */
66
102
  clearDestination(id: number): void;
103
+ /** Moves the agent to the position at once, without a walk */
67
104
  teleport(id: number, position: Vec2): void;
68
105
  /** Anchored agents hold their ground: others have to walk around them instead of shoving them away. */
69
106
  setAnchored(id: number, anchored: boolean): void;
70
107
  /** Ghost agents ignore other agents (used by workers hauling resources). */
71
108
  setGhost(id: number, ghost: boolean): void;
109
+ /**
110
+ * An agent that phases walks through every other agent and every other through it: neither steers round nor pushes
111
+ * the other (`BuffDef.phasing`). What blocks the ground (walls, cliffs, obstacles) still stops it. A navigation
112
+ * without it has the agent a ghost instead (`setGhost`), which others may still push aside
113
+ */
114
+ setPhasing?(id: number, phasing: boolean): void;
115
+ /** Changes how fast the agent goes, in cells per second */
72
116
  setSpeed(id: number, speed: number): void;
117
+ /** Writes the agent's position, velocity and next corners into `out`; returns false when there is no such agent */
73
118
  readAgent(id: number, out: AgentState): boolean;
74
119
  /** What a save needs of an agent, or undefined when there is none of that id */
75
120
  saveAgent(id: number): AgentSave | undefined;
@@ -86,12 +131,14 @@ export interface Navigation {
86
131
  reseat(agents: readonly (readonly [id: number, save: AgentSave])[]): void;
87
132
  /** After a load: brings walkable space up to date with the obstacles put back, and takes on the version it had */
88
133
  settle(version: number): void;
134
+ /** Steps the crowd by `dt` seconds: agents follow their paths and steer around each other */
89
135
  update(dt: number): void;
90
136
  /**
91
137
  * Something that blocks the way, a building or a shut gate. False when there is no room for another (see
92
138
  * `obstacleRoom`): it is then not in the way, and never thrown over in the middle of a tick
93
139
  */
94
140
  addObstacle(key: number, rect: Rect): boolean;
141
+ /** Takes the obstacle with this key out of the way, opening the ground it covered */
95
142
  removeObstacle(key: number): void;
96
143
  /** How many more obstacles there is room for: what placing a building is refused over, before it is placed */
97
144
  obstacleRoom(): number;
@@ -104,24 +151,66 @@ export interface Navigation {
104
151
  holdObstacles?(hold: boolean): void;
105
152
  /**
106
153
  * Whether two agents are in each other's way: on the same crowd, so that each steers around the other and neither
107
- * walks through. Agents of different layers (ground, air, water), or of different sizes where the ground is cut for
108
- * several (`SizedNavigation`), are not. Taken as yes where a navigation does not say
154
+ * walks through. Agents of different layers (ground, air, water) are not; those of different sizes where the ground
155
+ * is cut for several are (`SizedNavigation`). Taken as yes where a navigation does not say
109
156
  */
110
157
  sameCrowd?(a: number, b: number): boolean;
111
158
  /** Closest walkable point, or null when there is none within `searchRadius`. */
112
159
  closestPoint(point: Vec2, searchRadius?: number): Vec2 | null;
160
+ /** Finds a path between two points over walkable space, as a list of corners; null when there is none */
113
161
  findPath(from: Vec2, to: Vec2): Vec2[] | null;
114
162
  /**
115
163
  * A layer of cells that slows one on foot changed on these cells (`World.setCells`): what a path weighs there is
116
- * made again (EN2). Nothing where a navigation weighs no ground
164
+ * made again (EN2), as a navigation cut now of the ground as it is would weigh it, so a world loaded from a save made
165
+ * after plays out the same. `walkability`: the change may have made cells walkable or not (a layer with a thicket
166
+ * among its values, `FoliageStyleDef.walkable`), which the ways keep their distance from beyond the cells' own part of
167
+ * the navigation. Nothing where a navigation weighs no ground
168
+ */
169
+ groundChanged?(cells: readonly number[], walkability?: boolean): void;
170
+ /**
171
+ * The ground it is a navigation of was reshaped (`World.reshapeGround`): cut again from it as it is now, what is in
172
+ * the way and every agent kept as they were. Told the part that changed (`area`), it may cut again only what that
173
+ * part reaches. False where it will not be (a navigation of no ground); one that cannot be cut of the ground as it is
174
+ * now is left as it was. A navigation may do it, and `groundChanged`, later than asked, all together, as long as
175
+ * nothing asked of it before then sees the ground as it was (`settleGround`)
117
176
  */
118
- groundChanged?(cells: readonly number[]): void;
177
+ reshape?(area?: CellArea): boolean;
119
178
  /**
120
- * The ground it is a navigation of was reshaped (`World.reshapeGround`): cut again from it as it is now, at once, what
121
- * is in the way and every agent kept as they were. False where it was not (a navigation of no ground, or one that
122
- * cannot be cut of the ground as it is now): it is left as it was
179
+ * Does now what the ground's changes asked of it and it has not done yet (`groundChanged`, `reshape`): the world asks
180
+ * it as each tick ends, so that a tick's changes of the ground are done together, once, and none is left over for
181
+ * after the tick (a save, a screen). Nothing where a navigation does them at once
123
182
  */
124
- reshape?(): boolean;
183
+ settleGround?(): void;
184
+ /** Gives the navigation mesh as triangles and lines, for the debug view */
125
185
  debugGeometry(): NavDebugGeometry;
186
+ /** Frees the navigation and its crowd; it is not used after */
126
187
  dispose(): void;
127
188
  }
189
+ /**
190
+ * Where an agent is and how fast it goes, as one crowd tells another of it (`AgentMirrors`)
191
+ *
192
+ * @beta
193
+ */
194
+ export interface AgentMotion {
195
+ x: number;
196
+ y: number;
197
+ z: number;
198
+ vx: number;
199
+ vz: number;
200
+ }
201
+ /**
202
+ * What a navigation of one size does for `SizedNavigation`: has agents of its other sizes stand in its crowd as
203
+ * mirrors. A mirror is steered round and pushed against as any agent is, but it never moves by itself: it is where it
204
+ * was last told, and pushes without being pushed, as an anchored agent does
205
+ *
206
+ * @beta
207
+ */
208
+ export interface AgentMirrors {
209
+ readMotion(id: number, out: AgentMotion): boolean;
210
+ addMirror(id: number, motion: AgentMotion, radius: number, ghost: boolean): void;
211
+ moveMirror(id: number, motion: AgentMotion): void;
212
+ setMirrorGhost(id: number, ghost: boolean): void;
213
+ /** The agent of a mirror phases (`Navigation.setPhasing`): its mirror is in nobody's way meanwhile */
214
+ setMirrorPhasing?(id: number, phasing: boolean): void;
215
+ removeMirror(id: number): void;
216
+ }