@v12-engine/engine 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/dist/abilities/amounts.d.ts +28 -0
  2. package/dist/abilities/amounts.js +74 -0
  3. package/dist/abilities/amounts.js.map +1 -0
  4. package/dist/abilities/buffs.d.ts +106 -6
  5. package/dist/abilities/buffs.js +443 -0
  6. package/dist/abilities/buffs.js.map +1 -0
  7. package/dist/abilities/castTold.d.ts +2 -0
  8. package/dist/abilities/castTold.js +66 -0
  9. package/dist/abilities/castTold.js.map +1 -0
  10. package/dist/abilities/chance.d.ts +38 -0
  11. package/dist/abilities/chance.js +77 -0
  12. package/dist/abilities/chance.js.map +1 -0
  13. package/dist/abilities/charges.d.ts +18 -0
  14. package/dist/abilities/charges.js +101 -0
  15. package/dist/abilities/charges.js.map +1 -0
  16. package/dist/abilities/control.d.ts +28 -0
  17. package/dist/abilities/control.js +113 -0
  18. package/dist/abilities/control.js.map +1 -0
  19. package/dist/abilities/dispel.js +51 -0
  20. package/dist/abilities/dispel.js.map +1 -0
  21. package/dist/abilities/effectFields.d.ts +1 -1
  22. package/dist/abilities/effectFields.js +676 -0
  23. package/dist/abilities/effectFields.js.map +1 -0
  24. package/dist/abilities/effectIndex.d.ts +27 -0
  25. package/dist/abilities/effectIndex.js +64 -0
  26. package/dist/abilities/effectIndex.js.map +1 -0
  27. package/dist/abilities/effects/buff.d.ts +9 -3
  28. package/dist/abilities/effects/buff.js +84 -0
  29. package/dist/abilities/effects/buff.js.map +1 -0
  30. package/dist/abilities/effects/conditions.d.ts +2 -0
  31. package/dist/abilities/effects/conditions.js +41 -0
  32. package/dist/abilities/effects/conditions.js.map +1 -0
  33. package/dist/abilities/effects/core.js +54 -0
  34. package/dist/abilities/effects/core.js.map +1 -0
  35. package/dist/abilities/effects/damage.d.ts +1 -1
  36. package/dist/abilities/effects/damage.js +43 -0
  37. package/dist/abilities/effects/damage.js.map +1 -0
  38. package/dist/abilities/effects/heal.d.ts +2 -2
  39. package/dist/abilities/effects/heal.js +51 -0
  40. package/dist/abilities/effects/heal.js.map +1 -0
  41. package/dist/abilities/effects/missile.d.ts +13 -1
  42. package/dist/abilities/effects/missile.js +104 -0
  43. package/dist/abilities/effects/missile.js.map +1 -0
  44. package/dist/abilities/effects/morph.d.ts +5 -0
  45. package/dist/abilities/effects/morph.js +43 -0
  46. package/dist/abilities/effects/morph.js.map +1 -0
  47. package/dist/abilities/effects/moves.d.ts +16 -4
  48. package/dist/abilities/effects/moves.js +212 -0
  49. package/dist/abilities/effects/moves.js.map +1 -0
  50. package/dist/abilities/effects/passives.d.ts +19 -9
  51. package/dist/abilities/effects/passives.js +131 -0
  52. package/dist/abilities/effects/passives.js.map +1 -0
  53. package/dist/abilities/effects/proxy.d.ts +5 -0
  54. package/dist/abilities/effects/proxy.js +60 -0
  55. package/dist/abilities/effects/proxy.js.map +1 -0
  56. package/dist/abilities/effects/sight.d.ts +2 -2
  57. package/dist/abilities/effects/sight.js +39 -0
  58. package/dist/abilities/effects/sight.js.map +1 -0
  59. package/dist/abilities/effects/spawn.d.ts +5 -2
  60. package/dist/abilities/effects/spawn.js +40 -0
  61. package/dist/abilities/effects/spawn.js.map +1 -0
  62. package/dist/abilities/effects/timed.d.ts +2 -2
  63. package/dist/abilities/effects/timed.js +96 -0
  64. package/dist/abilities/effects/timed.js.map +1 -0
  65. package/dist/abilities/effects/trade.d.ts +1 -1
  66. package/dist/abilities/effects/trade.js +25 -0
  67. package/dist/abilities/effects/trade.js.map +1 -0
  68. package/dist/abilities/effects.d.ts +97 -23
  69. package/dist/abilities/effects.js +860 -0
  70. package/dist/abilities/effects.js.map +1 -0
  71. package/dist/abilities/land.d.ts +38 -4
  72. package/dist/abilities/land.js +189 -0
  73. package/dist/abilities/land.js.map +1 -0
  74. package/dist/abilities/recast.d.ts +45 -0
  75. package/dist/abilities/recast.js +118 -0
  76. package/dist/abilities/recast.js.map +1 -0
  77. package/dist/abilities/scaled.js +40 -0
  78. package/dist/abilities/scaled.js.map +1 -0
  79. package/dist/abilities/screen.d.ts +6 -0
  80. package/dist/abilities/screen.js +83 -0
  81. package/dist/abilities/screen.js.map +1 -0
  82. package/dist/abilities/shapes.d.ts +66 -0
  83. package/dist/abilities/shapes.js +122 -0
  84. package/dist/abilities/shapes.js.map +1 -0
  85. package/dist/abilities/text.d.ts +14 -2
  86. package/dist/abilities/text.js +204 -0
  87. package/dist/abilities/text.js.map +1 -0
  88. package/dist/abilities/triggers.d.ts +98 -0
  89. package/dist/abilities/triggers.js +351 -0
  90. package/dist/abilities/triggers.js.map +1 -0
  91. package/dist/abilityChanges.d.ts +131 -0
  92. package/dist/abilityChanges.js +345 -0
  93. package/dist/abilityChanges.js.map +1 -0
  94. package/dist/ai/area.d.ts +4 -1
  95. package/dist/ai/brain.d.ts +4 -1
  96. package/dist/ai/brain.js +844 -0
  97. package/dist/ai/brain.js.map +1 -0
  98. package/dist/ai/budget.js +74 -0
  99. package/dist/ai/budget.js.map +1 -0
  100. package/dist/ai/checks.d.ts +9 -1
  101. package/dist/ai/checks.js +242 -0
  102. package/dist/ai/checks.js.map +1 -0
  103. package/dist/ai/computer.d.ts +11 -4
  104. package/dist/ai/computer.js +251 -0
  105. package/dist/ai/computer.js.map +1 -0
  106. package/dist/ai/defence.d.ts +4 -0
  107. package/dist/ai/defence.js +430 -0
  108. package/dist/ai/defence.js.map +1 -0
  109. package/dist/ai/define.d.ts +3 -2
  110. package/dist/ai/define.js +31 -0
  111. package/dist/ai/define.js.map +1 -0
  112. package/dist/ai/economy.d.ts +10 -7
  113. package/dist/ai/economy.js +780 -0
  114. package/dist/ai/economy.js.map +1 -0
  115. package/dist/ai/geometry.js +38 -0
  116. package/dist/ai/geometry.js.map +1 -0
  117. package/dist/ai/goals.d.ts +1 -0
  118. package/dist/ai/goals.js +560 -0
  119. package/dist/ai/goals.js.map +1 -0
  120. package/dist/ai/knowledge.d.ts +72 -7
  121. package/dist/ai/knowledge.js +804 -0
  122. package/dist/ai/knowledge.js.map +1 -0
  123. package/dist/ai/lanes.d.ts +10 -2
  124. package/dist/ai/lanes.js +715 -0
  125. package/dist/ai/lanes.js.map +1 -0
  126. package/dist/ai/melee/build.js +264 -0
  127. package/dist/ai/melee/build.js.map +1 -0
  128. package/dist/ai/melee/goals.d.ts +7 -0
  129. package/dist/ai/melee/goals.js +720 -0
  130. package/dist/ai/melee/goals.js.map +1 -0
  131. package/dist/ai/melee/heroes.js +68 -0
  132. package/dist/ai/melee/heroes.js.map +1 -0
  133. package/dist/ai/melee/index.d.ts +1 -1
  134. package/dist/ai/melee/index.js +51 -0
  135. package/dist/ai/melee/index.js.map +1 -0
  136. package/dist/ai/melee/production.js +29 -0
  137. package/dist/ai/melee/production.js.map +1 -0
  138. package/dist/ai/melee/surrender.js +64 -0
  139. package/dist/ai/melee/surrender.js.map +1 -0
  140. package/dist/ai/micro.d.ts +9 -0
  141. package/dist/ai/micro.js +1316 -0
  142. package/dist/ai/micro.js.map +1 -0
  143. package/dist/ai/mission.d.ts +9 -2
  144. package/dist/ai/mission.js +538 -0
  145. package/dist/ai/mission.js.map +1 -0
  146. package/dist/ai/missionRules.d.ts +1 -1
  147. package/dist/ai/missionRules.js +26 -0
  148. package/dist/ai/missionRules.js.map +1 -0
  149. package/dist/ai/module.d.ts +6 -2
  150. package/dist/ai/module.js +37 -0
  151. package/dist/ai/module.js.map +1 -0
  152. package/dist/ai/options.d.ts +3 -3
  153. package/dist/ai/plans/build.d.ts +20 -1
  154. package/dist/ai/plans/build.js +608 -0
  155. package/dist/ai/plans/build.js.map +1 -0
  156. package/dist/ai/plans/placement.d.ts +4 -1
  157. package/dist/ai/plans/placement.js +295 -0
  158. package/dist/ai/plans/placement.js.map +1 -0
  159. package/dist/ai/plans/plans.d.ts +9 -0
  160. package/dist/ai/plans/plans.js +110 -0
  161. package/dist/ai/plans/plans.js.map +1 -0
  162. package/dist/ai/plans/production.d.ts +14 -2
  163. package/dist/ai/plans/production.js +434 -0
  164. package/dist/ai/plans/production.js.map +1 -0
  165. package/dist/ai/plans/purse.d.ts +6 -3
  166. package/dist/ai/plans/purse.js +139 -0
  167. package/dist/ai/plans/purse.js.map +1 -0
  168. package/dist/ai/plans/tech.d.ts +6 -0
  169. package/dist/ai/plans/tech.js +122 -0
  170. package/dist/ai/plans/tech.js.map +1 -0
  171. package/dist/ai/profiles.d.ts +4 -4
  172. package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
  173. package/dist/ai/profiles.js.map +1 -0
  174. package/dist/ai/reach.js +54 -0
  175. package/dist/ai/reach.js.map +1 -0
  176. package/dist/ai/report.d.ts +8 -0
  177. package/dist/ai/report.js +87 -0
  178. package/dist/ai/report.js.map +1 -0
  179. package/dist/ai/roles.d.ts +4 -0
  180. package/dist/ai/roles.js +207 -0
  181. package/dist/ai/roles.js.map +1 -0
  182. package/dist/ai/rules.d.ts +8 -2
  183. package/dist/ai/rules.js +416 -0
  184. package/dist/ai/rules.js.map +1 -0
  185. package/dist/ai/scouting.d.ts +6 -0
  186. package/dist/ai/scouting.js +324 -0
  187. package/dist/ai/scouting.js.map +1 -0
  188. package/dist/ai/settings.js +99 -0
  189. package/dist/ai/settings.js.map +1 -0
  190. package/dist/ai/squads.d.ts +21 -2
  191. package/dist/ai/squads.js +916 -0
  192. package/dist/ai/squads.js.map +1 -0
  193. package/dist/ai/strength.js +320 -0
  194. package/dist/ai/strength.js.map +1 -0
  195. package/dist/ai/task.d.ts +3 -1
  196. package/dist/ai/task.js +17 -0
  197. package/dist/ai/task.js.map +1 -0
  198. package/dist/ai/tasks/attack.js +24 -0
  199. package/dist/ai/tasks/attack.js.map +1 -0
  200. package/dist/ai/tasks/capture.d.ts +3 -3
  201. package/dist/ai/tasks/capture.js +37 -0
  202. package/dist/ai/tasks/capture.js.map +1 -0
  203. package/dist/ai/tasks/creep.js +29 -0
  204. package/dist/ai/tasks/creep.js.map +1 -0
  205. package/dist/ai/tasks/defend.js +61 -0
  206. package/dist/ai/tasks/defend.js.map +1 -0
  207. package/dist/ai/tasks/drop.js +81 -0
  208. package/dist/ai/tasks/drop.js.map +1 -0
  209. package/dist/ai/tasks/escort.js +59 -0
  210. package/dist/ai/tasks/escort.js.map +1 -0
  211. package/dist/ai/tasks/gather.js +48 -0
  212. package/dist/ai/tasks/gather.js.map +1 -0
  213. package/dist/ai/tasks/harass.js +39 -0
  214. package/dist/ai/tasks/harass.js.map +1 -0
  215. package/dist/ai/tasks/hold.js +32 -0
  216. package/dist/ai/tasks/hold.js.map +1 -0
  217. package/dist/ai/tasks/index.js +34 -0
  218. package/dist/ai/tasks/index.js.map +1 -0
  219. package/dist/ai/tasks/move.js +26 -0
  220. package/dist/ai/tasks/move.js.map +1 -0
  221. package/dist/ai/tasks/patrol.js +59 -0
  222. package/dist/ai/tasks/patrol.js.map +1 -0
  223. package/dist/ai/tasks/retreat.js +28 -0
  224. package/dist/ai/tasks/retreat.js.map +1 -0
  225. package/dist/ai/tasks/scout.js +73 -0
  226. package/dist/ai/tasks/scout.js.map +1 -0
  227. package/dist/ai/tasks/shared.d.ts +1 -1
  228. package/dist/ai/tasks/shared.js +137 -0
  229. package/dist/ai/tasks/shared.js.map +1 -0
  230. package/dist/ai/team.d.ts +18 -1
  231. package/dist/ai/team.js +492 -0
  232. package/dist/ai/team.js.map +1 -0
  233. package/dist/ai/threat.d.ts +6 -0
  234. package/dist/ai/threat.js +206 -0
  235. package/dist/ai/threat.js.map +1 -0
  236. package/dist/ai/view.d.ts +21 -7
  237. package/dist/ai/view.js +677 -0
  238. package/dist/ai/view.js.map +1 -0
  239. package/dist/ai/waves.d.ts +6 -0
  240. package/dist/ai/waves.js +410 -0
  241. package/dist/ai/waves.js.map +1 -0
  242. package/dist/ai.js +54 -6239
  243. package/dist/aiTesting.d.ts +6 -3
  244. package/dist/aiTesting.js +229 -0
  245. package/dist/aiTesting.js.map +1 -0
  246. package/dist/areas.d.ts +4 -1
  247. package/dist/areas.js +295 -0
  248. package/dist/areas.js.map +1 -0
  249. package/dist/attacks.d.ts +3 -3
  250. package/dist/attacks.js +127 -0
  251. package/dist/attacks.js.map +1 -0
  252. package/dist/burning.d.ts +267 -0
  253. package/dist/burning.js +795 -0
  254. package/dist/burning.js.map +1 -0
  255. package/dist/bytes.js +21 -0
  256. package/dist/bytes.js.map +1 -0
  257. package/dist/callings.d.ts +71 -0
  258. package/dist/callings.js +157 -0
  259. package/dist/callings.js.map +1 -0
  260. package/dist/cameraOrders.d.ts +78 -0
  261. package/dist/cameraOrders.js +114 -0
  262. package/dist/cameraOrders.js.map +1 -0
  263. package/dist/camps.d.ts +70 -4
  264. package/dist/camps.js +501 -0
  265. package/dist/camps.js.map +1 -0
  266. package/dist/capture.d.ts +15 -3
  267. package/dist/capture.js +304 -0
  268. package/dist/capture.js.map +1 -0
  269. package/dist/cellLayers.d.ts +78 -13
  270. package/dist/cellLayers.js +275 -0
  271. package/dist/cellLayers.js.map +1 -0
  272. package/dist/cellPatches.d.ts +24 -0
  273. package/dist/cellPatches.js +73 -0
  274. package/dist/cellPatches.js.map +1 -0
  275. package/dist/cinematics.d.ts +10 -5
  276. package/dist/cinematics.js +161 -0
  277. package/dist/cinematics.js.map +1 -0
  278. package/dist/clock.d.ts +2 -2
  279. package/dist/clock.js +78 -0
  280. package/dist/clock.js.map +1 -0
  281. package/dist/commands.d.ts +36 -4
  282. package/dist/commands.js +636 -0
  283. package/dist/commands.js.map +1 -0
  284. package/dist/components.d.ts +31 -10
  285. package/dist/components.js +74 -0
  286. package/dist/components.js.map +1 -0
  287. package/dist/computers.d.ts +4 -4
  288. package/dist/computers.js +194 -0
  289. package/dist/computers.js.map +1 -0
  290. package/dist/concealment.d.ts +25 -2
  291. package/dist/concealment.js +409 -0
  292. package/dist/concealment.js.map +1 -0
  293. package/dist/coreComponents.js +130 -0
  294. package/dist/coreComponents.js.map +1 -0
  295. package/dist/createGame.d.ts +306 -0
  296. package/dist/createGame.js +405 -0
  297. package/dist/createGame.js.map +1 -0
  298. package/dist/dashing.d.ts +18 -2
  299. package/dist/dashing.js +41 -0
  300. package/dist/dashing.js.map +1 -0
  301. package/dist/debug.d.ts +8 -0
  302. package/dist/debug.js +5 -3
  303. package/dist/debug2.js +76 -0
  304. package/dist/debug2.js.map +1 -0
  305. package/dist/debugCommands.d.ts +6 -6
  306. package/dist/debugCommands.js +537 -0
  307. package/dist/debugCommands.js.map +1 -0
  308. package/dist/debugging.d.ts +1 -0
  309. package/dist/defaultSets.d.ts +183 -0
  310. package/dist/defaultSets.js +216 -0
  311. package/dist/defaultSets.js.map +1 -0
  312. package/dist/definitions.d.ts +6 -0
  313. package/dist/definitions.js +78 -0
  314. package/dist/definitions.js.map +1 -0
  315. package/dist/defs.d.ts +1895 -165
  316. package/dist/defs.js +380 -0
  317. package/dist/defs.js.map +1 -0
  318. package/dist/denying.d.ts +4 -4
  319. package/dist/denying.js +106 -0
  320. package/dist/denying.js.map +1 -0
  321. package/dist/destructibles.d.ts +2 -2
  322. package/dist/destructibles.js +36 -0
  323. package/dist/destructibles.js.map +1 -0
  324. package/dist/determinism.d.ts +4 -4
  325. package/dist/determinism.js +247 -0
  326. package/dist/determinism.js.map +1 -0
  327. package/dist/dialog.d.ts +17 -2
  328. package/dist/dialog.js +108 -0
  329. package/dist/dialog.js.map +1 -0
  330. package/dist/effectRefs.js +28 -0
  331. package/dist/effectRefs.js.map +1 -0
  332. package/dist/effects.d.ts +27 -11
  333. package/dist/effects.js +110 -0
  334. package/dist/effects.js.map +1 -0
  335. package/dist/endings.d.ts +1 -1
  336. package/dist/endings.js +78 -0
  337. package/dist/endings.js.map +1 -0
  338. package/dist/engagement.d.ts +40 -6
  339. package/dist/engagement.js +530 -0
  340. package/dist/engagement.js.map +1 -0
  341. package/dist/engineEvents.d.ts +72 -9
  342. package/dist/engineEvents.js +520 -0
  343. package/dist/engineEvents.js.map +1 -0
  344. package/dist/entity.d.ts +275 -26
  345. package/dist/entity.js +441 -0
  346. package/dist/entity.js.map +1 -0
  347. package/dist/entityIndex.d.ts +10 -3
  348. package/dist/entityIndex.js +149 -0
  349. package/dist/entityIndex.js.map +1 -0
  350. package/dist/errors.d.ts +6 -2
  351. package/dist/errors.js +59 -0
  352. package/dist/errors.js.map +1 -0
  353. package/dist/events.d.ts +11 -5
  354. package/dist/events.js +158 -0
  355. package/dist/events.js.map +1 -0
  356. package/dist/exactMath.js +273 -0
  357. package/dist/exactMath.js.map +1 -0
  358. package/dist/features.d.ts +1 -1
  359. package/dist/features.js +127 -0
  360. package/dist/features.js.map +1 -0
  361. package/dist/fields.d.ts +25 -5
  362. package/dist/fields.js +140 -0
  363. package/dist/fields.js.map +1 -0
  364. package/dist/fixture.d.ts +3 -3
  365. package/dist/fixture.js +512 -0
  366. package/dist/fixture.js.map +1 -0
  367. package/dist/fog.d.ts +26 -3
  368. package/dist/fog.js +333 -0
  369. package/dist/fog.js.map +1 -0
  370. package/dist/foliage.d.ts +476 -0
  371. package/dist/foliage.js +1478 -0
  372. package/dist/foliage.js.map +1 -0
  373. package/dist/foliageDebug.d.ts +57 -0
  374. package/dist/foliageDebug.js +172 -0
  375. package/dist/foliageDebug.js.map +1 -0
  376. package/dist/foliageRegrowth.d.ts +20 -0
  377. package/dist/foliageRegrowth.js +332 -0
  378. package/dist/foliageRegrowth.js.map +1 -0
  379. package/dist/formState.d.ts +67 -0
  380. package/dist/formState.js +65 -0
  381. package/dist/formState.js.map +1 -0
  382. package/dist/formation.d.ts +46 -8
  383. package/dist/formation.js +297 -0
  384. package/dist/formation.js.map +1 -0
  385. package/dist/forms.d.ts +58 -0
  386. package/dist/forms.js +146 -0
  387. package/dist/forms.js.map +1 -0
  388. package/dist/friendlyFire.d.ts +2 -2
  389. package/dist/friendlyFire.js +37 -0
  390. package/dist/friendlyFire.js.map +1 -0
  391. package/dist/game.d.ts +141 -48
  392. package/dist/game.js +834 -0
  393. package/dist/game.js.map +1 -0
  394. package/dist/gameData.d.ts +96 -22
  395. package/dist/gameData.js +1690 -0
  396. package/dist/gameData.js.map +1 -0
  397. package/dist/gameFiles.d.ts +3 -3
  398. package/dist/gameFiles.js +14 -0
  399. package/dist/gameFiles.js.map +1 -0
  400. package/dist/gates.js +92 -0
  401. package/dist/gates.js.map +1 -0
  402. package/dist/generate.d.ts +28 -1
  403. package/dist/generate.js +1062 -0
  404. package/dist/generate.js.map +1 -0
  405. package/dist/generateWorker.d.ts +7 -3
  406. package/dist/generateWorker.js +86 -0
  407. package/dist/generateWorker.js.map +1 -0
  408. package/dist/grid.d.ts +9 -0
  409. package/dist/grid.js +102 -0
  410. package/dist/grid.js.map +1 -0
  411. package/dist/ground.d.ts +17 -1
  412. package/dist/ground.js +375 -0
  413. package/dist/ground.js.map +1 -0
  414. package/dist/groundObjects.d.ts +70 -0
  415. package/dist/groundObjects.js +371 -0
  416. package/dist/groundObjects.js.map +1 -0
  417. package/dist/groundSpeed.d.ts +20 -3
  418. package/dist/groundSpeed.js +117 -0
  419. package/dist/groundSpeed.js.map +1 -0
  420. package/dist/hero.d.ts +126 -10
  421. package/dist/hero.js +432 -0
  422. package/dist/hero.js.map +1 -0
  423. package/dist/holds.d.ts +94 -0
  424. package/dist/holds.js +305 -0
  425. package/dist/holds.js.map +1 -0
  426. package/dist/home.d.ts +1 -1
  427. package/dist/home.js +30 -0
  428. package/dist/home.js.map +1 -0
  429. package/dist/hooks.d.ts +339 -57
  430. package/dist/hooks.js +105 -0
  431. package/dist/hooks.js.map +1 -0
  432. package/dist/hotReload.d.ts +6 -5
  433. package/dist/hotReload.js +145 -0
  434. package/dist/hotReload.js.map +1 -0
  435. package/dist/ids.d.ts +3 -3
  436. package/dist/ids.js +30 -0
  437. package/dist/ids.js.map +1 -0
  438. package/dist/idsFile.d.ts +36 -0
  439. package/dist/idsFile.js +134 -0
  440. package/dist/idsFile.js.map +1 -0
  441. package/dist/index.d.ts +105 -68
  442. package/dist/index.js +194 -4701
  443. package/dist/inspect.d.ts +29 -2
  444. package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
  445. package/dist/inspect.js.map +1 -0
  446. package/dist/inventory.d.ts +14 -1
  447. package/dist/inventory.js +84 -0
  448. package/dist/inventory.js.map +1 -0
  449. package/dist/items.d.ts +136 -8
  450. package/dist/items.js +585 -0
  451. package/dist/items.js.map +1 -0
  452. package/dist/lanes.d.ts +12 -3
  453. package/dist/lanes.js +496 -0
  454. package/dist/lanes.js.map +1 -0
  455. package/dist/life.d.ts +6 -2
  456. package/dist/life.js +287 -0
  457. package/dist/life.js.map +1 -0
  458. package/dist/log.d.ts +26 -3
  459. package/dist/log.js +192 -0
  460. package/dist/log.js.map +1 -0
  461. package/dist/manaBurn.d.ts +2 -2
  462. package/dist/manaBurn.js +75 -0
  463. package/dist/manaBurn.js.map +1 -0
  464. package/dist/map/file.d.ts +56 -3
  465. package/dist/map/file.js +264 -0
  466. package/dist/map/file.js.map +1 -0
  467. package/dist/map/images.js +61 -0
  468. package/dist/map/images.js.map +1 -0
  469. package/dist/map/look.d.ts +1 -1
  470. package/dist/map/look.js +30 -0
  471. package/dist/map/look.js.map +1 -0
  472. package/dist/map/pathProfile.js +183 -0
  473. package/dist/map/pathProfile.js.map +1 -0
  474. package/dist/map/resize.d.ts +4 -0
  475. package/dist/map/resize.js +136 -0
  476. package/dist/map/resize.js.map +1 -0
  477. package/dist/map/schema.js +257 -0
  478. package/dist/map/schema.js.map +1 -0
  479. package/dist/map/terrain.js +214 -0
  480. package/dist/map/terrain.js.map +1 -0
  481. package/dist/map/types.d.ts +92 -13
  482. package/dist/map/types.js +251 -0
  483. package/dist/map/types.js.map +1 -0
  484. package/dist/mapCheck/cells.js +94 -0
  485. package/dist/mapCheck/cells.js.map +1 -0
  486. package/dist/mapCheck/rules/foliage.d.ts +9 -0
  487. package/dist/mapCheck/rules/foliage.js +83 -0
  488. package/dist/mapCheck/rules/foliage.js.map +1 -0
  489. package/dist/mapCheck/rules/names.js +39 -0
  490. package/dist/mapCheck/rules/names.js.map +1 -0
  491. package/dist/mapCheck/rules/objects.d.ts +1 -1
  492. package/dist/mapCheck/rules/objects.js +56 -0
  493. package/dist/mapCheck/rules/objects.js.map +1 -0
  494. package/dist/mapCheck/rules/paths.js +32 -0
  495. package/dist/mapCheck/rules/paths.js.map +1 -0
  496. package/dist/mapCheck/rules/players.js +20 -0
  497. package/dist/mapCheck/rules/players.js.map +1 -0
  498. package/dist/mapCheck/rules/races.js +56 -0
  499. package/dist/mapCheck/rules/races.js.map +1 -0
  500. package/dist/mapCheck/rules/random.js +47 -0
  501. package/dist/mapCheck/rules/random.js.map +1 -0
  502. package/dist/mapCheck/rules/regions.js +30 -0
  503. package/dist/mapCheck/rules/regions.js.map +1 -0
  504. package/dist/mapCheck/rules/targets.js +31 -0
  505. package/dist/mapCheck/rules/targets.js.map +1 -0
  506. package/dist/mapCheck/rules/walking.js +45 -0
  507. package/dist/mapCheck/rules/walking.js.map +1 -0
  508. package/dist/mapCheck.d.ts +2 -2
  509. package/dist/mapCheck.js +63 -0
  510. package/dist/mapCheck.js.map +1 -0
  511. package/dist/mapFields.d.ts +25 -2
  512. package/dist/mapFields.js +134 -0
  513. package/dist/mapFields.js.map +1 -0
  514. package/dist/mapFile.js +176 -0
  515. package/dist/mapFile.js.map +1 -0
  516. package/dist/mapMeasure.d.ts +8 -0
  517. package/dist/mapMeasure.js +283 -0
  518. package/dist/mapMeasure.js.map +1 -0
  519. package/dist/mapMerge.d.ts +1 -0
  520. package/dist/mapMerge.js +172 -0
  521. package/dist/mapMerge.js.map +1 -0
  522. package/dist/mapObjectives.js +138 -0
  523. package/dist/mapObjectives.js.map +1 -0
  524. package/dist/mapObjects.js +80 -0
  525. package/dist/mapObjects.js.map +1 -0
  526. package/dist/math.d.ts +37 -7
  527. package/dist/math.js +155 -0
  528. package/dist/math.js.map +1 -0
  529. package/dist/messages.d.ts +71 -4
  530. package/dist/messages.js +29 -0
  531. package/dist/messages.js.map +1 -0
  532. package/dist/missionRules.d.ts +10 -2
  533. package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
  534. package/dist/missionRules.js.map +1 -0
  535. package/dist/mods.d.ts +39 -20
  536. package/dist/mods.js +271 -0
  537. package/dist/mods.js.map +1 -0
  538. package/dist/moves.d.ts +87 -0
  539. package/dist/moves.js +539 -0
  540. package/dist/moves.js.map +1 -0
  541. package/dist/names.d.ts +7 -0
  542. package/dist/names.js +122 -0
  543. package/dist/names.js.map +1 -0
  544. package/dist/navigation/agentParams.js +14 -0
  545. package/dist/navigation/agentParams.js.map +1 -0
  546. package/dist/navigation/air.d.ts +7 -3
  547. package/dist/navigation/air.js +401 -0
  548. package/dist/navigation/air.js.map +1 -0
  549. package/dist/navigation/builds.d.ts +34 -2
  550. package/dist/navigation/builds.js +287 -0
  551. package/dist/navigation/builds.js.map +1 -0
  552. package/dist/navigation/groundAreas.d.ts +59 -1
  553. package/dist/navigation/groundAreas.js +407 -0
  554. package/dist/navigation/groundAreas.js.map +1 -0
  555. package/dist/navigation/navigation.d.ts +98 -9
  556. package/dist/navigation/recast.d.ts +194 -18
  557. package/dist/navigation/recast.js +1379 -0
  558. package/dist/navigation/recast.js.map +1 -0
  559. package/dist/navigation/sidePaths.d.ts +8 -3
  560. package/dist/navigation/sidePaths.js +241 -0
  561. package/dist/navigation/sidePaths.js.map +1 -0
  562. package/dist/navigation/sized.js +243 -0
  563. package/dist/navigation/sized.js.map +1 -0
  564. package/dist/nearest.js +32 -0
  565. package/dist/nearest.js.map +1 -0
  566. package/dist/noise.js +59 -0
  567. package/dist/noise.js.map +1 -0
  568. package/dist/objectives.d.ts +12 -3
  569. package/dist/objectives.js +144 -0
  570. package/dist/objectives.js.map +1 -0
  571. package/dist/orders/basic.d.ts +5 -5
  572. package/dist/orders/basic.js +417 -0
  573. package/dist/orders/basic.js.map +1 -0
  574. package/dist/orders/build.js +278 -0
  575. package/dist/orders/build.js.map +1 -0
  576. package/dist/orders/cast.d.ts +13 -3
  577. package/dist/orders/cast.js +558 -0
  578. package/dist/orders/cast.js.map +1 -0
  579. package/dist/orders/facts.js +16 -0
  580. package/dist/orders/facts.js.map +1 -0
  581. package/dist/orders/harvest.d.ts +21 -5
  582. package/dist/orders/harvest.js +540 -0
  583. package/dist/orders/harvest.js.map +1 -0
  584. package/dist/orders/idle.d.ts +3 -1
  585. package/dist/orders/idle.js +234 -0
  586. package/dist/orders/idle.js.map +1 -0
  587. package/dist/orders/items.js +92 -0
  588. package/dist/orders/items.js.map +1 -0
  589. package/dist/orders/queue.js +108 -0
  590. package/dist/orders/queue.js.map +1 -0
  591. package/dist/orders/waiting.d.ts +39 -0
  592. package/dist/orders/waiting.js +149 -0
  593. package/dist/orders/waiting.js.map +1 -0
  594. package/dist/pack.schema.js +13 -0
  595. package/dist/pack.schema.js.map +1 -0
  596. package/dist/pack.schema.json +7622 -841
  597. package/dist/packs/director/index.d.ts +13 -5
  598. package/dist/packs/director/index.js +204 -0
  599. package/dist/packs/director/index.js.map +1 -0
  600. package/dist/packs/heroes/campaign.d.ts +3 -2
  601. package/dist/packs/heroes/campaign.js +241 -0
  602. package/dist/packs/heroes/campaign.js.map +1 -0
  603. package/dist/packs/heroes/carry.d.ts +6 -0
  604. package/dist/packs/heroes/carry.js +112 -0
  605. package/dist/packs/heroes/carry.js.map +1 -0
  606. package/dist/packs/heroes/commands.js +115 -0
  607. package/dist/packs/heroes/commands.js.map +1 -0
  608. package/dist/packs/heroes/fallen.d.ts +43 -0
  609. package/dist/packs/heroes/fallen.js +61 -0
  610. package/dist/packs/heroes/fallen.js.map +1 -0
  611. package/dist/packs/heroes/hire.js +60 -0
  612. package/dist/packs/heroes/hire.js.map +1 -0
  613. package/dist/packs/heroes/index.d.ts +7 -6
  614. package/dist/packs/heroes/index.js +130 -0
  615. package/dist/packs/heroes/index.js.map +1 -0
  616. package/dist/packs/heroes/loop.d.ts +95 -0
  617. package/dist/packs/heroes/loop.js +250 -0
  618. package/dist/packs/heroes/loop.js.map +1 -0
  619. package/dist/packs/heroes/making.d.ts +6 -3
  620. package/dist/packs/heroes/making.js +55 -0
  621. package/dist/packs/heroes/making.js.map +1 -0
  622. package/dist/packs/heroes/respawn.d.ts +3 -3
  623. package/dist/packs/heroes/respawn.js +87 -0
  624. package/dist/packs/heroes/respawn.js.map +1 -0
  625. package/dist/packs/heroes/sets.d.ts +32 -0
  626. package/dist/packs/heroes/sets.js +51 -0
  627. package/dist/packs/heroes/sets.js.map +1 -0
  628. package/dist/packs/heroes/spells.d.ts +16 -0
  629. package/dist/packs/heroes/spells.js +269 -0
  630. package/dist/packs/heroes/spells.js.map +1 -0
  631. package/dist/packs/items/defaults.d.ts +43 -0
  632. package/dist/packs/items/defaults.js +1504 -0
  633. package/dist/packs/items/defaults.js.map +1 -0
  634. package/dist/packs/items/index.d.ts +27 -0
  635. package/dist/packs/items/index.js +214 -0
  636. package/dist/packs/items/index.js.map +1 -0
  637. package/dist/packs/moba/index.d.ts +3 -3
  638. package/dist/packs/moba/index.js +174 -0
  639. package/dist/packs/moba/index.js.map +1 -0
  640. package/dist/packs/pack.d.ts +15 -15
  641. package/dist/packs/pack.js +14 -0
  642. package/dist/packs/pack.js.map +1 -0
  643. package/dist/packs.d.ts +15 -7
  644. package/dist/packs.js +222 -0
  645. package/dist/packs.js.map +1 -0
  646. package/dist/paths.d.ts +2 -0
  647. package/dist/paths.js +109 -0
  648. package/dist/paths.js.map +1 -0
  649. package/dist/plain.js +57 -0
  650. package/dist/plain.js.map +1 -0
  651. package/dist/player.d.ts +33 -10
  652. package/dist/player.js +159 -0
  653. package/dist/player.js.map +1 -0
  654. package/dist/portals.d.ts +1 -1
  655. package/dist/portals.js +194 -0
  656. package/dist/portals.js.map +1 -0
  657. package/dist/prefabs.d.ts +25 -2
  658. package/dist/prefabs.js +239 -0
  659. package/dist/prefabs.js.map +1 -0
  660. package/dist/presetBuildings.js +58 -0
  661. package/dist/presetBuildings.js.map +1 -0
  662. package/dist/presetFoliage.d.ts +27 -0
  663. package/dist/presetFoliage.js +98 -0
  664. package/dist/presetFoliage.js.map +1 -0
  665. package/dist/presetGround.js +65 -0
  666. package/dist/presetGround.js.map +1 -0
  667. package/dist/proxies.d.ts +12 -0
  668. package/dist/proxies.js +79 -0
  669. package/dist/proxies.js.map +1 -0
  670. package/dist/query.d.ts +56 -0
  671. package/dist/query.js +88 -0
  672. package/dist/query.js.map +1 -0
  673. package/dist/races.d.ts +15 -14
  674. package/dist/races.js +172 -0
  675. package/dist/races.js.map +1 -0
  676. package/dist/randomGroups.js +91 -0
  677. package/dist/randomGroups.js.map +1 -0
  678. package/dist/registry.d.ts +117 -53
  679. package/dist/registry.js +323 -0
  680. package/dist/registry.js.map +1 -0
  681. package/dist/remains.d.ts +11 -9
  682. package/dist/remains.js +188 -0
  683. package/dist/remains.js.map +1 -0
  684. package/dist/replication.d.ts +12 -7
  685. package/dist/replication.js +100 -0
  686. package/dist/replication.js.map +1 -0
  687. package/dist/rng.d.ts +2 -0
  688. package/dist/rng.js +40 -0
  689. package/dist/rng.js.map +1 -0
  690. package/dist/rules.d.ts +186 -99
  691. package/dist/rules.js +179 -0
  692. package/dist/rules.js.map +1 -0
  693. package/dist/rulesCheck.d.ts +5 -4
  694. package/dist/rulesCheck.js +693 -0
  695. package/dist/rulesCheck.js.map +1 -0
  696. package/dist/runes.d.ts +2 -2
  697. package/dist/runes.js +80 -0
  698. package/dist/runes.js.map +1 -0
  699. package/dist/save.d.ts +37 -12
  700. package/dist/save.js +532 -0
  701. package/dist/save.js.map +1 -0
  702. package/dist/scenario.d.ts +2 -2
  703. package/dist/scenario.js +99 -0
  704. package/dist/scenario.js.map +1 -0
  705. package/dist/scheduler.d.ts +3 -0
  706. package/dist/scheduler.js +156 -0
  707. package/dist/scheduler.js.map +1 -0
  708. package/dist/score.d.ts +19 -19
  709. package/dist/score.js +709 -0
  710. package/dist/score.js.map +1 -0
  711. package/dist/sequences.d.ts +10 -6
  712. package/dist/sequences.js +206 -0
  713. package/dist/sequences.js.map +1 -0
  714. package/dist/server/doorman.js +154 -0
  715. package/dist/server/doorman.js.map +1 -0
  716. package/dist/server/gameServer.d.ts +16 -1
  717. package/dist/server/gameServer.js +643 -0
  718. package/dist/server/gameServer.js.map +1 -0
  719. package/dist/server/index.d.ts +1 -1
  720. package/dist/server/lobby.js +199 -0
  721. package/dist/server/lobby.js.map +1 -0
  722. package/dist/server/log.js +18 -0
  723. package/dist/server/log.js.map +1 -0
  724. package/dist/server/match.js +267 -0
  725. package/dist/server/match.js.map +1 -0
  726. package/dist/server/mode.d.ts +18 -9
  727. package/dist/server/mode.js +220 -0
  728. package/dist/server/mode.js.map +1 -0
  729. package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
  730. package/dist/server/navigation-worker.js.map +1 -0
  731. package/dist/server/navigation.js +39 -0
  732. package/dist/server/navigation.js.map +1 -0
  733. package/dist/server/ops.d.ts +4 -0
  734. package/dist/server/ops.js +137 -0
  735. package/dist/server/ops.js.map +1 -0
  736. package/dist/server/packs.d.ts +3 -3
  737. package/dist/server/packs.js +32 -0
  738. package/dist/server/packs.js.map +1 -0
  739. package/dist/server/ratings.d.ts +5 -0
  740. package/dist/server/ratings.js +104 -0
  741. package/dist/server/ratings.js.map +1 -0
  742. package/dist/server/relay.d.ts +12 -2
  743. package/dist/server/relay.js +144 -0
  744. package/dist/server/relay.js.map +1 -0
  745. package/dist/server/rooms.d.ts +9 -2
  746. package/dist/server/rooms.js +442 -0
  747. package/dist/server/rooms.js.map +1 -0
  748. package/dist/server/seat.js +116 -0
  749. package/dist/server/seat.js.map +1 -0
  750. package/dist/server/seatSettings.d.ts +3 -3
  751. package/dist/server/seatSettings.js +63 -0
  752. package/dist/server/seatSettings.js.map +1 -0
  753. package/dist/server/secret.js +13 -0
  754. package/dist/server/secret.js.map +1 -0
  755. package/dist/server/start.d.ts +13 -6
  756. package/dist/server/start.js +76 -0
  757. package/dist/server/start.js.map +1 -0
  758. package/dist/server/websocket.d.ts +9 -1
  759. package/dist/server/websocket.js +306 -0
  760. package/dist/server/websocket.js.map +1 -0
  761. package/dist/server.js +15 -2861
  762. package/dist/session/can.js +26 -0
  763. package/dist/session/can.js.map +1 -0
  764. package/dist/session/commandReplay.d.ts +8 -2
  765. package/dist/session/commandReplay.js +293 -0
  766. package/dist/session/commandReplay.js.map +1 -0
  767. package/dist/session/debug.js +151 -0
  768. package/dist/session/debug.js.map +1 -0
  769. package/dist/session/delay.js +62 -0
  770. package/dist/session/delay.js.map +1 -0
  771. package/dist/session/delta.d.ts +14 -1
  772. package/dist/session/delta.js +407 -0
  773. package/dist/session/delta.js.map +1 -0
  774. package/dist/session/entityState.js +415 -0
  775. package/dist/session/entityState.js.map +1 -0
  776. package/dist/session/local.d.ts +47 -5
  777. package/dist/session/local.js +670 -0
  778. package/dist/session/local.js.map +1 -0
  779. package/dist/session/memory.d.ts +20 -2
  780. package/dist/session/memory.js +131 -0
  781. package/dist/session/memory.js.map +1 -0
  782. package/dist/session/protocol.d.ts +325 -31
  783. package/dist/session/protocol.js +55 -0
  784. package/dist/session/protocol.js.map +1 -0
  785. package/dist/session/remote.d.ts +74 -12
  786. package/dist/session/remote.js +1394 -0
  787. package/dist/session/remote.js.map +1 -0
  788. package/dist/session/replay.d.ts +11 -2
  789. package/dist/session/replay.js +160 -0
  790. package/dist/session/replay.js.map +1 -0
  791. package/dist/session/seed.js +12 -0
  792. package/dist/session/seed.js.map +1 -0
  793. package/dist/session/share.d.ts +5 -1
  794. package/dist/session/share.js +94 -0
  795. package/dist/session/share.js.map +1 -0
  796. package/dist/session/socket.d.ts +1 -1
  797. package/dist/session/socket.js +29 -0
  798. package/dist/session/socket.js.map +1 -0
  799. package/dist/session/wire.d.ts +5 -0
  800. package/dist/session/wire.js +84 -0
  801. package/dist/session/wire.js.map +1 -0
  802. package/dist/session/worker.d.ts +77 -12
  803. package/dist/session/worker.js +499 -0
  804. package/dist/session/worker.js.map +1 -0
  805. package/dist/shared.d.ts +31 -5
  806. package/dist/shared.js +166 -0
  807. package/dist/shared.js.map +1 -0
  808. package/dist/sides.d.ts +9 -3
  809. package/dist/sides.js +149 -0
  810. package/dist/sides.js.map +1 -0
  811. package/dist/sight.js +85 -0
  812. package/dist/sight.js.map +1 -0
  813. package/dist/simulate-worker.js +1 -1
  814. package/dist/simulate.d.ts +12 -8
  815. package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
  816. package/dist/simulate.js.map +1 -0
  817. package/dist/smart.js +77 -0
  818. package/dist/smart.js.map +1 -0
  819. package/dist/spatial.d.ts +32 -16
  820. package/dist/spatial.js +234 -0
  821. package/dist/spatial.js.map +1 -0
  822. package/dist/spawning.d.ts +1 -0
  823. package/dist/spawning.js +224 -0
  824. package/dist/spawning.js.map +1 -0
  825. package/dist/stances.d.ts +6 -3
  826. package/dist/stances.js +169 -0
  827. package/dist/stances.js.map +1 -0
  828. package/dist/start.d.ts +10 -10
  829. package/dist/start.js +75 -0
  830. package/dist/start.js.map +1 -0
  831. package/dist/stats.d.ts +42 -16
  832. package/dist/stats.js +290 -0
  833. package/dist/stats.js.map +1 -0
  834. package/dist/summoned.d.ts +52 -0
  835. package/dist/summoned.js +38 -0
  836. package/dist/summoned.js.map +1 -0
  837. package/dist/summons.d.ts +10 -13
  838. package/dist/summons.js +271 -0
  839. package/dist/summons.js.map +1 -0
  840. package/dist/systems/abilities.js +224 -0
  841. package/dist/systems/abilities.js.map +1 -0
  842. package/dist/systems/combat.d.ts +35 -1
  843. package/dist/systems/combat.js +677 -0
  844. package/dist/systems/combat.js.map +1 -0
  845. package/dist/systems/combatTold.d.ts +3 -1
  846. package/dist/systems/combatTold.js +85 -0
  847. package/dist/systems/combatTold.js.map +1 -0
  848. package/dist/systems/construction.js +80 -0
  849. package/dist/systems/construction.js.map +1 -0
  850. package/dist/systems/economy.d.ts +0 -6
  851. package/dist/systems/economy.js +128 -0
  852. package/dist/systems/economy.js.map +1 -0
  853. package/dist/systems/fog.d.ts +1 -1
  854. package/dist/systems/fog.js +120 -0
  855. package/dist/systems/fog.js.map +1 -0
  856. package/dist/systems/life.js +32 -0
  857. package/dist/systems/life.js.map +1 -0
  858. package/dist/systems/movement.d.ts +24 -12
  859. package/dist/systems/movement.js +1247 -0
  860. package/dist/systems/movement.js.map +1 -0
  861. package/dist/systems/orders.js +64 -0
  862. package/dist/systems/orders.js.map +1 -0
  863. package/dist/systems/production.js +322 -0
  864. package/dist/systems/production.js.map +1 -0
  865. package/dist/systems/productionQueue.js +120 -0
  866. package/dist/systems/productionQueue.js.map +1 -0
  867. package/dist/systems/victory.d.ts +1 -1
  868. package/dist/systems/victory.js +56 -0
  869. package/dist/systems/victory.js.map +1 -0
  870. package/dist/talk.d.ts +6 -6
  871. package/dist/talk.js +153 -0
  872. package/dist/talk.js.map +1 -0
  873. package/dist/targeting.d.ts +142 -0
  874. package/dist/targeting.js +49 -0
  875. package/dist/targeting.js.map +1 -0
  876. package/dist/tech.d.ts +20 -3
  877. package/dist/tech.js +239 -0
  878. package/dist/tech.js.map +1 -0
  879. package/dist/techTree.d.ts +7 -0
  880. package/dist/techTree.js +90 -0
  881. package/dist/techTree.js.map +1 -0
  882. package/dist/terrain.d.ts +59 -7
  883. package/dist/terrain.js +389 -0
  884. package/dist/terrain.js.map +1 -0
  885. package/dist/terrainSave.d.ts +6 -0
  886. package/dist/terrainSave.js +74 -0
  887. package/dist/terrainSave.js.map +1 -0
  888. package/dist/testing.d.ts +8 -7
  889. package/dist/testing.js +13 -739
  890. package/dist/testing.js.map +1 -1
  891. package/dist/tiles.d.ts +1 -1
  892. package/dist/tiles.js +43 -0
  893. package/dist/tiles.js.map +1 -0
  894. package/dist/timers.d.ts +29 -4
  895. package/dist/timers.js +242 -0
  896. package/dist/timers.js.map +1 -0
  897. package/dist/tomes.d.ts +4 -4
  898. package/dist/tomes.js +94 -0
  899. package/dist/tomes.js.map +1 -0
  900. package/dist/trade.js +103 -0
  901. package/dist/trade.js.map +1 -0
  902. package/dist/transport.d.ts +6 -1
  903. package/dist/transport.js +281 -0
  904. package/dist/transport.js.map +1 -0
  905. package/dist/tunables.d.ts +10 -3
  906. package/dist/tunables.js +56 -0
  907. package/dist/tunables.js.map +1 -0
  908. package/dist/unitResources.d.ts +67 -0
  909. package/dist/unitResources.js +266 -0
  910. package/dist/unitResources.js.map +1 -0
  911. package/dist/upkeep.d.ts +6 -1
  912. package/dist/upkeep.js +26 -0
  913. package/dist/upkeep.js.map +1 -0
  914. package/dist/veterancy.d.ts +8 -3
  915. package/dist/veterancy.js +131 -0
  916. package/dist/veterancy.js.map +1 -0
  917. package/dist/vision.d.ts +36 -0
  918. package/dist/vision.js +133 -0
  919. package/dist/vision.js.map +1 -0
  920. package/dist/walls.d.ts +1 -1
  921. package/dist/walls.js +278 -0
  922. package/dist/walls.js.map +1 -0
  923. package/dist/world.d.ts +606 -88
  924. package/dist/world.js +1263 -0
  925. package/dist/world.js.map +1 -0
  926. package/package.json +2 -2
  927. package/dist/ai.js.map +0 -1
  928. package/dist/attributes.d.ts +0 -66
  929. package/dist/brain-BvVdUhX8.js +0 -7659
  930. package/dist/brain-BvVdUhX8.js.map +0 -1
  931. package/dist/builds-C6LfgvEU.js +0 -460
  932. package/dist/builds-C6LfgvEU.js.map +0 -1
  933. package/dist/coreComponents-syuh2fPG.js +0 -5149
  934. package/dist/coreComponents-syuh2fPG.js.map +0 -1
  935. package/dist/debugCommands-CzjrSm66.js +0 -14739
  936. package/dist/debugCommands-CzjrSm66.js.map +0 -1
  937. package/dist/determinism-BCymQwiE.js +0 -518
  938. package/dist/determinism-BCymQwiE.js.map +0 -1
  939. package/dist/game-DiJEN-Ks.js +0 -5800
  940. package/dist/game-DiJEN-Ks.js.map +0 -1
  941. package/dist/index.js.map +0 -1
  942. package/dist/inspect-D9dWHmZ0.js.map +0 -1
  943. package/dist/local-Dkovq42k.js +0 -1379
  944. package/dist/local-Dkovq42k.js.map +0 -1
  945. package/dist/missionRules-C-bGxm0Q.js.map +0 -1
  946. package/dist/navigation-worker.js.map +0 -1
  947. package/dist/packs-g5thvmGn.js +0 -3199
  948. package/dist/packs-g5thvmGn.js.map +0 -1
  949. package/dist/profiles-B3NS9jwk.js.map +0 -1
  950. package/dist/server.js.map +0 -1
  951. package/dist/simulate-oXBiw1Ff.js.map +0 -1
package/dist/vision.js ADDED
@@ -0,0 +1,133 @@
1
+ import { distSq } from "./math.js";
2
+ import { detection, exposure } from "./entity.js";
3
+ import { defineHook } from "./hooks.js";
4
+ import { valueOf } from "./abilities/amounts.js";
5
+ import { defineEffect, effectTargets } from "./abilities/effects.js";
6
+ //#region src/vision.ts
7
+ /**
8
+ * The vision pack's id
9
+ *
10
+ * @beta
11
+ */
12
+ var VISION = "core.vision";
13
+ /**
14
+ * Lets a team see a unit wherever it is for so many seconds (the longer of these and what it had): in the fog (lit where
15
+ * it stands), in a bush, invisible or camouflaged. What the `revealUnit` effect does, for a game's own code. Works in any
16
+ * game: the engine's fog and sight read it
17
+ *
18
+ * @beta
19
+ */
20
+ function revealUnit(world, entity, team, seconds) {
21
+ if (!entity.alive || seconds <= 0) return;
22
+ if (entity.scenery) world.wake(entity);
23
+ let found = entity.get(detection);
24
+ if (!found) entity.set(detection, found = /* @__PURE__ */ new Map());
25
+ found.set(team, Math.max(found.get(team) ?? 0, seconds));
26
+ }
27
+ /**
28
+ * How near its enemies have to come to see a camouflaged unit (`BuffDef.camouflage`): the most of what its buffs say, or
29
+ * undefined where it is not camouflaged
30
+ *
31
+ * @beta
32
+ */
33
+ function camouflageOf(world, entity) {
34
+ let most;
35
+ for (const instance of entity.buffs) {
36
+ const camouflage = world.registry.buff(instance.id).camouflage;
37
+ if (camouflage === void 0) continue;
38
+ const range = typeof camouflage === "function" ? camouflage(world, entity, instance) : camouflage;
39
+ if (most === void 0 || range > most) most = range;
40
+ }
41
+ return most;
42
+ }
43
+ /** How far a unit finds the invisible and the camouflaged: its type's true sight, or the most of its buffs' */
44
+ function trueSightOf(world, entity) {
45
+ let most = entity.def.trueSight ?? 0;
46
+ for (const instance of entity.buffs) most = Math.max(most, world.registry.buff(instance.id).trueSight ?? 0);
47
+ return most;
48
+ }
49
+ /** The caster's team sees each unit it reaches for `duration` seconds, wherever it goes */
50
+ var revealUnitEffect = /* @__PURE__ */ defineEffect({
51
+ type: "revealUnit",
52
+ run: (context, effect) => {
53
+ const { world, caster } = context;
54
+ const team = world.player(caster.owner).team;
55
+ for (const target of effectTargets(context, effect, "enemies")) revealUnit(world, target, team, valueOf(context, effect.duration, target, 4));
56
+ },
57
+ fields: ["duration"]
58
+ });
59
+ /** Scratch of who stands about one with true sight, and about one camouflaged: each walked before anything else asks */
60
+ var near = [];
61
+ var around = [];
62
+ /**
63
+ * Who is revealed by a buff or found by true sight this round: seen until the next (a round and a half, so that what
64
+ * ends with its buff is not seen a round after), before `life` counts it down and the fog lights it
65
+ */
66
+ var visionSystem = {
67
+ name: "vision",
68
+ phase: "cleanup",
69
+ before: ["life", "fog"],
70
+ update(world, dt) {
71
+ const keep = dt * 1.5;
72
+ for (const entity of world.units.values()) {
73
+ if (!entity.alive || entity.hidden) continue;
74
+ for (const instance of entity.buffs) {
75
+ if (!world.registry.buff(instance.id).revealed) continue;
76
+ const source = world.get(instance.source);
77
+ if (source && source !== entity) revealUnit(world, entity, world.player(source.owner).team, keep);
78
+ }
79
+ const sight = trueSightOf(world, entity);
80
+ if (!sight) continue;
81
+ const owner = world.player(entity.owner);
82
+ if (owner.neutral) continue;
83
+ for (const other of world.spatial.query(entity.pos.x, entity.pos.z, sight + 2, near)) {
84
+ if (!other.alive || other.hidden || !world.areEnemies(entity.owner, other.owner)) continue;
85
+ if (distSq(other.pos, entity.pos) > sight * sight) continue;
86
+ if (world.sight.isInvisible(other) || camouflageOf(world, other) !== void 0) revealUnit(world, other, owner.team, keep);
87
+ }
88
+ }
89
+ }
90
+ };
91
+ /**
92
+ * Vision: what a game with it (`Rules.packs`) gets for what is seen. A buff that reveals its carrier to the team of
93
+ * whoever put it on (`BuffDef.revealed`), the `revealUnit` effect (the caster's team sees each it reaches for its
94
+ * `duration`; `revealUnit` in code), camouflage (`BuffDef.camouflage`: enemies see the carrier only from that near) and
95
+ * true sight (`UnitTypeDef.trueSight`, `BuffDef.trueSight`: the invisible and camouflaged enemies that near are found).
96
+ * Everything that asks what a team sees goes by it (`world.isVisibleTo`: what units pick, the commands a player may give,
97
+ * the computer players, each player's snapshot), and the fog is lit where a revealed or found unit stands, as for what a
98
+ * `detect` found. Nothing of its own is saved: what is revealed is the `detection` component
99
+ *
100
+ * @beta
101
+ */
102
+ function visionPack() {
103
+ const camouflaged = defineHook({
104
+ hook: "visible",
105
+ id: "vision",
106
+ run(world, event) {
107
+ if (!event.visible) return;
108
+ const { entity, team } = event;
109
+ if (!entity.buffs.length) return;
110
+ const range = camouflageOf(world, entity);
111
+ if (range === void 0) return;
112
+ if (entity.get(exposure)?.has(team) || entity.get(detection)?.has(team)) return;
113
+ const { x, z } = entity.pos;
114
+ for (const other of world.spatial.query(x, z, range + 2, around)) {
115
+ if (other === entity || !other.alive || other.hidden) continue;
116
+ const owner = world.player(other.owner);
117
+ if (owner.neutral || owner.team !== team) continue;
118
+ if (distSq(other.pos, entity.pos) <= range * range) return;
119
+ }
120
+ event.visible = false;
121
+ }
122
+ });
123
+ return {
124
+ id: VISION,
125
+ effects: [revealUnitEffect],
126
+ systems: [visionSystem],
127
+ hooks: [camouflaged]
128
+ };
129
+ }
130
+ //#endregion
131
+ export { VISION, camouflageOf, revealUnit, visionPack };
132
+
133
+ //# sourceMappingURL=vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision.js","names":[],"sources":["../src/vision.ts"],"sourcesContent":["import { valueOf } from './abilities/amounts'\nimport { defineEffect, effectTargets } from './abilities/effects'\nimport { detection, type Entity, exposure } from './entity'\nimport { defineHook } from './hooks'\nimport { distSq } from './math'\nimport type { GamePack } from './packs/pack'\nimport type { System } from './registry'\nimport type { World } from './world'\n\n/*\n * Vision, an opt-in pack (E2E-PLAN AB18): a unit revealed for a time wherever it goes (a mark, a hunt), camouflage that\n * is seen only from near, and true sight that finds the invisible and the camouflaged. All of it goes through what a\n * team sees (`world.isVisibleTo`) and through `detection`, which the fog lights where the found one stands: so what the\n * rules pick, the computer players and each player's snapshot and fog agree\n */\n\n/**\n * The vision pack's id\n *\n * @beta\n */\nexport const VISION = 'core.vision'\n\n/**\n * Lets a team see a unit wherever it is for so many seconds (the longer of these and what it had): in the fog (lit where\n * it stands), in a bush, invisible or camouflaged. What the `revealUnit` effect does, for a game's own code. Works in any\n * game: the engine's fog and sight read it\n *\n * @beta\n */\nexport function revealUnit(world: World, entity: Entity, team: number, seconds: number): void {\n\tif (!entity.alive || seconds <= 0) return\n\tif (entity.scenery) world.wake(entity)\n\tlet found = entity.get(detection)\n\tif (!found) entity.set(detection, (found = new Map()))\n\tfound.set(team, Math.max(found.get(team) ?? 0, seconds))\n}\n\n/**\n * How near its enemies have to come to see a camouflaged unit (`BuffDef.camouflage`): the most of what its buffs say, or\n * undefined where it is not camouflaged\n *\n * @beta\n */\nexport function camouflageOf(world: World, entity: Entity): number | undefined {\n\tlet most: number | undefined\n\tfor (const instance of entity.buffs) {\n\t\tconst camouflage = world.registry.buff(instance.id).camouflage\n\t\tif (camouflage === undefined) continue\n\t\tconst range = typeof camouflage === 'function' ? camouflage(world, entity, instance) : camouflage\n\t\tif (most === undefined || range > most) most = range\n\t}\n\treturn most\n}\n\n/** How far a unit finds the invisible and the camouflaged: its type's true sight, or the most of its buffs' */\nfunction trueSightOf(world: World, entity: Entity): number {\n\tlet most = entity.def.trueSight ?? 0\n\tfor (const instance of entity.buffs) most = Math.max(most, world.registry.buff(instance.id).trueSight ?? 0)\n\treturn most\n}\n\n/** The caster's team sees each unit it reaches for `duration` seconds, wherever it goes */\nconst revealUnitEffect = /* @__PURE__ */ defineEffect({\n\ttype: 'revealUnit',\n\trun: (context, effect) => {\n\t\tconst { world, caster } = context\n\t\tconst team = world.player(caster.owner).team\n\t\tfor (const target of effectTargets(context, effect, 'enemies')) revealUnit(world, target, team, valueOf(context, effect.duration, target, 4))\n\t},\n\tfields: ['duration']\n})\n\n/** Scratch of who stands about one with true sight, and about one camouflaged: each walked before anything else asks */\nconst near: Entity[] = []\nconst around: Entity[] = []\n\n/**\n * Who is revealed by a buff or found by true sight this round: seen until the next (a round and a half, so that what\n * ends with its buff is not seen a round after), before `life` counts it down and the fog lights it\n */\nconst visionSystem: System = {\n\tname: 'vision',\n\tphase: 'cleanup',\n\tbefore: ['life', 'fog'],\n\tupdate(world, dt) {\n\t\tconst keep = dt * 1.5\n\t\tfor (const entity of world.units.values()) {\n\t\t\tif (!entity.alive || entity.hidden) continue\n\t\t\tfor (const instance of entity.buffs) {\n\t\t\t\tif (!world.registry.buff(instance.id).revealed) continue\n\t\t\t\tconst source = world.get(instance.source)\n\t\t\t\tif (source && source !== entity) revealUnit(world, entity, world.player(source.owner).team, keep)\n\t\t\t}\n\t\t\tconst sight = trueSightOf(world, entity)\n\t\t\tif (!sight) continue\n\t\t\tconst owner = world.player(entity.owner)\n\t\t\tif (owner.neutral) continue\n\t\t\tfor (const other of world.spatial.query(entity.pos.x, entity.pos.z, sight + 2, near)) {\n\t\t\t\tif (!other.alive || other.hidden || !world.areEnemies(entity.owner, other.owner)) continue\n\t\t\t\tif (distSq(other.pos, entity.pos) > sight * sight) continue\n\t\t\t\tif (world.sight.isInvisible(other) || camouflageOf(world, other) !== undefined) revealUnit(world, other, owner.team, keep)\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Vision: what a game with it (`Rules.packs`) gets for what is seen. A buff that reveals its carrier to the team of\n * whoever put it on (`BuffDef.revealed`), the `revealUnit` effect (the caster's team sees each it reaches for its\n * `duration`; `revealUnit` in code), camouflage (`BuffDef.camouflage`: enemies see the carrier only from that near) and\n * true sight (`UnitTypeDef.trueSight`, `BuffDef.trueSight`: the invisible and camouflaged enemies that near are found).\n * Everything that asks what a team sees goes by it (`world.isVisibleTo`: what units pick, the commands a player may give,\n * the computer players, each player's snapshot), and the fog is lit where a revealed or found unit stands, as for what a\n * `detect` found. Nothing of its own is saved: what is revealed is the `detection` component\n *\n * @beta\n */\nexport function visionPack(): GamePack {\n\t// seen only from near, unless found, revealed, or it attacked them a moment ago\n\tconst camouflaged = defineHook({\n\t\thook: 'visible',\n\t\tid: 'vision',\n\t\trun(world, event) {\n\t\t\tif (!event.visible) return\n\t\t\tconst { entity, team } = event\n\t\t\tif (!entity.buffs.length) return\n\t\t\tconst range = camouflageOf(world, entity)\n\t\t\tif (range === undefined) return\n\t\t\tif (entity.get(exposure)?.has(team) || entity.get(detection)?.has(team)) return\n\t\t\tconst { x, z } = entity.pos\n\t\t\tfor (const other of world.spatial.query(x, z, range + 2, around)) {\n\t\t\t\tif (other === entity || !other.alive || other.hidden) continue\n\t\t\t\tconst owner = world.player(other.owner)\n\t\t\t\tif (owner.neutral || owner.team !== team) continue\n\t\t\t\tif (distSq(other.pos, entity.pos) <= range * range) return\n\t\t\t}\n\t\t\tevent.visible = false\n\t\t}\n\t})\n\treturn { id: VISION, effects: [revealUnitEffect], systems: [visionSystem], hooks: [camouflaged] }\n}\n"],"mappings":"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"}
package/dist/walls.d.ts CHANGED
@@ -83,4 +83,4 @@ export declare const wallGateCommand: import("#engine/commands").DefinedCommand<
83
83
  *
84
84
  * @beta
85
85
  */
86
- export declare function withWalls(): GamePack;
86
+ export declare function wallsPack(): GamePack;
package/dist/walls.js ADDED
@@ -0,0 +1,278 @@
1
+ import { defineComponent } from "./components.js";
2
+ import { defineEngineEvent } from "./events.js";
3
+ import { constructionSite } from "./systems/construction.js";
4
+ import { defineHook } from "./hooks.js";
5
+ import { bool, id, ids, optional, point, string } from "./fields.js";
6
+ import { createOrder, giveOrder } from "./orders/queue.js";
7
+ import { defineCommand } from "./commands.js";
8
+ //#region src/walls.ts
9
+ /**
10
+ * A piece of wall took another shape, or turned: a piece came or went beside it
11
+ *
12
+ * @beta
13
+ */
14
+ var wallJoined = defineEngineEvent({
15
+ id: "core.wallJoined",
16
+ replicate: "everyone"
17
+ });
18
+ /** The four sides, as the cell beside and the facing toward it */
19
+ var SIDES = [
20
+ {
21
+ dx: 1,
22
+ dz: 0,
23
+ facing: 0
24
+ },
25
+ {
26
+ dx: 0,
27
+ dz: 1,
28
+ facing: Math.PI / 2
29
+ },
30
+ {
31
+ dx: -1,
32
+ dz: 0,
33
+ facing: Math.PI
34
+ },
35
+ {
36
+ dx: 0,
37
+ dz: -1,
38
+ facing: -Math.PI / 2
39
+ }
40
+ ];
41
+ var near = [];
42
+ /** The live piece of a family standing on the cell of this point: by its footprint, a gate wider than a cell too */
43
+ function pieceAt(world, family, x, z) {
44
+ const cx = Math.floor(x) + .5;
45
+ const cz = Math.floor(z) + .5;
46
+ for (const other of world.spatial.query(cx, cz, 2, near)) {
47
+ if (!other.alive || other.def.wall?.family !== family) continue;
48
+ const rect = other.rect;
49
+ if (Math.abs(cx - rect.x) < rect.hw && Math.abs(cz - rect.z) < rect.hd) return other;
50
+ }
51
+ }
52
+ /** The cell just past a piece's side: the next cell for a piece of one, past its footprint for a wider one (a gate) */
53
+ var besideOf = (rect, dx, dz) => ({
54
+ x: rect.x + dx * (rect.hw + .5),
55
+ z: rect.z + dz * (rect.hd + .5)
56
+ });
57
+ /**
58
+ * The shape of a piece by the sides it has a piece of its family on (east, north, west, south), and which way it faces:
59
+ * an end toward its one neighbour, a straight piece along its line, a corner toward the first of its two sides, a tee
60
+ * toward the side it has none on
61
+ *
62
+ * @internal
63
+ */
64
+ function wallShapeOf(sides) {
65
+ const count = sides.filter(Boolean).length;
66
+ if (count === 0) return {
67
+ shape: "single",
68
+ facing: 0
69
+ };
70
+ if (count === 4) return {
71
+ shape: "cross",
72
+ facing: 0
73
+ };
74
+ if (count === 1) return {
75
+ shape: "end",
76
+ facing: SIDES[sides.indexOf(true)].facing
77
+ };
78
+ if (count === 3) return {
79
+ shape: "tee",
80
+ facing: SIDES[(sides.indexOf(false) + 2) % 4].facing
81
+ };
82
+ if (sides[0] === sides[2]) return {
83
+ shape: "straight",
84
+ facing: sides[0] ? 0 : Math.PI / 2
85
+ };
86
+ return {
87
+ shape: "corner",
88
+ facing: SIDES[sides[0] && sides[1] ? 0 : sides[1] && sides[2] ? 1 : sides[2] && sides[3] ? 2 : 3].facing
89
+ };
90
+ }
91
+ /** Works out a piece's shape from its neighbours again, and says so where it changed */
92
+ function reshape(world, piece) {
93
+ const family = piece.def.wall?.family;
94
+ if (!family || !piece.alive) return;
95
+ const rect = piece.rect;
96
+ const { shape, facing } = wallShapeOf(SIDES.map(({ dx, dz }) => {
97
+ const beside = besideOf(rect, dx, dz);
98
+ return !!pieceAt(world, family, beside.x, beside.z);
99
+ }));
100
+ const look = piece.def.wall?.gate ? piece.look : shape;
101
+ if (piece.look === look && piece.facing === facing) return;
102
+ piece.look = look;
103
+ piece.facing = facing;
104
+ world.events.emit(wallJoined, {
105
+ entity: piece.id,
106
+ shape,
107
+ facing
108
+ });
109
+ }
110
+ /** A piece and the pieces of its family beside it, shaped again: one came, or went */
111
+ function reshapeAround(world, rect, family, self) {
112
+ if (self) reshape(world, self);
113
+ for (const { dx, dz } of SIDES) {
114
+ const beside = besideOf(rect, dx, dz);
115
+ const other = pieceAt(world, family, beside.x, beside.z);
116
+ if (other && other !== self) reshape(world, other);
117
+ }
118
+ }
119
+ /**
120
+ * The cells of a wall along a drag, as the genre lays one: along the longer of its two directions first, then the
121
+ * other, a cell's middle each (`x + 0.5`), from where it started to where it ended, each once
122
+ *
123
+ * @beta
124
+ */
125
+ function wallLine(from, to) {
126
+ const x0 = Math.floor(from.x);
127
+ const z0 = Math.floor(from.z);
128
+ const x1 = Math.floor(to.x);
129
+ const z1 = Math.floor(to.z);
130
+ const cells = [];
131
+ const stepX = Math.sign(x1 - x0);
132
+ const stepZ = Math.sign(z1 - z0);
133
+ const alongX = Math.abs(x1 - x0) >= Math.abs(z1 - z0);
134
+ let x = x0;
135
+ let z = z0;
136
+ cells.push({
137
+ x: x + .5,
138
+ z: z + .5
139
+ });
140
+ const walk = (axis) => {
141
+ if (axis === "x") while (x !== x1) {
142
+ x += stepX;
143
+ cells.push({
144
+ x: x + .5,
145
+ z: z + .5
146
+ });
147
+ }
148
+ else while (z !== z1) {
149
+ z += stepZ;
150
+ cells.push({
151
+ x: x + .5,
152
+ z: z + .5
153
+ });
154
+ }
155
+ };
156
+ walk(alongX ? "x" : "z");
157
+ walk(alongX ? "z" : "x");
158
+ return cells;
159
+ }
160
+ /**
161
+ * Lays a wall along a drag with the player's builders: a build order for each cell of the line (`wallLine`), queued
162
+ * after one another (after what they were doing, with `queue`), for the first builder of theirs among the ids that can
163
+ * build the type. What cannot be built where it is (a unit, a tree in the way) is refused there as one built by hand is
164
+ *
165
+ * @beta
166
+ */
167
+ var buildLineCommand = defineCommand("buildLine", {
168
+ entities: ids,
169
+ unitType: string,
170
+ from: point,
171
+ to: point,
172
+ queue: optional(bool)
173
+ }, (world, player, command) => {
174
+ if (!world.registry.units.has(command.unitType)) return;
175
+ const builder = command.entities.map((id) => world.get(id)).find((entity) => entity?.alive && entity.owner === player && entity.def.builds?.includes(command.unitType));
176
+ if (!builder) return;
177
+ wallLine(command.from, command.to).forEach((cell, index) => {
178
+ giveOrder(world, builder, createOrder(world, {
179
+ type: "build",
180
+ unitType: command.unitType,
181
+ point: cell
182
+ }), index > 0 || !!command.queue);
183
+ });
184
+ });
185
+ /**
186
+ * A gate of a wall (`UnitTypeDef.wall.gate`): whether it stands open, every screen told. Open, it is in nobody's way,
187
+ * whoever walks; shut, it is a piece of the wall. Its owner opens and shuts it (`wallGateCommand`, `setWallGate`)
188
+ *
189
+ * @beta
190
+ */
191
+ var wallGate = defineComponent({
192
+ id: "walls.gate",
193
+ replicate: "everyone",
194
+ onSpawn(entity) {
195
+ if (!entity.def.wall?.gate) return;
196
+ entity.set(wallGate, { open: false });
197
+ entity.look = "shut";
198
+ },
199
+ passable: (gate) => gate.open
200
+ });
201
+ /**
202
+ * A gate of a wall opened or shut (`setWallGate`)
203
+ *
204
+ * @beta
205
+ */
206
+ var wallGateChanged = defineEngineEvent({
207
+ id: "core.wallGateChanged",
208
+ replicate: "everyone"
209
+ });
210
+ /**
211
+ * Opens or shuts a gate of a wall, for everyone: open, what walks goes through its cell, whoever's; shut, around it.
212
+ * Its look is `open` or `shut`. False for what is no gate, or one still going up
213
+ *
214
+ * @beta
215
+ */
216
+ function setWallGate(world, gate, open) {
217
+ const now = gate.get(wallGate);
218
+ if (!now || !gate.alive || gate.has(constructionSite)) return false;
219
+ if (now.open === open) return true;
220
+ gate.set(wallGate, { open });
221
+ gate.look = open ? "open" : "shut";
222
+ if (open) world.nav.removeObstacle(gate.id);
223
+ else if (!world.nav.addObstacle(gate.id, gate.rect)) world.log.warn("navigation", `There is no room for another obstacle: the gate ${gate.id} does not block the way`, { entity: gate.id });
224
+ world.events.emit(wallGateChanged, {
225
+ entity: gate.id,
226
+ open
227
+ });
228
+ return true;
229
+ }
230
+ /**
231
+ * Its owner opens or shuts a gate of a wall (`setWallGate`), for everyone
232
+ *
233
+ * @beta
234
+ */
235
+ var wallGateCommand = defineCommand("wallGate", {
236
+ entity: id,
237
+ open: bool
238
+ }, (world, player, command) => {
239
+ const gate = world.get(command.entity);
240
+ if (gate?.owner === player) setWallGate(world, gate, command.open);
241
+ });
242
+ /**
243
+ * Walls for a game: its pieces (types with `wall: { family }`) join with their neighbours as they are put down and
244
+ * taken away, and a builder lays a line of them (`buildLineCommand`). A game's pieces draw by their shape with
245
+ * `UnitLook.looks` (`single`, `end`, `straight`, `corner`, `tee`, `cross`); its gates (`wall.gate`) by `open` and `shut`,
246
+ * opened and shut by their owner (`wallGateCommand`)
247
+ *
248
+ * @beta
249
+ */
250
+ function wallsPack() {
251
+ const spawnHook = defineHook({
252
+ hook: "spawn",
253
+ id: "core.walls.spawn",
254
+ run(world, entity) {
255
+ const family = entity.def.wall?.family;
256
+ if (family) reshapeAround(world, entity.rect, family, entity);
257
+ }
258
+ });
259
+ const removeHook = defineHook({
260
+ hook: "remove",
261
+ id: "core.walls.remove",
262
+ run(world, entity) {
263
+ const family = entity.def.wall?.family;
264
+ if (family) reshapeAround(world, entity.rect, family);
265
+ }
266
+ });
267
+ return {
268
+ id: "walls",
269
+ commands: [buildLineCommand, wallGateCommand],
270
+ components: [wallGate],
271
+ events: [wallJoined, wallGateChanged],
272
+ hooks: [spawnHook, removeHook]
273
+ };
274
+ }
275
+ //#endregion
276
+ export { buildLineCommand, setWallGate, wallGate, wallGateChanged, wallGateCommand, wallJoined, wallLine, wallShapeOf, wallsPack };
277
+
278
+ //# sourceMappingURL=walls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walls.js","names":[],"sources":["../src/walls.ts"],"sourcesContent":["import type { Rect, Vec2 } from './math'\nimport type { GamePack } from './packs/pack'\nimport type { Entity } from './entity'\nimport { defineEngineEvent } from './events'\nimport { bool, id, ids, optional, point, string } from './fields'\nimport { defineCommand } from './commands'\nimport { defineComponent } from './components'\nimport { defineHook } from './hooks'\nimport { constructionSite } from './systems/construction'\nimport { createOrder, giveOrder } from './orders/queue'\nimport type { World } from './world'\n\n/*\n * Walls (master plan OH9): pieces of a wall type (a building of one cell, `UnitTypeDef.wall: { family }`) join with the\n * pieces of their family next to them. Each piece's shape (`single`, `end`, `straight`, `corner`, `tee`, `cross`) and\n * which way it faces follow from its neighbours as pieces come and go, as its `look` (the model its type draws it with,\n * `UnitLook.looks`), and `wallJoined` says so. A line of them is laid along a drag (`wallLine`): by the editor's wall\n * tool on a map, by a builder's orders in a game (`buildLineCommand`)\n */\n\n/**\n * What a piece of wall is, among its family's: its shape, by the pieces of its family beside it\n *\n * @beta\n */\nexport type WallShape = 'single' | 'end' | 'straight' | 'corner' | 'tee' | 'cross'\n\n/**\n * A piece of wall took another shape, or turned: a piece came or went beside it\n *\n * @beta\n */\nexport const wallJoined = defineEngineEvent<{ entity: number; shape: WallShape; facing: number }>({ id: 'core.wallJoined', replicate: 'everyone' })\n\n/** The four sides, as the cell beside and the facing toward it */\nconst SIDES = [\n\t{ dx: 1, dz: 0, facing: 0 },\n\t{ dx: 0, dz: 1, facing: Math.PI / 2 },\n\t{ dx: -1, dz: 0, facing: Math.PI },\n\t{ dx: 0, dz: -1, facing: -Math.PI / 2 }\n] as const\n\nconst near: Entity[] = []\n\n/** The live piece of a family standing on the cell of this point: by its footprint, a gate wider than a cell too */\nfunction pieceAt(world: World, family: string, x: number, z: number): Entity | undefined {\n\tconst cx = Math.floor(x) + 0.5\n\tconst cz = Math.floor(z) + 0.5\n\tfor (const other of world.spatial.query(cx, cz, 2, near)) {\n\t\tif (!other.alive || other.def.wall?.family !== family) continue\n\t\tconst rect = other.rect\n\t\tif (Math.abs(cx - rect.x) < rect.hw && Math.abs(cz - rect.z) < rect.hd) return other\n\t}\n\treturn undefined\n}\n\n/** The cell just past a piece's side: the next cell for a piece of one, past its footprint for a wider one (a gate) */\nconst besideOf = (rect: Rect, dx: number, dz: number): Vec2 => ({ x: rect.x + dx * (rect.hw + 0.5), z: rect.z + dz * (rect.hd + 0.5) })\n\n/**\n * The shape of a piece by the sides it has a piece of its family on (east, north, west, south), and which way it faces:\n * an end toward its one neighbour, a straight piece along its line, a corner toward the first of its two sides, a tee\n * toward the side it has none on\n *\n * @internal\n */\nexport function wallShapeOf(sides: readonly [boolean, boolean, boolean, boolean]): { shape: WallShape; facing: number } {\n\tconst count = sides.filter(Boolean).length\n\tif (count === 0) return { shape: 'single', facing: 0 }\n\tif (count === 4) return { shape: 'cross', facing: 0 }\n\tif (count === 1) return { shape: 'end', facing: SIDES[sides.indexOf(true)].facing }\n\tif (count === 3) return { shape: 'tee', facing: SIDES[(sides.indexOf(false) + 2) % 4].facing }\n\t// two: across from each other, or a corner\n\tif (sides[0] === sides[2]) return { shape: 'straight', facing: sides[0] ? 0 : Math.PI / 2 }\n\tconst first = sides[0] && sides[1] ? 0 : sides[1] && sides[2] ? 1 : sides[2] && sides[3] ? 2 : 3\n\treturn { shape: 'corner', facing: SIDES[first].facing }\n}\n\n/** Works out a piece's shape from its neighbours again, and says so where it changed */\nfunction reshape(world: World, piece: Entity): void {\n\tconst family = piece.def.wall?.family\n\tif (!family || !piece.alive) return\n\tconst rect = piece.rect\n\tconst sides = SIDES.map(({ dx, dz }) => {\n\t\tconst beside = besideOf(rect, dx, dz)\n\t\treturn !!pieceAt(world, family, beside.x, beside.z)\n\t}) as unknown as [\n\t\tboolean,\n\t\tboolean,\n\t\tboolean,\n\t\tboolean\n\t]\n\tconst { shape, facing } = wallShapeOf(sides)\n\t// a gate turns along its line, and keeps its look: open or shut\n\tconst look = piece.def.wall?.gate ? piece.look : shape\n\tif (piece.look === look && piece.facing === facing) return\n\tpiece.look = look\n\tpiece.facing = facing\n\tworld.events.emit(wallJoined, { entity: piece.id, shape, facing })\n}\n\n/** A piece and the pieces of its family beside it, shaped again: one came, or went */\nfunction reshapeAround(world: World, rect: Rect, family: string, self?: Entity): void {\n\tif (self) reshape(world, self)\n\tfor (const { dx, dz } of SIDES) {\n\t\tconst beside = besideOf(rect, dx, dz)\n\t\tconst other = pieceAt(world, family, beside.x, beside.z)\n\t\tif (other && other !== self) reshape(world, other)\n\t}\n}\n\n/**\n * The cells of a wall along a drag, as the genre lays one: along the longer of its two directions first, then the\n * other, a cell's middle each (`x + 0.5`), from where it started to where it ended, each once\n *\n * @beta\n */\nexport function wallLine(from: Vec2, to: Vec2): Vec2[] {\n\tconst x0 = Math.floor(from.x)\n\tconst z0 = Math.floor(from.z)\n\tconst x1 = Math.floor(to.x)\n\tconst z1 = Math.floor(to.z)\n\tconst cells: Vec2[] = []\n\tconst stepX = Math.sign(x1 - x0)\n\tconst stepZ = Math.sign(z1 - z0)\n\tconst alongX = Math.abs(x1 - x0) >= Math.abs(z1 - z0)\n\tlet x = x0\n\tlet z = z0\n\tcells.push({ x: x + 0.5, z: z + 0.5 })\n\tconst walk = (axis: 'x' | 'z') => {\n\t\tif (axis === 'x')\n\t\t\twhile (x !== x1) {\n\t\t\t\tx += stepX\n\t\t\t\tcells.push({ x: x + 0.5, z: z + 0.5 })\n\t\t\t}\n\t\telse\n\t\t\twhile (z !== z1) {\n\t\t\t\tz += stepZ\n\t\t\t\tcells.push({ x: x + 0.5, z: z + 0.5 })\n\t\t\t}\n\t}\n\twalk(alongX ? 'x' : 'z')\n\twalk(alongX ? 'z' : 'x')\n\treturn cells\n}\n\n/**\n * Lays a wall along a drag with the player's builders: a build order for each cell of the line (`wallLine`), queued\n * after one another (after what they were doing, with `queue`), for the first builder of theirs among the ids that can\n * build the type. What cannot be built where it is (a unit, a tree in the way) is refused there as one built by hand is\n *\n * @beta\n */\nexport const buildLineCommand = defineCommand(\n\t'buildLine',\n\t{ entities: ids, unitType: string, from: point, to: point, queue: optional(bool) },\n\t(world, player, command) => {\n\t\tif (!world.registry.units.has(command.unitType)) return\n\t\tconst builder = command.entities\n\t\t\t.map((id) => world.get(id))\n\t\t\t.find((entity) => entity?.alive && entity.owner === player && entity.def.builds?.includes(command.unitType))\n\t\tif (!builder) return\n\t\twallLine(command.from, command.to).forEach((cell, index) => {\n\t\t\tgiveOrder(world, builder, createOrder(world, { type: 'build', unitType: command.unitType, point: cell }), index > 0 || !!command.queue)\n\t\t})\n\t}\n)\n\n/**\n * A gate of a wall (`UnitTypeDef.wall.gate`): whether it stands open, every screen told. Open, it is in nobody's way,\n * whoever walks; shut, it is a piece of the wall. Its owner opens and shuts it (`wallGateCommand`, `setWallGate`)\n *\n * @beta\n */\nexport const wallGate = defineComponent<{ open: boolean }>({ id: 'walls.gate', replicate: 'everyone',\n\t// put up shut\n\tonSpawn(entity) {\n\t\tif (!entity.def.wall?.gate) return\n\t\tentity.set(wallGate, { open: false })\n\t\tentity.look = 'shut'\n\t},\n\tpassable: (gate) => gate.open })\n\n/**\n * A gate of a wall opened or shut (`setWallGate`)\n *\n * @beta\n */\nexport const wallGateChanged = defineEngineEvent<{ entity: number; open: boolean }>({ id: 'core.wallGateChanged', replicate: 'everyone' })\n\n/**\n * Opens or shuts a gate of a wall, for everyone: open, what walks goes through its cell, whoever's; shut, around it.\n * Its look is `open` or `shut`. False for what is no gate, or one still going up\n *\n * @beta\n */\nexport function setWallGate(world: World, gate: Entity, open: boolean): boolean {\n\tconst now = gate.get(wallGate)\n\tif (!now || !gate.alive || gate.has(constructionSite)) return false\n\tif (now.open === open) return true\n\tgate.set(wallGate, { open })\n\tgate.look = open ? 'open' : 'shut'\n\tif (open) world.nav.removeObstacle(gate.id)\n\telse if (!world.nav.addObstacle(gate.id, gate.rect))\n\t\tworld.log.warn('navigation', `There is no room for another obstacle: the gate ${gate.id} does not block the way`, { entity: gate.id })\n\tworld.events.emit(wallGateChanged, { entity: gate.id, open })\n\treturn true\n}\n\n/**\n * Its owner opens or shuts a gate of a wall (`setWallGate`), for everyone\n *\n * @beta\n */\nexport const wallGateCommand = defineCommand('wallGate', { entity: id, open: bool }, (world, player, command) => {\n\tconst gate = world.get(command.entity)\n\tif (gate?.owner === player) setWallGate(world, gate, command.open)\n})\n\n/**\n * Walls for a game: its pieces (types with `wall: { family }`) join with their neighbours as they are put down and\n * taken away, and a builder lays a line of them (`buildLineCommand`). A game's pieces draw by their shape with\n * `UnitLook.looks` (`single`, `end`, `straight`, `corner`, `tee`, `cross`); its gates (`wall.gate`) by `open` and `shut`,\n * opened and shut by their owner (`wallGateCommand`)\n *\n * @beta\n */\nexport function wallsPack(): GamePack {\n\tconst spawnHook = defineHook({\n\t\thook: 'spawn',\n\t\tid: 'core.walls.spawn',\n\t\trun(world, entity) {\n\t\t\tconst family = entity.def.wall?.family\n\t\t\tif (family) reshapeAround(world, entity.rect, family, entity)\n\t\t}\n\t})\n\tconst removeHook = defineHook({\n\t\thook: 'remove',\n\t\tid: 'core.walls.remove',\n\t\trun(world, entity) {\n\t\t\tconst family = entity.def.wall?.family\n\t\t\tif (family) reshapeAround(world, entity.rect, family)\n\t\t}\n\t})\n\treturn {\n\t\tid: 'walls',\n\t\tcommands: [buildLineCommand, wallGateCommand],\n\t\tcomponents: [wallGate],\n\t\tevents: [wallJoined, wallGateChanged],\n\t\thooks: [spawnHook, removeHook]\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAgCA,IAAa,aAAa,kBAAwE;CAAE,IAAI;CAAmB,WAAW;AAAW,CAAC;;AAGlJ,IAAM,QAAQ;CACb;EAAE,IAAI;EAAG,IAAI;EAAG,QAAQ;CAAE;CAC1B;EAAE,IAAI;EAAG,IAAI;EAAG,QAAQ,KAAK,KAAK;CAAE;CACpC;EAAE,IAAI;EAAI,IAAI;EAAG,QAAQ,KAAK;CAAG;CACjC;EAAE,IAAI;EAAG,IAAI;EAAI,QAAQ,CAAC,KAAK,KAAK;CAAE;AACvC;AAEA,IAAM,OAAiB,CAAC;;AAGxB,SAAS,QAAQ,OAAc,QAAgB,GAAW,GAA+B;CACxF,MAAM,KAAK,KAAK,MAAM,CAAC,IAAI;CAC3B,MAAM,KAAK,KAAK,MAAM,CAAC,IAAI;CAC3B,KAAK,MAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG;EACzD,IAAI,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,WAAW,QAAQ;EACvD,MAAM,OAAO,MAAM;EACnB,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,OAAO;CAChF;AAED;;AAGA,IAAM,YAAY,MAAY,IAAY,QAAsB;CAAE,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK;CAAM,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK;AAAK;;;;;;;;AASrI,SAAgB,YAAY,OAA4F;CACvH,MAAM,QAAQ,MAAM,OAAO,OAAO,CAAC,CAAC;CACpC,IAAI,UAAU,GAAG,OAAO;EAAE,OAAO;EAAU,QAAQ;CAAE;CACrD,IAAI,UAAU,GAAG,OAAO;EAAE,OAAO;EAAS,QAAQ;CAAE;CACpD,IAAI,UAAU,GAAG,OAAO;EAAE,OAAO;EAAO,QAAQ,MAAM,MAAM,QAAQ,IAAI,EAAE,CAAC;CAAO;CAClF,IAAI,UAAU,GAAG,OAAO;EAAE,OAAO;EAAO,QAAQ,OAAO,MAAM,QAAQ,KAAK,IAAI,KAAK,EAAE,CAAC;CAAO;CAE7F,IAAI,MAAM,OAAO,MAAM,IAAI,OAAO;EAAE,OAAO;EAAY,QAAQ,MAAM,KAAK,IAAI,KAAK,KAAK;CAAE;CAE1F,OAAO;EAAE,OAAO;EAAU,QAAQ,MADpB,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,KAAK,IAAI,EACjD,CAAC;CAAO;AACvD;;AAGA,SAAS,QAAQ,OAAc,OAAqB;CACnD,MAAM,SAAS,MAAM,IAAI,MAAM;CAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,OAAO;CAC7B,MAAM,OAAO,MAAM;CAUnB,MAAM,EAAE,OAAO,WAAW,YATZ,MAAM,KAAK,EAAE,IAAI,SAAS;EACvC,MAAM,SAAS,SAAS,MAAM,IAAI,EAAE;EACpC,OAAO,CAAC,CAAC,QAAQ,OAAO,QAAQ,OAAO,GAAG,OAAO,CAAC;CACnD,CAMsC,CAAK;CAE3C,MAAM,OAAO,MAAM,IAAI,MAAM,OAAO,MAAM,OAAO;CACjD,IAAI,MAAM,SAAS,QAAQ,MAAM,WAAW,QAAQ;CACpD,MAAM,OAAO;CACb,MAAM,SAAS;CACf,MAAM,OAAO,KAAK,YAAY;EAAE,QAAQ,MAAM;EAAI;EAAO;CAAO,CAAC;AAClE;;AAGA,SAAS,cAAc,OAAc,MAAY,QAAgB,MAAqB;CACrF,IAAI,MAAM,QAAQ,OAAO,IAAI;CAC7B,KAAK,MAAM,EAAE,IAAI,QAAQ,OAAO;EAC/B,MAAM,SAAS,SAAS,MAAM,IAAI,EAAE;EACpC,MAAM,QAAQ,QAAQ,OAAO,QAAQ,OAAO,GAAG,OAAO,CAAC;EACvD,IAAI,SAAS,UAAU,MAAM,QAAQ,OAAO,KAAK;CAClD;AACD;;;;;;;AAQA,SAAgB,SAAS,MAAY,IAAkB;CACtD,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;CAC5B,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;CAC5B,MAAM,KAAK,KAAK,MAAM,GAAG,CAAC;CAC1B,MAAM,KAAK,KAAK,MAAM,GAAG,CAAC;CAC1B,MAAM,QAAgB,CAAC;CACvB,MAAM,QAAQ,KAAK,KAAK,KAAK,EAAE;CAC/B,MAAM,QAAQ,KAAK,KAAK,KAAK,EAAE;CAC/B,MAAM,SAAS,KAAK,IAAI,KAAK,EAAE,KAAK,KAAK,IAAI,KAAK,EAAE;CACpD,IAAI,IAAI;CACR,IAAI,IAAI;CACR,MAAM,KAAK;EAAE,GAAG,IAAI;EAAK,GAAG,IAAI;CAAI,CAAC;CACrC,MAAM,QAAQ,SAAoB;EACjC,IAAI,SAAS,KACZ,OAAO,MAAM,IAAI;GAChB,KAAK;GACL,MAAM,KAAK;IAAE,GAAG,IAAI;IAAK,GAAG,IAAI;GAAI,CAAC;EACtC;OAEA,OAAO,MAAM,IAAI;GAChB,KAAK;GACL,MAAM,KAAK;IAAE,GAAG,IAAI;IAAK,GAAG,IAAI;GAAI,CAAC;EACtC;CACF;CACA,KAAK,SAAS,MAAM,GAAG;CACvB,KAAK,SAAS,MAAM,GAAG;CACvB,OAAO;AACR;;;;;;;;AASA,IAAa,mBAAmB,cAC/B,aACA;CAAE,UAAU;CAAK,UAAU;CAAQ,MAAM;CAAO,IAAI;CAAO,OAAO,SAAS,IAAI;AAAE,IAChF,OAAO,QAAQ,YAAY;CAC3B,IAAI,CAAC,MAAM,SAAS,MAAM,IAAI,QAAQ,QAAQ,GAAG;CACjD,MAAM,UAAU,QAAQ,SACtB,KAAK,OAAO,MAAM,IAAI,EAAE,CAAC,CAAC,CAC1B,MAAM,WAAW,QAAQ,SAAS,OAAO,UAAU,UAAU,OAAO,IAAI,QAAQ,SAAS,QAAQ,QAAQ,CAAC;CAC5G,IAAI,CAAC,SAAS;CACd,SAAS,QAAQ,MAAM,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,UAAU;EAC3D,UAAU,OAAO,SAAS,YAAY,OAAO;GAAE,MAAM;GAAS,UAAU,QAAQ;GAAU,OAAO;EAAK,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,QAAQ,KAAK;CACvI,CAAC;AACF,CACD;;;;;;;AAQA,IAAa,WAAW,gBAAmC;CAAE,IAAI;CAAc,WAAW;CAEzF,QAAQ,QAAQ;EACf,IAAI,CAAC,OAAO,IAAI,MAAM,MAAM;EAC5B,OAAO,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;EACpC,OAAO,OAAO;CACf;CACA,WAAW,SAAS,KAAK;AAAK,CAAC;;;;;;AAOhC,IAAa,kBAAkB,kBAAqD;CAAE,IAAI;CAAwB,WAAW;AAAW,CAAC;;;;;;;AAQzI,SAAgB,YAAY,OAAc,MAAc,MAAwB;CAC/E,MAAM,MAAM,KAAK,IAAI,QAAQ;CAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,KAAK,IAAI,gBAAgB,GAAG,OAAO;CAC9D,IAAI,IAAI,SAAS,MAAM,OAAO;CAC9B,KAAK,IAAI,UAAU,EAAE,KAAK,CAAC;CAC3B,KAAK,OAAO,OAAO,SAAS;CAC5B,IAAI,MAAM,MAAM,IAAI,eAAe,KAAK,EAAE;MACrC,IAAI,CAAC,MAAM,IAAI,YAAY,KAAK,IAAI,KAAK,IAAI,GACjD,MAAM,IAAI,KAAK,cAAc,mDAAmD,KAAK,GAAG,0BAA0B,EAAE,QAAQ,KAAK,GAAG,CAAC;CACtI,MAAM,OAAO,KAAK,iBAAiB;EAAE,QAAQ,KAAK;EAAI;CAAK,CAAC;CAC5D,OAAO;AACR;;;;;;AAOA,IAAa,kBAAkB,cAAc,YAAY;CAAE,QAAQ;CAAI,MAAM;AAAK,IAAI,OAAO,QAAQ,YAAY;CAChH,MAAM,OAAO,MAAM,IAAI,QAAQ,MAAM;CACrC,IAAI,MAAM,UAAU,QAAQ,YAAY,OAAO,MAAM,QAAQ,IAAI;AAClE,CAAC;;;;;;;;;AAUD,SAAgB,YAAsB;CACrC,MAAM,YAAY,WAAW;EAC5B,MAAM;EACN,IAAI;EACJ,IAAI,OAAO,QAAQ;GAClB,MAAM,SAAS,OAAO,IAAI,MAAM;GAChC,IAAI,QAAQ,cAAc,OAAO,OAAO,MAAM,QAAQ,MAAM;EAC7D;CACD,CAAC;CACD,MAAM,aAAa,WAAW;EAC7B,MAAM;EACN,IAAI;EACJ,IAAI,OAAO,QAAQ;GAClB,MAAM,SAAS,OAAO,IAAI,MAAM;GAChC,IAAI,QAAQ,cAAc,OAAO,OAAO,MAAM,MAAM;EACrD;CACD,CAAC;CACD,OAAO;EACN,IAAI;EACJ,UAAU,CAAC,kBAAkB,eAAe;EAC5C,YAAY,CAAC,QAAQ;EACrB,QAAQ,CAAC,YAAY,eAAe;EACpC,OAAO,CAAC,WAAW,UAAU;CAC9B;AACD"}