@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
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
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":"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"}
|