@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.
- package/dist/abilities/amounts.d.ts +28 -0
- package/dist/abilities/amounts.js +74 -0
- package/dist/abilities/amounts.js.map +1 -0
- package/dist/abilities/buffs.d.ts +106 -6
- package/dist/abilities/buffs.js +443 -0
- package/dist/abilities/buffs.js.map +1 -0
- package/dist/abilities/castTold.d.ts +2 -0
- package/dist/abilities/castTold.js +66 -0
- package/dist/abilities/castTold.js.map +1 -0
- package/dist/abilities/chance.d.ts +38 -0
- package/dist/abilities/chance.js +77 -0
- package/dist/abilities/chance.js.map +1 -0
- package/dist/abilities/charges.d.ts +18 -0
- package/dist/abilities/charges.js +101 -0
- package/dist/abilities/charges.js.map +1 -0
- package/dist/abilities/control.d.ts +28 -0
- package/dist/abilities/control.js +113 -0
- package/dist/abilities/control.js.map +1 -0
- package/dist/abilities/dispel.js +51 -0
- package/dist/abilities/dispel.js.map +1 -0
- package/dist/abilities/effectFields.d.ts +1 -1
- package/dist/abilities/effectFields.js +676 -0
- package/dist/abilities/effectFields.js.map +1 -0
- package/dist/abilities/effectIndex.d.ts +27 -0
- package/dist/abilities/effectIndex.js +64 -0
- package/dist/abilities/effectIndex.js.map +1 -0
- package/dist/abilities/effects/buff.d.ts +9 -3
- package/dist/abilities/effects/buff.js +84 -0
- package/dist/abilities/effects/buff.js.map +1 -0
- package/dist/abilities/effects/conditions.d.ts +2 -0
- package/dist/abilities/effects/conditions.js +41 -0
- package/dist/abilities/effects/conditions.js.map +1 -0
- package/dist/abilities/effects/core.js +54 -0
- package/dist/abilities/effects/core.js.map +1 -0
- package/dist/abilities/effects/damage.d.ts +1 -1
- package/dist/abilities/effects/damage.js +43 -0
- package/dist/abilities/effects/damage.js.map +1 -0
- package/dist/abilities/effects/heal.d.ts +2 -2
- package/dist/abilities/effects/heal.js +51 -0
- package/dist/abilities/effects/heal.js.map +1 -0
- package/dist/abilities/effects/missile.d.ts +13 -1
- package/dist/abilities/effects/missile.js +104 -0
- package/dist/abilities/effects/missile.js.map +1 -0
- package/dist/abilities/effects/morph.d.ts +5 -0
- package/dist/abilities/effects/morph.js +43 -0
- package/dist/abilities/effects/morph.js.map +1 -0
- package/dist/abilities/effects/moves.d.ts +16 -4
- package/dist/abilities/effects/moves.js +212 -0
- package/dist/abilities/effects/moves.js.map +1 -0
- package/dist/abilities/effects/passives.d.ts +19 -9
- package/dist/abilities/effects/passives.js +131 -0
- package/dist/abilities/effects/passives.js.map +1 -0
- package/dist/abilities/effects/proxy.d.ts +5 -0
- package/dist/abilities/effects/proxy.js +60 -0
- package/dist/abilities/effects/proxy.js.map +1 -0
- package/dist/abilities/effects/sight.d.ts +2 -2
- package/dist/abilities/effects/sight.js +39 -0
- package/dist/abilities/effects/sight.js.map +1 -0
- package/dist/abilities/effects/spawn.d.ts +5 -2
- package/dist/abilities/effects/spawn.js +40 -0
- package/dist/abilities/effects/spawn.js.map +1 -0
- package/dist/abilities/effects/timed.d.ts +2 -2
- package/dist/abilities/effects/timed.js +96 -0
- package/dist/abilities/effects/timed.js.map +1 -0
- package/dist/abilities/effects/trade.d.ts +1 -1
- package/dist/abilities/effects/trade.js +25 -0
- package/dist/abilities/effects/trade.js.map +1 -0
- package/dist/abilities/effects.d.ts +97 -23
- package/dist/abilities/effects.js +860 -0
- package/dist/abilities/effects.js.map +1 -0
- package/dist/abilities/land.d.ts +38 -4
- package/dist/abilities/land.js +189 -0
- package/dist/abilities/land.js.map +1 -0
- package/dist/abilities/recast.d.ts +45 -0
- package/dist/abilities/recast.js +118 -0
- package/dist/abilities/recast.js.map +1 -0
- package/dist/abilities/scaled.js +40 -0
- package/dist/abilities/scaled.js.map +1 -0
- package/dist/abilities/screen.d.ts +6 -0
- package/dist/abilities/screen.js +83 -0
- package/dist/abilities/screen.js.map +1 -0
- package/dist/abilities/shapes.d.ts +66 -0
- package/dist/abilities/shapes.js +122 -0
- package/dist/abilities/shapes.js.map +1 -0
- package/dist/abilities/text.d.ts +14 -2
- package/dist/abilities/text.js +204 -0
- package/dist/abilities/text.js.map +1 -0
- package/dist/abilities/triggers.d.ts +98 -0
- package/dist/abilities/triggers.js +351 -0
- package/dist/abilities/triggers.js.map +1 -0
- package/dist/abilityChanges.d.ts +131 -0
- package/dist/abilityChanges.js +345 -0
- package/dist/abilityChanges.js.map +1 -0
- package/dist/ai/area.d.ts +4 -1
- package/dist/ai/brain.d.ts +4 -1
- package/dist/ai/brain.js +844 -0
- package/dist/ai/brain.js.map +1 -0
- package/dist/ai/budget.js +74 -0
- package/dist/ai/budget.js.map +1 -0
- package/dist/ai/checks.d.ts +9 -1
- package/dist/ai/checks.js +242 -0
- package/dist/ai/checks.js.map +1 -0
- package/dist/ai/computer.d.ts +11 -4
- package/dist/ai/computer.js +251 -0
- package/dist/ai/computer.js.map +1 -0
- package/dist/ai/defence.d.ts +4 -0
- package/dist/ai/defence.js +430 -0
- package/dist/ai/defence.js.map +1 -0
- package/dist/ai/define.d.ts +3 -2
- package/dist/ai/define.js +31 -0
- package/dist/ai/define.js.map +1 -0
- package/dist/ai/economy.d.ts +10 -7
- package/dist/ai/economy.js +780 -0
- package/dist/ai/economy.js.map +1 -0
- package/dist/ai/geometry.js +38 -0
- package/dist/ai/geometry.js.map +1 -0
- package/dist/ai/goals.d.ts +1 -0
- package/dist/ai/goals.js +560 -0
- package/dist/ai/goals.js.map +1 -0
- package/dist/ai/knowledge.d.ts +72 -7
- package/dist/ai/knowledge.js +804 -0
- package/dist/ai/knowledge.js.map +1 -0
- package/dist/ai/lanes.d.ts +10 -2
- package/dist/ai/lanes.js +715 -0
- package/dist/ai/lanes.js.map +1 -0
- package/dist/ai/melee/build.js +264 -0
- package/dist/ai/melee/build.js.map +1 -0
- package/dist/ai/melee/goals.d.ts +7 -0
- package/dist/ai/melee/goals.js +720 -0
- package/dist/ai/melee/goals.js.map +1 -0
- package/dist/ai/melee/heroes.js +68 -0
- package/dist/ai/melee/heroes.js.map +1 -0
- package/dist/ai/melee/index.d.ts +1 -1
- package/dist/ai/melee/index.js +51 -0
- package/dist/ai/melee/index.js.map +1 -0
- package/dist/ai/melee/production.js +29 -0
- package/dist/ai/melee/production.js.map +1 -0
- package/dist/ai/melee/surrender.js +64 -0
- package/dist/ai/melee/surrender.js.map +1 -0
- package/dist/ai/micro.d.ts +9 -0
- package/dist/ai/micro.js +1316 -0
- package/dist/ai/micro.js.map +1 -0
- package/dist/ai/mission.d.ts +9 -2
- package/dist/ai/mission.js +538 -0
- package/dist/ai/mission.js.map +1 -0
- package/dist/ai/missionRules.d.ts +1 -1
- package/dist/ai/missionRules.js +26 -0
- package/dist/ai/missionRules.js.map +1 -0
- package/dist/ai/module.d.ts +6 -2
- package/dist/ai/module.js +37 -0
- package/dist/ai/module.js.map +1 -0
- package/dist/ai/options.d.ts +3 -3
- package/dist/ai/plans/build.d.ts +20 -1
- package/dist/ai/plans/build.js +608 -0
- package/dist/ai/plans/build.js.map +1 -0
- package/dist/ai/plans/placement.d.ts +4 -1
- package/dist/ai/plans/placement.js +295 -0
- package/dist/ai/plans/placement.js.map +1 -0
- package/dist/ai/plans/plans.d.ts +9 -0
- package/dist/ai/plans/plans.js +110 -0
- package/dist/ai/plans/plans.js.map +1 -0
- package/dist/ai/plans/production.d.ts +14 -2
- package/dist/ai/plans/production.js +434 -0
- package/dist/ai/plans/production.js.map +1 -0
- package/dist/ai/plans/purse.d.ts +6 -3
- package/dist/ai/plans/purse.js +139 -0
- package/dist/ai/plans/purse.js.map +1 -0
- package/dist/ai/plans/tech.d.ts +6 -0
- package/dist/ai/plans/tech.js +122 -0
- package/dist/ai/plans/tech.js.map +1 -0
- package/dist/ai/profiles.d.ts +4 -4
- package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
- package/dist/ai/profiles.js.map +1 -0
- package/dist/ai/reach.js +54 -0
- package/dist/ai/reach.js.map +1 -0
- package/dist/ai/report.d.ts +8 -0
- package/dist/ai/report.js +87 -0
- package/dist/ai/report.js.map +1 -0
- package/dist/ai/roles.d.ts +4 -0
- package/dist/ai/roles.js +207 -0
- package/dist/ai/roles.js.map +1 -0
- package/dist/ai/rules.d.ts +8 -2
- package/dist/ai/rules.js +416 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/ai/scouting.d.ts +6 -0
- package/dist/ai/scouting.js +324 -0
- package/dist/ai/scouting.js.map +1 -0
- package/dist/ai/settings.js +99 -0
- package/dist/ai/settings.js.map +1 -0
- package/dist/ai/squads.d.ts +21 -2
- package/dist/ai/squads.js +916 -0
- package/dist/ai/squads.js.map +1 -0
- package/dist/ai/strength.js +320 -0
- package/dist/ai/strength.js.map +1 -0
- package/dist/ai/task.d.ts +3 -1
- package/dist/ai/task.js +17 -0
- package/dist/ai/task.js.map +1 -0
- package/dist/ai/tasks/attack.js +24 -0
- package/dist/ai/tasks/attack.js.map +1 -0
- package/dist/ai/tasks/capture.d.ts +3 -3
- package/dist/ai/tasks/capture.js +37 -0
- package/dist/ai/tasks/capture.js.map +1 -0
- package/dist/ai/tasks/creep.js +29 -0
- package/dist/ai/tasks/creep.js.map +1 -0
- package/dist/ai/tasks/defend.js +61 -0
- package/dist/ai/tasks/defend.js.map +1 -0
- package/dist/ai/tasks/drop.js +81 -0
- package/dist/ai/tasks/drop.js.map +1 -0
- package/dist/ai/tasks/escort.js +59 -0
- package/dist/ai/tasks/escort.js.map +1 -0
- package/dist/ai/tasks/gather.js +48 -0
- package/dist/ai/tasks/gather.js.map +1 -0
- package/dist/ai/tasks/harass.js +39 -0
- package/dist/ai/tasks/harass.js.map +1 -0
- package/dist/ai/tasks/hold.js +32 -0
- package/dist/ai/tasks/hold.js.map +1 -0
- package/dist/ai/tasks/index.js +34 -0
- package/dist/ai/tasks/index.js.map +1 -0
- package/dist/ai/tasks/move.js +26 -0
- package/dist/ai/tasks/move.js.map +1 -0
- package/dist/ai/tasks/patrol.js +59 -0
- package/dist/ai/tasks/patrol.js.map +1 -0
- package/dist/ai/tasks/retreat.js +28 -0
- package/dist/ai/tasks/retreat.js.map +1 -0
- package/dist/ai/tasks/scout.js +73 -0
- package/dist/ai/tasks/scout.js.map +1 -0
- package/dist/ai/tasks/shared.d.ts +1 -1
- package/dist/ai/tasks/shared.js +137 -0
- package/dist/ai/tasks/shared.js.map +1 -0
- package/dist/ai/team.d.ts +18 -1
- package/dist/ai/team.js +492 -0
- package/dist/ai/team.js.map +1 -0
- package/dist/ai/threat.d.ts +6 -0
- package/dist/ai/threat.js +206 -0
- package/dist/ai/threat.js.map +1 -0
- package/dist/ai/view.d.ts +21 -7
- package/dist/ai/view.js +677 -0
- package/dist/ai/view.js.map +1 -0
- package/dist/ai/waves.d.ts +6 -0
- package/dist/ai/waves.js +410 -0
- package/dist/ai/waves.js.map +1 -0
- package/dist/ai.js +54 -6239
- package/dist/aiTesting.d.ts +6 -3
- package/dist/aiTesting.js +229 -0
- package/dist/aiTesting.js.map +1 -0
- package/dist/areas.d.ts +4 -1
- package/dist/areas.js +295 -0
- package/dist/areas.js.map +1 -0
- package/dist/attacks.d.ts +3 -3
- package/dist/attacks.js +127 -0
- package/dist/attacks.js.map +1 -0
- package/dist/burning.d.ts +267 -0
- package/dist/burning.js +795 -0
- package/dist/burning.js.map +1 -0
- package/dist/bytes.js +21 -0
- package/dist/bytes.js.map +1 -0
- package/dist/callings.d.ts +71 -0
- package/dist/callings.js +157 -0
- package/dist/callings.js.map +1 -0
- package/dist/cameraOrders.d.ts +78 -0
- package/dist/cameraOrders.js +114 -0
- package/dist/cameraOrders.js.map +1 -0
- package/dist/camps.d.ts +70 -4
- package/dist/camps.js +501 -0
- package/dist/camps.js.map +1 -0
- package/dist/capture.d.ts +15 -3
- package/dist/capture.js +304 -0
- package/dist/capture.js.map +1 -0
- package/dist/cellLayers.d.ts +78 -13
- package/dist/cellLayers.js +275 -0
- package/dist/cellLayers.js.map +1 -0
- package/dist/cellPatches.d.ts +24 -0
- package/dist/cellPatches.js +73 -0
- package/dist/cellPatches.js.map +1 -0
- package/dist/cinematics.d.ts +10 -5
- package/dist/cinematics.js +161 -0
- package/dist/cinematics.js.map +1 -0
- package/dist/clock.d.ts +2 -2
- package/dist/clock.js +78 -0
- package/dist/clock.js.map +1 -0
- package/dist/commands.d.ts +36 -4
- package/dist/commands.js +636 -0
- package/dist/commands.js.map +1 -0
- package/dist/components.d.ts +31 -10
- package/dist/components.js +74 -0
- package/dist/components.js.map +1 -0
- package/dist/computers.d.ts +4 -4
- package/dist/computers.js +194 -0
- package/dist/computers.js.map +1 -0
- package/dist/concealment.d.ts +25 -2
- package/dist/concealment.js +409 -0
- package/dist/concealment.js.map +1 -0
- package/dist/coreComponents.js +130 -0
- package/dist/coreComponents.js.map +1 -0
- package/dist/createGame.d.ts +306 -0
- package/dist/createGame.js +405 -0
- package/dist/createGame.js.map +1 -0
- package/dist/dashing.d.ts +18 -2
- package/dist/dashing.js +41 -0
- package/dist/dashing.js.map +1 -0
- package/dist/debug.d.ts +8 -0
- package/dist/debug.js +5 -3
- package/dist/debug2.js +76 -0
- package/dist/debug2.js.map +1 -0
- package/dist/debugCommands.d.ts +6 -6
- package/dist/debugCommands.js +537 -0
- package/dist/debugCommands.js.map +1 -0
- package/dist/debugging.d.ts +1 -0
- package/dist/defaultSets.d.ts +183 -0
- package/dist/defaultSets.js +216 -0
- package/dist/defaultSets.js.map +1 -0
- package/dist/definitions.d.ts +6 -0
- package/dist/definitions.js +78 -0
- package/dist/definitions.js.map +1 -0
- package/dist/defs.d.ts +1895 -165
- package/dist/defs.js +380 -0
- package/dist/defs.js.map +1 -0
- package/dist/denying.d.ts +4 -4
- package/dist/denying.js +106 -0
- package/dist/denying.js.map +1 -0
- package/dist/destructibles.d.ts +2 -2
- package/dist/destructibles.js +36 -0
- package/dist/destructibles.js.map +1 -0
- package/dist/determinism.d.ts +4 -4
- package/dist/determinism.js +247 -0
- package/dist/determinism.js.map +1 -0
- package/dist/dialog.d.ts +17 -2
- package/dist/dialog.js +108 -0
- package/dist/dialog.js.map +1 -0
- package/dist/effectRefs.js +28 -0
- package/dist/effectRefs.js.map +1 -0
- package/dist/effects.d.ts +27 -11
- package/dist/effects.js +110 -0
- package/dist/effects.js.map +1 -0
- package/dist/endings.d.ts +1 -1
- package/dist/endings.js +78 -0
- package/dist/endings.js.map +1 -0
- package/dist/engagement.d.ts +40 -6
- package/dist/engagement.js +530 -0
- package/dist/engagement.js.map +1 -0
- package/dist/engineEvents.d.ts +72 -9
- package/dist/engineEvents.js +520 -0
- package/dist/engineEvents.js.map +1 -0
- package/dist/entity.d.ts +275 -26
- package/dist/entity.js +441 -0
- package/dist/entity.js.map +1 -0
- package/dist/entityIndex.d.ts +10 -3
- package/dist/entityIndex.js +149 -0
- package/dist/entityIndex.js.map +1 -0
- package/dist/errors.d.ts +6 -2
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +11 -5
- package/dist/events.js +158 -0
- package/dist/events.js.map +1 -0
- package/dist/exactMath.js +273 -0
- package/dist/exactMath.js.map +1 -0
- package/dist/features.d.ts +1 -1
- package/dist/features.js +127 -0
- package/dist/features.js.map +1 -0
- package/dist/fields.d.ts +25 -5
- package/dist/fields.js +140 -0
- package/dist/fields.js.map +1 -0
- package/dist/fixture.d.ts +3 -3
- package/dist/fixture.js +512 -0
- package/dist/fixture.js.map +1 -0
- package/dist/fog.d.ts +26 -3
- package/dist/fog.js +333 -0
- package/dist/fog.js.map +1 -0
- package/dist/foliage.d.ts +476 -0
- package/dist/foliage.js +1478 -0
- package/dist/foliage.js.map +1 -0
- package/dist/foliageDebug.d.ts +57 -0
- package/dist/foliageDebug.js +172 -0
- package/dist/foliageDebug.js.map +1 -0
- package/dist/foliageRegrowth.d.ts +20 -0
- package/dist/foliageRegrowth.js +332 -0
- package/dist/foliageRegrowth.js.map +1 -0
- package/dist/formState.d.ts +67 -0
- package/dist/formState.js +65 -0
- package/dist/formState.js.map +1 -0
- package/dist/formation.d.ts +46 -8
- package/dist/formation.js +297 -0
- package/dist/formation.js.map +1 -0
- package/dist/forms.d.ts +58 -0
- package/dist/forms.js +146 -0
- package/dist/forms.js.map +1 -0
- package/dist/friendlyFire.d.ts +2 -2
- package/dist/friendlyFire.js +37 -0
- package/dist/friendlyFire.js.map +1 -0
- package/dist/game.d.ts +141 -48
- package/dist/game.js +834 -0
- package/dist/game.js.map +1 -0
- package/dist/gameData.d.ts +96 -22
- package/dist/gameData.js +1690 -0
- package/dist/gameData.js.map +1 -0
- package/dist/gameFiles.d.ts +3 -3
- package/dist/gameFiles.js +14 -0
- package/dist/gameFiles.js.map +1 -0
- package/dist/gates.js +92 -0
- package/dist/gates.js.map +1 -0
- package/dist/generate.d.ts +28 -1
- package/dist/generate.js +1062 -0
- package/dist/generate.js.map +1 -0
- package/dist/generateWorker.d.ts +7 -3
- package/dist/generateWorker.js +86 -0
- package/dist/generateWorker.js.map +1 -0
- package/dist/grid.d.ts +9 -0
- package/dist/grid.js +102 -0
- package/dist/grid.js.map +1 -0
- package/dist/ground.d.ts +17 -1
- package/dist/ground.js +375 -0
- package/dist/ground.js.map +1 -0
- package/dist/groundObjects.d.ts +70 -0
- package/dist/groundObjects.js +371 -0
- package/dist/groundObjects.js.map +1 -0
- package/dist/groundSpeed.d.ts +20 -3
- package/dist/groundSpeed.js +117 -0
- package/dist/groundSpeed.js.map +1 -0
- package/dist/hero.d.ts +126 -10
- package/dist/hero.js +432 -0
- package/dist/hero.js.map +1 -0
- package/dist/holds.d.ts +94 -0
- package/dist/holds.js +305 -0
- package/dist/holds.js.map +1 -0
- package/dist/home.d.ts +1 -1
- package/dist/home.js +30 -0
- package/dist/home.js.map +1 -0
- package/dist/hooks.d.ts +339 -57
- package/dist/hooks.js +105 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hotReload.d.ts +6 -5
- package/dist/hotReload.js +145 -0
- package/dist/hotReload.js.map +1 -0
- package/dist/ids.d.ts +3 -3
- package/dist/ids.js +30 -0
- package/dist/ids.js.map +1 -0
- package/dist/idsFile.d.ts +36 -0
- package/dist/idsFile.js +134 -0
- package/dist/idsFile.js.map +1 -0
- package/dist/index.d.ts +105 -68
- package/dist/index.js +194 -4701
- package/dist/inspect.d.ts +29 -2
- package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
- package/dist/inspect.js.map +1 -0
- package/dist/inventory.d.ts +14 -1
- package/dist/inventory.js +84 -0
- package/dist/inventory.js.map +1 -0
- package/dist/items.d.ts +136 -8
- package/dist/items.js +585 -0
- package/dist/items.js.map +1 -0
- package/dist/lanes.d.ts +12 -3
- package/dist/lanes.js +496 -0
- package/dist/lanes.js.map +1 -0
- package/dist/life.d.ts +6 -2
- package/dist/life.js +287 -0
- package/dist/life.js.map +1 -0
- package/dist/log.d.ts +26 -3
- package/dist/log.js +192 -0
- package/dist/log.js.map +1 -0
- package/dist/manaBurn.d.ts +2 -2
- package/dist/manaBurn.js +75 -0
- package/dist/manaBurn.js.map +1 -0
- package/dist/map/file.d.ts +56 -3
- package/dist/map/file.js +264 -0
- package/dist/map/file.js.map +1 -0
- package/dist/map/images.js +61 -0
- package/dist/map/images.js.map +1 -0
- package/dist/map/look.d.ts +1 -1
- package/dist/map/look.js +30 -0
- package/dist/map/look.js.map +1 -0
- package/dist/map/pathProfile.js +183 -0
- package/dist/map/pathProfile.js.map +1 -0
- package/dist/map/resize.d.ts +4 -0
- package/dist/map/resize.js +136 -0
- package/dist/map/resize.js.map +1 -0
- package/dist/map/schema.js +257 -0
- package/dist/map/schema.js.map +1 -0
- package/dist/map/terrain.js +214 -0
- package/dist/map/terrain.js.map +1 -0
- package/dist/map/types.d.ts +92 -13
- package/dist/map/types.js +251 -0
- package/dist/map/types.js.map +1 -0
- package/dist/mapCheck/cells.js +94 -0
- package/dist/mapCheck/cells.js.map +1 -0
- package/dist/mapCheck/rules/foliage.d.ts +9 -0
- package/dist/mapCheck/rules/foliage.js +83 -0
- package/dist/mapCheck/rules/foliage.js.map +1 -0
- package/dist/mapCheck/rules/names.js +39 -0
- package/dist/mapCheck/rules/names.js.map +1 -0
- package/dist/mapCheck/rules/objects.d.ts +1 -1
- package/dist/mapCheck/rules/objects.js +56 -0
- package/dist/mapCheck/rules/objects.js.map +1 -0
- package/dist/mapCheck/rules/paths.js +32 -0
- package/dist/mapCheck/rules/paths.js.map +1 -0
- package/dist/mapCheck/rules/players.js +20 -0
- package/dist/mapCheck/rules/players.js.map +1 -0
- package/dist/mapCheck/rules/races.js +56 -0
- package/dist/mapCheck/rules/races.js.map +1 -0
- package/dist/mapCheck/rules/random.js +47 -0
- package/dist/mapCheck/rules/random.js.map +1 -0
- package/dist/mapCheck/rules/regions.js +30 -0
- package/dist/mapCheck/rules/regions.js.map +1 -0
- package/dist/mapCheck/rules/targets.js +31 -0
- package/dist/mapCheck/rules/targets.js.map +1 -0
- package/dist/mapCheck/rules/walking.js +45 -0
- package/dist/mapCheck/rules/walking.js.map +1 -0
- package/dist/mapCheck.d.ts +2 -2
- package/dist/mapCheck.js +63 -0
- package/dist/mapCheck.js.map +1 -0
- package/dist/mapFields.d.ts +25 -2
- package/dist/mapFields.js +134 -0
- package/dist/mapFields.js.map +1 -0
- package/dist/mapFile.js +176 -0
- package/dist/mapFile.js.map +1 -0
- package/dist/mapMeasure.d.ts +8 -0
- package/dist/mapMeasure.js +283 -0
- package/dist/mapMeasure.js.map +1 -0
- package/dist/mapMerge.d.ts +1 -0
- package/dist/mapMerge.js +172 -0
- package/dist/mapMerge.js.map +1 -0
- package/dist/mapObjectives.js +138 -0
- package/dist/mapObjectives.js.map +1 -0
- package/dist/mapObjects.js +80 -0
- package/dist/mapObjects.js.map +1 -0
- package/dist/math.d.ts +37 -7
- package/dist/math.js +155 -0
- package/dist/math.js.map +1 -0
- package/dist/messages.d.ts +71 -4
- package/dist/messages.js +29 -0
- package/dist/messages.js.map +1 -0
- package/dist/missionRules.d.ts +10 -2
- package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
- package/dist/missionRules.js.map +1 -0
- package/dist/mods.d.ts +39 -20
- package/dist/mods.js +271 -0
- package/dist/mods.js.map +1 -0
- package/dist/moves.d.ts +87 -0
- package/dist/moves.js +539 -0
- package/dist/moves.js.map +1 -0
- package/dist/names.d.ts +7 -0
- package/dist/names.js +122 -0
- package/dist/names.js.map +1 -0
- package/dist/navigation/agentParams.js +14 -0
- package/dist/navigation/agentParams.js.map +1 -0
- package/dist/navigation/air.d.ts +7 -3
- package/dist/navigation/air.js +401 -0
- package/dist/navigation/air.js.map +1 -0
- package/dist/navigation/builds.d.ts +34 -2
- package/dist/navigation/builds.js +287 -0
- package/dist/navigation/builds.js.map +1 -0
- package/dist/navigation/groundAreas.d.ts +59 -1
- package/dist/navigation/groundAreas.js +407 -0
- package/dist/navigation/groundAreas.js.map +1 -0
- package/dist/navigation/navigation.d.ts +98 -9
- package/dist/navigation/recast.d.ts +194 -18
- package/dist/navigation/recast.js +1379 -0
- package/dist/navigation/recast.js.map +1 -0
- package/dist/navigation/sidePaths.d.ts +8 -3
- package/dist/navigation/sidePaths.js +241 -0
- package/dist/navigation/sidePaths.js.map +1 -0
- package/dist/navigation/sized.js +243 -0
- package/dist/navigation/sized.js.map +1 -0
- package/dist/nearest.js +32 -0
- package/dist/nearest.js.map +1 -0
- package/dist/noise.js +59 -0
- package/dist/noise.js.map +1 -0
- package/dist/objectives.d.ts +12 -3
- package/dist/objectives.js +144 -0
- package/dist/objectives.js.map +1 -0
- package/dist/orders/basic.d.ts +5 -5
- package/dist/orders/basic.js +417 -0
- package/dist/orders/basic.js.map +1 -0
- package/dist/orders/build.js +278 -0
- package/dist/orders/build.js.map +1 -0
- package/dist/orders/cast.d.ts +13 -3
- package/dist/orders/cast.js +558 -0
- package/dist/orders/cast.js.map +1 -0
- package/dist/orders/facts.js +16 -0
- package/dist/orders/facts.js.map +1 -0
- package/dist/orders/harvest.d.ts +21 -5
- package/dist/orders/harvest.js +540 -0
- package/dist/orders/harvest.js.map +1 -0
- package/dist/orders/idle.d.ts +3 -1
- package/dist/orders/idle.js +234 -0
- package/dist/orders/idle.js.map +1 -0
- package/dist/orders/items.js +92 -0
- package/dist/orders/items.js.map +1 -0
- package/dist/orders/queue.js +108 -0
- package/dist/orders/queue.js.map +1 -0
- package/dist/orders/waiting.d.ts +39 -0
- package/dist/orders/waiting.js +149 -0
- package/dist/orders/waiting.js.map +1 -0
- package/dist/pack.schema.js +13 -0
- package/dist/pack.schema.js.map +1 -0
- package/dist/pack.schema.json +7622 -841
- package/dist/packs/director/index.d.ts +13 -5
- package/dist/packs/director/index.js +204 -0
- package/dist/packs/director/index.js.map +1 -0
- package/dist/packs/heroes/campaign.d.ts +3 -2
- package/dist/packs/heroes/campaign.js +241 -0
- package/dist/packs/heroes/campaign.js.map +1 -0
- package/dist/packs/heroes/carry.d.ts +6 -0
- package/dist/packs/heroes/carry.js +112 -0
- package/dist/packs/heroes/carry.js.map +1 -0
- package/dist/packs/heroes/commands.js +115 -0
- package/dist/packs/heroes/commands.js.map +1 -0
- package/dist/packs/heroes/fallen.d.ts +43 -0
- package/dist/packs/heroes/fallen.js +61 -0
- package/dist/packs/heroes/fallen.js.map +1 -0
- package/dist/packs/heroes/hire.js +60 -0
- package/dist/packs/heroes/hire.js.map +1 -0
- package/dist/packs/heroes/index.d.ts +7 -6
- package/dist/packs/heroes/index.js +130 -0
- package/dist/packs/heroes/index.js.map +1 -0
- package/dist/packs/heroes/loop.d.ts +95 -0
- package/dist/packs/heroes/loop.js +250 -0
- package/dist/packs/heroes/loop.js.map +1 -0
- package/dist/packs/heroes/making.d.ts +6 -3
- package/dist/packs/heroes/making.js +55 -0
- package/dist/packs/heroes/making.js.map +1 -0
- package/dist/packs/heroes/respawn.d.ts +3 -3
- package/dist/packs/heroes/respawn.js +87 -0
- package/dist/packs/heroes/respawn.js.map +1 -0
- package/dist/packs/heroes/sets.d.ts +32 -0
- package/dist/packs/heroes/sets.js +51 -0
- package/dist/packs/heroes/sets.js.map +1 -0
- package/dist/packs/heroes/spells.d.ts +16 -0
- package/dist/packs/heroes/spells.js +269 -0
- package/dist/packs/heroes/spells.js.map +1 -0
- package/dist/packs/items/defaults.d.ts +43 -0
- package/dist/packs/items/defaults.js +1504 -0
- package/dist/packs/items/defaults.js.map +1 -0
- package/dist/packs/items/index.d.ts +27 -0
- package/dist/packs/items/index.js +214 -0
- package/dist/packs/items/index.js.map +1 -0
- package/dist/packs/moba/index.d.ts +3 -3
- package/dist/packs/moba/index.js +174 -0
- package/dist/packs/moba/index.js.map +1 -0
- package/dist/packs/pack.d.ts +15 -15
- package/dist/packs/pack.js +14 -0
- package/dist/packs/pack.js.map +1 -0
- package/dist/packs.d.ts +15 -7
- package/dist/packs.js +222 -0
- package/dist/packs.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +109 -0
- package/dist/paths.js.map +1 -0
- package/dist/plain.js +57 -0
- package/dist/plain.js.map +1 -0
- package/dist/player.d.ts +33 -10
- package/dist/player.js +159 -0
- package/dist/player.js.map +1 -0
- package/dist/portals.d.ts +1 -1
- package/dist/portals.js +194 -0
- package/dist/portals.js.map +1 -0
- package/dist/prefabs.d.ts +25 -2
- package/dist/prefabs.js +239 -0
- package/dist/prefabs.js.map +1 -0
- package/dist/presetBuildings.js +58 -0
- package/dist/presetBuildings.js.map +1 -0
- package/dist/presetFoliage.d.ts +27 -0
- package/dist/presetFoliage.js +98 -0
- package/dist/presetFoliage.js.map +1 -0
- package/dist/presetGround.js +65 -0
- package/dist/presetGround.js.map +1 -0
- package/dist/proxies.d.ts +12 -0
- package/dist/proxies.js +79 -0
- package/dist/proxies.js.map +1 -0
- package/dist/query.d.ts +56 -0
- package/dist/query.js +88 -0
- package/dist/query.js.map +1 -0
- package/dist/races.d.ts +15 -14
- package/dist/races.js +172 -0
- package/dist/races.js.map +1 -0
- package/dist/randomGroups.js +91 -0
- package/dist/randomGroups.js.map +1 -0
- package/dist/registry.d.ts +117 -53
- package/dist/registry.js +323 -0
- package/dist/registry.js.map +1 -0
- package/dist/remains.d.ts +11 -9
- package/dist/remains.js +188 -0
- package/dist/remains.js.map +1 -0
- package/dist/replication.d.ts +12 -7
- package/dist/replication.js +100 -0
- package/dist/replication.js.map +1 -0
- package/dist/rng.d.ts +2 -0
- package/dist/rng.js +40 -0
- package/dist/rng.js.map +1 -0
- package/dist/rules.d.ts +186 -99
- package/dist/rules.js +179 -0
- package/dist/rules.js.map +1 -0
- package/dist/rulesCheck.d.ts +5 -4
- package/dist/rulesCheck.js +693 -0
- package/dist/rulesCheck.js.map +1 -0
- package/dist/runes.d.ts +2 -2
- package/dist/runes.js +80 -0
- package/dist/runes.js.map +1 -0
- package/dist/save.d.ts +37 -12
- package/dist/save.js +532 -0
- package/dist/save.js.map +1 -0
- package/dist/scenario.d.ts +2 -2
- package/dist/scenario.js +99 -0
- package/dist/scenario.js.map +1 -0
- package/dist/scheduler.d.ts +3 -0
- package/dist/scheduler.js +156 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/score.d.ts +19 -19
- package/dist/score.js +709 -0
- package/dist/score.js.map +1 -0
- package/dist/sequences.d.ts +10 -6
- package/dist/sequences.js +206 -0
- package/dist/sequences.js.map +1 -0
- package/dist/server/doorman.js +154 -0
- package/dist/server/doorman.js.map +1 -0
- package/dist/server/gameServer.d.ts +16 -1
- package/dist/server/gameServer.js +643 -0
- package/dist/server/gameServer.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/lobby.js +199 -0
- package/dist/server/lobby.js.map +1 -0
- package/dist/server/log.js +18 -0
- package/dist/server/log.js.map +1 -0
- package/dist/server/match.js +267 -0
- package/dist/server/match.js.map +1 -0
- package/dist/server/mode.d.ts +18 -9
- package/dist/server/mode.js +220 -0
- package/dist/server/mode.js.map +1 -0
- package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
- package/dist/server/navigation-worker.js.map +1 -0
- package/dist/server/navigation.js +39 -0
- package/dist/server/navigation.js.map +1 -0
- package/dist/server/ops.d.ts +4 -0
- package/dist/server/ops.js +137 -0
- package/dist/server/ops.js.map +1 -0
- package/dist/server/packs.d.ts +3 -3
- package/dist/server/packs.js +32 -0
- package/dist/server/packs.js.map +1 -0
- package/dist/server/ratings.d.ts +5 -0
- package/dist/server/ratings.js +104 -0
- package/dist/server/ratings.js.map +1 -0
- package/dist/server/relay.d.ts +12 -2
- package/dist/server/relay.js +144 -0
- package/dist/server/relay.js.map +1 -0
- package/dist/server/rooms.d.ts +9 -2
- package/dist/server/rooms.js +442 -0
- package/dist/server/rooms.js.map +1 -0
- package/dist/server/seat.js +116 -0
- package/dist/server/seat.js.map +1 -0
- package/dist/server/seatSettings.d.ts +3 -3
- package/dist/server/seatSettings.js +63 -0
- package/dist/server/seatSettings.js.map +1 -0
- package/dist/server/secret.js +13 -0
- package/dist/server/secret.js.map +1 -0
- package/dist/server/start.d.ts +13 -6
- package/dist/server/start.js +76 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/websocket.d.ts +9 -1
- package/dist/server/websocket.js +306 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/server.js +15 -2861
- package/dist/session/can.js +26 -0
- package/dist/session/can.js.map +1 -0
- package/dist/session/commandReplay.d.ts +8 -2
- package/dist/session/commandReplay.js +293 -0
- package/dist/session/commandReplay.js.map +1 -0
- package/dist/session/debug.js +151 -0
- package/dist/session/debug.js.map +1 -0
- package/dist/session/delay.js +62 -0
- package/dist/session/delay.js.map +1 -0
- package/dist/session/delta.d.ts +14 -1
- package/dist/session/delta.js +407 -0
- package/dist/session/delta.js.map +1 -0
- package/dist/session/entityState.js +415 -0
- package/dist/session/entityState.js.map +1 -0
- package/dist/session/local.d.ts +47 -5
- package/dist/session/local.js +670 -0
- package/dist/session/local.js.map +1 -0
- package/dist/session/memory.d.ts +20 -2
- package/dist/session/memory.js +131 -0
- package/dist/session/memory.js.map +1 -0
- package/dist/session/protocol.d.ts +325 -31
- package/dist/session/protocol.js +55 -0
- package/dist/session/protocol.js.map +1 -0
- package/dist/session/remote.d.ts +74 -12
- package/dist/session/remote.js +1394 -0
- package/dist/session/remote.js.map +1 -0
- package/dist/session/replay.d.ts +11 -2
- package/dist/session/replay.js +160 -0
- package/dist/session/replay.js.map +1 -0
- package/dist/session/seed.js +12 -0
- package/dist/session/seed.js.map +1 -0
- package/dist/session/share.d.ts +5 -1
- package/dist/session/share.js +94 -0
- package/dist/session/share.js.map +1 -0
- package/dist/session/socket.d.ts +1 -1
- package/dist/session/socket.js +29 -0
- package/dist/session/socket.js.map +1 -0
- package/dist/session/wire.d.ts +5 -0
- package/dist/session/wire.js +84 -0
- package/dist/session/wire.js.map +1 -0
- package/dist/session/worker.d.ts +77 -12
- package/dist/session/worker.js +499 -0
- package/dist/session/worker.js.map +1 -0
- package/dist/shared.d.ts +31 -5
- package/dist/shared.js +166 -0
- package/dist/shared.js.map +1 -0
- package/dist/sides.d.ts +9 -3
- package/dist/sides.js +149 -0
- package/dist/sides.js.map +1 -0
- package/dist/sight.js +85 -0
- package/dist/sight.js.map +1 -0
- package/dist/simulate-worker.js +1 -1
- package/dist/simulate.d.ts +12 -8
- package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
- package/dist/simulate.js.map +1 -0
- package/dist/smart.js +77 -0
- package/dist/smart.js.map +1 -0
- package/dist/spatial.d.ts +32 -16
- package/dist/spatial.js +234 -0
- package/dist/spatial.js.map +1 -0
- package/dist/spawning.d.ts +1 -0
- package/dist/spawning.js +224 -0
- package/dist/spawning.js.map +1 -0
- package/dist/stances.d.ts +6 -3
- package/dist/stances.js +169 -0
- package/dist/stances.js.map +1 -0
- package/dist/start.d.ts +10 -10
- package/dist/start.js +75 -0
- package/dist/start.js.map +1 -0
- package/dist/stats.d.ts +42 -16
- package/dist/stats.js +290 -0
- package/dist/stats.js.map +1 -0
- package/dist/summoned.d.ts +52 -0
- package/dist/summoned.js +38 -0
- package/dist/summoned.js.map +1 -0
- package/dist/summons.d.ts +10 -13
- package/dist/summons.js +271 -0
- package/dist/summons.js.map +1 -0
- package/dist/systems/abilities.js +224 -0
- package/dist/systems/abilities.js.map +1 -0
- package/dist/systems/combat.d.ts +35 -1
- package/dist/systems/combat.js +677 -0
- package/dist/systems/combat.js.map +1 -0
- package/dist/systems/combatTold.d.ts +3 -1
- package/dist/systems/combatTold.js +85 -0
- package/dist/systems/combatTold.js.map +1 -0
- package/dist/systems/construction.js +80 -0
- package/dist/systems/construction.js.map +1 -0
- package/dist/systems/economy.d.ts +0 -6
- package/dist/systems/economy.js +128 -0
- package/dist/systems/economy.js.map +1 -0
- package/dist/systems/fog.d.ts +1 -1
- package/dist/systems/fog.js +120 -0
- package/dist/systems/fog.js.map +1 -0
- package/dist/systems/life.js +32 -0
- package/dist/systems/life.js.map +1 -0
- package/dist/systems/movement.d.ts +24 -12
- package/dist/systems/movement.js +1247 -0
- package/dist/systems/movement.js.map +1 -0
- package/dist/systems/orders.js +64 -0
- package/dist/systems/orders.js.map +1 -0
- package/dist/systems/production.js +322 -0
- package/dist/systems/production.js.map +1 -0
- package/dist/systems/productionQueue.js +120 -0
- package/dist/systems/productionQueue.js.map +1 -0
- package/dist/systems/victory.d.ts +1 -1
- package/dist/systems/victory.js +56 -0
- package/dist/systems/victory.js.map +1 -0
- package/dist/talk.d.ts +6 -6
- package/dist/talk.js +153 -0
- package/dist/talk.js.map +1 -0
- package/dist/targeting.d.ts +142 -0
- package/dist/targeting.js +49 -0
- package/dist/targeting.js.map +1 -0
- package/dist/tech.d.ts +20 -3
- package/dist/tech.js +239 -0
- package/dist/tech.js.map +1 -0
- package/dist/techTree.d.ts +7 -0
- package/dist/techTree.js +90 -0
- package/dist/techTree.js.map +1 -0
- package/dist/terrain.d.ts +59 -7
- package/dist/terrain.js +389 -0
- package/dist/terrain.js.map +1 -0
- package/dist/terrainSave.d.ts +6 -0
- package/dist/terrainSave.js +74 -0
- package/dist/terrainSave.js.map +1 -0
- package/dist/testing.d.ts +8 -7
- package/dist/testing.js +13 -739
- package/dist/testing.js.map +1 -1
- package/dist/tiles.d.ts +1 -1
- package/dist/tiles.js +43 -0
- package/dist/tiles.js.map +1 -0
- package/dist/timers.d.ts +29 -4
- package/dist/timers.js +242 -0
- package/dist/timers.js.map +1 -0
- package/dist/tomes.d.ts +4 -4
- package/dist/tomes.js +94 -0
- package/dist/tomes.js.map +1 -0
- package/dist/trade.js +103 -0
- package/dist/trade.js.map +1 -0
- package/dist/transport.d.ts +6 -1
- package/dist/transport.js +281 -0
- package/dist/transport.js.map +1 -0
- package/dist/tunables.d.ts +10 -3
- package/dist/tunables.js +56 -0
- package/dist/tunables.js.map +1 -0
- package/dist/unitResources.d.ts +67 -0
- package/dist/unitResources.js +266 -0
- package/dist/unitResources.js.map +1 -0
- package/dist/upkeep.d.ts +6 -1
- package/dist/upkeep.js +26 -0
- package/dist/upkeep.js.map +1 -0
- package/dist/veterancy.d.ts +8 -3
- package/dist/veterancy.js +131 -0
- package/dist/veterancy.js.map +1 -0
- package/dist/vision.d.ts +36 -0
- package/dist/vision.js +133 -0
- package/dist/vision.js.map +1 -0
- package/dist/walls.d.ts +1 -1
- package/dist/walls.js +278 -0
- package/dist/walls.js.map +1 -0
- package/dist/world.d.ts +606 -88
- package/dist/world.js +1263 -0
- package/dist/world.js.map +1 -0
- package/package.json +2 -2
- package/dist/ai.js.map +0 -1
- package/dist/attributes.d.ts +0 -66
- package/dist/brain-BvVdUhX8.js +0 -7659
- package/dist/brain-BvVdUhX8.js.map +0 -1
- package/dist/builds-C6LfgvEU.js +0 -460
- package/dist/builds-C6LfgvEU.js.map +0 -1
- package/dist/coreComponents-syuh2fPG.js +0 -5149
- package/dist/coreComponents-syuh2fPG.js.map +0 -1
- package/dist/debugCommands-CzjrSm66.js +0 -14739
- package/dist/debugCommands-CzjrSm66.js.map +0 -1
- package/dist/determinism-BCymQwiE.js +0 -518
- package/dist/determinism-BCymQwiE.js.map +0 -1
- package/dist/game-DiJEN-Ks.js +0 -5800
- package/dist/game-DiJEN-Ks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/inspect-D9dWHmZ0.js.map +0 -1
- package/dist/local-Dkovq42k.js +0 -1379
- package/dist/local-Dkovq42k.js.map +0 -1
- package/dist/missionRules-C-bGxm0Q.js.map +0 -1
- package/dist/navigation-worker.js.map +0 -1
- package/dist/packs-g5thvmGn.js +0 -3199
- package/dist/packs-g5thvmGn.js.map +0 -1
- package/dist/profiles-B3NS9jwk.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/simulate-oXBiw1Ff.js.map +0 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { closestPointOnRect, distToRect } from "../math.js";
|
|
2
|
+
import { constructionOf, footprintOf } from "../defs.js";
|
|
3
|
+
import { constructionFinished, worked } from "../engineEvents.js";
|
|
4
|
+
import { constructionSite, underConstruction } from "../systems/construction.js";
|
|
5
|
+
import { deposit, edgeDistance, moving } from "../entity.js";
|
|
6
|
+
import { shortOf, spend } from "../player.js";
|
|
7
|
+
import { engineMessage } from "../messages.js";
|
|
8
|
+
import { faceTowards, halt, moveTo, moveToEntity, setAnchored, setGhost, walkOn } from "../systems/movement.js";
|
|
9
|
+
import { footprintCell } from "../grid.js";
|
|
10
|
+
import { unlocked } from "../tech.js";
|
|
11
|
+
import { startProducing } from "../systems/production.js";
|
|
12
|
+
//#region src/orders/build.ts
|
|
13
|
+
/** Edge distance from which a worker can work on a building */
|
|
14
|
+
var WORK_RANGE = .8;
|
|
15
|
+
/** A builder that cannot get any closer than this because of units in the way starts building anyway */
|
|
16
|
+
var CROWDED_RANGE = 3;
|
|
17
|
+
/**
|
|
18
|
+
* Ground a structure of this type covers when placed at `point`
|
|
19
|
+
*
|
|
20
|
+
* @beta
|
|
21
|
+
*/
|
|
22
|
+
function siteOf(def, point) {
|
|
23
|
+
const fp = footprintOf(def);
|
|
24
|
+
const cell = footprintCell(point.x, point.z, fp.w, fp.d);
|
|
25
|
+
return {
|
|
26
|
+
x: cell.x + fp.w / 2,
|
|
27
|
+
z: cell.z + fp.d / 2,
|
|
28
|
+
hw: fp.w / 2,
|
|
29
|
+
hd: fp.d / 2,
|
|
30
|
+
cellX: cell.x,
|
|
31
|
+
cellZ: cell.z
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Why this structure cannot be placed here right now, or undefined when it can. The ground has to be free,
|
|
36
|
+
* then the `canPlace` hook has its say. With `fog`, ground the player has never seen counts as taken too:
|
|
37
|
+
* that is for the player's own preview, which must not give away what is in the dark
|
|
38
|
+
*
|
|
39
|
+
* @beta
|
|
40
|
+
*/
|
|
41
|
+
function placementProblem(world, def, point, player, fog = false) {
|
|
42
|
+
const fp = footprintOf(def);
|
|
43
|
+
const site = siteOf(def, point);
|
|
44
|
+
if (def.builtOn !== void 0) {
|
|
45
|
+
const source = resourceAt(world, def, point);
|
|
46
|
+
if (!source) return engineMessage("buildOnResource", { resource: def.builtOn });
|
|
47
|
+
if (world.get(source.get(deposit).under)?.alive) return engineMessage("cannotBuildThere");
|
|
48
|
+
} else if (!world.grid.canPlace(site.cellX, site.cellZ, fp.w, fp.d)) return engineMessage("cannotBuildThere");
|
|
49
|
+
if (def.kind === "building" && world.nav.obstacleRoom() <= 0) return engineMessage("tooManyBuildings");
|
|
50
|
+
if (fog && player !== void 0) {
|
|
51
|
+
const { team } = world.player(player);
|
|
52
|
+
if (!(world.fog.isExplored(team, site.x - site.hw + .5, site.z - site.hd + .5) && world.fog.isExplored(team, site.x + site.hw - .5, site.z - site.hd + .5) && world.fog.isExplored(team, site.x - site.hw + .5, site.z + site.hd - .5) && world.fog.isExplored(team, site.x + site.hw - .5, site.z + site.hd - .5))) return engineMessage("cannotBuildThere");
|
|
53
|
+
}
|
|
54
|
+
if (!world.hooks.has("canPlace")) return void 0;
|
|
55
|
+
const event = world.hooks.run("canPlace", {
|
|
56
|
+
def,
|
|
57
|
+
site,
|
|
58
|
+
player,
|
|
59
|
+
cancelled: false
|
|
60
|
+
});
|
|
61
|
+
return event.cancelled ? event.reason ?? engineMessage("cannotBuildThere") : void 0;
|
|
62
|
+
}
|
|
63
|
+
var near = [];
|
|
64
|
+
/**
|
|
65
|
+
* The resource a building that goes up on one (`UnitTypeDef.builtOn`) would stand on when placed at `point`: one of its
|
|
66
|
+
* kind that covers the very same ground. None where there is none
|
|
67
|
+
*
|
|
68
|
+
* @beta
|
|
69
|
+
*/
|
|
70
|
+
function resourceAt(world, def, point) {
|
|
71
|
+
if (def.builtOn === void 0) return void 0;
|
|
72
|
+
const site = siteOf(def, point);
|
|
73
|
+
for (const other of world.spatial.query(site.x, site.z, Math.max(site.hw, site.hd) + 1, near)) {
|
|
74
|
+
if (!other.alive || other.def.resource?.id !== def.builtOn || !other.cell) continue;
|
|
75
|
+
const fp = footprintOf(other.def);
|
|
76
|
+
if (other.cell.x === site.cellX && other.cell.z === site.cellZ && fp.w === site.hw * 2 && fp.d === site.hd * 2) return other;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Which cells of the ground a structure would cover at `point` are in the way, row by row from its corner (`w` across,
|
|
81
|
+
* `d` rows: `siteOf`'s cell first): taken (`free` says no), or not explored (`explored` says no, where it is asked).
|
|
82
|
+
* What a preview draws cell by cell (RV88); `placementProblem` says the whole, the game's own say among it. None for a
|
|
83
|
+
* structure built on a resource, whose ground is the resource's
|
|
84
|
+
*
|
|
85
|
+
* @beta
|
|
86
|
+
*/
|
|
87
|
+
function placementCells(def, point, free, explored) {
|
|
88
|
+
if (def.builtOn !== void 0) return void 0;
|
|
89
|
+
const { w, d } = footprintOf(def);
|
|
90
|
+
const { cellX, cellZ } = siteOf(def, point);
|
|
91
|
+
const blocked = [];
|
|
92
|
+
for (let z = cellZ; z < cellZ + d; z++) for (let x = cellX; x < cellX + w; x++) blocked.push(!free(x, z) || !!explored && !explored(x, z));
|
|
93
|
+
return blocked;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Whether this structure can be placed here right now, see `placementProblem`
|
|
97
|
+
*
|
|
98
|
+
* @beta
|
|
99
|
+
*/
|
|
100
|
+
function canPlaceStructure(world, def, point, player, fog = false) {
|
|
101
|
+
return placementProblem(world, def, point, player, fog) === void 0;
|
|
102
|
+
}
|
|
103
|
+
var inside = [];
|
|
104
|
+
/** Moves units standing on a construction site out of the way */
|
|
105
|
+
function clearSite(world, site) {
|
|
106
|
+
world.spatial.query(site.x, site.z, Math.max(site.hw, site.hd) * 1.5 + 1, inside);
|
|
107
|
+
for (const unit of inside) {
|
|
108
|
+
if (!unit.get(moving) || unit.hidden || unit.flying) continue;
|
|
109
|
+
if (distToRect(unit.pos, site) >= unit.def.radius) continue;
|
|
110
|
+
const outside = closestPointOnRect(unit.pos, site, unit.def.radius + .3);
|
|
111
|
+
const point = world.nav.closestPoint(outside, 6) ?? outside;
|
|
112
|
+
world.place(unit, point);
|
|
113
|
+
walkOn(world, unit);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function workOn(world, entity, building, state, dt) {
|
|
117
|
+
const site = building && underConstruction(building);
|
|
118
|
+
if (!site) return "done";
|
|
119
|
+
if (edgeDistance(entity, building) > WORK_RANGE) {
|
|
120
|
+
moveToEntity(world, entity, building, WORK_RANGE * .5);
|
|
121
|
+
return "running";
|
|
122
|
+
}
|
|
123
|
+
if (entity.get(moving).status === "moving") halt(world, entity);
|
|
124
|
+
setAnchored(world, entity, true);
|
|
125
|
+
faceTowards(world, entity, building.pos, dt);
|
|
126
|
+
site.builders++;
|
|
127
|
+
const hammer = (state.hammer ?? HAMMER_INTERVAL * .5) - dt;
|
|
128
|
+
if (hammer <= 0) world.events.emit(worked, {
|
|
129
|
+
worker: entity,
|
|
130
|
+
target: building
|
|
131
|
+
});
|
|
132
|
+
state.hammer = hammer <= 0 ? hammer + HAMMER_INTERVAL : hammer;
|
|
133
|
+
return "running";
|
|
134
|
+
}
|
|
135
|
+
/** Whether the ground lets a builder get within work of a site from where it is, its own side of it: units are not asked, and one that flies needs none */
|
|
136
|
+
function canWalkTo(world, entity, site) {
|
|
137
|
+
if (entity.flying) return true;
|
|
138
|
+
const way = world.nav.findPath(entity.pos, closestPointOnRect(entity.pos, site, entity.def.radius + .15));
|
|
139
|
+
return !!way && distToRect(way[way.length - 1], site) - entity.def.radius <= WORK_RANGE;
|
|
140
|
+
}
|
|
141
|
+
var buildOrder = {
|
|
142
|
+
type: "build",
|
|
143
|
+
building: (order) => !!order.state.building,
|
|
144
|
+
accepts(world, entity, init) {
|
|
145
|
+
return !!init.point && !!init.unitType && !!entity.def.builds?.includes(init.unitType) && world.registry.units.has(init.unitType);
|
|
146
|
+
},
|
|
147
|
+
update(world, entity, order, dt) {
|
|
148
|
+
const { state } = order;
|
|
149
|
+
if (state.building) return workOn(world, entity, world.get(state.building), state, dt);
|
|
150
|
+
const def = world.registry.unit(order.init.unitType);
|
|
151
|
+
const site = siteOf(def, order.init.point);
|
|
152
|
+
const m = entity.get(moving);
|
|
153
|
+
const gap = distToRect(entity.pos, site) - entity.def.radius;
|
|
154
|
+
if (gap > WORK_RANGE) {
|
|
155
|
+
if (m.status === "moving") return "running";
|
|
156
|
+
if (!(state.walked && gap <= CROWDED_RANGE && canWalkTo(world, entity, site))) {
|
|
157
|
+
if (state.walked && (m.status === "failed" || m.status === "arrived")) {
|
|
158
|
+
if (!state.ghost) {
|
|
159
|
+
state.ghost = true;
|
|
160
|
+
setGhost(world, entity, true);
|
|
161
|
+
moveTo(world, entity, closestPointOnRect(entity.pos, site, entity.def.radius + .15), { range: .3 });
|
|
162
|
+
return "running";
|
|
163
|
+
}
|
|
164
|
+
world.message(entity.owner, engineMessage("cannotReachSite"));
|
|
165
|
+
return "failed";
|
|
166
|
+
}
|
|
167
|
+
state.walked = true;
|
|
168
|
+
moveTo(world, entity, closestPointOnRect(entity.pos, site, entity.def.radius + .15), { range: .3 });
|
|
169
|
+
return "running";
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (state.ghost) setGhost(world, entity, false);
|
|
173
|
+
if (!unlocked(world, entity.owner, "unit", def.id, def.requires)) return "failed";
|
|
174
|
+
const problem = placementProblem(world, def, order.init.point, entity.owner);
|
|
175
|
+
if (problem) {
|
|
176
|
+
world.message(entity.owner, problem);
|
|
177
|
+
return "failed";
|
|
178
|
+
}
|
|
179
|
+
const made = startProducing(world, entity, "structure", def.id, def.cost, def.buildTime ?? 1);
|
|
180
|
+
if (!made) return "failed";
|
|
181
|
+
halt(world, entity);
|
|
182
|
+
clearSite(world, site);
|
|
183
|
+
const how = constructionOf(def);
|
|
184
|
+
const building = world.spawn(def.id, entity.owner, order.init.point, how === "instant" ? {} : { underConstruction: {
|
|
185
|
+
buildTime: made.time,
|
|
186
|
+
paid: made.cost
|
|
187
|
+
} });
|
|
188
|
+
state.building = building.id;
|
|
189
|
+
if (how === "instant") world.events.emit(constructionFinished, building);
|
|
190
|
+
return how === "builder" ? "running" : "done";
|
|
191
|
+
},
|
|
192
|
+
end(world, entity, order) {
|
|
193
|
+
setAnchored(world, entity, false);
|
|
194
|
+
if (order.state.ghost) setGhost(world, entity, false);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
/** Work on an existing construction site: resuming an abandoned one or helping another builder */
|
|
198
|
+
var constructOrder = {
|
|
199
|
+
type: "construct",
|
|
200
|
+
accepts(world, entity, init) {
|
|
201
|
+
const target = world.get(init.target);
|
|
202
|
+
return !!entity.def.builds?.length && !!target?.has(constructionSite) && constructionOf(target.def) === "builder" && world.areAllies(entity.owner, target.owner);
|
|
203
|
+
},
|
|
204
|
+
update(world, entity, order, dt) {
|
|
205
|
+
return workOn(world, entity, world.get(order.init.target), order.state, dt);
|
|
206
|
+
},
|
|
207
|
+
end(world, entity) {
|
|
208
|
+
setAnchored(world, entity, false);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
/** Mending a building from nothing takes this much longer than building it did */
|
|
212
|
+
var REPAIR_TIME = 1.5;
|
|
213
|
+
/** Seconds between two blows of the hammer */
|
|
214
|
+
var HAMMER_INTERVAL = 1;
|
|
215
|
+
/**
|
|
216
|
+
* Whether a worker of the player could mend it
|
|
217
|
+
*
|
|
218
|
+
* @beta
|
|
219
|
+
*/
|
|
220
|
+
function canRepair(world, player, target) {
|
|
221
|
+
return target.isBuilding && target.operational && target.health < target.maxHealth && world.areAllies(player, target.owner);
|
|
222
|
+
}
|
|
223
|
+
/** Mend a damaged building. It is paid for as the work goes on */
|
|
224
|
+
var repairOrder = {
|
|
225
|
+
type: "repair",
|
|
226
|
+
accepts(world, entity, init) {
|
|
227
|
+
const target = world.get(init.target);
|
|
228
|
+
return !!entity.def.builds?.length && !!entity.get(moving) && !!target && canRepair(world, entity.owner, target);
|
|
229
|
+
},
|
|
230
|
+
update(world, entity, order, dt) {
|
|
231
|
+
const { state } = order;
|
|
232
|
+
const target = world.get(order.init.target);
|
|
233
|
+
if (!target || !canRepair(world, entity.owner, target)) return "done";
|
|
234
|
+
if (edgeDistance(entity, target) > WORK_RANGE) {
|
|
235
|
+
if (entity.get(moving).status === "failed" && state.walked) return "failed";
|
|
236
|
+
state.walked = true;
|
|
237
|
+
moveToEntity(world, entity, target, WORK_RANGE * .5);
|
|
238
|
+
return "running";
|
|
239
|
+
}
|
|
240
|
+
if (entity.get(moving).status === "moving") halt(world, entity);
|
|
241
|
+
setAnchored(world, entity, true);
|
|
242
|
+
faceTowards(world, entity, target.pos, dt);
|
|
243
|
+
const time = (target.def.buildTime ?? 20) * REPAIR_TIME;
|
|
244
|
+
const mended = Math.min(target.maxHealth / time * dt, target.maxHealth - target.health);
|
|
245
|
+
const part = mended / target.maxHealth * world.settings.economy.repairCost;
|
|
246
|
+
const purse = world.player(entity.owner).resources;
|
|
247
|
+
const owed = state.owed ??= {};
|
|
248
|
+
const due = {};
|
|
249
|
+
for (const kind in target.def.cost) {
|
|
250
|
+
owed[kind] = (owed[kind] ?? 0) + target.def.cost[kind] * part;
|
|
251
|
+
due[kind] = Math.floor(owed[kind]);
|
|
252
|
+
}
|
|
253
|
+
const short = shortOf(purse, due);
|
|
254
|
+
if (short) {
|
|
255
|
+
world.message(entity.owner, engineMessage("notEnough", { resource: short }));
|
|
256
|
+
return "failed";
|
|
257
|
+
}
|
|
258
|
+
spend(world, entity.owner, due, "repair", target.def.id);
|
|
259
|
+
for (const kind in due) owed[kind] -= due[kind];
|
|
260
|
+
target.health += mended;
|
|
261
|
+
state.hammer = (state.hammer ?? HAMMER_INTERVAL * .5) - dt;
|
|
262
|
+
if (state.hammer <= 0) {
|
|
263
|
+
state.hammer += HAMMER_INTERVAL;
|
|
264
|
+
world.events.emit(worked, {
|
|
265
|
+
worker: entity,
|
|
266
|
+
target
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return target.health >= target.maxHealth ? "done" : "running";
|
|
270
|
+
},
|
|
271
|
+
end(world, entity) {
|
|
272
|
+
setAnchored(world, entity, false);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
//#endregion
|
|
276
|
+
export { buildOrder, canPlaceStructure, canRepair, constructOrder, placementCells, placementProblem, repairOrder, resourceAt, siteOf };
|
|
277
|
+
|
|
278
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","names":["workedEvent"],"sources":["../../src/orders/build.ts"],"sourcesContent":["import { constructionFinished, worked as workedEvent } from '#engine/engineEvents'\nimport { constructionOf, type Cost, footprintOf, type UnitTypeDef } from '#engine/defs'\nimport { constructionSite, underConstruction } from '#engine/systems/construction'\nimport { edgeDistance, type Entity, type EntityId, type PlayerId } from '#engine/entity'\nimport { closestPointOnRect, distToRect, type Rect, type Vec2 } from '#engine/math'\nimport type { OrderBehavior, OrderInits, OrderStatus } from '#engine/registry'\nimport { faceTowards, halt, moveTo, moveToEntity, setAnchored, setGhost, walkOn } from '#engine/systems/movement'\nimport { footprintCell } from '#engine/grid'\nimport { shortOf, spend } from '#engine/player'\nimport { startProducing } from '#engine/systems/production'\nimport { unlocked } from '#engine/tech'\nimport type { World } from '#engine/world'\nimport { engineMessage, type MessageRef } from '#engine/messages'\nimport { moving, deposit } from '../entity'\n\n/** Edge distance from which a worker can work on a building */\nconst WORK_RANGE = 0.8\n/** A builder that cannot get any closer than this because of units in the way starts building anyway */\nconst CROWDED_RANGE = 3\n\n/**\n * Ground a structure of this type covers when placed at `point`\n *\n * @beta\n */\nexport function siteOf(def: UnitTypeDef, point: Vec2): Rect & { cellX: number; cellZ: number } {\n\tconst fp = footprintOf(def)\n\tconst cell = footprintCell(point.x, point.z, fp.w, fp.d)\n\treturn { x: cell.x + fp.w / 2, z: cell.z + fp.d / 2, hw: fp.w / 2, hd: fp.d / 2, cellX: cell.x, cellZ: cell.z }\n}\n\n/**\n * Why this structure cannot be placed here right now, or undefined when it can. The ground has to be free,\n * then the `canPlace` hook has its say. With `fog`, ground the player has never seen counts as taken too:\n * that is for the player's own preview, which must not give away what is in the dark\n *\n * @beta\n */\nexport function placementProblem(world: World, def: UnitTypeDef, point: Vec2, player?: PlayerId, fog = false): MessageRef | undefined {\n\tconst fp = footprintOf(def)\n\tconst site = siteOf(def, point)\n\tif (def.builtOn !== undefined) {\n\t\t// over a resource of its kind, one nothing stands on yet: its ground is the resource's\n\t\tconst source = resourceAt(world, def, point)\n\t\tif (!source) return engineMessage('buildOnResource', { resource: def.builtOn })\n\t\tif (world.get(source.get(deposit)!.under)?.alive) return engineMessage('cannotBuildThere')\n\t} else if (!world.grid.canPlace(site.cellX, site.cellZ, fp.w, fp.d)) return engineMessage('cannotBuildThere')\n\t// what is built is in the way of who walks: where the navigation has no room for it, nothing more is built\n\tif (def.kind === 'building' && world.nav.obstacleRoom() <= 0) return engineMessage('tooManyBuildings')\n\tif (fog && player !== undefined) {\n\t\tconst { team } = world.player(player)\n\t\tconst explored =\n\t\t\tworld.fog.isExplored(team, site.x - site.hw + 0.5, site.z - site.hd + 0.5) &&\n\t\t\tworld.fog.isExplored(team, site.x + site.hw - 0.5, site.z - site.hd + 0.5) &&\n\t\t\tworld.fog.isExplored(team, site.x - site.hw + 0.5, site.z + site.hd - 0.5) &&\n\t\t\tworld.fog.isExplored(team, site.x + site.hw - 0.5, site.z + site.hd - 0.5)\n\t\tif (!explored) return engineMessage('cannotBuildThere')\n\t}\n\tif (!world.hooks.has('canPlace')) return undefined\n\tconst event = world.hooks.run('canPlace', { def, site, player, cancelled: false })\n\treturn event.cancelled ? (event.reason ?? engineMessage('cannotBuildThere')) : undefined\n}\n\nconst near: Entity[] = []\n\n/**\n * The resource a building that goes up on one (`UnitTypeDef.builtOn`) would stand on when placed at `point`: one of its\n * kind that covers the very same ground. None where there is none\n *\n * @beta\n */\nexport function resourceAt(world: World, def: UnitTypeDef, point: Vec2): Entity | undefined {\n\tif (def.builtOn === undefined) return undefined\n\tconst site = siteOf(def, point)\n\tfor (const other of world.spatial.query(site.x, site.z, Math.max(site.hw, site.hd) + 1, near)) {\n\t\tif (!other.alive || other.def.resource?.id !== def.builtOn || !other.cell) continue\n\t\tconst fp = footprintOf(other.def)\n\t\tif (other.cell.x === site.cellX && other.cell.z === site.cellZ && fp.w === site.hw * 2 && fp.d === site.hd * 2) return other\n\t}\n\treturn undefined\n}\n\n/**\n * Which cells of the ground a structure would cover at `point` are in the way, row by row from its corner (`w` across,\n * `d` rows: `siteOf`'s cell first): taken (`free` says no), or not explored (`explored` says no, where it is asked).\n * What a preview draws cell by cell (RV88); `placementProblem` says the whole, the game's own say among it. None for a\n * structure built on a resource, whose ground is the resource's\n *\n * @beta\n */\nexport function placementCells(\n\tdef: UnitTypeDef,\n\tpoint: Vec2,\n\tfree: (cellX: number, cellZ: number) => boolean,\n\texplored?: (cellX: number, cellZ: number) => boolean\n): boolean[] | undefined {\n\tif (def.builtOn !== undefined) return undefined\n\tconst { w, d } = footprintOf(def)\n\tconst { cellX, cellZ } = siteOf(def, point)\n\tconst blocked: boolean[] = []\n\tfor (let z = cellZ; z < cellZ + d; z++) for (let x = cellX; x < cellX + w; x++) blocked.push(!free(x, z) || (!!explored && !explored(x, z)))\n\treturn blocked\n}\n\n/**\n * Whether this structure can be placed here right now, see `placementProblem`\n *\n * @beta\n */\nexport function canPlaceStructure(world: World, def: UnitTypeDef, point: Vec2, player?: PlayerId, fog = false): boolean {\n\treturn placementProblem(world, def, point, player, fog) === undefined\n}\n\nconst inside: Entity[] = []\n\n/** Moves units standing on a construction site out of the way */\nfunction clearSite(world: World, site: Rect): void {\n\tworld.spatial.query(site.x, site.z, Math.max(site.hw, site.hd) * 1.5 + 1, inside)\n\tfor (const unit of inside) {\n\t\tif (!unit.get(moving) || unit.hidden || unit.flying) continue\n\t\tif (distToRect(unit.pos, site) >= unit.def.radius) continue\n\t\tconst outside = closestPointOnRect(unit.pos, site, unit.def.radius + 0.3)\n\t\tconst point = world.nav.closestPoint(outside, 6) ?? outside\n\t\tworld.place(unit, point)\n\t\t// teleporting drops the path\n\t\twalkOn(world, unit)\n\t}\n}\n\nfunction workOn(world: World, entity: Entity, building: Entity | undefined, state: WorkState, dt: number): OrderStatus {\n\tconst site = building && underConstruction(building)\n\tif (!site) return 'done'\n\tif (edgeDistance(entity, building) > WORK_RANGE) {\n\t\tmoveToEntity(world, entity, building, WORK_RANGE * 0.5)\n\t\treturn 'running'\n\t}\n\tif (entity.get(moving)!.status === 'moving') halt(world, entity)\n\tsetAnchored(world, entity, true)\n\tfaceTowards(world, entity, building.pos, dt)\n\tsite.builders++\n\t// a blow of its hammer now and then, for the screen (`worked`), as a repair has\n\tconst hammer = (state.hammer ?? HAMMER_INTERVAL * 0.5) - dt\n\tif (hammer <= 0) world.events.emit(workedEvent, { worker: entity, target: building })\n\tstate.hammer = hammer <= 0 ? hammer + HAMMER_INTERVAL : hammer\n\treturn 'running'\n}\n\n/**\n * What `construct` keeps: the seconds to its builder's next blow of the hammer\n *\n * @beta\n */\nexport interface WorkState {\n\t/** Seconds to its next blow, for the screen (`worked`) */\n\thammer?: number\n}\n\n/**\n * What `build` keeps: whether it walked to the site already, and the building once it is put down\n *\n * @beta\n */\nexport interface BuildState extends WorkState {\n\t/** It walked to the site already */\n\twalked?: boolean\n\t/** It walks through the others: its walk to the site failed once, held up among them (workers round a mine) */\n\tghost?: boolean\n\t/** The building, once it is put down */\n\tbuilding?: EntityId\n}\n\n/**\n * What `repair` keeps: whether it walked to it already, what of the cost it still owes, the seconds to its next swing\n *\n * @beta\n */\nexport interface RepairState {\n\t/** It walked to it already */\n\twalked?: boolean\n\t/** What of the cost of the repair it owes still */\n\towed?: Cost\n\t/** Seconds to its next swing */\n\thammer?: number\n}\n\n/** Whether the ground lets a builder get within work of a site from where it is, its own side of it: units are not asked, and one that flies needs none */\nfunction canWalkTo(world: World, entity: Entity, site: Rect): boolean {\n\tif (entity.flying) return true\n\tconst way = world.nav.findPath(entity.pos, closestPointOnRect(entity.pos, site, entity.def.radius + 0.15))\n\treturn !!way && distToRect(way[way.length - 1], site) - entity.def.radius <= WORK_RANGE\n}\n\nexport const buildOrder: OrderBehavior<BuildState, OrderInits['build']> = {\n\ttype: 'build',\n\tbuilding: (order) => !!order.state.building,\n\taccepts(world, entity, init) {\n\t\treturn !!init.point && !!init.unitType && !!entity.def.builds?.includes(init.unitType) && world.registry.units.has(init.unitType)\n\t},\n\tupdate(world, entity, order, dt) {\n\t\tconst { state } = order\n\t\tif (state.building) return workOn(world, entity, world.get(state.building), state, dt)\n\n\t\tconst def = world.registry.unit(order.init.unitType!)\n\t\tconst site = siteOf(def, order.init.point!)\n\t\tconst m = entity.get(moving)!\n\n\t\tconst gap = distToRect(entity.pos, site) - entity.def.radius\n\t\tif (gap > WORK_RANGE) {\n\t\t\tif (m.status === 'moving') return 'running'\n\t\t\t// held up right in front of it by units standing on the site: close enough, they get moved aside. Not by a cliff or a wood\n\t\t\tconst crowded = state.walked && gap <= CROWDED_RANGE && canWalkTo(world, entity, site)\n\t\t\tif (!crowded) {\n\t\t\t\t// `arrived` too: a walk stalled near its point counts as there, and here it was not near enough\n\t\t\t\tif (state.walked && (m.status === 'failed' || m.status === 'arrived')) {\n\t\t\t\t\t// held up among others (the workers anchored round a mine): once more, walking through them, as a hauling worker does\n\t\t\t\t\tif (!state.ghost) {\n\t\t\t\t\t\tstate.ghost = true\n\t\t\t\t\t\tsetGhost(world, entity, true)\n\t\t\t\t\t\tmoveTo(world, entity, closestPointOnRect(entity.pos, site, entity.def.radius + 0.15), { range: 0.3 })\n\t\t\t\t\t\treturn 'running'\n\t\t\t\t\t}\n\t\t\t\t\tworld.message(entity.owner, engineMessage('cannotReachSite'))\n\t\t\t\t\treturn 'failed'\n\t\t\t\t}\n\t\t\t\tstate.walked = true\n\t\t\t\tmoveTo(world, entity, closestPointOnRect(entity.pos, site, entity.def.radius + 0.15), { range: 0.3 })\n\t\t\t\treturn 'running'\n\t\t\t}\n\t\t}\n\n\t\tif (state.ghost) setGhost(world, entity, false)\n\t\tif (!unlocked(world, entity.owner, 'unit', def.id, def.requires)) return 'failed'\n\t\tconst problem = placementProblem(world, def, order.init.point!, entity.owner)\n\t\tif (problem) {\n\t\t\tworld.message(entity.owner, problem)\n\t\t\treturn 'failed'\n\t\t}\n\t\tconst made = startProducing(world, entity, 'structure', def.id, def.cost, def.buildTime ?? 1)\n\t\tif (!made) return 'failed'\n\t\thalt(world, entity)\n\t\tclearSite(world, site)\n\t\tconst how = constructionOf(def)\n\t\t// what appears at once is whole: no site, no builders\n\t\tconst building = world.spawn(\n\t\t\tdef.id,\n\t\t\tentity.owner,\n\t\t\torder.init.point!,\n\t\t\thow === 'instant' ? {} : { underConstruction: { buildTime: made.time, paid: made.cost } }\n\t\t)\n\t\tstate.building = building.id\n\t\t// what is there at once is built as it is put down\n\t\tif (how === 'instant') world.events.emit(constructionFinished, building)\n\t\t// what goes up on its own, or is there at once, leaves its builder free\n\t\treturn how === 'builder' ? 'running' : 'done'\n\t},\n\tend(world, entity, order) {\n\t\tsetAnchored(world, entity, false)\n\t\tif (order.state.ghost) setGhost(world, entity, false)\n\t}\n}\n\n/** Work on an existing construction site: resuming an abandoned one or helping another builder */\nexport const constructOrder: OrderBehavior<WorkState, OrderInits['construct']> = {\n\ttype: 'construct',\n\taccepts(world, entity, init) {\n\t\tconst target = world.get(init.target)\n\t\treturn (\n\t\t\t!!entity.def.builds?.length &&\n\t\t\t!!target?.has(constructionSite) &&\n\t\t\tconstructionOf(target.def) === 'builder' &&\n\t\t\tworld.areAllies(entity.owner, target.owner)\n\t\t)\n\t},\n\tupdate(world, entity, order, dt) {\n\t\treturn workOn(world, entity, world.get(order.init.target), order.state, dt)\n\t},\n\tend(world, entity) {\n\t\tsetAnchored(world, entity, false)\n\t}\n}\n\n/** Mending a building from nothing takes this much longer than building it did */\nconst REPAIR_TIME = 1.5\n/** Seconds between two blows of the hammer */\nconst HAMMER_INTERVAL = 1\n\n/**\n * Whether a worker of the player could mend it\n *\n * @beta\n */\nexport function canRepair(world: World, player: number, target: Entity): boolean {\n\treturn target.isBuilding && target.operational && target.health < target.maxHealth && world.areAllies(player, target.owner)\n}\n\n/** Mend a damaged building. It is paid for as the work goes on */\nexport const repairOrder: OrderBehavior<RepairState, OrderInits['repair']> = {\n\ttype: 'repair',\n\taccepts(world, entity, init) {\n\t\tconst target = world.get(init.target)\n\t\treturn !!entity.def.builds?.length && !!entity.get(moving) && !!target && canRepair(world, entity.owner, target)\n\t},\n\tupdate(world, entity, order, dt) {\n\t\tconst { state } = order\n\t\tconst target = world.get(order.init.target)\n\t\tif (!target || !canRepair(world, entity.owner, target)) return 'done'\n\t\tif (edgeDistance(entity, target) > WORK_RANGE) {\n\t\t\tif (entity.get(moving)!.status === 'failed' && state.walked) return 'failed'\n\t\t\tstate.walked = true\n\t\t\tmoveToEntity(world, entity, target, WORK_RANGE * 0.5)\n\t\t\treturn 'running'\n\t\t}\n\t\tif (entity.get(moving)!.status === 'moving') halt(world, entity)\n\t\tsetAnchored(world, entity, true)\n\t\tfaceTowards(world, entity, target.pos, dt)\n\n\t\tconst time = (target.def.buildTime ?? 20) * REPAIR_TIME\n\t\tconst mended = Math.min((target.maxHealth / time) * dt, target.maxHealth - target.health)\n\t\tconst part = (mended / target.maxHealth) * world.settings.economy.repairCost\n\t\tconst purse = world.player(entity.owner).resources\n\t\t// what is owed adds up until it is a whole coin, log, or whatever the building cost\n\t\tconst owed: Cost = (state.owed ??= {})\n\t\tconst due: Cost = {}\n\t\tfor (const kind in target.def.cost) {\n\t\t\towed[kind] = (owed[kind] ?? 0) + target.def.cost[kind] * part\n\t\t\tdue[kind] = Math.floor(owed[kind])\n\t\t}\n\t\tconst short = shortOf(purse, due)\n\t\tif (short) {\n\t\t\tworld.message(entity.owner, engineMessage('notEnough', { resource: short }))\n\t\t\treturn 'failed'\n\t\t}\n\t\tspend(world, entity.owner, due, 'repair', target.def.id)\n\t\tfor (const kind in due) owed[kind] -= due[kind]\n\t\ttarget.health += mended\n\n\t\tstate.hammer = (state.hammer ?? HAMMER_INTERVAL * 0.5) - dt\n\t\tif (state.hammer <= 0) {\n\t\t\tstate.hammer += HAMMER_INTERVAL\n\t\t\tworld.events.emit(workedEvent, { worker: entity, target })\n\t\t}\n\t\treturn target.health >= target.maxHealth ? 'done' : 'running'\n\t},\n\tend(world, entity) {\n\t\tsetAnchored(world, entity, false)\n\t}\n}\n"],"mappings":"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"}
|
package/dist/orders/cast.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AbilityDef } from '#engine/defs';
|
|
1
|
+
import { type AbilityDef, type EffectDef } from '#engine/defs';
|
|
2
2
|
import { type Entity, type ItemInstance } from '#engine/entity';
|
|
3
3
|
import { type Vec2 } from '#engine/math';
|
|
4
4
|
import type { OrderBehavior, OrderInits } from '#engine/registry';
|
|
@@ -47,12 +47,19 @@ export declare function notReady(world: World, entity: Entity, ability: AbilityD
|
|
|
47
47
|
* 2. the caster pays, the cooldown starts, and one of its charges is spent where it has them;
|
|
48
48
|
* 3. the effects of the ability happen;
|
|
49
49
|
* 4. the `afterCast` hook, for what follows: the caster's passives that react to its casts.
|
|
50
|
+
*
|
|
51
|
+
* `held`: for an ability held and let go (`AbilityDef.hold`), how full it was (`EffectContext.held`), and the effects that
|
|
52
|
+
* go off in place of its own (a tap's)
|
|
50
53
|
*/
|
|
51
|
-
export declare function fire(world: World, caster: Entity, ability: AbilityDef, target: Entity | undefined, item?: ItemInstance
|
|
54
|
+
export declare function fire(world: World, caster: Entity, ability: AbilityDef, target: Entity | undefined, item?: ItemInstance, held?: {
|
|
55
|
+
share: number;
|
|
56
|
+
effects?: EffectDef[];
|
|
57
|
+
}): void;
|
|
52
58
|
/**
|
|
53
59
|
* Casts what goes off on the spot without the caster dropping what it is doing: a hero drinks a potion while it walks,
|
|
54
60
|
* and leaps in the middle of a run. `point` is where it is aimed, for what goes off towards somewhere.
|
|
55
|
-
* False when it cannot be cast this way, and takes an order
|
|
61
|
+
* False when it cannot be cast this way, and takes an order. What the rules refuse as an order (`beforeOrder`) they
|
|
62
|
+
* refuse here too: it is not cast, and true is returned
|
|
56
63
|
*/
|
|
57
64
|
export declare function castAside(world: World, caster: Entity, from: {
|
|
58
65
|
ability?: string;
|
|
@@ -88,12 +95,15 @@ export declare const castOrder: OrderBehavior<CastState, OrderInits['cast']>;
|
|
|
88
95
|
export interface CastChannel {
|
|
89
96
|
/** The ability, and its level */
|
|
90
97
|
ability: string;
|
|
98
|
+
/** The level of the ability being channelled */
|
|
91
99
|
level: number;
|
|
92
100
|
/** What it is aimed at, and where */
|
|
93
101
|
target?: number;
|
|
102
|
+
/** The world point the channel is aimed at (the target's position, or the point cast at) */
|
|
94
103
|
point: Vec2;
|
|
95
104
|
/** Seconds still to go, and gone */
|
|
96
105
|
left: number;
|
|
106
|
+
/** Seconds the channel has already gone on */
|
|
97
107
|
elapsed: number;
|
|
98
108
|
/** Over: kept up to its end, or broken off */
|
|
99
109
|
done?: boolean;
|