@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/player.d.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { type Component, StateStore } from './components';
|
|
2
2
|
import type { Registry } from './registry';
|
|
3
|
-
import type { Cost,
|
|
3
|
+
import type { Cost, ResourceId } from './defs';
|
|
4
4
|
import type { PlayerId } from './entity';
|
|
5
5
|
import type { World } from './world';
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* What a `Player` is made from: its id, name, team, colour, starting resources and role
|
|
8
|
+
*
|
|
9
|
+
* @beta
|
|
10
|
+
*/
|
|
7
11
|
export interface PlayerInit {
|
|
12
|
+
/** The player's id, by which units, commands and the world's lists name them */
|
|
8
13
|
id: PlayerId;
|
|
14
|
+
/** The name shown for the player on scores, in the lobby and in messages */
|
|
9
15
|
name: string;
|
|
10
16
|
/** Players on the same team are allies and share vision */
|
|
11
17
|
team: number;
|
|
@@ -18,27 +24,38 @@ export interface PlayerInit {
|
|
|
18
24
|
/** The player the creeps belong to: hostile to everyone, and not someone who can win or lose */
|
|
19
25
|
creeps?: boolean;
|
|
20
26
|
/**
|
|
21
|
-
* The race they play (`
|
|
27
|
+
* The race they play (`Rules.races`), or `random` for one drawn as the game starts. The game's first when left
|
|
22
28
|
* out, in a game with races; none for the neutral players and the creeps
|
|
23
29
|
*/
|
|
24
30
|
race?: string;
|
|
25
31
|
}
|
|
26
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`
|
|
34
|
+
*
|
|
35
|
+
* @beta
|
|
36
|
+
*/
|
|
27
37
|
export declare class Player {
|
|
38
|
+
/** The player's id, as `PlayerInit.id` */
|
|
28
39
|
readonly id: PlayerId;
|
|
40
|
+
/** The name shown for the player, as `PlayerInit.name` */
|
|
29
41
|
readonly name: string;
|
|
30
42
|
/** Changed by `world.setTeam`, which the fog and everyone's sight follow */
|
|
31
43
|
team: number;
|
|
44
|
+
/** The player's colour as RGB, each 0..1, used to tint their units */
|
|
32
45
|
readonly color: [number, number, number];
|
|
46
|
+
/** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */
|
|
33
47
|
readonly neutral: boolean;
|
|
48
|
+
/** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */
|
|
34
49
|
readonly creeps: boolean;
|
|
35
50
|
/** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */
|
|
36
51
|
race: string | undefined;
|
|
37
52
|
/** What the player has of each resource, by resource id */
|
|
38
53
|
readonly resources: Purse;
|
|
54
|
+
/** Supply the player's units and queued units take up now; counted against `supplyCap` */
|
|
39
55
|
supplyUsed: number;
|
|
56
|
+
/** The most supply the player may use, from their buildings that provide it */
|
|
40
57
|
supplyCap: number;
|
|
41
|
-
/** The game's other pools of supply, by name (`
|
|
58
|
+
/** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */
|
|
42
59
|
supplies: Record<string, {
|
|
43
60
|
used: number;
|
|
44
61
|
cap: number;
|
|
@@ -59,7 +76,9 @@ export declare class Player {
|
|
|
59
76
|
get upgrades(): ReadonlyMap<string, number>;
|
|
60
77
|
/** State of a game module or a mod for this player: made from the component's default when first asked for */
|
|
61
78
|
state<T>(key: Component<T, unknown>): T;
|
|
79
|
+
/** Sets this player's state for a component, replacing what `state` gives for it */
|
|
62
80
|
setState<T>(key: Component<T, unknown>, value: T): void;
|
|
81
|
+
/** Records that an upgrade is researched at this level and bumps `upgradesVersion` */
|
|
63
82
|
setUpgrade(upgrade: string, level: number): void;
|
|
64
83
|
}
|
|
65
84
|
/**
|
|
@@ -67,14 +86,18 @@ export declare class Player {
|
|
|
67
86
|
*
|
|
68
87
|
* @beta
|
|
69
88
|
*/
|
|
70
|
-
export type Purse = Record<
|
|
89
|
+
export type Purse = Record<ResourceId, number>;
|
|
71
90
|
/**
|
|
72
91
|
* The resource a purse is short of for a cost, or undefined when it can afford it
|
|
73
92
|
*
|
|
74
93
|
* @beta
|
|
75
94
|
*/
|
|
76
|
-
export declare function shortOf(purse: Readonly<Purse>, cost: Cost | undefined):
|
|
77
|
-
/**
|
|
95
|
+
export declare function shortOf(purse: Readonly<Purse>, cost: Cost | undefined): ResourceId | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first
|
|
98
|
+
*
|
|
99
|
+
* @beta
|
|
100
|
+
*/
|
|
78
101
|
export declare function pay(purse: Purse, cost: Cost | undefined): void;
|
|
79
102
|
/**
|
|
80
103
|
* Gives back what something cost, or a part of it
|
|
@@ -85,9 +108,9 @@ export declare function refund(purse: Purse, cost: Cost | undefined, part?: numb
|
|
|
85
108
|
/**
|
|
86
109
|
* Adds an amount of a resource
|
|
87
110
|
*
|
|
88
|
-
* @
|
|
111
|
+
* @public
|
|
89
112
|
*/
|
|
90
|
-
export declare function earn(purse: Purse, kind:
|
|
113
|
+
export declare function earn(purse: Purse, kind: ResourceId, amount: number): void;
|
|
91
114
|
/**
|
|
92
115
|
* What a player pays for, as `resourcesSpent` says it: a unit, an upgrade, a structure, a morph, a revive (production),
|
|
93
116
|
* an item, a hire, a repair, a trade at a market (`exchange`), or a game's own word
|
package/dist/player.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { StateStore } from "./components.js";
|
|
2
|
+
import { resourcesSpent } from "./engineEvents.js";
|
|
3
|
+
//#region src/player.ts
|
|
4
|
+
/**
|
|
5
|
+
* A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`
|
|
6
|
+
*
|
|
7
|
+
* @beta
|
|
8
|
+
*/
|
|
9
|
+
var Player = class {
|
|
10
|
+
/** The player's id, as `PlayerInit.id` */
|
|
11
|
+
id;
|
|
12
|
+
/** The name shown for the player, as `PlayerInit.name` */
|
|
13
|
+
name;
|
|
14
|
+
/** Changed by `world.setTeam`, which the fog and everyone's sight follow */
|
|
15
|
+
team;
|
|
16
|
+
/** The player's colour as RGB, each 0..1, used to tint their units */
|
|
17
|
+
color;
|
|
18
|
+
/** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */
|
|
19
|
+
neutral;
|
|
20
|
+
/** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */
|
|
21
|
+
creeps;
|
|
22
|
+
/** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */
|
|
23
|
+
race;
|
|
24
|
+
/** What the player has of each resource, by resource id */
|
|
25
|
+
resources;
|
|
26
|
+
/** Supply the player's units and queued units take up now; counted against `supplyCap` */
|
|
27
|
+
supplyUsed = 0;
|
|
28
|
+
/** The most supply the player may use, from their buildings that provide it */
|
|
29
|
+
supplyCap = 0;
|
|
30
|
+
/** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */
|
|
31
|
+
supplies = {};
|
|
32
|
+
/** Has had a building, and with that something to lose */
|
|
33
|
+
established = false;
|
|
34
|
+
/** Out of the game */
|
|
35
|
+
defeated = false;
|
|
36
|
+
finished = /* @__PURE__ */ new Map();
|
|
37
|
+
/** Bumped whenever a research finishes. Whatever is worked out from `upgrades` (like the stats of units) can check this to tell whether it still holds */
|
|
38
|
+
upgradesVersion = 0;
|
|
39
|
+
/** Upgrades in some production queue right now */
|
|
40
|
+
researching = /* @__PURE__ */ new Set();
|
|
41
|
+
/** State of game modules and mods for this player, see `state` */
|
|
42
|
+
states = new StateStore();
|
|
43
|
+
constructor(init) {
|
|
44
|
+
this.id = init.id;
|
|
45
|
+
this.name = init.name;
|
|
46
|
+
this.team = init.team;
|
|
47
|
+
this.color = init.color;
|
|
48
|
+
this.neutral = init.neutral ?? false;
|
|
49
|
+
this.creeps = init.creeps ?? false;
|
|
50
|
+
this.race = init.race;
|
|
51
|
+
this.resources = { ...init.resources };
|
|
52
|
+
}
|
|
53
|
+
/** Finished research: upgrade id to level. Changed through `setUpgrade` only, which keeps `upgradesVersion` honest */
|
|
54
|
+
get upgrades() {
|
|
55
|
+
return this.finished;
|
|
56
|
+
}
|
|
57
|
+
/** State of a game module or a mod for this player: made from the component's default when first asked for */
|
|
58
|
+
state(key) {
|
|
59
|
+
return this.states.get(key);
|
|
60
|
+
}
|
|
61
|
+
/** Sets this player's state for a component, replacing what `state` gives for it */
|
|
62
|
+
setState(key, value) {
|
|
63
|
+
this.states.set(key, value);
|
|
64
|
+
}
|
|
65
|
+
/** Records that an upgrade is researched at this level and bumps `upgradesVersion` */
|
|
66
|
+
setUpgrade(upgrade, level) {
|
|
67
|
+
this.finished.set(upgrade, level);
|
|
68
|
+
this.upgradesVersion++;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* The resource a purse is short of for a cost, or undefined when it can afford it
|
|
73
|
+
*
|
|
74
|
+
* @beta
|
|
75
|
+
*/
|
|
76
|
+
function shortOf(purse, cost) {
|
|
77
|
+
if (!cost) return void 0;
|
|
78
|
+
for (const kind in cost) if ((purse[kind] ?? 0) < cost[kind]) return kind;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first
|
|
82
|
+
*
|
|
83
|
+
* @beta
|
|
84
|
+
*/
|
|
85
|
+
function pay(purse, cost) {
|
|
86
|
+
for (const kind in cost) purse[kind] = (purse[kind] ?? 0) - cost[kind];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gives back what something cost, or a part of it
|
|
90
|
+
*
|
|
91
|
+
* @beta
|
|
92
|
+
*/
|
|
93
|
+
function refund(purse, cost, part = 1) {
|
|
94
|
+
for (const kind in cost) purse[kind] = (purse[kind] ?? 0) + Math.floor(cost[kind] * part);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Adds an amount of a resource
|
|
98
|
+
*
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
function earn(purse, kind, amount) {
|
|
102
|
+
purse[kind] = (purse[kind] ?? 0) + amount;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Has a player pay a cost, and says so (`resourcesSpent`, what the score counts as spent): `on` what, and its id. For a
|
|
106
|
+
* game's own purchases too, so that they count as the engine's do. The purse is not checked: `shortOf` first
|
|
107
|
+
*
|
|
108
|
+
* @beta
|
|
109
|
+
*/
|
|
110
|
+
function spend(world, player, cost, on, id) {
|
|
111
|
+
if (!cost) return;
|
|
112
|
+
pay(world.player(player).resources, cost);
|
|
113
|
+
for (const kind in cost) {
|
|
114
|
+
if (cost[kind] === 0) continue;
|
|
115
|
+
world.events.emit(resourcesSpent, {
|
|
116
|
+
player,
|
|
117
|
+
cost,
|
|
118
|
+
on,
|
|
119
|
+
id,
|
|
120
|
+
refund: false
|
|
121
|
+
});
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Gives a player back what something cost, or a part of it (`refund`), and says so (`resourcesSpent` with `refund`):
|
|
127
|
+
* what the score takes off what was spent
|
|
128
|
+
*
|
|
129
|
+
* @beta
|
|
130
|
+
*/
|
|
131
|
+
function giveBack(world, player, cost, part, on, id) {
|
|
132
|
+
if (!cost) return;
|
|
133
|
+
const back = {};
|
|
134
|
+
let any = false;
|
|
135
|
+
for (const kind in cost) {
|
|
136
|
+
back[kind] = Math.floor(cost[kind] * part);
|
|
137
|
+
if (back[kind] !== 0) any = true;
|
|
138
|
+
}
|
|
139
|
+
refund(world.player(player).resources, back);
|
|
140
|
+
if (any) world.events.emit(resourcesSpent, {
|
|
141
|
+
player,
|
|
142
|
+
cost: back,
|
|
143
|
+
on,
|
|
144
|
+
id,
|
|
145
|
+
refund: true
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* What a cost asks of the game's money, see `Registry.currency`. Shops deal in that alone
|
|
150
|
+
*
|
|
151
|
+
* @beta
|
|
152
|
+
*/
|
|
153
|
+
function currencyOf(registry, cost) {
|
|
154
|
+
return registry.currency ? cost?.[registry.currency] ?? 0 : 0;
|
|
155
|
+
}
|
|
156
|
+
//#endregion
|
|
157
|
+
export { Player, currencyOf, earn, giveBack, pay, refund, shortOf, spend };
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.js","names":["resourcesSpentEvent"],"sources":["../src/player.ts"],"sourcesContent":["import { resourcesSpent as resourcesSpentEvent } from '#engine/engineEvents'\nimport { type Component, StateStore } from './components'\nimport type { Registry } from './registry'\nimport type { Cost, ResourceId } from './defs'\nimport type { PlayerId } from './entity'\nimport type { World } from './world'\n\n/**\n * What a `Player` is made from: its id, name, team, colour, starting resources and role\n *\n * @beta\n */\nexport interface PlayerInit {\n\t/** The player's id, by which units, commands and the world's lists name them */\n\tid: PlayerId\n\t/** The name shown for the player on scores, in the lobby and in messages */\n\tname: string\n\t/** Players on the same team are allies and share vision */\n\tteam: number\n\t/** RGB, 0..1 */\n\tcolor: [number, number, number]\n\t/** What the player starts with, by resource id */\n\tresources?: Purse\n\t/** Neutral players own things like gold mines. Nobody is hostile towards them */\n\tneutral?: boolean\n\t/** The player the creeps belong to: hostile to everyone, and not someone who can win or lose */\n\tcreeps?: boolean\n\t/**\n\t * The race they play (`Rules.races`), or `random` for one drawn as the game starts. The game's first when left\n\t * out, in a game with races; none for the neutral players and the creeps\n\t */\n\trace?: string\n}\n\n/**\n * A player of a world: team, colour, race, resources, supply, researched upgrades and the state of modules, kept by `world.player(id)`\n *\n * @beta\n */\nexport class Player {\n\t/** The player's id, as `PlayerInit.id` */\n\treadonly id: PlayerId\n\t/** The name shown for the player, as `PlayerInit.name` */\n\treadonly name: string\n\t/** Changed by `world.setTeam`, which the fog and everyone's sight follow */\n\tteam: number\n\t/** The player's colour as RGB, each 0..1, used to tint their units */\n\treadonly color: [number, number, number]\n\t/** Whether this is a neutral player (owner of gold mines and the like); nobody is hostile towards it */\n\treadonly neutral: boolean\n\t/** Whether this is the creeps' player: hostile to everyone, and not someone who can win or lose */\n\treadonly creeps: boolean\n\t/** The race they play (`raceOf`): changed by `setRace` only. None in a game without races */\n\trace: string | undefined\n\t/** What the player has of each resource, by resource id */\n\treadonly resources: Purse\n\t/** Supply the player's units and queued units take up now; counted against `supplyCap` */\n\tsupplyUsed = 0\n\t/** The most supply the player may use, from their buildings that provide it */\n\tsupplyCap = 0\n\t/** The game's other pools of supply, by name (`RuleSettings.supply.pools`): what is used and the cap of each */\n\tsupplies: Record<string, { used: number; cap: number }> = {}\n\t/** Has had a building, and with that something to lose */\n\testablished = false\n\t/** Out of the game */\n\tdefeated = false\n\tprivate readonly finished = new Map<string, number>()\n\t/** Bumped whenever a research finishes. Whatever is worked out from `upgrades` (like the stats of units) can check this to tell whether it still holds */\n\tupgradesVersion = 0\n\t/** Upgrades in some production queue right now */\n\treadonly researching = new Set<string>()\n\t/** State of game modules and mods for this player, see `state` */\n\treadonly states = new StateStore()\n\n\tconstructor(init: PlayerInit) {\n\t\tthis.id = init.id\n\t\tthis.name = init.name\n\t\tthis.team = init.team\n\t\tthis.color = init.color\n\t\tthis.neutral = init.neutral ?? false\n\t\tthis.creeps = init.creeps ?? false\n\t\tthis.race = init.race\n\t\tthis.resources = { ...init.resources }\n\t}\n\n\t/** Finished research: upgrade id to level. Changed through `setUpgrade` only, which keeps `upgradesVersion` honest */\n\tget upgrades(): ReadonlyMap<string, number> {\n\t\treturn this.finished\n\t}\n\n\t/** State of a game module or a mod for this player: made from the component's default when first asked for */\n\tstate<T>(key: Component<T, unknown>): T {\n\t\treturn this.states.get(key)\n\t}\n\n\t/** Sets this player's state for a component, replacing what `state` gives for it */\n\tsetState<T>(key: Component<T, unknown>, value: T): void {\n\t\tthis.states.set(key, value)\n\t}\n\n\t/** Records that an upgrade is researched at this level and bumps `upgradesVersion` */\n\tsetUpgrade(upgrade: string, level: number): void {\n\t\tthis.finished.set(upgrade, level)\n\t\tthis.upgradesVersion++\n\t}\n}\n\n/**\n * Amounts of resources, by resource id: what a player has. A resource left out is none of it\n *\n * @beta\n */\nexport type Purse = Record<ResourceId, number>\n\n/**\n * The resource a purse is short of for a cost, or undefined when it can afford it\n *\n * @beta\n */\nexport function shortOf(purse: Readonly<Purse>, cost: Cost | undefined): ResourceId | undefined {\n\tif (!cost) return undefined\n\tfor (const kind in cost) if ((purse[kind] ?? 0) < cost[kind]) return kind\n\treturn undefined\n}\n\n/**\n * Takes a cost out of a purse, per resource; a purse may go below zero, so check `shortOf` first\n *\n * @beta\n */\nexport function pay(purse: Purse, cost: Cost | undefined): void {\n\tfor (const kind in cost) purse[kind] = (purse[kind] ?? 0) - cost[kind]\n}\n\n/**\n * Gives back what something cost, or a part of it\n *\n * @beta\n */\nexport function refund(purse: Purse, cost: Cost | undefined, part = 1): void {\n\tfor (const kind in cost) purse[kind] = (purse[kind] ?? 0) + Math.floor(cost[kind] * part)\n}\n\n/**\n * Adds an amount of a resource\n *\n * @public\n */\nexport function earn(purse: Purse, kind: ResourceId, amount: number): void {\n\tpurse[kind] = (purse[kind] ?? 0) + amount\n}\n\n/**\n * What a player pays for, as `resourcesSpent` says it: a unit, an upgrade, a structure, a morph, a revive (production),\n * an item, a hire, a repair, a trade at a market (`exchange`), or a game's own word\n *\n * @beta\n */\nexport type SpentOn = 'unit' | 'upgrade' | 'structure' | 'morph' | 'revive' | 'item' | 'hire' | 'repair' | 'trade' | (string & {})\n\n/**\n * Has a player pay a cost, and says so (`resourcesSpent`, what the score counts as spent): `on` what, and its id. For a\n * game's own purchases too, so that they count as the engine's do. The purse is not checked: `shortOf` first\n *\n * @beta\n */\nexport function spend(world: World, player: PlayerId, cost: Cost | undefined, on: SpentOn, id?: string): void {\n\tif (!cost) return\n\tpay(world.player(player).resources, cost)\n\tfor (const kind in cost) {\n\t\tif (cost[kind] === 0) continue\n\t\tworld.events.emit(resourcesSpentEvent, { player, cost, on, id, refund: false })\n\t\treturn\n\t}\n}\n\n/**\n * Gives a player back what something cost, or a part of it (`refund`), and says so (`resourcesSpent` with `refund`):\n * what the score takes off what was spent\n *\n * @beta\n */\nexport function giveBack(world: World, player: PlayerId, cost: Cost | undefined, part: number, on: SpentOn, id?: string): void {\n\tif (!cost) return\n\tconst back: Cost = {}\n\tlet any = false\n\tfor (const kind in cost) {\n\t\tback[kind] = Math.floor(cost[kind] * part)\n\t\tif (back[kind] !== 0) any = true\n\t}\n\trefund(world.player(player).resources, back)\n\tif (any) world.events.emit(resourcesSpentEvent, { player, cost: back, on, id, refund: true })\n}\n\n/**\n * What a cost asks of the game's money, see `Registry.currency`. Shops deal in that alone\n *\n * @beta\n */\nexport function currencyOf(registry: Registry, cost: Cost | undefined): number {\n\treturn registry.currency ? (cost?.[registry.currency] ?? 0) : 0\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,SAAb,MAAoB;;CAEnB;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA,aAAa;;CAEb,YAAY;;CAEZ,WAA0D,CAAC;;CAE3D,cAAc;;CAEd,WAAW;CACX,2BAA4B,IAAI,IAAoB;;CAEpD,kBAAkB;;CAElB,8BAAuB,IAAI,IAAY;;CAEvC,SAAkB,IAAI,WAAW;CAEjC,YAAY,MAAkB;EAC7B,KAAK,KAAK,KAAK;EACf,KAAK,OAAO,KAAK;EACjB,KAAK,OAAO,KAAK;EACjB,KAAK,QAAQ,KAAK;EAClB,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,SAAS,KAAK,UAAU;EAC7B,KAAK,OAAO,KAAK;EACjB,KAAK,YAAY,EAAE,GAAG,KAAK,UAAU;CACtC;;CAGA,IAAI,WAAwC;EAC3C,OAAO,KAAK;CACb;;CAGA,MAAS,KAA+B;EACvC,OAAO,KAAK,OAAO,IAAI,GAAG;CAC3B;;CAGA,SAAY,KAA4B,OAAgB;EACvD,KAAK,OAAO,IAAI,KAAK,KAAK;CAC3B;;CAGA,WAAW,SAAiB,OAAqB;EAChD,KAAK,SAAS,IAAI,SAAS,KAAK;EAChC,KAAK;CACN;AACD;;;;;;AAcA,SAAgB,QAAQ,OAAwB,MAAgD;CAC/F,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,KAAK,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,KAAK,KAAK,OAAO,OAAO;AAEtE;;;;;;AAOA,SAAgB,IAAI,OAAc,MAA8B;CAC/D,KAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,MAAM,SAAS,KAAK,KAAK;AAClE;;;;;;AAOA,SAAgB,OAAO,OAAc,MAAwB,OAAO,GAAS;CAC5E,KAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,MAAM,SAAS,KAAK,KAAK,MAAM,KAAK,QAAQ,IAAI;AACzF;;;;;;AAOA,SAAgB,KAAK,OAAc,MAAkB,QAAsB;CAC1E,MAAM,SAAS,MAAM,SAAS,KAAK;AACpC;;;;;;;AAgBA,SAAgB,MAAM,OAAc,QAAkB,MAAwB,IAAa,IAAmB;CAC7G,IAAI,CAAC,MAAM;CACX,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CACxC,KAAK,MAAM,QAAQ,MAAM;EACxB,IAAI,KAAK,UAAU,GAAG;EACtB,MAAM,OAAO,KAAKA,gBAAqB;GAAE;GAAQ;GAAM;GAAI;GAAI,QAAQ;EAAM,CAAC;EAC9E;CACD;AACD;;;;;;;AAQA,SAAgB,SAAS,OAAc,QAAkB,MAAwB,MAAc,IAAa,IAAmB;CAC9H,IAAI,CAAC,MAAM;CACX,MAAM,OAAa,CAAC;CACpB,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,MAAM;EACxB,KAAK,QAAQ,KAAK,MAAM,KAAK,QAAQ,IAAI;EACzC,IAAI,KAAK,UAAU,GAAG,MAAM;CAC7B;CACA,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CAC3C,IAAI,KAAK,MAAM,OAAO,KAAKA,gBAAqB;EAAE;EAAQ,MAAM;EAAM;EAAI;EAAI,QAAQ;CAAK,CAAC;AAC7F;;;;;;AAOA,SAAgB,WAAW,UAAoB,MAAgC;CAC9E,OAAO,SAAS,WAAY,OAAO,SAAS,aAAa,IAAK;AAC/D"}
|
package/dist/portals.d.ts
CHANGED
package/dist/portals.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { distSq } from "./math.js";
|
|
2
|
+
import { at } from "./defs.js";
|
|
3
|
+
import { defineComponent } from "./components.js";
|
|
4
|
+
import { defineEngineEvent } from "./events.js";
|
|
5
|
+
import { distanceToEdge, moving } from "./entity.js";
|
|
6
|
+
import { defineHook } from "./hooks.js";
|
|
7
|
+
import { halt, moveToEntity } from "./systems/movement.js";
|
|
8
|
+
import { valueOf } from "./abilities/amounts.js";
|
|
9
|
+
import { defineEffect } from "./abilities/effects.js";
|
|
10
|
+
import { createOrder, giveOrder } from "./orders/queue.js";
|
|
11
|
+
import { homeOf } from "./home.js";
|
|
12
|
+
//#region src/portals.ts
|
|
13
|
+
/**
|
|
14
|
+
* The portals pack's id
|
|
15
|
+
*
|
|
16
|
+
* @beta
|
|
17
|
+
*/
|
|
18
|
+
var PORTALS = "core.portals";
|
|
19
|
+
/**
|
|
20
|
+
* Where a waygate leads: a point of the map by its name (as the editor's field keeps it), or a place. A waygate without
|
|
21
|
+
* it, or with `null`, is shut
|
|
22
|
+
*
|
|
23
|
+
* @beta
|
|
24
|
+
*/
|
|
25
|
+
var waygate = defineComponent({
|
|
26
|
+
id: "core.waygate",
|
|
27
|
+
field: {
|
|
28
|
+
name: "Leads to",
|
|
29
|
+
hint: "The point of the map a unit that walks in comes out at",
|
|
30
|
+
kind: "point",
|
|
31
|
+
for: (def) => !!def.waygate
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* A unit went through a waygate, or a town portal: told to everyone who sees either end, for a sound and a flash
|
|
36
|
+
*
|
|
37
|
+
* @beta
|
|
38
|
+
*/
|
|
39
|
+
var portalUsed = defineEngineEvent({
|
|
40
|
+
id: "core.portalUsed",
|
|
41
|
+
replicate: "everyone"
|
|
42
|
+
});
|
|
43
|
+
/** How near a waygate's edge a unit is in it */
|
|
44
|
+
var REACH = .6;
|
|
45
|
+
/**
|
|
46
|
+
* Where a waygate leads, or nothing for one that is shut or leads to a point the map does not have
|
|
47
|
+
*
|
|
48
|
+
* @beta
|
|
49
|
+
*/
|
|
50
|
+
function waygateTarget(world, gate) {
|
|
51
|
+
const to = gate.get(waygate);
|
|
52
|
+
if (!to || !gate.alive) return void 0;
|
|
53
|
+
if (typeof to !== "string") return to;
|
|
54
|
+
return world.map.points.some((point) => point.name === to) ? world.map.point(to) : void 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Says where a waygate leads (a point of the map by its name, or a place), or shuts it (`null`): what the editor's
|
|
58
|
+
* "Leads to" field says of a placed one, in code. Any building can be made a waygate so
|
|
59
|
+
*
|
|
60
|
+
* @beta
|
|
61
|
+
*/
|
|
62
|
+
function setWaygate(gate, to) {
|
|
63
|
+
gate.set(waygate, typeof to === "object" && to ? {
|
|
64
|
+
x: to.x,
|
|
65
|
+
z: to.z
|
|
66
|
+
} : to);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Puts a unit somewhere at once, on the nearest ground it can stand on: what a waygate and a town portal do, for a game's
|
|
70
|
+
* own rules. Told to everyone (`portalUsed`)
|
|
71
|
+
*
|
|
72
|
+
* @beta
|
|
73
|
+
*/
|
|
74
|
+
function portal(world, entity, to, gate) {
|
|
75
|
+
const from = {
|
|
76
|
+
x: entity.pos.x,
|
|
77
|
+
z: entity.pos.z
|
|
78
|
+
};
|
|
79
|
+
const spot = (entity.flying ? world.air : world.nav).closestPoint(to, 6) ?? to;
|
|
80
|
+
halt(world, entity);
|
|
81
|
+
world.place(entity, spot);
|
|
82
|
+
entity.prevPos.x = spot.x;
|
|
83
|
+
entity.prevPos.z = spot.z;
|
|
84
|
+
world.events.emit(portalUsed, {
|
|
85
|
+
entity: entity.id,
|
|
86
|
+
from,
|
|
87
|
+
to: {
|
|
88
|
+
x: spot.x,
|
|
89
|
+
z: spot.z
|
|
90
|
+
},
|
|
91
|
+
gate: gate?.id
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** Going through a waygate: walking into it, then out where it leads. Failed when it is shut, or there is no way to it */
|
|
95
|
+
var enterOrder = {
|
|
96
|
+
type: "enterWaygate",
|
|
97
|
+
accepts(world, entity, init) {
|
|
98
|
+
const gate = world.get(init.target);
|
|
99
|
+
return !!entity.get(moving) && !!gate && !!waygateTarget(world, gate);
|
|
100
|
+
},
|
|
101
|
+
update(world, entity, order) {
|
|
102
|
+
const gate = world.get(order.init.target);
|
|
103
|
+
const to = gate && waygateTarget(world, gate);
|
|
104
|
+
if (!gate || !to) return "failed";
|
|
105
|
+
if (distanceToEdge(entity.pos, gate) - entity.def.radius <= REACH) {
|
|
106
|
+
portal(world, entity, to, gate);
|
|
107
|
+
return "done";
|
|
108
|
+
}
|
|
109
|
+
const m = entity.get(moving);
|
|
110
|
+
if (m.status === "moving") return "running";
|
|
111
|
+
if (m.status === "failed" && order.state.tried === world.tick - 1) return "failed";
|
|
112
|
+
order.state.tried = world.tick;
|
|
113
|
+
moveToEntity(world, entity, gate, REACH * .5);
|
|
114
|
+
return "running";
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
/** Offsets around a spot, nearest first: where those a town portal brings stand */
|
|
118
|
+
var AROUND = (() => {
|
|
119
|
+
const all = [];
|
|
120
|
+
for (let dz = -3; dz <= 3; dz++) for (let dx = -3; dx <= 3; dx++) all.push({
|
|
121
|
+
x: dx * 1.2,
|
|
122
|
+
z: dz * 1.2
|
|
123
|
+
});
|
|
124
|
+
return all.sort((a, b) => a.x * a.x + a.z * a.z - (b.x * b.x + b.z * b.z));
|
|
125
|
+
})();
|
|
126
|
+
/**
|
|
127
|
+
* Takes a unit and as many as `count` of its owner's units within `radius` of it, nearest first, to its side's home
|
|
128
|
+
* nearest `near` (`homeOf`), spread around it: what the `townPortal` effect does, in code. Gives back who went, none
|
|
129
|
+
* when the side has no home
|
|
130
|
+
*
|
|
131
|
+
* @beta
|
|
132
|
+
*/
|
|
133
|
+
function townPortal(world, caster, near, radius = 7, count = 12) {
|
|
134
|
+
const home = homeOf(world, caster.owner, near);
|
|
135
|
+
if (!home) return [];
|
|
136
|
+
const going = [caster, ...world.spatial.query(caster.pos.x, caster.pos.z, radius).filter((entity) => entity !== caster && entity.alive && !entity.hidden && entity.owner === caster.owner && !!entity.get(moving) && distanceToEdge(caster.pos, entity) <= radius).map((entity) => ({
|
|
137
|
+
entity,
|
|
138
|
+
d: distSq(entity.pos, caster.pos)
|
|
139
|
+
})).sort((a, b) => a.d - b.d || a.entity.id - b.entity.id).slice(0, Math.max(0, count)).map(({ entity }) => entity)];
|
|
140
|
+
going.forEach((entity, i) => {
|
|
141
|
+
const offset = AROUND[i % AROUND.length];
|
|
142
|
+
portal(world, entity, {
|
|
143
|
+
x: home.x + offset.x,
|
|
144
|
+
z: home.z + offset.z
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
return going;
|
|
148
|
+
}
|
|
149
|
+
var townPortalEffect = defineEffect({
|
|
150
|
+
type: "townPortal",
|
|
151
|
+
run: (context, effect) => {
|
|
152
|
+
const { world, caster, point, level } = context;
|
|
153
|
+
townPortal(world, caster, point, valueOf(context, effect.radius, void 0, 7), Math.round(at(effect.count, level, 12)));
|
|
154
|
+
},
|
|
155
|
+
fields: ["count"]
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* Portals, as in classic RTS games: waygates (`UnitTypeDef.waygate`), which a unit told to (a right-click, as any building is
|
|
159
|
+
* walked up to) walks into and comes out of where the gate leads (the "Leads to" field of a placed one, a point of the
|
|
160
|
+
* map; `setWaygate` in code), and the `townPortal` effect (`EffectTypes.townPortal`), which takes the caster and its
|
|
161
|
+
* units around it to its side's home nearest where it was aimed (`homeOf`: the map's `home.<team>` point, or the
|
|
162
|
+
* nearest of its buildings). `portal` and `townPortal` do them in code
|
|
163
|
+
*
|
|
164
|
+
* @beta
|
|
165
|
+
*/
|
|
166
|
+
function portalsPack() {
|
|
167
|
+
const intoGate = defineHook({
|
|
168
|
+
hook: "beforeOrder",
|
|
169
|
+
id: "portals",
|
|
170
|
+
run(world, event) {
|
|
171
|
+
const { order, entity } = event;
|
|
172
|
+
if (order.type !== "move" || order.init.target === void 0) return;
|
|
173
|
+
const gate = world.get(order.init.target);
|
|
174
|
+
if (!gate?.def.waygate || !waygateTarget(world, gate) || !entity.get(moving)) return;
|
|
175
|
+
event.rejected = true;
|
|
176
|
+
giveOrder(world, entity, createOrder(world, {
|
|
177
|
+
type: "enterWaygate",
|
|
178
|
+
target: gate.id
|
|
179
|
+
}, order.groupId), event.queued);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
id: PORTALS,
|
|
184
|
+
orders: [enterOrder],
|
|
185
|
+
components: [waygate],
|
|
186
|
+
events: [portalUsed],
|
|
187
|
+
effects: [townPortalEffect],
|
|
188
|
+
hooks: [intoGate]
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
export { PORTALS, portal, portalUsed, portalsPack, setWaygate, townPortal, waygate, waygateTarget };
|
|
193
|
+
|
|
194
|
+
//# sourceMappingURL=portals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portals.js","names":[],"sources":["../src/portals.ts"],"sourcesContent":["import { defineEffect } from './abilities/effects'\nimport { at } from './defs'\nimport { valueOf } from './abilities/amounts'\nimport { defineComponent } from './components'\nimport { defineEngineEvent } from './events'\nimport { distanceToEdge, type Entity, moving } from './entity'\nimport { homeOf } from './home'\nimport { defineHook } from './hooks'\nimport { distSq, type Vec2 } from './math'\nimport { createOrder, giveOrder } from './orders/queue'\nimport type { GamePack } from './packs/pack'\nimport type { OrderBehavior, OrderParams } from './registry'\nimport { halt, moveToEntity } from './systems/movement'\nimport type { World } from './world'\n\n/*\n * Portals, an opt-in pack (review RV95): waygates, buildings a unit walks into to be elsewhere at once (`waygate`), and\n * the town portal, which takes a hero and its army to their side's home (`townPortal`)\n */\n\n/**\n * The portals pack's id\n *\n * @beta\n */\nexport const PORTALS = 'core.portals'\n\n/**\n * Where a waygate leads: a point of the map by its name (as the editor's field keeps it), or a place. A waygate without\n * it, or with `null`, is shut\n *\n * @beta\n */\nexport const waygate = defineComponent<string | Vec2 | null>({ id: 'core.waygate', field: { name: 'Leads to', hint: 'The point of the map a unit that walks in comes out at', kind: 'point', for: (def) => !!def.waygate } })\n\n/**\n * A unit went through a waygate, or a town portal: told to everyone who sees either end, for a sound and a flash\n *\n * @beta\n */\nexport const portalUsed = defineEngineEvent<{ entity: number; from: Vec2; to: Vec2; gate?: number }>({ id: 'core.portalUsed', replicate: 'everyone' })\n\n/** How near a waygate's edge a unit is in it */\nconst REACH = 0.6\n\n/**\n * Where a waygate leads, or nothing for one that is shut or leads to a point the map does not have\n *\n * @beta\n */\nexport function waygateTarget(world: World, gate: Entity): Vec2 | undefined {\n\tconst to = gate.get(waygate)\n\tif (!to || !gate.alive) return undefined\n\tif (typeof to !== 'string') return to\n\treturn world.map.points.some((point) => point.name === to) ? world.map.point(to) : undefined\n}\n\n/**\n * Says where a waygate leads (a point of the map by its name, or a place), or shuts it (`null`): what the editor's\n * \"Leads to\" field says of a placed one, in code. Any building can be made a waygate so\n *\n * @beta\n */\nexport function setWaygate(gate: Entity, to: string | Vec2 | null): void {\n\tgate.set(waygate, typeof to === 'object' && to ? { x: to.x, z: to.z } : to)\n}\n\n/**\n * Puts a unit somewhere at once, on the nearest ground it can stand on: what a waygate and a town portal do, for a game's\n * own rules. Told to everyone (`portalUsed`)\n *\n * @beta\n */\nexport function portal(world: World, entity: Entity, to: Vec2, gate?: Entity): void {\n\tconst from = { x: entity.pos.x, z: entity.pos.z }\n\tconst spot = (entity.flying ? world.air : world.nav).closestPoint(to, 6) ?? to\n\thalt(world, entity)\n\tworld.place(entity, spot)\n\tentity.prevPos.x = spot.x\n\tentity.prevPos.z = spot.z\n\tworld.events.emit(portalUsed, { entity: entity.id, from, to: { x: spot.x, z: spot.z }, gate: gate?.id })\n}\n\n/** Going through a waygate: walking into it, then out where it leads. Failed when it is shut, or there is no way to it */\nconst enterOrder: OrderBehavior<{ tried?: number }, Pick<OrderParams, 'target'>> = {\n\ttype: 'enterWaygate',\n\taccepts(world, entity, init) {\n\t\tconst gate = world.get(init.target)\n\t\treturn !!entity.get(moving) && !!gate && !!waygateTarget(world, gate)\n\t},\n\tupdate(world, entity, order) {\n\t\tconst gate = world.get(order.init.target)\n\t\tconst to = gate && waygateTarget(world, gate)\n\t\tif (!gate || !to) return 'failed'\n\t\tif (distanceToEdge(entity.pos, gate) - entity.def.radius <= REACH) {\n\t\t\tportal(world, entity, to, gate)\n\t\t\treturn 'done'\n\t\t}\n\t\tconst m = entity.get(moving)!\n\t\tif (m.status === 'moving') return 'running'\n\t\tif (m.status === 'failed' && order.state.tried === world.tick - 1) return 'failed'\n\t\torder.state.tried = world.tick\n\t\tmoveToEntity(world, entity, gate, REACH * 0.5)\n\t\treturn 'running'\n\t}\n}\n\n/** Offsets around a spot, nearest first: where those a town portal brings stand */\nconst AROUND: readonly Vec2[] = (() => {\n\tconst all: Vec2[] = []\n\tfor (let dz = -3; dz <= 3; dz++) for (let dx = -3; dx <= 3; dx++) all.push({ x: dx * 1.2, z: dz * 1.2 })\n\treturn all.sort((a, b) => a.x * a.x + a.z * a.z - (b.x * b.x + b.z * b.z))\n})()\n\n/**\n * Takes a unit and as many as `count` of its owner's units within `radius` of it, nearest first, to its side's home\n * nearest `near` (`homeOf`), spread around it: what the `townPortal` effect does, in code. Gives back who went, none\n * when the side has no home\n *\n * @beta\n */\nexport function townPortal(world: World, caster: Entity, near: Vec2, radius = 7, count = 12): Entity[] {\n\tconst home = homeOf(world, caster.owner, near)\n\tif (!home) return []\n\tconst others = world.spatial\n\t\t.query(caster.pos.x, caster.pos.z, radius)\n\t\t.filter(\n\t\t\t(entity) =>\n\t\t\t\tentity !== caster &&\n\t\t\t\tentity.alive &&\n\t\t\t\t!entity.hidden &&\n\t\t\t\tentity.owner === caster.owner &&\n\t\t\t\t!!entity.get(moving) &&\n\t\t\t\tdistanceToEdge(caster.pos, entity) <= radius\n\t\t)\n\t\t.map((entity) => ({ entity, d: distSq(entity.pos, caster.pos) }))\n\t\t.sort((a, b) => a.d - b.d || a.entity.id - b.entity.id)\n\t\t.slice(0, Math.max(0, count))\n\t\t.map(({ entity }) => entity)\n\tconst going = [caster, ...others]\n\tgoing.forEach((entity, i) => {\n\t\tconst offset = AROUND[i % AROUND.length]\n\t\tportal(world, entity, { x: home.x + offset.x, z: home.z + offset.z })\n\t})\n\treturn going\n}\n\nconst townPortalEffect = defineEffect({ type: 'townPortal', run: (context, effect) => {\n\t\tconst { world, caster, point, level } = context\n\t\ttownPortal(world, caster, point, valueOf(context, effect.radius, undefined, 7), Math.round(at(effect.count, level, 12)))\n\t}, fields: ['count'] })\n\n/**\n * Portals, as in classic RTS games: waygates (`UnitTypeDef.waygate`), which a unit told to (a right-click, as any building is\n * walked up to) walks into and comes out of where the gate leads (the \"Leads to\" field of a placed one, a point of the\n * map; `setWaygate` in code), and the `townPortal` effect (`EffectTypes.townPortal`), which takes the caster and its\n * units around it to its side's home nearest where it was aimed (`homeOf`: the map's `home.<team>` point, or the\n * nearest of its buildings). `portal` and `townPortal` do them in code\n *\n * @beta\n */\nexport function portalsPack(): GamePack {\n\t// told to walk up to a waygate that leads somewhere: through it\n\tconst intoGate = defineHook({\n\t\thook: 'beforeOrder',\n\t\tid: 'portals',\n\t\trun(world, event) {\n\t\t\tconst { order, entity } = event\n\t\t\tif (order.type !== 'move' || order.init.target === undefined) return\n\t\t\tconst gate = world.get(order.init.target)\n\t\t\tif (!gate?.def.waygate || !waygateTarget(world, gate) || !entity.get(moving)) return\n\t\t\tevent.rejected = true\n\t\t\tgiveOrder(world, entity, createOrder(world, { type: 'enterWaygate', target: gate.id }, order.groupId), event.queued)\n\t\t}\n\t})\n\treturn {\n\t\tid: PORTALS,\n\t\torders: [enterOrder],\n\t\tcomponents: [waygate],\n\t\tevents: [portalUsed],\n\t\teffects: [townPortalEffect],\n\t\thooks: [intoGate]\n\t}\n}\n"],"mappings":"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"}
|
package/dist/prefabs.d.ts
CHANGED
|
@@ -7,17 +7,22 @@ import type { World } from './world';
|
|
|
7
7
|
* @beta
|
|
8
8
|
*/
|
|
9
9
|
export interface PrefabObject {
|
|
10
|
+
/** The unit type id to spawn */
|
|
10
11
|
type: string;
|
|
11
12
|
/**
|
|
12
13
|
* Whose: the player the prefab is spawned for (`'owner'`, the default), neutral, the creeps, or a player of the
|
|
13
14
|
* map's by id (a file's objects say the id they had; one that is a player's becomes `'owner'` as the file is read)
|
|
14
15
|
*/
|
|
15
16
|
owner?: 'owner' | 'neutral' | 'creeps' | PlayerId;
|
|
17
|
+
/** Where it stands east-west, in cells from the prefab's middle before the prefab's turn and size */
|
|
16
18
|
x: number;
|
|
19
|
+
/** Where it stands north-south, in cells from the prefab's middle before the prefab's turn and size */
|
|
17
20
|
z: number;
|
|
18
21
|
/** Radians, the way entities face */
|
|
19
22
|
facing?: number;
|
|
23
|
+
/** Size of the entity as a multiple of its type's own; the prefab's scale is applied on top */
|
|
20
24
|
scale?: number;
|
|
25
|
+
/** The id of the look the entity is drawn with, in place of its type's own */
|
|
21
26
|
look?: string;
|
|
22
27
|
/** A name of its own, for the rules to find it by: made free where it is taken (a number added) */
|
|
23
28
|
name?: string;
|
|
@@ -30,16 +35,22 @@ export interface PrefabObject {
|
|
|
30
35
|
* @beta
|
|
31
36
|
*/
|
|
32
37
|
export interface PrefabCamp {
|
|
38
|
+
/** East-west position of the camp from the prefab's middle, in cells */
|
|
33
39
|
x: number;
|
|
40
|
+
/** North-south position of the camp from the prefab's middle, in cells */
|
|
34
41
|
z: number;
|
|
42
|
+
/** Unit type ids of the creeps the camp holds */
|
|
35
43
|
units: string[];
|
|
44
|
+
/** A name for the camp, for the rules to find it by */
|
|
36
45
|
name?: string;
|
|
37
46
|
}
|
|
38
47
|
/** An area the rules watch, of a prefab: its id gets the spawn's own suffix, so that two of one prefab are two areas *
|
|
39
48
|
* @beta
|
|
40
49
|
*/
|
|
41
50
|
export interface PrefabArea {
|
|
51
|
+
/** The area's id before the spawn's own suffix is added, so two spawns of one prefab give two areas */
|
|
42
52
|
id: string;
|
|
53
|
+
/** The area's shape, placed around the prefab's middle */
|
|
43
54
|
shape: AreaShape;
|
|
44
55
|
}
|
|
45
56
|
/** A prefab inside a prefab: spawned with it, its middle where it says from the outer one's, turned and sized with it *
|
|
@@ -48,18 +59,24 @@ export interface PrefabArea {
|
|
|
48
59
|
export interface PrefabInside {
|
|
49
60
|
/** The prefab's id */
|
|
50
61
|
prefab: string;
|
|
62
|
+
/** East-west position of the inner prefab's middle, from the outer one's middle, in cells */
|
|
51
63
|
x: number;
|
|
64
|
+
/** North-south position of the inner prefab's middle, from the outer one's middle, in cells */
|
|
52
65
|
z: number;
|
|
53
66
|
/** Radians, the way facings turn: on top of the outer prefab's turn */
|
|
54
67
|
facing?: number;
|
|
68
|
+
/** Size of the inner prefab as a multiple, on top of the outer prefab's scale */
|
|
55
69
|
scale?: number;
|
|
56
70
|
}
|
|
57
71
|
/** What a prefab is made of, around its middle (0, 0) *
|
|
58
72
|
* @beta
|
|
59
73
|
*/
|
|
60
74
|
export interface PrefabContents {
|
|
75
|
+
/** The units and buildings it spawns */
|
|
61
76
|
objects?: PrefabObject[];
|
|
77
|
+
/** The camps of creeps it spawns */
|
|
62
78
|
camps?: PrefabCamp[];
|
|
79
|
+
/** The areas it adds for the rules to watch */
|
|
63
80
|
areas?: PrefabArea[];
|
|
64
81
|
/** Prefabs inside it, spawned with it (a prefab that holds itself, at any depth, is not spawned past the first) */
|
|
65
82
|
prefabs?: PrefabInside[];
|
|
@@ -73,24 +90,28 @@ export interface PrefabContents {
|
|
|
73
90
|
export interface PrefabDef {
|
|
74
91
|
/** Shared by every game: give it a prefix of the game's (`'td.fortress'`) */
|
|
75
92
|
id: string;
|
|
93
|
+
/** A readable name for the prefab, for tools that list prefabs */
|
|
76
94
|
name?: string;
|
|
95
|
+
/** What the prefab is made of: plain data, or a function of the spawn point and the world that returns it */
|
|
77
96
|
contents: PrefabContents | ((at: Vec2, world: World) => PrefabContents);
|
|
78
97
|
}
|
|
79
98
|
/**
|
|
80
99
|
* Typed help for writing a prefab
|
|
81
100
|
*
|
|
82
|
-
* @
|
|
101
|
+
* @public
|
|
83
102
|
*/
|
|
84
103
|
export declare const definePrefab: (def: PrefabDef) => PrefabDef;
|
|
85
104
|
/** How a prefab is spawned: where its middle goes, for whom, turned and sized *
|
|
86
105
|
* @beta
|
|
87
106
|
*/
|
|
88
107
|
export interface SpawnPrefabOptions {
|
|
108
|
+
/** Where the prefab's middle goes, in world coordinates */
|
|
89
109
|
at: Vec2;
|
|
90
110
|
/** The player the prefab's `'owner'` objects are spawned for: neutral when left out */
|
|
91
111
|
owner?: PlayerId;
|
|
92
112
|
/** Radians, the way facings turn: the prefab turned around its middle */
|
|
93
113
|
facing?: number;
|
|
114
|
+
/** Size multiplier of the prefab around its middle; whole size when left out */
|
|
94
115
|
scale?: number;
|
|
95
116
|
/** Parts left out, by their index in the prefab's lists: a gate without its towers */
|
|
96
117
|
without?: {
|
|
@@ -104,7 +125,9 @@ export interface SpawnPrefabOptions {
|
|
|
104
125
|
* @beta
|
|
105
126
|
*/
|
|
106
127
|
export interface SpawnedPrefab {
|
|
128
|
+
/** The units and buildings spawned */
|
|
107
129
|
entities: Entity[];
|
|
130
|
+
/** The camps of creeps spawned */
|
|
108
131
|
camps: Camp[];
|
|
109
132
|
/** The ids of the areas added */
|
|
110
133
|
areas: string[];
|
|
@@ -132,7 +155,7 @@ export declare function nestedPartId(nested: number, id: number): number;
|
|
|
132
155
|
* variant is read through its source and a prefab with prefabs inside through those, as the editor places them, from
|
|
133
156
|
* the files given
|
|
134
157
|
*
|
|
135
|
-
* @
|
|
158
|
+
* @public
|
|
136
159
|
*/
|
|
137
160
|
export declare function prefabsFrom(files: Record<string, unknown>, options?: {
|
|
138
161
|
prefix?: string;
|