@v12-engine/engine 0.1.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abilities/amounts.d.ts +28 -0
- package/dist/abilities/amounts.js +74 -0
- package/dist/abilities/amounts.js.map +1 -0
- package/dist/abilities/buffs.d.ts +106 -6
- package/dist/abilities/buffs.js +443 -0
- package/dist/abilities/buffs.js.map +1 -0
- package/dist/abilities/castTold.d.ts +2 -0
- package/dist/abilities/castTold.js +66 -0
- package/dist/abilities/castTold.js.map +1 -0
- package/dist/abilities/chance.d.ts +38 -0
- package/dist/abilities/chance.js +77 -0
- package/dist/abilities/chance.js.map +1 -0
- package/dist/abilities/charges.d.ts +18 -0
- package/dist/abilities/charges.js +101 -0
- package/dist/abilities/charges.js.map +1 -0
- package/dist/abilities/control.d.ts +28 -0
- package/dist/abilities/control.js +113 -0
- package/dist/abilities/control.js.map +1 -0
- package/dist/abilities/dispel.js +51 -0
- package/dist/abilities/dispel.js.map +1 -0
- package/dist/abilities/effectFields.d.ts +1 -1
- package/dist/abilities/effectFields.js +676 -0
- package/dist/abilities/effectFields.js.map +1 -0
- package/dist/abilities/effectIndex.d.ts +27 -0
- package/dist/abilities/effectIndex.js +64 -0
- package/dist/abilities/effectIndex.js.map +1 -0
- package/dist/abilities/effects/buff.d.ts +9 -3
- package/dist/abilities/effects/buff.js +84 -0
- package/dist/abilities/effects/buff.js.map +1 -0
- package/dist/abilities/effects/conditions.d.ts +2 -0
- package/dist/abilities/effects/conditions.js +41 -0
- package/dist/abilities/effects/conditions.js.map +1 -0
- package/dist/abilities/effects/core.js +54 -0
- package/dist/abilities/effects/core.js.map +1 -0
- package/dist/abilities/effects/damage.d.ts +1 -1
- package/dist/abilities/effects/damage.js +43 -0
- package/dist/abilities/effects/damage.js.map +1 -0
- package/dist/abilities/effects/heal.d.ts +2 -2
- package/dist/abilities/effects/heal.js +51 -0
- package/dist/abilities/effects/heal.js.map +1 -0
- package/dist/abilities/effects/missile.d.ts +13 -1
- package/dist/abilities/effects/missile.js +104 -0
- package/dist/abilities/effects/missile.js.map +1 -0
- package/dist/abilities/effects/morph.d.ts +5 -0
- package/dist/abilities/effects/morph.js +43 -0
- package/dist/abilities/effects/morph.js.map +1 -0
- package/dist/abilities/effects/moves.d.ts +16 -4
- package/dist/abilities/effects/moves.js +212 -0
- package/dist/abilities/effects/moves.js.map +1 -0
- package/dist/abilities/effects/passives.d.ts +19 -9
- package/dist/abilities/effects/passives.js +131 -0
- package/dist/abilities/effects/passives.js.map +1 -0
- package/dist/abilities/effects/proxy.d.ts +5 -0
- package/dist/abilities/effects/proxy.js +60 -0
- package/dist/abilities/effects/proxy.js.map +1 -0
- package/dist/abilities/effects/sight.d.ts +2 -2
- package/dist/abilities/effects/sight.js +39 -0
- package/dist/abilities/effects/sight.js.map +1 -0
- package/dist/abilities/effects/spawn.d.ts +5 -2
- package/dist/abilities/effects/spawn.js +40 -0
- package/dist/abilities/effects/spawn.js.map +1 -0
- package/dist/abilities/effects/timed.d.ts +2 -2
- package/dist/abilities/effects/timed.js +96 -0
- package/dist/abilities/effects/timed.js.map +1 -0
- package/dist/abilities/effects/trade.d.ts +1 -1
- package/dist/abilities/effects/trade.js +25 -0
- package/dist/abilities/effects/trade.js.map +1 -0
- package/dist/abilities/effects.d.ts +97 -23
- package/dist/abilities/effects.js +860 -0
- package/dist/abilities/effects.js.map +1 -0
- package/dist/abilities/land.d.ts +38 -4
- package/dist/abilities/land.js +189 -0
- package/dist/abilities/land.js.map +1 -0
- package/dist/abilities/recast.d.ts +45 -0
- package/dist/abilities/recast.js +118 -0
- package/dist/abilities/recast.js.map +1 -0
- package/dist/abilities/scaled.js +40 -0
- package/dist/abilities/scaled.js.map +1 -0
- package/dist/abilities/screen.d.ts +6 -0
- package/dist/abilities/screen.js +83 -0
- package/dist/abilities/screen.js.map +1 -0
- package/dist/abilities/shapes.d.ts +66 -0
- package/dist/abilities/shapes.js +122 -0
- package/dist/abilities/shapes.js.map +1 -0
- package/dist/abilities/text.d.ts +14 -2
- package/dist/abilities/text.js +204 -0
- package/dist/abilities/text.js.map +1 -0
- package/dist/abilities/triggers.d.ts +98 -0
- package/dist/abilities/triggers.js +351 -0
- package/dist/abilities/triggers.js.map +1 -0
- package/dist/abilityChanges.d.ts +131 -0
- package/dist/abilityChanges.js +345 -0
- package/dist/abilityChanges.js.map +1 -0
- package/dist/ai/area.d.ts +4 -1
- package/dist/ai/brain.d.ts +4 -1
- package/dist/ai/brain.js +844 -0
- package/dist/ai/brain.js.map +1 -0
- package/dist/ai/budget.js +74 -0
- package/dist/ai/budget.js.map +1 -0
- package/dist/ai/checks.d.ts +9 -1
- package/dist/ai/checks.js +242 -0
- package/dist/ai/checks.js.map +1 -0
- package/dist/ai/computer.d.ts +11 -4
- package/dist/ai/computer.js +251 -0
- package/dist/ai/computer.js.map +1 -0
- package/dist/ai/defence.d.ts +4 -0
- package/dist/ai/defence.js +430 -0
- package/dist/ai/defence.js.map +1 -0
- package/dist/ai/define.d.ts +3 -2
- package/dist/ai/define.js +31 -0
- package/dist/ai/define.js.map +1 -0
- package/dist/ai/economy.d.ts +10 -7
- package/dist/ai/economy.js +780 -0
- package/dist/ai/economy.js.map +1 -0
- package/dist/ai/geometry.js +38 -0
- package/dist/ai/geometry.js.map +1 -0
- package/dist/ai/goals.d.ts +1 -0
- package/dist/ai/goals.js +560 -0
- package/dist/ai/goals.js.map +1 -0
- package/dist/ai/knowledge.d.ts +72 -7
- package/dist/ai/knowledge.js +804 -0
- package/dist/ai/knowledge.js.map +1 -0
- package/dist/ai/lanes.d.ts +10 -2
- package/dist/ai/lanes.js +715 -0
- package/dist/ai/lanes.js.map +1 -0
- package/dist/ai/melee/build.js +264 -0
- package/dist/ai/melee/build.js.map +1 -0
- package/dist/ai/melee/goals.d.ts +7 -0
- package/dist/ai/melee/goals.js +720 -0
- package/dist/ai/melee/goals.js.map +1 -0
- package/dist/ai/melee/heroes.js +68 -0
- package/dist/ai/melee/heroes.js.map +1 -0
- package/dist/ai/melee/index.d.ts +1 -1
- package/dist/ai/melee/index.js +51 -0
- package/dist/ai/melee/index.js.map +1 -0
- package/dist/ai/melee/production.js +29 -0
- package/dist/ai/melee/production.js.map +1 -0
- package/dist/ai/melee/surrender.js +64 -0
- package/dist/ai/melee/surrender.js.map +1 -0
- package/dist/ai/micro.d.ts +9 -0
- package/dist/ai/micro.js +1316 -0
- package/dist/ai/micro.js.map +1 -0
- package/dist/ai/mission.d.ts +9 -2
- package/dist/ai/mission.js +538 -0
- package/dist/ai/mission.js.map +1 -0
- package/dist/ai/missionRules.d.ts +1 -1
- package/dist/ai/missionRules.js +26 -0
- package/dist/ai/missionRules.js.map +1 -0
- package/dist/ai/module.d.ts +6 -2
- package/dist/ai/module.js +37 -0
- package/dist/ai/module.js.map +1 -0
- package/dist/ai/options.d.ts +3 -3
- package/dist/ai/plans/build.d.ts +20 -1
- package/dist/ai/plans/build.js +608 -0
- package/dist/ai/plans/build.js.map +1 -0
- package/dist/ai/plans/placement.d.ts +4 -1
- package/dist/ai/plans/placement.js +295 -0
- package/dist/ai/plans/placement.js.map +1 -0
- package/dist/ai/plans/plans.d.ts +9 -0
- package/dist/ai/plans/plans.js +110 -0
- package/dist/ai/plans/plans.js.map +1 -0
- package/dist/ai/plans/production.d.ts +14 -2
- package/dist/ai/plans/production.js +434 -0
- package/dist/ai/plans/production.js.map +1 -0
- package/dist/ai/plans/purse.d.ts +6 -3
- package/dist/ai/plans/purse.js +139 -0
- package/dist/ai/plans/purse.js.map +1 -0
- package/dist/ai/plans/tech.d.ts +6 -0
- package/dist/ai/plans/tech.js +122 -0
- package/dist/ai/plans/tech.js.map +1 -0
- package/dist/ai/profiles.d.ts +4 -4
- package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
- package/dist/ai/profiles.js.map +1 -0
- package/dist/ai/reach.js +54 -0
- package/dist/ai/reach.js.map +1 -0
- package/dist/ai/report.d.ts +8 -0
- package/dist/ai/report.js +87 -0
- package/dist/ai/report.js.map +1 -0
- package/dist/ai/roles.d.ts +4 -0
- package/dist/ai/roles.js +207 -0
- package/dist/ai/roles.js.map +1 -0
- package/dist/ai/rules.d.ts +8 -2
- package/dist/ai/rules.js +416 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/ai/scouting.d.ts +6 -0
- package/dist/ai/scouting.js +324 -0
- package/dist/ai/scouting.js.map +1 -0
- package/dist/ai/settings.js +99 -0
- package/dist/ai/settings.js.map +1 -0
- package/dist/ai/squads.d.ts +21 -2
- package/dist/ai/squads.js +916 -0
- package/dist/ai/squads.js.map +1 -0
- package/dist/ai/strength.js +320 -0
- package/dist/ai/strength.js.map +1 -0
- package/dist/ai/task.d.ts +3 -1
- package/dist/ai/task.js +17 -0
- package/dist/ai/task.js.map +1 -0
- package/dist/ai/tasks/attack.js +24 -0
- package/dist/ai/tasks/attack.js.map +1 -0
- package/dist/ai/tasks/capture.d.ts +3 -3
- package/dist/ai/tasks/capture.js +37 -0
- package/dist/ai/tasks/capture.js.map +1 -0
- package/dist/ai/tasks/creep.js +29 -0
- package/dist/ai/tasks/creep.js.map +1 -0
- package/dist/ai/tasks/defend.js +61 -0
- package/dist/ai/tasks/defend.js.map +1 -0
- package/dist/ai/tasks/drop.js +81 -0
- package/dist/ai/tasks/drop.js.map +1 -0
- package/dist/ai/tasks/escort.js +59 -0
- package/dist/ai/tasks/escort.js.map +1 -0
- package/dist/ai/tasks/gather.js +48 -0
- package/dist/ai/tasks/gather.js.map +1 -0
- package/dist/ai/tasks/harass.js +39 -0
- package/dist/ai/tasks/harass.js.map +1 -0
- package/dist/ai/tasks/hold.js +32 -0
- package/dist/ai/tasks/hold.js.map +1 -0
- package/dist/ai/tasks/index.js +34 -0
- package/dist/ai/tasks/index.js.map +1 -0
- package/dist/ai/tasks/move.js +26 -0
- package/dist/ai/tasks/move.js.map +1 -0
- package/dist/ai/tasks/patrol.js +59 -0
- package/dist/ai/tasks/patrol.js.map +1 -0
- package/dist/ai/tasks/retreat.js +28 -0
- package/dist/ai/tasks/retreat.js.map +1 -0
- package/dist/ai/tasks/scout.js +73 -0
- package/dist/ai/tasks/scout.js.map +1 -0
- package/dist/ai/tasks/shared.d.ts +1 -1
- package/dist/ai/tasks/shared.js +137 -0
- package/dist/ai/tasks/shared.js.map +1 -0
- package/dist/ai/team.d.ts +18 -1
- package/dist/ai/team.js +492 -0
- package/dist/ai/team.js.map +1 -0
- package/dist/ai/threat.d.ts +6 -0
- package/dist/ai/threat.js +206 -0
- package/dist/ai/threat.js.map +1 -0
- package/dist/ai/view.d.ts +21 -7
- package/dist/ai/view.js +677 -0
- package/dist/ai/view.js.map +1 -0
- package/dist/ai/waves.d.ts +6 -0
- package/dist/ai/waves.js +410 -0
- package/dist/ai/waves.js.map +1 -0
- package/dist/ai.js +54 -6239
- package/dist/aiTesting.d.ts +6 -3
- package/dist/aiTesting.js +229 -0
- package/dist/aiTesting.js.map +1 -0
- package/dist/areas.d.ts +4 -1
- package/dist/areas.js +295 -0
- package/dist/areas.js.map +1 -0
- package/dist/attacks.d.ts +3 -3
- package/dist/attacks.js +127 -0
- package/dist/attacks.js.map +1 -0
- package/dist/burning.d.ts +267 -0
- package/dist/burning.js +795 -0
- package/dist/burning.js.map +1 -0
- package/dist/bytes.js +21 -0
- package/dist/bytes.js.map +1 -0
- package/dist/callings.d.ts +71 -0
- package/dist/callings.js +157 -0
- package/dist/callings.js.map +1 -0
- package/dist/cameraOrders.d.ts +78 -0
- package/dist/cameraOrders.js +114 -0
- package/dist/cameraOrders.js.map +1 -0
- package/dist/camps.d.ts +70 -4
- package/dist/camps.js +501 -0
- package/dist/camps.js.map +1 -0
- package/dist/capture.d.ts +15 -3
- package/dist/capture.js +304 -0
- package/dist/capture.js.map +1 -0
- package/dist/cellLayers.d.ts +78 -13
- package/dist/cellLayers.js +275 -0
- package/dist/cellLayers.js.map +1 -0
- package/dist/cellPatches.d.ts +24 -0
- package/dist/cellPatches.js +73 -0
- package/dist/cellPatches.js.map +1 -0
- package/dist/cinematics.d.ts +10 -5
- package/dist/cinematics.js +161 -0
- package/dist/cinematics.js.map +1 -0
- package/dist/clock.d.ts +2 -2
- package/dist/clock.js +78 -0
- package/dist/clock.js.map +1 -0
- package/dist/commands.d.ts +36 -4
- package/dist/commands.js +636 -0
- package/dist/commands.js.map +1 -0
- package/dist/components.d.ts +31 -10
- package/dist/components.js +74 -0
- package/dist/components.js.map +1 -0
- package/dist/computers.d.ts +4 -4
- package/dist/computers.js +194 -0
- package/dist/computers.js.map +1 -0
- package/dist/concealment.d.ts +25 -2
- package/dist/concealment.js +409 -0
- package/dist/concealment.js.map +1 -0
- package/dist/coreComponents.js +130 -0
- package/dist/coreComponents.js.map +1 -0
- package/dist/createGame.d.ts +306 -0
- package/dist/createGame.js +405 -0
- package/dist/createGame.js.map +1 -0
- package/dist/dashing.d.ts +18 -2
- package/dist/dashing.js +41 -0
- package/dist/dashing.js.map +1 -0
- package/dist/debug.d.ts +8 -0
- package/dist/debug.js +5 -3
- package/dist/debug2.js +76 -0
- package/dist/debug2.js.map +1 -0
- package/dist/debugCommands.d.ts +6 -6
- package/dist/debugCommands.js +537 -0
- package/dist/debugCommands.js.map +1 -0
- package/dist/debugging.d.ts +1 -0
- package/dist/defaultSets.d.ts +183 -0
- package/dist/defaultSets.js +216 -0
- package/dist/defaultSets.js.map +1 -0
- package/dist/definitions.d.ts +6 -0
- package/dist/definitions.js +78 -0
- package/dist/definitions.js.map +1 -0
- package/dist/defs.d.ts +1895 -165
- package/dist/defs.js +380 -0
- package/dist/defs.js.map +1 -0
- package/dist/denying.d.ts +4 -4
- package/dist/denying.js +106 -0
- package/dist/denying.js.map +1 -0
- package/dist/destructibles.d.ts +2 -2
- package/dist/destructibles.js +36 -0
- package/dist/destructibles.js.map +1 -0
- package/dist/determinism.d.ts +4 -4
- package/dist/determinism.js +247 -0
- package/dist/determinism.js.map +1 -0
- package/dist/dialog.d.ts +17 -2
- package/dist/dialog.js +108 -0
- package/dist/dialog.js.map +1 -0
- package/dist/effectRefs.js +28 -0
- package/dist/effectRefs.js.map +1 -0
- package/dist/effects.d.ts +27 -11
- package/dist/effects.js +110 -0
- package/dist/effects.js.map +1 -0
- package/dist/endings.d.ts +1 -1
- package/dist/endings.js +78 -0
- package/dist/endings.js.map +1 -0
- package/dist/engagement.d.ts +40 -6
- package/dist/engagement.js +530 -0
- package/dist/engagement.js.map +1 -0
- package/dist/engineEvents.d.ts +72 -9
- package/dist/engineEvents.js +520 -0
- package/dist/engineEvents.js.map +1 -0
- package/dist/entity.d.ts +275 -26
- package/dist/entity.js +441 -0
- package/dist/entity.js.map +1 -0
- package/dist/entityIndex.d.ts +10 -3
- package/dist/entityIndex.js +149 -0
- package/dist/entityIndex.js.map +1 -0
- package/dist/errors.d.ts +6 -2
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +11 -5
- package/dist/events.js +158 -0
- package/dist/events.js.map +1 -0
- package/dist/exactMath.js +273 -0
- package/dist/exactMath.js.map +1 -0
- package/dist/features.d.ts +1 -1
- package/dist/features.js +127 -0
- package/dist/features.js.map +1 -0
- package/dist/fields.d.ts +25 -5
- package/dist/fields.js +140 -0
- package/dist/fields.js.map +1 -0
- package/dist/fixture.d.ts +3 -3
- package/dist/fixture.js +512 -0
- package/dist/fixture.js.map +1 -0
- package/dist/fog.d.ts +26 -3
- package/dist/fog.js +333 -0
- package/dist/fog.js.map +1 -0
- package/dist/foliage.d.ts +476 -0
- package/dist/foliage.js +1478 -0
- package/dist/foliage.js.map +1 -0
- package/dist/foliageDebug.d.ts +57 -0
- package/dist/foliageDebug.js +172 -0
- package/dist/foliageDebug.js.map +1 -0
- package/dist/foliageRegrowth.d.ts +20 -0
- package/dist/foliageRegrowth.js +332 -0
- package/dist/foliageRegrowth.js.map +1 -0
- package/dist/formState.d.ts +67 -0
- package/dist/formState.js +65 -0
- package/dist/formState.js.map +1 -0
- package/dist/formation.d.ts +46 -8
- package/dist/formation.js +297 -0
- package/dist/formation.js.map +1 -0
- package/dist/forms.d.ts +58 -0
- package/dist/forms.js +146 -0
- package/dist/forms.js.map +1 -0
- package/dist/friendlyFire.d.ts +2 -2
- package/dist/friendlyFire.js +37 -0
- package/dist/friendlyFire.js.map +1 -0
- package/dist/game.d.ts +141 -48
- package/dist/game.js +834 -0
- package/dist/game.js.map +1 -0
- package/dist/gameData.d.ts +96 -22
- package/dist/gameData.js +1690 -0
- package/dist/gameData.js.map +1 -0
- package/dist/gameFiles.d.ts +3 -3
- package/dist/gameFiles.js +14 -0
- package/dist/gameFiles.js.map +1 -0
- package/dist/gates.js +92 -0
- package/dist/gates.js.map +1 -0
- package/dist/generate.d.ts +28 -1
- package/dist/generate.js +1062 -0
- package/dist/generate.js.map +1 -0
- package/dist/generateWorker.d.ts +7 -3
- package/dist/generateWorker.js +86 -0
- package/dist/generateWorker.js.map +1 -0
- package/dist/grid.d.ts +9 -0
- package/dist/grid.js +102 -0
- package/dist/grid.js.map +1 -0
- package/dist/ground.d.ts +17 -1
- package/dist/ground.js +375 -0
- package/dist/ground.js.map +1 -0
- package/dist/groundObjects.d.ts +70 -0
- package/dist/groundObjects.js +371 -0
- package/dist/groundObjects.js.map +1 -0
- package/dist/groundSpeed.d.ts +20 -3
- package/dist/groundSpeed.js +117 -0
- package/dist/groundSpeed.js.map +1 -0
- package/dist/hero.d.ts +126 -10
- package/dist/hero.js +432 -0
- package/dist/hero.js.map +1 -0
- package/dist/holds.d.ts +94 -0
- package/dist/holds.js +305 -0
- package/dist/holds.js.map +1 -0
- package/dist/home.d.ts +1 -1
- package/dist/home.js +30 -0
- package/dist/home.js.map +1 -0
- package/dist/hooks.d.ts +339 -57
- package/dist/hooks.js +105 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hotReload.d.ts +6 -5
- package/dist/hotReload.js +145 -0
- package/dist/hotReload.js.map +1 -0
- package/dist/ids.d.ts +3 -3
- package/dist/ids.js +30 -0
- package/dist/ids.js.map +1 -0
- package/dist/idsFile.d.ts +36 -0
- package/dist/idsFile.js +134 -0
- package/dist/idsFile.js.map +1 -0
- package/dist/index.d.ts +105 -68
- package/dist/index.js +194 -4701
- package/dist/inspect.d.ts +29 -2
- package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
- package/dist/inspect.js.map +1 -0
- package/dist/inventory.d.ts +14 -1
- package/dist/inventory.js +84 -0
- package/dist/inventory.js.map +1 -0
- package/dist/items.d.ts +136 -8
- package/dist/items.js +585 -0
- package/dist/items.js.map +1 -0
- package/dist/lanes.d.ts +12 -3
- package/dist/lanes.js +496 -0
- package/dist/lanes.js.map +1 -0
- package/dist/life.d.ts +6 -2
- package/dist/life.js +287 -0
- package/dist/life.js.map +1 -0
- package/dist/log.d.ts +26 -3
- package/dist/log.js +192 -0
- package/dist/log.js.map +1 -0
- package/dist/manaBurn.d.ts +2 -2
- package/dist/manaBurn.js +75 -0
- package/dist/manaBurn.js.map +1 -0
- package/dist/map/file.d.ts +56 -3
- package/dist/map/file.js +264 -0
- package/dist/map/file.js.map +1 -0
- package/dist/map/images.js +61 -0
- package/dist/map/images.js.map +1 -0
- package/dist/map/look.d.ts +1 -1
- package/dist/map/look.js +30 -0
- package/dist/map/look.js.map +1 -0
- package/dist/map/pathProfile.js +183 -0
- package/dist/map/pathProfile.js.map +1 -0
- package/dist/map/resize.d.ts +4 -0
- package/dist/map/resize.js +136 -0
- package/dist/map/resize.js.map +1 -0
- package/dist/map/schema.js +257 -0
- package/dist/map/schema.js.map +1 -0
- package/dist/map/terrain.js +214 -0
- package/dist/map/terrain.js.map +1 -0
- package/dist/map/types.d.ts +92 -13
- package/dist/map/types.js +251 -0
- package/dist/map/types.js.map +1 -0
- package/dist/mapCheck/cells.js +94 -0
- package/dist/mapCheck/cells.js.map +1 -0
- package/dist/mapCheck/rules/foliage.d.ts +9 -0
- package/dist/mapCheck/rules/foliage.js +83 -0
- package/dist/mapCheck/rules/foliage.js.map +1 -0
- package/dist/mapCheck/rules/names.js +39 -0
- package/dist/mapCheck/rules/names.js.map +1 -0
- package/dist/mapCheck/rules/objects.d.ts +1 -1
- package/dist/mapCheck/rules/objects.js +56 -0
- package/dist/mapCheck/rules/objects.js.map +1 -0
- package/dist/mapCheck/rules/paths.js +32 -0
- package/dist/mapCheck/rules/paths.js.map +1 -0
- package/dist/mapCheck/rules/players.js +20 -0
- package/dist/mapCheck/rules/players.js.map +1 -0
- package/dist/mapCheck/rules/races.js +56 -0
- package/dist/mapCheck/rules/races.js.map +1 -0
- package/dist/mapCheck/rules/random.js +47 -0
- package/dist/mapCheck/rules/random.js.map +1 -0
- package/dist/mapCheck/rules/regions.js +30 -0
- package/dist/mapCheck/rules/regions.js.map +1 -0
- package/dist/mapCheck/rules/targets.js +31 -0
- package/dist/mapCheck/rules/targets.js.map +1 -0
- package/dist/mapCheck/rules/walking.js +45 -0
- package/dist/mapCheck/rules/walking.js.map +1 -0
- package/dist/mapCheck.d.ts +2 -2
- package/dist/mapCheck.js +63 -0
- package/dist/mapCheck.js.map +1 -0
- package/dist/mapFields.d.ts +25 -2
- package/dist/mapFields.js +134 -0
- package/dist/mapFields.js.map +1 -0
- package/dist/mapFile.js +176 -0
- package/dist/mapFile.js.map +1 -0
- package/dist/mapMeasure.d.ts +8 -0
- package/dist/mapMeasure.js +283 -0
- package/dist/mapMeasure.js.map +1 -0
- package/dist/mapMerge.d.ts +1 -0
- package/dist/mapMerge.js +172 -0
- package/dist/mapMerge.js.map +1 -0
- package/dist/mapObjectives.js +138 -0
- package/dist/mapObjectives.js.map +1 -0
- package/dist/mapObjects.js +80 -0
- package/dist/mapObjects.js.map +1 -0
- package/dist/math.d.ts +37 -7
- package/dist/math.js +155 -0
- package/dist/math.js.map +1 -0
- package/dist/messages.d.ts +71 -4
- package/dist/messages.js +29 -0
- package/dist/messages.js.map +1 -0
- package/dist/missionRules.d.ts +10 -2
- package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
- package/dist/missionRules.js.map +1 -0
- package/dist/mods.d.ts +39 -20
- package/dist/mods.js +271 -0
- package/dist/mods.js.map +1 -0
- package/dist/moves.d.ts +87 -0
- package/dist/moves.js +539 -0
- package/dist/moves.js.map +1 -0
- package/dist/names.d.ts +7 -0
- package/dist/names.js +122 -0
- package/dist/names.js.map +1 -0
- package/dist/navigation/agentParams.js +14 -0
- package/dist/navigation/agentParams.js.map +1 -0
- package/dist/navigation/air.d.ts +7 -3
- package/dist/navigation/air.js +401 -0
- package/dist/navigation/air.js.map +1 -0
- package/dist/navigation/builds.d.ts +34 -2
- package/dist/navigation/builds.js +287 -0
- package/dist/navigation/builds.js.map +1 -0
- package/dist/navigation/groundAreas.d.ts +59 -1
- package/dist/navigation/groundAreas.js +407 -0
- package/dist/navigation/groundAreas.js.map +1 -0
- package/dist/navigation/navigation.d.ts +98 -9
- package/dist/navigation/recast.d.ts +194 -18
- package/dist/navigation/recast.js +1379 -0
- package/dist/navigation/recast.js.map +1 -0
- package/dist/navigation/sidePaths.d.ts +8 -3
- package/dist/navigation/sidePaths.js +241 -0
- package/dist/navigation/sidePaths.js.map +1 -0
- package/dist/navigation/sized.js +243 -0
- package/dist/navigation/sized.js.map +1 -0
- package/dist/nearest.js +32 -0
- package/dist/nearest.js.map +1 -0
- package/dist/noise.js +59 -0
- package/dist/noise.js.map +1 -0
- package/dist/objectives.d.ts +12 -3
- package/dist/objectives.js +144 -0
- package/dist/objectives.js.map +1 -0
- package/dist/orders/basic.d.ts +5 -5
- package/dist/orders/basic.js +417 -0
- package/dist/orders/basic.js.map +1 -0
- package/dist/orders/build.js +278 -0
- package/dist/orders/build.js.map +1 -0
- package/dist/orders/cast.d.ts +13 -3
- package/dist/orders/cast.js +558 -0
- package/dist/orders/cast.js.map +1 -0
- package/dist/orders/facts.js +16 -0
- package/dist/orders/facts.js.map +1 -0
- package/dist/orders/harvest.d.ts +21 -5
- package/dist/orders/harvest.js +540 -0
- package/dist/orders/harvest.js.map +1 -0
- package/dist/orders/idle.d.ts +3 -1
- package/dist/orders/idle.js +234 -0
- package/dist/orders/idle.js.map +1 -0
- package/dist/orders/items.js +92 -0
- package/dist/orders/items.js.map +1 -0
- package/dist/orders/queue.js +108 -0
- package/dist/orders/queue.js.map +1 -0
- package/dist/orders/waiting.d.ts +39 -0
- package/dist/orders/waiting.js +149 -0
- package/dist/orders/waiting.js.map +1 -0
- package/dist/pack.schema.js +13 -0
- package/dist/pack.schema.js.map +1 -0
- package/dist/pack.schema.json +7622 -841
- package/dist/packs/director/index.d.ts +13 -5
- package/dist/packs/director/index.js +204 -0
- package/dist/packs/director/index.js.map +1 -0
- package/dist/packs/heroes/campaign.d.ts +3 -2
- package/dist/packs/heroes/campaign.js +241 -0
- package/dist/packs/heroes/campaign.js.map +1 -0
- package/dist/packs/heroes/carry.d.ts +6 -0
- package/dist/packs/heroes/carry.js +112 -0
- package/dist/packs/heroes/carry.js.map +1 -0
- package/dist/packs/heroes/commands.js +115 -0
- package/dist/packs/heroes/commands.js.map +1 -0
- package/dist/packs/heroes/fallen.d.ts +43 -0
- package/dist/packs/heroes/fallen.js +61 -0
- package/dist/packs/heroes/fallen.js.map +1 -0
- package/dist/packs/heroes/hire.js +60 -0
- package/dist/packs/heroes/hire.js.map +1 -0
- package/dist/packs/heroes/index.d.ts +7 -6
- package/dist/packs/heroes/index.js +130 -0
- package/dist/packs/heroes/index.js.map +1 -0
- package/dist/packs/heroes/loop.d.ts +95 -0
- package/dist/packs/heroes/loop.js +250 -0
- package/dist/packs/heroes/loop.js.map +1 -0
- package/dist/packs/heroes/making.d.ts +6 -3
- package/dist/packs/heroes/making.js +55 -0
- package/dist/packs/heroes/making.js.map +1 -0
- package/dist/packs/heroes/respawn.d.ts +3 -3
- package/dist/packs/heroes/respawn.js +87 -0
- package/dist/packs/heroes/respawn.js.map +1 -0
- package/dist/packs/heroes/sets.d.ts +32 -0
- package/dist/packs/heroes/sets.js +51 -0
- package/dist/packs/heroes/sets.js.map +1 -0
- package/dist/packs/heroes/spells.d.ts +16 -0
- package/dist/packs/heroes/spells.js +269 -0
- package/dist/packs/heroes/spells.js.map +1 -0
- package/dist/packs/items/defaults.d.ts +43 -0
- package/dist/packs/items/defaults.js +1504 -0
- package/dist/packs/items/defaults.js.map +1 -0
- package/dist/packs/items/index.d.ts +27 -0
- package/dist/packs/items/index.js +214 -0
- package/dist/packs/items/index.js.map +1 -0
- package/dist/packs/moba/index.d.ts +3 -3
- package/dist/packs/moba/index.js +174 -0
- package/dist/packs/moba/index.js.map +1 -0
- package/dist/packs/pack.d.ts +15 -15
- package/dist/packs/pack.js +14 -0
- package/dist/packs/pack.js.map +1 -0
- package/dist/packs.d.ts +15 -7
- package/dist/packs.js +222 -0
- package/dist/packs.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +109 -0
- package/dist/paths.js.map +1 -0
- package/dist/plain.js +57 -0
- package/dist/plain.js.map +1 -0
- package/dist/player.d.ts +33 -10
- package/dist/player.js +159 -0
- package/dist/player.js.map +1 -0
- package/dist/portals.d.ts +1 -1
- package/dist/portals.js +194 -0
- package/dist/portals.js.map +1 -0
- package/dist/prefabs.d.ts +25 -2
- package/dist/prefabs.js +239 -0
- package/dist/prefabs.js.map +1 -0
- package/dist/presetBuildings.js +58 -0
- package/dist/presetBuildings.js.map +1 -0
- package/dist/presetFoliage.d.ts +27 -0
- package/dist/presetFoliage.js +98 -0
- package/dist/presetFoliage.js.map +1 -0
- package/dist/presetGround.js +65 -0
- package/dist/presetGround.js.map +1 -0
- package/dist/proxies.d.ts +12 -0
- package/dist/proxies.js +79 -0
- package/dist/proxies.js.map +1 -0
- package/dist/query.d.ts +56 -0
- package/dist/query.js +88 -0
- package/dist/query.js.map +1 -0
- package/dist/races.d.ts +15 -14
- package/dist/races.js +172 -0
- package/dist/races.js.map +1 -0
- package/dist/randomGroups.js +91 -0
- package/dist/randomGroups.js.map +1 -0
- package/dist/registry.d.ts +117 -53
- package/dist/registry.js +323 -0
- package/dist/registry.js.map +1 -0
- package/dist/remains.d.ts +11 -9
- package/dist/remains.js +188 -0
- package/dist/remains.js.map +1 -0
- package/dist/replication.d.ts +12 -7
- package/dist/replication.js +100 -0
- package/dist/replication.js.map +1 -0
- package/dist/rng.d.ts +2 -0
- package/dist/rng.js +40 -0
- package/dist/rng.js.map +1 -0
- package/dist/rules.d.ts +186 -99
- package/dist/rules.js +179 -0
- package/dist/rules.js.map +1 -0
- package/dist/rulesCheck.d.ts +5 -4
- package/dist/rulesCheck.js +693 -0
- package/dist/rulesCheck.js.map +1 -0
- package/dist/runes.d.ts +2 -2
- package/dist/runes.js +80 -0
- package/dist/runes.js.map +1 -0
- package/dist/save.d.ts +37 -12
- package/dist/save.js +532 -0
- package/dist/save.js.map +1 -0
- package/dist/scenario.d.ts +2 -2
- package/dist/scenario.js +99 -0
- package/dist/scenario.js.map +1 -0
- package/dist/scheduler.d.ts +3 -0
- package/dist/scheduler.js +156 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/score.d.ts +19 -19
- package/dist/score.js +709 -0
- package/dist/score.js.map +1 -0
- package/dist/sequences.d.ts +10 -6
- package/dist/sequences.js +206 -0
- package/dist/sequences.js.map +1 -0
- package/dist/server/doorman.js +154 -0
- package/dist/server/doorman.js.map +1 -0
- package/dist/server/gameServer.d.ts +16 -1
- package/dist/server/gameServer.js +643 -0
- package/dist/server/gameServer.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/lobby.js +199 -0
- package/dist/server/lobby.js.map +1 -0
- package/dist/server/log.js +18 -0
- package/dist/server/log.js.map +1 -0
- package/dist/server/match.js +267 -0
- package/dist/server/match.js.map +1 -0
- package/dist/server/mode.d.ts +18 -9
- package/dist/server/mode.js +220 -0
- package/dist/server/mode.js.map +1 -0
- package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
- package/dist/server/navigation-worker.js.map +1 -0
- package/dist/server/navigation.js +39 -0
- package/dist/server/navigation.js.map +1 -0
- package/dist/server/ops.d.ts +4 -0
- package/dist/server/ops.js +137 -0
- package/dist/server/ops.js.map +1 -0
- package/dist/server/packs.d.ts +3 -3
- package/dist/server/packs.js +32 -0
- package/dist/server/packs.js.map +1 -0
- package/dist/server/ratings.d.ts +5 -0
- package/dist/server/ratings.js +104 -0
- package/dist/server/ratings.js.map +1 -0
- package/dist/server/relay.d.ts +12 -2
- package/dist/server/relay.js +144 -0
- package/dist/server/relay.js.map +1 -0
- package/dist/server/rooms.d.ts +9 -2
- package/dist/server/rooms.js +442 -0
- package/dist/server/rooms.js.map +1 -0
- package/dist/server/seat.js +116 -0
- package/dist/server/seat.js.map +1 -0
- package/dist/server/seatSettings.d.ts +3 -3
- package/dist/server/seatSettings.js +63 -0
- package/dist/server/seatSettings.js.map +1 -0
- package/dist/server/secret.js +13 -0
- package/dist/server/secret.js.map +1 -0
- package/dist/server/start.d.ts +13 -6
- package/dist/server/start.js +76 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/websocket.d.ts +9 -1
- package/dist/server/websocket.js +306 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/server.js +15 -2861
- package/dist/session/can.js +26 -0
- package/dist/session/can.js.map +1 -0
- package/dist/session/commandReplay.d.ts +8 -2
- package/dist/session/commandReplay.js +293 -0
- package/dist/session/commandReplay.js.map +1 -0
- package/dist/session/debug.js +151 -0
- package/dist/session/debug.js.map +1 -0
- package/dist/session/delay.js +62 -0
- package/dist/session/delay.js.map +1 -0
- package/dist/session/delta.d.ts +14 -1
- package/dist/session/delta.js +407 -0
- package/dist/session/delta.js.map +1 -0
- package/dist/session/entityState.js +415 -0
- package/dist/session/entityState.js.map +1 -0
- package/dist/session/local.d.ts +47 -5
- package/dist/session/local.js +670 -0
- package/dist/session/local.js.map +1 -0
- package/dist/session/memory.d.ts +20 -2
- package/dist/session/memory.js +131 -0
- package/dist/session/memory.js.map +1 -0
- package/dist/session/protocol.d.ts +325 -31
- package/dist/session/protocol.js +55 -0
- package/dist/session/protocol.js.map +1 -0
- package/dist/session/remote.d.ts +74 -12
- package/dist/session/remote.js +1394 -0
- package/dist/session/remote.js.map +1 -0
- package/dist/session/replay.d.ts +11 -2
- package/dist/session/replay.js +160 -0
- package/dist/session/replay.js.map +1 -0
- package/dist/session/seed.js +12 -0
- package/dist/session/seed.js.map +1 -0
- package/dist/session/share.d.ts +5 -1
- package/dist/session/share.js +94 -0
- package/dist/session/share.js.map +1 -0
- package/dist/session/socket.d.ts +1 -1
- package/dist/session/socket.js +29 -0
- package/dist/session/socket.js.map +1 -0
- package/dist/session/wire.d.ts +5 -0
- package/dist/session/wire.js +84 -0
- package/dist/session/wire.js.map +1 -0
- package/dist/session/worker.d.ts +77 -12
- package/dist/session/worker.js +499 -0
- package/dist/session/worker.js.map +1 -0
- package/dist/shared.d.ts +31 -5
- package/dist/shared.js +166 -0
- package/dist/shared.js.map +1 -0
- package/dist/sides.d.ts +9 -3
- package/dist/sides.js +149 -0
- package/dist/sides.js.map +1 -0
- package/dist/sight.js +85 -0
- package/dist/sight.js.map +1 -0
- package/dist/simulate-worker.js +1 -1
- package/dist/simulate.d.ts +12 -8
- package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
- package/dist/simulate.js.map +1 -0
- package/dist/smart.js +77 -0
- package/dist/smart.js.map +1 -0
- package/dist/spatial.d.ts +32 -16
- package/dist/spatial.js +234 -0
- package/dist/spatial.js.map +1 -0
- package/dist/spawning.d.ts +1 -0
- package/dist/spawning.js +224 -0
- package/dist/spawning.js.map +1 -0
- package/dist/stances.d.ts +6 -3
- package/dist/stances.js +169 -0
- package/dist/stances.js.map +1 -0
- package/dist/start.d.ts +10 -10
- package/dist/start.js +75 -0
- package/dist/start.js.map +1 -0
- package/dist/stats.d.ts +42 -16
- package/dist/stats.js +290 -0
- package/dist/stats.js.map +1 -0
- package/dist/summoned.d.ts +52 -0
- package/dist/summoned.js +38 -0
- package/dist/summoned.js.map +1 -0
- package/dist/summons.d.ts +10 -13
- package/dist/summons.js +271 -0
- package/dist/summons.js.map +1 -0
- package/dist/systems/abilities.js +224 -0
- package/dist/systems/abilities.js.map +1 -0
- package/dist/systems/combat.d.ts +35 -1
- package/dist/systems/combat.js +677 -0
- package/dist/systems/combat.js.map +1 -0
- package/dist/systems/combatTold.d.ts +3 -1
- package/dist/systems/combatTold.js +85 -0
- package/dist/systems/combatTold.js.map +1 -0
- package/dist/systems/construction.js +80 -0
- package/dist/systems/construction.js.map +1 -0
- package/dist/systems/economy.d.ts +0 -6
- package/dist/systems/economy.js +128 -0
- package/dist/systems/economy.js.map +1 -0
- package/dist/systems/fog.d.ts +1 -1
- package/dist/systems/fog.js +120 -0
- package/dist/systems/fog.js.map +1 -0
- package/dist/systems/life.js +32 -0
- package/dist/systems/life.js.map +1 -0
- package/dist/systems/movement.d.ts +24 -12
- package/dist/systems/movement.js +1247 -0
- package/dist/systems/movement.js.map +1 -0
- package/dist/systems/orders.js +64 -0
- package/dist/systems/orders.js.map +1 -0
- package/dist/systems/production.js +322 -0
- package/dist/systems/production.js.map +1 -0
- package/dist/systems/productionQueue.js +120 -0
- package/dist/systems/productionQueue.js.map +1 -0
- package/dist/systems/victory.d.ts +1 -1
- package/dist/systems/victory.js +56 -0
- package/dist/systems/victory.js.map +1 -0
- package/dist/talk.d.ts +6 -6
- package/dist/talk.js +153 -0
- package/dist/talk.js.map +1 -0
- package/dist/targeting.d.ts +142 -0
- package/dist/targeting.js +49 -0
- package/dist/targeting.js.map +1 -0
- package/dist/tech.d.ts +20 -3
- package/dist/tech.js +239 -0
- package/dist/tech.js.map +1 -0
- package/dist/techTree.d.ts +7 -0
- package/dist/techTree.js +90 -0
- package/dist/techTree.js.map +1 -0
- package/dist/terrain.d.ts +59 -7
- package/dist/terrain.js +389 -0
- package/dist/terrain.js.map +1 -0
- package/dist/terrainSave.d.ts +6 -0
- package/dist/terrainSave.js +74 -0
- package/dist/terrainSave.js.map +1 -0
- package/dist/testing.d.ts +8 -7
- package/dist/testing.js +13 -739
- package/dist/testing.js.map +1 -1
- package/dist/tiles.d.ts +1 -1
- package/dist/tiles.js +43 -0
- package/dist/tiles.js.map +1 -0
- package/dist/timers.d.ts +29 -4
- package/dist/timers.js +242 -0
- package/dist/timers.js.map +1 -0
- package/dist/tomes.d.ts +4 -4
- package/dist/tomes.js +94 -0
- package/dist/tomes.js.map +1 -0
- package/dist/trade.js +103 -0
- package/dist/trade.js.map +1 -0
- package/dist/transport.d.ts +6 -1
- package/dist/transport.js +281 -0
- package/dist/transport.js.map +1 -0
- package/dist/tunables.d.ts +10 -3
- package/dist/tunables.js +56 -0
- package/dist/tunables.js.map +1 -0
- package/dist/unitResources.d.ts +67 -0
- package/dist/unitResources.js +266 -0
- package/dist/unitResources.js.map +1 -0
- package/dist/upkeep.d.ts +6 -1
- package/dist/upkeep.js +26 -0
- package/dist/upkeep.js.map +1 -0
- package/dist/veterancy.d.ts +8 -3
- package/dist/veterancy.js +131 -0
- package/dist/veterancy.js.map +1 -0
- package/dist/vision.d.ts +36 -0
- package/dist/vision.js +133 -0
- package/dist/vision.js.map +1 -0
- package/dist/walls.d.ts +1 -1
- package/dist/walls.js +278 -0
- package/dist/walls.js.map +1 -0
- package/dist/world.d.ts +606 -88
- package/dist/world.js +1263 -0
- package/dist/world.js.map +1 -0
- package/package.json +2 -2
- package/dist/ai.js.map +0 -1
- package/dist/attributes.d.ts +0 -66
- package/dist/brain-BvVdUhX8.js +0 -7659
- package/dist/brain-BvVdUhX8.js.map +0 -1
- package/dist/builds-C6LfgvEU.js +0 -460
- package/dist/builds-C6LfgvEU.js.map +0 -1
- package/dist/coreComponents-syuh2fPG.js +0 -5149
- package/dist/coreComponents-syuh2fPG.js.map +0 -1
- package/dist/debugCommands-CzjrSm66.js +0 -14739
- package/dist/debugCommands-CzjrSm66.js.map +0 -1
- package/dist/determinism-BCymQwiE.js +0 -518
- package/dist/determinism-BCymQwiE.js.map +0 -1
- package/dist/game-DiJEN-Ks.js +0 -5800
- package/dist/game-DiJEN-Ks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/inspect-D9dWHmZ0.js.map +0 -1
- package/dist/local-Dkovq42k.js +0 -1379
- package/dist/local-Dkovq42k.js.map +0 -1
- package/dist/missionRules-C-bGxm0Q.js.map +0 -1
- package/dist/navigation-worker.js.map +0 -1
- package/dist/packs-g5thvmGn.js +0 -3199
- package/dist/packs-g5thvmGn.js.map +0 -1
- package/dist/profiles-B3NS9jwk.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/simulate-oXBiw1Ff.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.js","names":[],"sources":["../../src/session/share.ts"],"sourcesContent":["import type { PlayerId } from '#engine/entity'\nimport type { World } from '#engine/world'\nimport { SessionHost, type Transport } from './remote'\nimport { openSocket } from './socket'\n\n/*\n * A game played in the page, watched from others: through a relay (the server's `WatchRelay`), as a page cannot take\n * connections. The page shares its world under a key; the relay tells it of each watcher, and the page's own host\n * seats them at the world as observers, the way a server seats those who watch its games. The world is stepped by the\n * page's game as it always is: the host only sends (`SessionHost.publish`)\n */\n\n/**\n * What a page says to the relay, before it watches; and what a sharing page says all along\n *\n * @internal\n */\nexport type RelayRequest =\n\t/** The page plays a game under `key`, and lets others watch it */\n\t| { type: 'share'; key: string; name: string }\n\t/** The sharing page's game, for one watcher */\n\t| { type: 'send'; to: number; text: string }\n\t/** Watches what is shared under `key`, now or once it is */\n\t| { type: 'watch'; key: string }\n\n/**\n * What the relay tells pages besides the game itself\n *\n * @beta\n */\nexport type RelayNotice =\n\t/** To a sharing page: it shares under `key` now */\n\t| { type: 'shared'; key: string }\n\t/** To a sharing page: another page shares under that key already */\n\t| { type: 'taken'; key: string }\n\t/** To a sharing page: someone watches, by the id the relay gave them */\n\t| { type: 'watcher'; id: number }\n\t/** To a sharing page: what a watcher said (that it got a tick, a ping) */\n\t| { type: 'from'; watcher: number; text: string }\n\t/** To a sharing page: a watcher left */\n\t| { type: 'gone'; watcher: number }\n\t/** To a watcher: nothing is shared under the key right now. The game comes once it is */\n\t| { type: 'waiting'; key: string }\n\t/** To a watcher: the game shared ended. The next one under the key comes when it is shared */\n\t| { type: 'ended'; key: string }\n\n/**\n * What `shareGame` is given: the relay's address, the key and name of the share and whose side watchers see\n *\n * @beta\n */\nexport interface ShareOptions {\n\t/** The relay's address, `ws://host:port` */\n\turl: string\n\t/** What watchers ask for: the same for every game of a campaign, so they stay from one mission to the next */\n\tkey: string\n\t/** What it is, for the relay's log */\n\tname: string\n\t/** Whose side watchers see it from: they get that player's lines and cinematics, and see everything besides */\n\tplayer: PlayerId\n\t/** Snapshots a second to each watcher. 20 when left out */\n\tsendRate?: number\n}\n\n/**\n * A game shared for watching (`shareGame`)\n *\n * @beta\n */\nexport interface SharedGame {\n\t/** `shared` once the relay has it; `taken` when another page shares under the key; `closed` once it is over */\n\treadonly state: 'shared' | 'taken' | 'closed'\n\t/** How many watch it now */\n\treadonly watchers: number\n\t/** Told whenever the state or the number of watchers changes */\n\tonChange(handler: () => void): void\n\t/** Stops sharing: the watchers are told it ended */\n\tclose(): void\n}\n\n/** How often the host looks whether the world went on, a second: it sends at its own rate */\nconst LOOKS = 30\n\n/**\n * Shares the page's world through a relay, for others to watch. Fails when the relay cannot be reached\n *\n * @beta\n */\nexport async function shareGame(world: World, options: ShareOptions): Promise<SharedGame> {\n\tconst relay = await openSocket(options.url)\n\tconst host = new SessionHost(world, { sendRate: options.sendRate })\n\t/** Each watcher's end of the connection, as the host holds it: what the relay brings from them goes to it */\n\tconst ends = new Map<number, { message: (text: string) => void; closed: () => void }>()\n\tlet state: SharedGame['state'] = 'shared'\n\tlet changed: () => void = () => {}\n\tconst ask = (request: RelayRequest) => relay.send(JSON.stringify(request))\n\n\tconst seat = (id: number) => {\n\t\tconst end = { message: (_text: string) => {}, closed: () => {} }\n\t\tends.set(id, end)\n\t\tconst transport: Transport = {\n\t\t\tsend: (text) => ask({ type: 'send', to: id, text }),\n\t\t\tonMessage: (handler) => (end.message = handler),\n\t\t\tonClose: (handler) => (end.closed = handler),\n\t\t\t// a watcher leaves by closing their own connection: the relay says so\n\t\t\tclose: () => {}\n\t\t}\n\t\thost.connect(options.player, transport, { readOnly: true, observer: true })\n\t}\n\n\tlet last = performance.now()\n\tconst timer = setInterval(() => {\n\t\tconst now = performance.now()\n\t\thost.publish((now - last) / 1000)\n\t\tlast = now\n\t}, 1000 / LOOKS)\n\n\t/** Over once: closed, or never shared as the key was taken */\n\tconst stop = (next: 'closed' | 'taken' = 'closed') => {\n\t\tif (state !== 'shared') return\n\t\tclearInterval(timer)\n\t\thost.dispose()\n\t\tends.clear()\n\t\tstate = next\n\t\tchanged()\n\t}\n\n\trelay.onMessage((text) => {\n\t\tconst notice = JSON.parse(text) as RelayNotice\n\t\tif (notice.type === 'taken') {\n\t\t\tstop('taken')\n\t\t\trelay.close()\n\t\t} else if (notice.type === 'watcher') {\n\t\t\tseat(notice.id)\n\t\t\tchanged()\n\t\t} else if (notice.type === 'from') ends.get(notice.watcher)?.message(notice.text)\n\t\telse if (notice.type === 'gone') {\n\t\t\tends.get(notice.watcher)?.closed()\n\t\t\tends.delete(notice.watcher)\n\t\t\tchanged()\n\t\t}\n\t})\n\trelay.onClose(() => stop())\n\task({ type: 'share', key: options.key, name: options.name })\n\n\treturn {\n\t\tget state() {\n\t\t\treturn state\n\t\t},\n\t\tget watchers() {\n\t\t\treturn ends.size\n\t\t},\n\t\tonChange(handler) {\n\t\t\tchanged = handler\n\t\t},\n\t\tclose() {\n\t\t\tstop()\n\t\t\trelay.close()\n\t\t}\n\t}\n}\n"],"mappings":";;;;AAiFA,IAAM,QAAQ;;;;;;AAOd,eAAsB,UAAU,OAAc,SAA4C;CACzF,MAAM,QAAQ,MAAM,WAAW,QAAQ,GAAG;CAC1C,MAAM,OAAO,IAAI,YAAY,OAAO,EAAE,UAAU,QAAQ,SAAS,CAAC;;CAElE,MAAM,uBAAO,IAAI,IAAqE;CACtF,IAAI,QAA6B;CACjC,IAAI,gBAA4B,CAAC;CACjC,MAAM,OAAO,YAA0B,MAAM,KAAK,KAAK,UAAU,OAAO,CAAC;CAEzE,MAAM,QAAQ,OAAe;EAC5B,MAAM,MAAM;GAAE,UAAU,UAAkB,CAAC;GAAG,cAAc,CAAC;EAAE;EAC/D,KAAK,IAAI,IAAI,GAAG;EAQhB,KAAK,QAAQ,QAAQ,QAAQ;GAN5B,OAAO,SAAS,IAAI;IAAE,MAAM;IAAQ,IAAI;IAAI;GAAK,CAAC;GAClD,YAAY,YAAa,IAAI,UAAU;GACvC,UAAU,YAAa,IAAI,SAAS;GAEpC,aAAa,CAAC;EAEc,GAAW;GAAE,UAAU;GAAM,UAAU;EAAK,CAAC;CAC3E;CAEA,IAAI,OAAO,YAAY,IAAI;CAC3B,MAAM,QAAQ,kBAAkB;EAC/B,MAAM,MAAM,YAAY,IAAI;EAC5B,KAAK,SAAS,MAAM,QAAQ,GAAI;EAChC,OAAO;CACR,GAAG,MAAO,KAAK;;CAGf,MAAM,QAAQ,OAA2B,aAAa;EACrD,IAAI,UAAU,UAAU;EACxB,cAAc,KAAK;EACnB,KAAK,QAAQ;EACb,KAAK,MAAM;EACX,QAAQ;EACR,QAAQ;CACT;CAEA,MAAM,WAAW,SAAS;EACzB,MAAM,SAAS,KAAK,MAAM,IAAI;EAC9B,IAAI,OAAO,SAAS,SAAS;GAC5B,KAAK,OAAO;GACZ,MAAM,MAAM;EACb,OAAO,IAAI,OAAO,SAAS,WAAW;GACrC,KAAK,OAAO,EAAE;GACd,QAAQ;EACT,OAAO,IAAI,OAAO,SAAS,QAAQ,KAAK,IAAI,OAAO,OAAO,CAAC,EAAE,QAAQ,OAAO,IAAI;OAC3E,IAAI,OAAO,SAAS,QAAQ;GAChC,KAAK,IAAI,OAAO,OAAO,CAAC,EAAE,OAAO;GACjC,KAAK,OAAO,OAAO,OAAO;GAC1B,QAAQ;EACT;CACD,CAAC;CACD,MAAM,cAAc,KAAK,CAAC;CAC1B,IAAI;EAAE,MAAM;EAAS,KAAK,QAAQ;EAAK,MAAM,QAAQ;CAAK,CAAC;CAE3D,OAAO;EACN,IAAI,QAAQ;GACX,OAAO;EACR;EACA,IAAI,WAAW;GACd,OAAO,KAAK;EACb;EACA,SAAS,SAAS;GACjB,UAAU;EACX;EACA,QAAQ;GACP,KAAK;GACL,MAAM,MAAM;EACb;CACD;AACD"}
|
package/dist/session/socket.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ import type { Transport } from './remote';
|
|
|
3
3
|
* The player's end of a connection to a server, over a WebSocket: what `connect` and a server's lobby talk through.
|
|
4
4
|
* Resolves once the connection is open; fails when it cannot be made
|
|
5
5
|
*
|
|
6
|
-
* @
|
|
6
|
+
* @public
|
|
7
7
|
*/
|
|
8
8
|
export declare function openSocket(url: string): Promise<Transport>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/session/socket.ts
|
|
2
|
+
/**
|
|
3
|
+
* The player's end of a connection to a server, over a WebSocket: what `connect` and a server's lobby talk through.
|
|
4
|
+
* Resolves once the connection is open; fails when it cannot be made
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
function openSocket(url) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const socket = new WebSocket(url);
|
|
11
|
+
let handler = () => {};
|
|
12
|
+
let closed = () => {};
|
|
13
|
+
socket.onmessage = (event) => handler(String(event.data));
|
|
14
|
+
socket.onclose = () => closed();
|
|
15
|
+
socket.onerror = () => reject(/* @__PURE__ */ new Error(`Could not connect to ${url}`));
|
|
16
|
+
socket.onopen = () => resolve({
|
|
17
|
+
send: (message) => {
|
|
18
|
+
if (socket.readyState === WebSocket.OPEN) socket.send(message);
|
|
19
|
+
},
|
|
20
|
+
onMessage: (next) => handler = next,
|
|
21
|
+
onClose: (next) => closed = next,
|
|
22
|
+
close: () => socket.close()
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { openSocket };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","names":[],"sources":["../../src/session/socket.ts"],"sourcesContent":["import type { Transport } from './remote'\n\n/**\n * The player's end of a connection to a server, over a WebSocket: what `connect` and a server's lobby talk through.\n * Resolves once the connection is open; fails when it cannot be made\n *\n * @public\n */\nexport function openSocket(url: string): Promise<Transport> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst socket = new WebSocket(url)\n\t\tlet handler: (message: string) => void = () => {}\n\t\tlet closed: () => void = () => {}\n\t\tsocket.onmessage = (event) => handler(String(event.data))\n\t\tsocket.onclose = () => closed()\n\t\tsocket.onerror = () => reject(new Error(`Could not connect to ${url}`))\n\t\tsocket.onopen = () =>\n\t\t\tresolve({\n\t\t\t\tsend: (message) => {\n\t\t\t\t\tif (socket.readyState === WebSocket.OPEN) socket.send(message)\n\t\t\t\t},\n\t\t\t\tonMessage: (next) => (handler = next),\n\t\t\t\tonClose: (next) => (closed = next),\n\t\t\t\tclose: () => socket.close()\n\t\t\t})\n\t})\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,WAAW,KAAiC;CAC3D,OAAO,IAAI,SAAS,SAAS,WAAW;EACvC,MAAM,SAAS,IAAI,UAAU,GAAG;EAChC,IAAI,gBAA2C,CAAC;EAChD,IAAI,eAA2B,CAAC;EAChC,OAAO,aAAa,UAAU,QAAQ,OAAO,MAAM,IAAI,CAAC;EACxD,OAAO,gBAAgB,OAAO;EAC9B,OAAO,gBAAgB,uBAAO,IAAI,MAAM,wBAAwB,KAAK,CAAC;EACtE,OAAO,eACN,QAAQ;GACP,OAAO,YAAY;IAClB,IAAI,OAAO,eAAe,UAAU,MAAM,OAAO,KAAK,OAAO;GAC9D;GACA,YAAY,SAAU,UAAU;GAChC,UAAU,SAAU,SAAS;GAC7B,aAAa,OAAO,MAAM;EAC3B,CAAC;CACH,CAAC;AACF"}
|
package/dist/session/wire.d.ts
CHANGED
|
@@ -81,13 +81,18 @@ export type GameHostMessage = {
|
|
|
81
81
|
* @beta
|
|
82
82
|
*/
|
|
83
83
|
export interface DebugAsk {
|
|
84
|
+
/** The entity or object to inspect, or null to stop inspecting */
|
|
84
85
|
inspect?: InspectTarget | null;
|
|
86
|
+
/** A value to change in the inspected object: the path to it and the new number or boolean */
|
|
85
87
|
set?: {
|
|
86
88
|
path: (string | number)[];
|
|
87
89
|
value: number | boolean;
|
|
88
90
|
};
|
|
91
|
+
/** Whether to send the list of inspectable things */
|
|
89
92
|
listing?: boolean;
|
|
93
|
+
/** Whether to send the world's log lines */
|
|
90
94
|
logging?: boolean;
|
|
95
|
+
/** Asks the world to clear its kept log lines */
|
|
91
96
|
clearLog?: true;
|
|
92
97
|
}
|
|
93
98
|
/**
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
//#region src/session/wire.ts
|
|
2
|
+
/** The game's own messages to a player: the rest are a server's or a relay's (`ServerToPlayer`) */
|
|
3
|
+
var GAME_TYPES = /* @__PURE__ */ new Set([
|
|
4
|
+
"welcome",
|
|
5
|
+
"pong",
|
|
6
|
+
"ground",
|
|
7
|
+
"failed",
|
|
8
|
+
"delta",
|
|
9
|
+
"debug"
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* Whether a message to a player is a server's or a relay's, not the game's
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
var isServerMessage = (message) => !GAME_TYPES.has(message.type);
|
|
17
|
+
/** Every type a player is sent, each said once: what is not one of them is not read */
|
|
18
|
+
var HOST_TYPES = {
|
|
19
|
+
welcome: true,
|
|
20
|
+
pong: true,
|
|
21
|
+
ground: true,
|
|
22
|
+
failed: true,
|
|
23
|
+
delta: true,
|
|
24
|
+
debug: true,
|
|
25
|
+
lobby: true,
|
|
26
|
+
seated: true,
|
|
27
|
+
watching: true,
|
|
28
|
+
full: true,
|
|
29
|
+
refused: true,
|
|
30
|
+
lobbyChat: true,
|
|
31
|
+
paused: true,
|
|
32
|
+
result: true,
|
|
33
|
+
waiting: true,
|
|
34
|
+
ended: true
|
|
35
|
+
};
|
|
36
|
+
/** Every type a host or a server is sent */
|
|
37
|
+
var PLAYER_TYPES = {
|
|
38
|
+
command: true,
|
|
39
|
+
ack: true,
|
|
40
|
+
ping: true,
|
|
41
|
+
ground: true,
|
|
42
|
+
debug: true,
|
|
43
|
+
join: true,
|
|
44
|
+
start: true,
|
|
45
|
+
sit: true,
|
|
46
|
+
ready: true,
|
|
47
|
+
name: true,
|
|
48
|
+
resume: true,
|
|
49
|
+
setting: true,
|
|
50
|
+
seatSetting: true,
|
|
51
|
+
admin: true,
|
|
52
|
+
lobbyChat: true,
|
|
53
|
+
kick: true,
|
|
54
|
+
watch: true
|
|
55
|
+
};
|
|
56
|
+
/** A message as text, an object of a known type, or nothing: not JSON, not an object, a type that is not one of `types` */
|
|
57
|
+
function read(text, types) {
|
|
58
|
+
let message;
|
|
59
|
+
try {
|
|
60
|
+
message = JSON.parse(text);
|
|
61
|
+
} catch {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (typeof message !== "object" || message === null || Array.isArray(message)) return void 0;
|
|
65
|
+
const { type } = message;
|
|
66
|
+
return typeof type === "string" && Object.hasOwn(types, type) ? message : void 0;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* What a host or a server sent, as text: one of its messages, or nothing for what is not (not JSON, not an object of a
|
|
70
|
+
* type a player is sent). Its fields are its receiver's to check
|
|
71
|
+
*
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
var readHostMessage = (text) => read(text, HOST_TYPES);
|
|
75
|
+
/**
|
|
76
|
+
* What a player sent, as text: one of its messages, or nothing for what is not
|
|
77
|
+
*
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
var readPlayerMessage = (text) => read(text, PLAYER_TYPES);
|
|
81
|
+
//#endregion
|
|
82
|
+
export { isServerMessage, readHostMessage, readPlayerMessage };
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","names":[],"sources":["../../src/session/wire.ts"],"sourcesContent":["/**\n * What goes over the wire between a host and a player, both layers of it in one place (design review E11): the game's\n * (`GameHostMessage`, `GameCommandMessage`: a `SessionHost` and a `RemoteSession`) and a server's lobby beside it\n * (`LobbyServerMessage`, `LobbyPlayerMessage`: a `GameServer`). One union each way (`HostToPlayer`, `PlayerToHost`),\n * discriminated by `type` (no type is both a game's and a lobby's), read with a shape check (`readHostMessage`,\n * `readPlayerMessage`), and `PROTOCOL_VERSION` is of all of it\n */\nimport type { GameData } from '#engine/gameData'\nimport type { Inspection, InspectTarget, LoggedEvent, WorldListing } from '#engine/inspect'\nimport type { PlayerId } from '#engine/entity'\nimport type { GameResult, ServerHooks, ServerSeat } from '#engine/game'\nimport type { SavedGround } from '#engine/ground'\nimport type { MapCamera, MapDoodad, MapEnvironment, MapPath, MapRegion } from '#engine/map'\nimport type { Delta } from './delta'\nimport type { PlayerCommand } from './protocol'\nimport type { RelayNotice, RelayRequest } from './share'\n\n/**\n * What the host sends a player\n *\n * @beta\n */\nexport type GameHostMessage =\n\t| {\n\t\t\ttype: 'welcome'\n\t\t\t/** The version of the wire the host speaks (`PROTOCOL_VERSION`): a player of another refuses the game */\n\t\t\tprotocol: number\n\t\t\tplayer: PlayerId\n\t\t\ttickRate: number\n\t\t\t/** The game module the world runs, by id, and the version of its data (`Registry.dataHash`): the player's has to be the same */\n\t\t\tgame: string\n\t\t\thash: string\n\t\t\t/**\n\t\t\t * The ground: all of it, or the map of the game it started as and what changed of it since (S36). A player\n\t\t\t * without that map asks for it (`ground`), and is sent it in parts\n\t\t\t */\n\t\t\tterrain: SavedGround\n\t\t\t/** What the map looks like beyond its ground, for the screen */\n\t\t\tenvironment?: MapEnvironment\n\t\t\t/** Its scenery, for the screen */\n\t\t\tdoodads?: MapDoodad[]\n\t\t\t/** Its regions, for the screen: what mist in places lies over by name */\n\t\t\tregions?: MapRegion[]\n\t\t\t/** Its views saved under names */\n\t\t\tcameras?: MapCamera[]\n\t\t\t/** Its paths, for a cinematic's camera on a rail */\n\t\t\tpaths?: MapPath[]\n\t\t\t/** What its definitions were changed to while it ran (`world.redefine`), copies and all: put in the player's registry */\n\t\t\tredefinitions?: GameData\n\t\t\t/** Everything the player knows, as a delta without a base */\n\t\t\tfirst: Delta\n\t\t\t/** The player only watches, and sees everything */\n\t\t\tobserver?: boolean\n\t\t\t/** The player may use the debug tools (`world.debugPlayers`): the host follows the world for them (`debug`) */\n\t\t\tdebug?: true\n\t }\n\t| { type: 'pong'; at: number }\n\t/** A part of the ground a world started as, for a player who does not have its map: `text` of `parts`, joined, is a `TerrainSave` */\n\t| { type: 'ground'; part: number; parts: number; text: string }\n\t/** The game ended on an error in its rules (`World.failure`): what the players are told of it */\n\t| { type: 'failed'; message: string }\n\t| ({ type: 'delta' } & Delta)\n\t/** The debug tools' view of the world (`SessionDebug`), for a player who may use them and follows something: every tenth of a second */\n\t| { type: 'debug'; inspection: Inspection | null; world: WorldListing | null; log: readonly LoggedEvent[] }\n\n/**\n * What a player sends the host: commands, and which ticks it has got (what the next deltas are made against)\n *\n * @internal\n */\nexport type GameCommandMessage =\n\t| { type: 'command'; seq: number; command: PlayerCommand }\n\t| { type: 'ack'; tick: number; events?: number }\n\t/** To measure the time there and back: answered at once with a `pong` of the same `at` */\n\t| { type: 'ping'; at: number }\n\t/** A part of the ground the world started as, for a player who does not have its map (`ground` answers it) */\n\t| { type: 'ground'; part: number }\n\t/** What the debug tools follow, change and list (`SessionDebug`), from a player who may use them: `debug` answers it */\n\t| ({ type: 'debug' } & DebugAsk)\n\n/**\n * What the debug tools of a screen ask of a world elsewhere (`SessionDebug`), as said over the wire or to a worker\n *\n * @beta\n */\nexport interface DebugAsk {\n\t/** The entity or object to inspect, or null to stop inspecting */\n\tinspect?: InspectTarget | null\n\t/** A value to change in the inspected object: the path to it and the new number or boolean */\n\tset?: { path: (string | number)[]; value: number | boolean }\n\t/** Whether to send the list of inspectable things */\n\tlisting?: boolean\n\t/** Whether to send the world's log lines */\n\tlogging?: boolean\n\t/** Asks the world to clear its kept log lines */\n\tclearLog?: true\n}\n\n/**\n * What a player says to the server, besides what goes to the game\n *\n * @internal\n */\nexport type LobbyPlayerMessage =\n\t| {\n\t\t\ttype: 'join'\n\t\t\tname?: string\n\t\t\ttoken?: string\n\t\t\tticket?: string\n\t\t\twatch?: boolean\n\t\t\tkey?: string\n\t\t\tback?: boolean\n\t\t\twho?: string\n\t\t\t/**\n\t\t\t * The version of the wire the player speaks (`PROTOCOL_VERSION`): one of another is refused with why. Left\n\t\t\t * out, the player's own check of the welcome is what tells them\n\t\t\t */\n\t\t\tprotocol?: number\n\t }\n\t| { type: 'start' }\n\t/** In the lobby: another seat, free, for who is seated */\n\t| { type: 'sit'; player: PlayerId }\n\t/** In the lobby: ready, or not. Once every player seated is, the game starts */\n\t| { type: 'ready'; ready: boolean }\n\t/** In the lobby: the name one is shown by */\n\t| { type: 'name'; name: string }\n\t/** In a game a player paused (`pause` command): it goes on, for everyone */\n\t| { type: 'resume' }\n\t| { type: 'setting'; name: string; value: string }\n\t/** In the lobby: a setting of a seat (`ServerHooks.seatSettings`): one's own, or one no other player holds */\n\t| { type: 'seatSetting'; player: PlayerId; name: string; value: string }\n\t| { type: 'admin'; key: string; action: 'pause' | 'resume' | 'stop' }\n\t/** In the lobby: a line said to everyone there, before the game */\n\t| { type: 'lobbyChat'; text: string }\n\t/** In the lobby: a vote to let another seated player go. Once most of the others vote so, they are let go */\n\t| { type: 'kick'; player: PlayerId }\n\n/**\n * What the server tells everyone connected, as it changes\n *\n * @beta\n */\nexport type LobbyServerMessage =\n\t| {\n\t\t\ttype: 'lobby'\n\t\t\tmode: string\n\t\t\tgame: string\n\t\t\tphase: 'lobby' | 'game' | 'ended'\n\t\t\tseats: ServerSeat[]\n\t\t\tsettings: Record<string, string>\n\t\t\t/** What the game offers to set (`ServerHooks.settings`) */\n\t\t\toffered: NonNullable<ServerHooks['settings']>\n\t\t\t/** What the game offers to set for each seat (`ServerHooks.seatSettings`, and a race: `seatSettingsOf`) */\n\t\t\tseatOffered: NonNullable<ServerHooks['seatSettings']>\n\t }\n\t| { type: 'seated'; player: PlayerId; token: string }\n\t/** A line said in the lobby (`lobbyChat`): by whom, their seat where they have one */\n\t| { type: 'lobbyChat'; player?: PlayerId; name: string; text: string }\n\t| { type: 'watching'; player: PlayerId }\n\t| { type: 'full' }\n\t| { type: 'refused'; reason: string }\n\t/** The game paused, or going on: by a player (`player`, for `seconds` at most) or by an admin (no player) */\n\t| { type: 'paused'; paused: boolean; player?: PlayerId; seconds?: number }\n\t| { type: 'result'; result: GameResult }\n\n/**\n * What a player is told besides the game: a server's lobby, a pause, the result, or, watching through a relay, that\n * nothing is shared yet or that the game watched ended\n *\n * @beta\n */\nexport type ServerToPlayer = LobbyServerMessage | Extract<RelayNotice, { type: 'waiting' | 'ended' }>\n\n/**\n * Everything a host, a server or a relay sends a player\n *\n * @beta\n */\nexport type HostToPlayer = GameHostMessage | ServerToPlayer\n\n/**\n * Everything a player sends a host or a server, or a relay to watch through\n *\n * @internal\n */\nexport type PlayerToHost = GameCommandMessage | LobbyPlayerMessage | Extract<RelayRequest, { type: 'watch' }>\n\n/** The game's own messages to a player: the rest are a server's or a relay's (`ServerToPlayer`) */\nconst GAME_TYPES = new Set<string>(['welcome', 'pong', 'ground', 'failed', 'delta', 'debug'] satisfies GameHostMessage['type'][])\n\n/**\n * Whether a message to a player is a server's or a relay's, not the game's\n *\n * @internal\n */\nexport const isServerMessage = (message: HostToPlayer): message is ServerToPlayer => !GAME_TYPES.has(message.type)\n\n/** Every type a player is sent, each said once: what is not one of them is not read */\nconst HOST_TYPES: Record<HostToPlayer['type'], true> = {\n\twelcome: true,\n\tpong: true,\n\tground: true,\n\tfailed: true,\n\tdelta: true,\n\tdebug: true,\n\tlobby: true,\n\tseated: true,\n\twatching: true,\n\tfull: true,\n\trefused: true,\n\tlobbyChat: true,\n\tpaused: true,\n\tresult: true,\n\twaiting: true,\n\tended: true\n}\n\n/** Every type a host or a server is sent */\nconst PLAYER_TYPES: Record<PlayerToHost['type'], true> = {\n\tcommand: true,\n\tack: true,\n\tping: true,\n\tground: true,\n\tdebug: true,\n\tjoin: true,\n\tstart: true,\n\tsit: true,\n\tready: true,\n\tname: true,\n\tresume: true,\n\tsetting: true,\n\tseatSetting: true,\n\tadmin: true,\n\tlobbyChat: true,\n\tkick: true,\n\twatch: true\n}\n\n/** A message as text, an object of a known type, or nothing: not JSON, not an object, a type that is not one of `types` */\nfunction read<M extends { type: string }>(text: string, types: Record<string, true>): M | undefined {\n\tlet message: unknown\n\ttry {\n\t\tmessage = JSON.parse(text)\n\t} catch {\n\t\treturn undefined\n\t}\n\tif (typeof message !== 'object' || message === null || Array.isArray(message)) return undefined\n\tconst { type } = message as { type?: unknown }\n\treturn typeof type === 'string' && Object.hasOwn(types, type) ? (message as M) : undefined\n}\n\n/**\n * What a host or a server sent, as text: one of its messages, or nothing for what is not (not JSON, not an object of a\n * type a player is sent). Its fields are its receiver's to check\n *\n * @internal\n */\nexport const readHostMessage = (text: string): HostToPlayer | undefined => read(text, HOST_TYPES)\n\n/**\n * What a player sent, as text: one of its messages, or nothing for what is not\n *\n * @internal\n */\nexport const readPlayerMessage = (text: string): PlayerToHost | undefined => read(text, PLAYER_TYPES)\n"],"mappings":";;AA4LA,IAAM,6BAAa,IAAI,IAAY;CAAC;CAAW;CAAQ;CAAU;CAAU;CAAS;AAAO,CAAqC;;;;;;AAOhI,IAAa,mBAAmB,YAAqD,CAAC,WAAW,IAAI,QAAQ,IAAI;;AAGjH,IAAM,aAAiD;CACtD,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP,QAAQ;CACR,UAAU;CACV,MAAM;CACN,SAAS;CACT,WAAW;CACX,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,OAAO;AACR;;AAGA,IAAM,eAAmD;CACxD,SAAS;CACT,KAAK;CACL,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,KAAK;CACL,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,aAAa;CACb,OAAO;CACP,WAAW;CACX,MAAM;CACN,OAAO;AACR;;AAGA,SAAS,KAAiC,MAAc,OAA4C;CACnG,IAAI;CACJ,IAAI;EACH,UAAU,KAAK,MAAM,IAAI;CAC1B,QAAQ;EACP;CACD;CACA,IAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO,GAAG,OAAO,KAAA;CACtF,MAAM,EAAE,SAAS;CACjB,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,OAAO,IAAI,IAAK,UAAgB,KAAA;AAClF;;;;;;;AAQA,IAAa,mBAAmB,SAA2C,KAAK,MAAM,UAAU;;;;;;AAOhG,IAAa,qBAAqB,SAA2C,KAAK,MAAM,YAAY"}
|
package/dist/session/worker.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PlayerId } from '#engine/entity';
|
|
2
|
-
import { type
|
|
2
|
+
import { type Rules } from '#engine/game';
|
|
3
3
|
import { type LogEntry, Logger } from '#engine/log';
|
|
4
4
|
import type { GameMap } from '#engine/map';
|
|
5
5
|
import type { Message } from '#engine/messages';
|
|
@@ -15,16 +15,21 @@ import { type ConnectOptions, RemoteSession } from './remote';
|
|
|
15
15
|
* @beta
|
|
16
16
|
*/
|
|
17
17
|
export interface WorldWorkerLike {
|
|
18
|
+
/** Sends a message to the worker, with objects to transfer rather than copy */
|
|
18
19
|
postMessage(message: unknown, transfer?: unknown[]): void;
|
|
20
|
+
/** Listens for the worker's messages or errors, where the worker is a page's `Worker` */
|
|
19
21
|
addEventListener?(type: 'message' | 'error', listener: (event: {
|
|
20
22
|
data?: unknown;
|
|
21
23
|
message?: string;
|
|
22
24
|
}) => void): void;
|
|
25
|
+
/** Stops a listener added with `addEventListener` */
|
|
23
26
|
removeEventListener?(type: 'message' | 'error', listener: (event: {
|
|
24
27
|
data?: unknown;
|
|
25
28
|
message?: string;
|
|
26
29
|
}) => void): void;
|
|
30
|
+
/** Listens for the worker's messages or errors, where the worker is Node's `worker_threads` one */
|
|
27
31
|
on?(type: 'message' | 'error', listener: (value: unknown) => void): void;
|
|
32
|
+
/** Stops a listener added with `on` */
|
|
28
33
|
off?(type: 'message' | 'error', listener: (value: unknown) => void): void;
|
|
29
34
|
}
|
|
30
35
|
/**
|
|
@@ -33,10 +38,13 @@ export interface WorldWorkerLike {
|
|
|
33
38
|
* @beta
|
|
34
39
|
*/
|
|
35
40
|
export interface WorldPort {
|
|
41
|
+
/** Sends a message to the page, with objects to transfer rather than copy */
|
|
36
42
|
postMessage(message: unknown, transfer?: unknown[]): void;
|
|
43
|
+
/** Listens for the page's messages, where the port is a worker scope */
|
|
37
44
|
addEventListener?(type: 'message', listener: (event: {
|
|
38
45
|
data: unknown;
|
|
39
46
|
}) => void): void;
|
|
47
|
+
/** Listens for the page's messages, where the port is Node's `parentPort` */
|
|
40
48
|
on?(type: 'message', listener: (value: unknown) => void): void;
|
|
41
49
|
}
|
|
42
50
|
/**
|
|
@@ -47,16 +55,39 @@ export interface WorldPort {
|
|
|
47
55
|
export interface WorkerGame {
|
|
48
56
|
/** A map of the game: the world is made from it. Or a save to go on from (`from`); or neither, where the worker makes its world in code */
|
|
49
57
|
map?: GameMap;
|
|
58
|
+
/** A save to continue the game from, in place of a map */
|
|
50
59
|
from?: WorldSave;
|
|
51
60
|
/** Who the player at the screen is: as the worker says (`ServeWorldOptions.player`), then the map's first with a start, when left out */
|
|
52
61
|
player?: PlayerId;
|
|
62
|
+
/** The seed the world's random generator starts with */
|
|
53
63
|
seed?: number;
|
|
54
64
|
/** Whether the player may use the debug tools, and sees everything from the start */
|
|
55
65
|
debug?: boolean;
|
|
66
|
+
/** Whether the player sees the whole map from the start */
|
|
56
67
|
reveal?: boolean;
|
|
57
68
|
/** Anything else the worker's own code is to know (`start`, `world`): plain data */
|
|
58
69
|
args?: unknown;
|
|
59
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* What the worker's code that runs on a world is given (`ServeWorldOptions.onStart`, `beforePlay`): the player at the
|
|
73
|
+
* screen, the map, what the page sent (`WorkerGame.args`), and a way to tell the page something
|
|
74
|
+
*
|
|
75
|
+
* @beta
|
|
76
|
+
*/
|
|
77
|
+
export interface WorkerGameContext {
|
|
78
|
+
/** The player at the screen */
|
|
79
|
+
player: PlayerId;
|
|
80
|
+
/** The map the world was made from, where it was made from one (or sent with a save) */
|
|
81
|
+
map?: GameMap;
|
|
82
|
+
/** What the page sent for the worker's own code (`WorkerGame.args`): plain data */
|
|
83
|
+
args: unknown;
|
|
84
|
+
/**
|
|
85
|
+
* Tells the page something, while this game lasts: plain data, as it crosses (a mission won and what it carries on).
|
|
86
|
+
* The page hears it on its session (`WorkerSession.onTold`), in order with the game's ticks: what is told in a tick
|
|
87
|
+
* is heard before the snapshot of that tick. Said for nothing once the game has ended
|
|
88
|
+
*/
|
|
89
|
+
tell(data: unknown): void;
|
|
90
|
+
}
|
|
60
91
|
/**
|
|
61
92
|
* What the worker's file gives besides the game: its code that runs on the world, which cannot be sent
|
|
62
93
|
*
|
|
@@ -65,19 +96,33 @@ export interface WorkerGame {
|
|
|
65
96
|
export interface ServeWorldOptions {
|
|
66
97
|
/** A world made in code, where the page gives neither a map nor a save: generated ground, players of its own */
|
|
67
98
|
world?: (context: {
|
|
68
|
-
rules:
|
|
99
|
+
rules: Rules;
|
|
69
100
|
seed: number;
|
|
70
101
|
args: unknown;
|
|
71
102
|
log: Logger;
|
|
72
103
|
}) => World | Promise<World>;
|
|
73
104
|
/** What the game does once a new world is made, before anyone plays: as `launch`'s `start`, which a worker's game has here */
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
105
|
+
onStart?: (world: World, context: WorkerGameContext) => void | Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* What the game does before anyone plays, a new world or one loaded from a save (`fresh`), after `onStart`: as
|
|
108
|
+
* `prepareGame`'s `beforePlay`, which a worker's game has here. What it listens to on the world it listens to for
|
|
109
|
+
* this game alone, as a loaded game has none of what the game before listened to
|
|
110
|
+
*/
|
|
111
|
+
beforePlay?: (world: World, context: WorkerGameContext & {
|
|
112
|
+
fresh: boolean;
|
|
78
113
|
}) => void | Promise<void>;
|
|
79
114
|
/** Who the player at the screen is, where the page does not say */
|
|
80
115
|
player?: (world: World, map?: GameMap) => PlayerId;
|
|
116
|
+
/**
|
|
117
|
+
* What the page is told of the world as the game starts, which it cannot reach into: where the player's base is, who
|
|
118
|
+
* the other side is. Plain data, as it crosses; the page reads it on its session (`WorkerSession.about`). Asked once
|
|
119
|
+
* the world is made and started (`onStart`), for a new game and for one loaded
|
|
120
|
+
*/
|
|
121
|
+
about?: (world: World, context: {
|
|
122
|
+
player: PlayerId;
|
|
123
|
+
map?: GameMap;
|
|
124
|
+
args: unknown;
|
|
125
|
+
}) => unknown;
|
|
81
126
|
/** Where it hears: the worker's own scope when left out (a page's worker); Node's `parentPort` in a worker thread */
|
|
82
127
|
port?: WorldPort;
|
|
83
128
|
/**
|
|
@@ -86,7 +131,7 @@ export interface ServeWorldOptions {
|
|
|
86
131
|
* now: `(version) => import(/* @vite-ignore *\/ `./index.ts?t=${version}`).then((module) => module.myGame)` (a path
|
|
87
132
|
* from the worker's file). Only ever asked for in the dev server. Without it, a game in the worker keeps the version it began with
|
|
88
133
|
*/
|
|
89
|
-
reload?: (version: number) => Promise<
|
|
134
|
+
reload?: (version: number) => Promise<Rules | undefined> | Rules | undefined;
|
|
90
135
|
}
|
|
91
136
|
/** What goes between the page and the worker besides the session's own text */
|
|
92
137
|
type ToWorker = ({
|
|
@@ -115,6 +160,7 @@ type ToWorker = ({
|
|
|
115
160
|
type FromWorker = {
|
|
116
161
|
vg: 'ready';
|
|
117
162
|
player: PlayerId;
|
|
163
|
+
about?: unknown;
|
|
118
164
|
} | {
|
|
119
165
|
vg: 'refused';
|
|
120
166
|
message: string;
|
|
@@ -142,15 +188,18 @@ type FromWorker = {
|
|
|
142
188
|
tickMax: number;
|
|
143
189
|
send: number;
|
|
144
190
|
systems: SystemTiming[];
|
|
191
|
+
} | {
|
|
192
|
+
vg: 'told';
|
|
193
|
+
data: unknown;
|
|
145
194
|
};
|
|
146
195
|
/**
|
|
147
|
-
* What a game's worker file does: `serveWorld(game, {
|
|
196
|
+
* What a game's worker file does: `serveWorld(game, { onStart })`. It waits for the page to say what to play (a map, a
|
|
148
197
|
* save, or nothing for a world made here in code), makes the world, runs it by the clock, and seats the page's player
|
|
149
198
|
* at it. A new game asked for ends the one before: a restart is the same worker, its navigation built already
|
|
150
199
|
*
|
|
151
|
-
* @
|
|
200
|
+
* @public
|
|
152
201
|
*/
|
|
153
|
-
export declare function serveWorld(first:
|
|
202
|
+
export declare function serveWorld(first: Rules, options?: ServeWorldOptions): void;
|
|
154
203
|
/**
|
|
155
204
|
* A seat at a game run in a worker of this page (`workerSession`): a `RemoteSession` whose host is a message away,
|
|
156
205
|
* with what a game played in the page has besides: its pace held and stepped (`speed`, `advance`), a save of it
|
|
@@ -161,10 +210,13 @@ export declare function serveWorld(first: GameModule, options?: ServeWorldOption
|
|
|
161
210
|
export declare class WorkerSession extends RemoteSession {
|
|
162
211
|
/** What the world says (`World.log`), said again here: the page shows it with its own */
|
|
163
212
|
log: Logger;
|
|
213
|
+
/** The label and save of the last checkpoint the worker's game took, to retry from */
|
|
164
214
|
checkpoint?: {
|
|
165
215
|
label: Message;
|
|
166
216
|
save: WorldSave;
|
|
167
217
|
};
|
|
218
|
+
/** What the worker's file said of the world as the game started (`ServeWorldOptions.about`): plain data, none where it says nothing */
|
|
219
|
+
about?: unknown;
|
|
168
220
|
/** The debug tools' view of the world, where they are on: over the session's own words, as a server's is */
|
|
169
221
|
get debug(): SessionDebug | undefined;
|
|
170
222
|
/** Its pace held and stepped, saves of it, the debug tools' view where they are on, and where its time went and in which systems */
|
|
@@ -177,24 +229,36 @@ export declare class WorkerSession extends RemoteSession {
|
|
|
177
229
|
private readonly saves;
|
|
178
230
|
private nextSave;
|
|
179
231
|
private stopHearing;
|
|
232
|
+
/** Who hears what the worker's code tells (`onTold`), and what it told before anyone listened */
|
|
233
|
+
private readonly listening;
|
|
234
|
+
private readonly toldBefore;
|
|
180
235
|
/** What `workerSession` gives it once it is made: the way to the worker, and what stops hearing it */
|
|
181
236
|
wire(post: (message: ToWorker) => void, log: Logger, stop: () => void): void;
|
|
182
237
|
/** What the worker said that is not the session's own text */
|
|
183
238
|
heard(said: FromWorker): void;
|
|
239
|
+
/**
|
|
240
|
+
* Hears what the worker's code tells the page (`WorkerGameContext.tell`): plain data, in order with the ticks. What
|
|
241
|
+
* it told before anyone listened is heard by the first listener, at once. Gives back what stops hearing it
|
|
242
|
+
*/
|
|
243
|
+
onTold(listener: (data: unknown) => void): () => void;
|
|
184
244
|
/**
|
|
185
245
|
* How far behind the newest tick the screen is shown, in ticks: one, and room for how unevenly they come (a tick
|
|
186
246
|
* that took long comes late). Less than over a wire, where two are kept in hand: there is no line to stall here
|
|
187
247
|
*/
|
|
188
248
|
get delay(): number;
|
|
249
|
+
/** The simulation speed multiplier the worker's game runs at, 0 pauses; setting it tells the worker */
|
|
189
250
|
get speed(): number;
|
|
190
251
|
set speed(speed: number);
|
|
252
|
+
/** Asks the worker to step the held game by this many ticks */
|
|
191
253
|
advance(ticks?: number): void;
|
|
192
254
|
/**
|
|
193
255
|
* Asks the worker to take a new version of the game (hot reload): it loads the game again itself, as its file says
|
|
194
256
|
* (`serveWorld` `reload`), and puts it into its world
|
|
195
257
|
*/
|
|
196
258
|
reloadGame(): void;
|
|
259
|
+
/** Asks the worker for a save of its world and resolves with it; rejects if the game ends first */
|
|
197
260
|
save(): Promise<WorldSave>;
|
|
261
|
+
/** Where the worker's time went (tick, send and receive milliseconds and each system's), or undefined until it has said */
|
|
198
262
|
timing(): {
|
|
199
263
|
tick: number;
|
|
200
264
|
tickMax: number;
|
|
@@ -211,7 +275,8 @@ export declare class WorkerSession extends RemoteSession {
|
|
|
211
275
|
* @beta
|
|
212
276
|
*/
|
|
213
277
|
export interface WorkerSessionOptions extends WorkerGame, Pick<ConnectOptions, 'navigation' | 'maps'> {
|
|
214
|
-
game
|
|
278
|
+
/** The game module's rules the worker's game runs, which the page needs the data of */
|
|
279
|
+
rules: Rules;
|
|
215
280
|
/** The logger what the world says is said under, in the page: the root one when left out */
|
|
216
281
|
log?: Logger;
|
|
217
282
|
}
|
|
@@ -219,7 +284,7 @@ export interface WorkerSessionOptions extends WorkerGame, Pick<ConnectOptions, '
|
|
|
219
284
|
* Plays a game in a worker, and seats this page's player at it: the worker's file calls `serveWorld` with the same
|
|
220
285
|
* game. Settles once the world is made there and its welcome is in; fails with what the worker said went wrong
|
|
221
286
|
*
|
|
222
|
-
* const session = await workerSession(new Worker(new URL('./game.worker.ts', import.meta.url), { type: 'module' }), { game, map })
|
|
287
|
+
* const session = await workerSession(new Worker(new URL('./game.worker.ts', import.meta.url), { type: 'module' }), { rules: game, map })
|
|
223
288
|
*
|
|
224
289
|
* @beta
|
|
225
290
|
*/
|