@jgengine/core 0.10.0 → 0.12.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/CHANGELOG.md +39 -2
- package/LICENSE +203 -661
- package/README.md +1 -1
- package/dist/ai/crowd.d.ts +55 -0
- package/dist/ai/crowd.js +114 -0
- package/dist/ai/flock.d.ts +5 -2
- package/dist/ai/flock.js +5 -2
- package/dist/ai/groupAssist.d.ts +1 -0
- package/dist/ai/groupAssist.js +1 -0
- package/dist/ai/heatSystem.d.ts +76 -0
- package/dist/ai/heatSystem.js +97 -0
- package/dist/ai/interestScheduler.d.ts +107 -0
- package/dist/ai/interestScheduler.js +118 -0
- package/dist/ai/jobBoard.d.ts +1 -0
- package/dist/ai/jobBoard.js +1 -0
- package/dist/ai/laneSelect.d.ts +5 -2
- package/dist/ai/laneSelect.js +5 -2
- package/dist/ai/mobBrain.d.ts +1 -0
- package/dist/ai/mobBrain.js +1 -0
- package/dist/ai/populationDirector.d.ts +103 -0
- package/dist/ai/populationDirector.js +190 -0
- package/dist/ai/pursuit.d.ts +56 -0
- package/dist/ai/pursuit.js +53 -0
- package/dist/ai/spawnDirector.d.ts +7 -2
- package/dist/ai/spawnDirector.js +18 -15
- package/dist/ai/spawnPoint.d.ts +3 -1
- package/dist/ai/spawnPoint.js +3 -1
- package/dist/ai/targetAcquisition.d.ts +84 -0
- package/dist/ai/targetAcquisition.js +92 -0
- package/dist/anim/easing.d.ts +19 -0
- package/dist/anim/easing.js +19 -0
- package/dist/anim/oscillator.d.ts +12 -0
- package/dist/anim/oscillator.js +25 -0
- package/dist/area/areaEffectField.d.ts +127 -0
- package/dist/area/areaEffectField.js +175 -0
- package/dist/area/stackPolicy.d.ts +47 -0
- package/dist/area/stackPolicy.js +99 -0
- package/dist/authoring.d.ts +2 -1
- package/dist/authoring.js +2 -1
- package/dist/board/laneBoard.d.ts +13 -0
- package/dist/board/laneBoard.js +13 -0
- package/dist/board/timelineBoard.d.ts +10 -0
- package/dist/board/timelineBoard.js +10 -0
- package/dist/combat/abilityKit.d.ts +18 -0
- package/dist/combat/abilityKit.js +24 -9
- package/dist/combat/animationState.d.ts +5 -0
- package/dist/combat/animationState.js +5 -0
- package/dist/combat/breakMeters.d.ts +10 -0
- package/dist/combat/breakMeters.js +10 -0
- package/dist/combat/castRunner.d.ts +5 -0
- package/dist/combat/castRunner.js +5 -0
- package/dist/combat/comboPoints.d.ts +5 -0
- package/dist/combat/comboPoints.js +5 -0
- package/dist/combat/comboString.d.ts +5 -0
- package/dist/combat/comboString.js +5 -0
- package/dist/combat/damageInterceptors.d.ts +192 -0
- package/dist/combat/damageInterceptors.js +251 -0
- package/dist/combat/damageMatchup.d.ts +68 -0
- package/dist/combat/damageMatchup.js +42 -0
- package/dist/combat/damageResolution.d.ts +63 -0
- package/dist/combat/damageResolution.js +50 -0
- package/dist/combat/death.d.ts +7 -1
- package/dist/combat/death.js +5 -0
- package/dist/combat/deathReason.d.ts +14 -0
- package/dist/combat/deathReason.js +1 -0
- package/dist/combat/defensiveWindow.d.ts +5 -0
- package/dist/combat/defensiveWindow.js +5 -0
- package/dist/combat/dotField.d.ts +5 -1
- package/dist/combat/dotField.js +5 -1
- package/dist/combat/downed.d.ts +5 -0
- package/dist/combat/downed.js +5 -0
- package/dist/combat/effects.d.ts +5 -0
- package/dist/combat/effects.js +5 -0
- package/dist/combat/encounterSequence.d.ts +258 -0
- package/dist/combat/encounterSequence.js +426 -0
- package/dist/combat/hitReaction.d.ts +57 -1
- package/dist/combat/hitReaction.js +45 -5
- package/dist/combat/magazine.d.ts +54 -0
- package/dist/combat/magazine.js +96 -0
- package/dist/combat/projectiles.d.ts +5 -0
- package/dist/combat/projectiles.js +32 -14
- package/dist/combat/receivedDamage.d.ts +117 -0
- package/dist/combat/receivedDamage.js +92 -0
- package/dist/combat/regenShield.d.ts +5 -1
- package/dist/combat/regenShield.js +5 -1
- package/dist/combat/renderCues.d.ts +51 -0
- package/dist/combat/renderCues.js +44 -0
- package/dist/combat/resourcePool.d.ts +5 -0
- package/dist/combat/resourcePool.js +5 -0
- package/dist/combat/rewardAllocation.d.ts +121 -0
- package/dist/combat/rewardAllocation.js +251 -0
- package/dist/combat/shotOrigin.d.ts +18 -1
- package/dist/combat/shotOrigin.js +39 -0
- package/dist/combat/statusApplication.d.ts +96 -0
- package/dist/combat/statusApplication.js +81 -0
- package/dist/combat/telegraph.d.ts +11 -2
- package/dist/combat/telegraph.js +11 -2
- package/dist/combat/thresholdCrossings.d.ts +85 -0
- package/dist/combat/thresholdCrossings.js +116 -0
- package/dist/combat.d.ts +35 -0
- package/dist/combat.js +35 -0
- package/dist/commands/commandRegistry.d.ts +11 -0
- package/dist/commands/commandRegistry.js +9 -2
- package/dist/crafting/crop.d.ts +18 -0
- package/dist/crafting/crop.js +18 -0
- package/dist/crafting/production.d.ts +5 -0
- package/dist/crafting/production.js +5 -0
- package/dist/devtools/controls.d.ts +38 -0
- package/dist/devtools/controls.js +181 -0
- package/dist/devtools/devtools.d.ts +5 -197
- package/dist/devtools/devtools.js +38 -774
- package/dist/devtools/discover.d.ts +32 -0
- package/dist/devtools/discover.js +240 -0
- package/dist/devtools/fallbackSeams.d.ts +50 -0
- package/dist/devtools/fallbackSeams.js +111 -0
- package/dist/devtools/frame.d.ts +15 -0
- package/dist/devtools/frame.js +247 -0
- package/dist/devtools/logs.d.ts +15 -0
- package/dist/devtools/logs.js +86 -0
- package/dist/devtools/overrides.d.ts +16 -0
- package/dist/devtools/overrides.js +66 -0
- package/dist/devtools/rewriteTunables.d.ts +17 -0
- package/dist/devtools/rewriteTunables.js +276 -0
- package/dist/devtools/saveEndpoint.d.ts +46 -0
- package/dist/devtools/saveEndpoint.js +48 -0
- package/dist/devtools/transformTunables.d.ts +3 -0
- package/dist/devtools/transformTunables.js +3 -0
- package/dist/devtools/tunableSchema.d.ts +31 -0
- package/dist/devtools/tunableSchema.js +31 -0
- package/dist/devtools/types.d.ts +212 -0
- package/dist/devtools/types.js +1 -0
- package/dist/economy/auctionBook.d.ts +122 -0
- package/dist/economy/auctionBook.js +213 -0
- package/dist/economy/currency.d.ts +12 -1
- package/dist/economy/currency.js +12 -1
- package/dist/economy/listingBook.d.ts +91 -0
- package/dist/economy/listingBook.js +144 -0
- package/dist/economy/priceHistory.d.ts +44 -0
- package/dist/economy/priceHistory.js +89 -0
- package/dist/economy/resourceLedger.d.ts +222 -0
- package/dist/economy/resourceLedger.js +353 -0
- package/dist/economy/sharedWallet.d.ts +14 -0
- package/dist/economy/sharedWallet.js +14 -0
- package/dist/economy/techTree.d.ts +12 -0
- package/dist/economy/techTree.js +12 -0
- package/dist/economy/unlockPoints.d.ts +92 -0
- package/dist/economy/unlockPoints.js +103 -0
- package/dist/economy/wallet.d.ts +26 -2
- package/dist/economy/wallet.js +35 -6
- package/dist/editor/commandApply.d.ts +5 -0
- package/dist/editor/commandApply.js +755 -0
- package/dist/editor/commands.d.ts +235 -7
- package/dist/editor/commands.js +82 -124
- package/dist/editor/directives.d.ts +94 -0
- package/dist/editor/directives.js +206 -0
- package/dist/editor/document.d.ts +194 -13
- package/dist/editor/document.js +1166 -19
- package/dist/editor/entityCatalog.d.ts +42 -0
- package/dist/editor/entityCatalog.js +101 -0
- package/dist/editor/environment.d.ts +74 -0
- package/dist/editor/environment.js +169 -0
- package/dist/editor/grid.d.ts +229 -0
- package/dist/editor/grid.js +366 -0
- package/dist/editor/gridAdapters.d.ts +80 -0
- package/dist/editor/gridAdapters.js +134 -0
- package/dist/editor/index.d.ts +98 -6
- package/dist/editor/index.js +13 -2
- package/dist/editor/liveSync.d.ts +127 -0
- package/dist/editor/liveSync.js +249 -0
- package/dist/editor/minimap.d.ts +31 -0
- package/dist/editor/minimap.js +73 -0
- package/dist/editor/runtimeInspector.d.ts +88 -0
- package/dist/editor/runtimeInspector.js +239 -0
- package/dist/editor/streamer.d.ts +66 -0
- package/dist/editor/streamer.js +68 -0
- package/dist/editor/types.d.ts +250 -1
- package/dist/editor/world.d.ts +136 -0
- package/dist/editor/world.js +303 -0
- package/dist/faction/reputation.d.ts +5 -0
- package/dist/faction/reputation.js +5 -0
- package/dist/format/distance.d.ts +17 -0
- package/dist/format/distance.js +18 -0
- package/dist/format/duration.d.ts +27 -0
- package/dist/format/duration.js +45 -0
- package/dist/format/speed.d.ts +17 -0
- package/dist/format/speed.js +25 -0
- package/dist/game/breeding.d.ts +161 -0
- package/dist/game/breeding.js +181 -0
- package/dist/game/cameraConfig.d.ts +451 -0
- package/dist/game/cameraConfig.js +1 -0
- package/dist/game/connectedPlayers.d.ts +6 -4
- package/dist/game/connectedPlayers.js +2 -2
- package/dist/game/cosmetics.d.ts +9 -0
- package/dist/game/cosmetics.js +16 -0
- package/dist/game/defineGame.d.ts +110 -5
- package/dist/game/defineGame.js +49 -4
- package/dist/game/defineSystem.d.ts +90 -0
- package/dist/game/defineSystem.js +47 -0
- package/dist/game/dialogue.d.ts +33 -0
- package/dist/game/dialogue.js +21 -0
- package/dist/game/events.d.ts +63 -13
- package/dist/game/events.js +5 -0
- package/dist/game/feed.d.ts +33 -0
- package/dist/game/feed.js +35 -2
- package/dist/game/gamePhase.d.ts +11 -0
- package/dist/game/gamePhase.js +16 -0
- package/dist/game/leaderboard.d.ts +5 -0
- package/dist/game/leaderboard.js +5 -0
- package/dist/game/loadout.d.ts +5 -0
- package/dist/game/loadout.js +5 -0
- package/dist/game/lootFilter.d.ts +2 -0
- package/dist/game/lootFilter.js +2 -0
- package/dist/game/lootPipeline.d.ts +164 -0
- package/dist/game/lootPipeline.js +216 -0
- package/dist/game/lootTable.d.ts +19 -2
- package/dist/game/lootTable.js +15 -5
- package/dist/game/objectives.d.ts +43 -0
- package/dist/game/objectives.js +36 -0
- package/dist/game/paramLayers.d.ts +148 -0
- package/dist/game/paramLayers.js +185 -0
- package/dist/game/ping.d.ts +5 -0
- package/dist/game/ping.js +5 -0
- package/dist/game/playableGame.d.ts +116 -432
- package/dist/game/playableGame.js +1 -1
- package/dist/game/progression.d.ts +35 -0
- package/dist/game/progression.js +19 -0
- package/dist/game/quest.d.ts +8 -0
- package/dist/game/quest.js +30 -3
- package/dist/game/race.d.ts +141 -0
- package/dist/game/race.js +169 -0
- package/dist/game/recordBook.d.ts +3 -1
- package/dist/game/recordBook.js +4 -1
- package/dist/game/ruleSelection.d.ts +75 -0
- package/dist/game/ruleSelection.js +127 -0
- package/dist/game/runDraft.d.ts +5 -0
- package/dist/game/runDraft.js +5 -0
- package/dist/game/saveStore.d.ts +111 -0
- package/dist/game/saveStore.js +312 -0
- package/dist/game/snapshotHistory.d.ts +67 -0
- package/dist/game/snapshotHistory.js +95 -0
- package/dist/game/social.d.ts +38 -1
- package/dist/game/social.js +71 -0
- package/dist/game/spawnPoints.d.ts +5 -0
- package/dist/game/spawnPoints.js +5 -0
- package/dist/game/systemRuntime.d.ts +50 -0
- package/dist/game/systemRuntime.js +157 -0
- package/dist/game/systemSchedule.d.ts +72 -0
- package/dist/game/systemSchedule.js +242 -0
- package/dist/game/toasts.d.ts +43 -0
- package/dist/game/toasts.js +44 -0
- package/dist/game/trade.d.ts +10 -0
- package/dist/game/trade.js +10 -0
- package/dist/game/tribe.d.ts +184 -0
- package/dist/game/tribe.js +432 -0
- package/dist/game/unlocks.d.ts +8 -0
- package/dist/game/unlocks.js +16 -0
- package/dist/game/vfxInstance.d.ts +138 -0
- package/dist/game/vfxInstance.js +96 -0
- package/dist/game/worldItem.d.ts +17 -4
- package/dist/game/worldItem.js +17 -4
- package/dist/gameplay.d.ts +93 -0
- package/dist/gameplay.js +93 -0
- package/dist/index.d.ts +5 -14
- package/dist/index.js +5 -14
- package/dist/input/actionBindings.d.ts +23 -6
- package/dist/input/actionBindings.js +23 -6
- package/dist/input/axisInput.d.ts +7 -2
- package/dist/input/axisInput.js +7 -2
- package/dist/input/controlGroups.d.ts +67 -0
- package/dist/input/controlGroups.js +41 -0
- package/dist/input/touchScheme.d.ts +82 -6
- package/dist/input/touchScheme.js +123 -10
- package/dist/interaction/lockpick.d.ts +61 -0
- package/dist/interaction/lockpick.js +168 -0
- package/dist/interaction/proximityPrompt.d.ts +2 -0
- package/dist/interaction/proximityPrompt.js +2 -0
- package/dist/interaction/qte.d.ts +5 -0
- package/dist/interaction/qte.js +5 -0
- package/dist/interaction/skillCheck.d.ts +5 -0
- package/dist/interaction/skillCheck.js +5 -0
- package/dist/inventory/encumbrance.d.ts +69 -0
- package/dist/inventory/encumbrance.js +68 -0
- package/dist/inventory/inventoryModel.d.ts +12 -0
- package/dist/inventory/inventoryModel.js +12 -0
- package/dist/inventory/shapedGrid.d.ts +16 -0
- package/dist/inventory/shapedGrid.js +16 -0
- package/dist/inventory/slotModel.d.ts +10 -0
- package/dist/inventory/slotModel.js +10 -0
- package/dist/item/durability.d.ts +5 -0
- package/dist/item/durability.js +6 -3
- package/dist/item/itemIdentity.d.ts +171 -0
- package/dist/item/itemIdentity.js +138 -0
- package/dist/item/itemInstanceRegistry.d.ts +32 -0
- package/dist/item/itemInstanceRegistry.js +34 -0
- package/dist/item/itemgen.d.ts +163 -0
- package/dist/item/itemgen.js +151 -0
- package/dist/item/modularItem.d.ts +5 -0
- package/dist/item/modularItem.js +5 -0
- package/dist/item/use.d.ts +5 -0
- package/dist/item/use.js +5 -0
- package/dist/item/useBehavior.d.ts +142 -0
- package/dist/item/useBehavior.js +105 -0
- package/dist/item/weapon.d.ts +5 -0
- package/dist/item/weapon.js +5 -0
- package/dist/math/scalar.d.ts +25 -0
- package/dist/math/scalar.js +47 -0
- package/dist/meta/changelog.d.ts +4 -1
- package/dist/meta/changelog.js +39 -2
- package/dist/movement/avoidance.d.ts +45 -0
- package/dist/movement/avoidance.js +123 -0
- package/dist/movement/cameraRig.d.ts +8 -0
- package/dist/movement/cameraRig.js +8 -0
- package/dist/movement/dash.d.ts +11 -0
- package/dist/movement/dash.js +11 -0
- package/dist/movement/formation.d.ts +135 -0
- package/dist/movement/formation.js +194 -0
- package/dist/movement/glideModel.d.ts +5 -0
- package/dist/movement/glideModel.js +5 -0
- package/dist/movement/grappleSwing.d.ts +5 -0
- package/dist/movement/grappleSwing.js +5 -0
- package/dist/movement/leaderTrail.d.ts +5 -0
- package/dist/movement/leaderTrail.js +5 -0
- package/dist/movement/movementModel.d.ts +50 -9
- package/dist/movement/movementModel.js +75 -29
- package/dist/movement/playerMovement.js +167 -12
- package/dist/movement/poseState.d.ts +13 -0
- package/dist/movement/poseState.js +16 -0
- package/dist/movement/steering.d.ts +8 -0
- package/dist/movement/steering.js +18 -0
- package/dist/multiplayer/combatSnapshot.d.ts +3 -0
- package/dist/multiplayer/combatSnapshot.js +16 -8
- package/dist/multiplayer/lagCompensation.d.ts +5 -0
- package/dist/multiplayer/lagCompensation.js +5 -0
- package/dist/multiplayer/presenceModel.d.ts +11 -1
- package/dist/multiplayer/presenceModel.js +17 -1
- package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
- package/dist/multiplayer/simultaneousCommit.js +3 -0
- package/dist/multiplayer.d.ts +11 -0
- package/dist/multiplayer.js +11 -0
- package/dist/nav/pathFollow.d.ts +57 -0
- package/dist/nav/pathFollow.js +109 -0
- package/dist/orders/orderKinds.d.ts +156 -0
- package/dist/orders/orderKinds.js +197 -0
- package/dist/orders/orderQueue.d.ts +208 -0
- package/dist/orders/orderQueue.js +211 -0
- package/dist/physics/drivableVehicle.d.ts +31 -0
- package/dist/physics/drivableVehicle.js +16 -0
- package/dist/physics/flightDynamics.d.ts +82 -0
- package/dist/physics/flightDynamics.js +165 -0
- package/dist/physics/gravityField.d.ts +25 -0
- package/dist/physics/gravityField.js +41 -0
- package/dist/physics/kinematicVehicle.d.ts +108 -1
- package/dist/physics/kinematicVehicle.js +212 -15
- package/dist/physics/physicsWorld.d.ts +50 -12
- package/dist/physics/physicsWorld.js +120 -122
- package/dist/physics/radialImpulse.d.ts +25 -0
- package/dist/physics/radialImpulse.js +27 -0
- package/dist/physics/vehicleObstacles.d.ts +44 -0
- package/dist/physics/vehicleObstacles.js +115 -0
- package/dist/procedural.d.ts +3 -0
- package/dist/procedural.js +3 -0
- package/dist/progression/statGraph.d.ts +116 -0
- package/dist/progression/statGraph.js +318 -0
- package/dist/puzzle/cellGrid.d.ts +9 -0
- package/dist/puzzle/cellGrid.js +9 -0
- package/dist/puzzle/fallingPiece.d.ts +9 -0
- package/dist/puzzle/fallingPiece.js +9 -0
- package/dist/puzzle/nonogram.d.ts +39 -0
- package/dist/puzzle/nonogram.js +136 -0
- package/dist/random/nameGen.d.ts +5 -0
- package/dist/random/nameGen.js +5 -0
- package/dist/random/pick.d.ts +8 -0
- package/dist/random/pick.js +31 -0
- package/dist/random/rng.d.ts +26 -1
- package/dist/random/rng.js +32 -9
- package/dist/random/seedLink.d.ts +4 -0
- package/dist/random/seedLink.js +4 -0
- package/dist/relation/keyedValues.d.ts +54 -0
- package/dist/relation/keyedValues.js +115 -0
- package/dist/relation/thresholds.d.ts +62 -0
- package/dist/relation/thresholds.js +62 -0
- package/dist/render/color.d.ts +12 -0
- package/dist/render/color.js +26 -0
- package/dist/render/lookPreset.d.ts +41 -0
- package/dist/render/lookPreset.js +29 -0
- package/dist/render/postProcessing.d.ts +20 -0
- package/dist/render/postProcessing.js +21 -1
- package/dist/rules/predicate.d.ts +53 -0
- package/dist/rules/predicate.js +64 -0
- package/dist/rules/ruleEffects.d.ts +38 -0
- package/dist/rules/ruleEffects.js +37 -0
- package/dist/rules/triggeredRules.d.ts +160 -0
- package/dist/rules/triggeredRules.js +241 -0
- package/dist/runtime/adapter.d.ts +55 -3
- package/dist/runtime/adapter.js +57 -1
- package/dist/runtime/cameraDirector.d.ts +1 -0
- package/dist/runtime/cameraDirector.js +1 -0
- package/dist/runtime/commandRunner.d.ts +1 -0
- package/dist/runtime/commandRunner.js +1 -0
- package/dist/runtime/context/combat.d.ts +51 -0
- package/dist/runtime/context/combat.js +130 -0
- package/dist/runtime/context/combatFx.d.ts +23 -0
- package/dist/runtime/context/combatFx.js +161 -0
- package/dist/runtime/context/deathLoot.d.ts +30 -0
- package/dist/runtime/context/deathLoot.js +39 -0
- package/dist/runtime/context/player.d.ts +48 -0
- package/dist/runtime/context/player.js +125 -0
- package/dist/runtime/context/registries.d.ts +13 -0
- package/dist/runtime/context/registries.js +84 -0
- package/dist/runtime/context/scene.d.ts +59 -0
- package/dist/runtime/context/scene.js +291 -0
- package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
- package/dist/runtime/context/snapshotCodecs.js +26 -0
- package/dist/runtime/context/worldItems.d.ts +21 -0
- package/dist/runtime/context/worldItems.js +37 -0
- package/dist/runtime/descriptors/baseline.d.ts +48 -0
- package/dist/runtime/descriptors/baseline.js +157 -0
- package/dist/runtime/descriptors/features.d.ts +79 -0
- package/dist/runtime/descriptors/features.js +299 -0
- package/dist/runtime/gameContext.d.ts +2 -327
- package/dist/runtime/gameContext.js +273 -778
- package/dist/runtime/gameContextTypes.d.ts +467 -0
- package/dist/runtime/gameContextTypes.js +1 -0
- package/dist/runtime/gameRuntime.d.ts +1 -0
- package/dist/runtime/gameRuntime.js +1 -0
- package/dist/runtime/headlessRunner.d.ts +62 -0
- package/dist/runtime/headlessRunner.js +45 -0
- package/dist/runtime/hostPersistence.d.ts +12 -0
- package/dist/runtime/hostPersistence.js +12 -0
- package/dist/runtime/hostPolicy.d.ts +51 -0
- package/dist/runtime/hostPolicy.js +68 -0
- package/dist/runtime/hostedGameRunner.d.ts +11 -4
- package/dist/runtime/hostedGameRunner.js +27 -3
- package/dist/runtime/hostedWorldSession.d.ts +15 -5
- package/dist/runtime/hostedWorldSession.js +12 -4
- package/dist/runtime/inputSnapshot.d.ts +8 -3
- package/dist/runtime/inputSnapshot.js +6 -2
- package/dist/runtime/motionIntents.d.ts +11 -2
- package/dist/runtime/motionIntents.js +16 -2
- package/dist/runtime/perContext.d.ts +15 -0
- package/dist/runtime/perContext.js +21 -0
- package/dist/runtime/runtimeSave.d.ts +79 -0
- package/dist/runtime/runtimeSave.js +105 -0
- package/dist/runtime/save.d.ts +4 -0
- package/dist/runtime/save.js +4 -0
- package/dist/runtime/snapshot.d.ts +7 -0
- package/dist/runtime/snapshot.js +7 -0
- package/dist/runtime/visibility.d.ts +2 -1
- package/dist/runtime/visibility.js +2 -1
- package/dist/runtime/worldChannel.d.ts +7 -3
- package/dist/runtime/worldChannel.js +51 -6
- package/dist/runtime/worldMirror.d.ts +14 -2
- package/dist/runtime/worldMirror.js +15 -2
- package/dist/runtime/worldProjection.d.ts +47 -0
- package/dist/runtime/worldProjection.js +52 -0
- package/dist/runtime/worldReplication.d.ts +30 -7
- package/dist/runtime/worldReplication.js +41 -9
- package/dist/runtime/worldSnapshot.d.ts +42 -3
- package/dist/runtime/worldSnapshot.js +34 -7
- package/dist/scene/assetCatalog.d.ts +26 -0
- package/dist/scene/assetCatalog.js +4 -0
- package/dist/scene/assetDiagnostics.d.ts +69 -0
- package/dist/scene/assetDiagnostics.js +110 -0
- package/dist/scene/assetGenerator.d.ts +65 -0
- package/dist/scene/assetGenerator.js +64 -0
- package/dist/scene/assetSpace.d.ts +137 -0
- package/dist/scene/assetSpace.js +257 -0
- package/dist/scene/authoredTriggers.d.ts +219 -0
- package/dist/scene/authoredTriggers.js +454 -0
- package/dist/scene/behaviorRuntime.d.ts +75 -0
- package/dist/scene/behaviorRuntime.js +217 -0
- package/dist/scene/behaviors.d.ts +14 -2
- package/dist/scene/behaviors.js +7 -2
- package/dist/scene/bodyBind.d.ts +60 -0
- package/dist/scene/bodyBind.js +51 -0
- package/dist/scene/builtinSceneKinds.d.ts +5 -0
- package/dist/scene/builtinSceneKinds.js +67 -0
- package/dist/scene/colliders.d.ts +71 -1
- package/dist/scene/colliders.js +145 -1
- package/dist/scene/collisionMesh.d.ts +94 -0
- package/dist/scene/collisionMesh.js +699 -0
- package/dist/scene/companion.d.ts +147 -0
- package/dist/scene/companion.js +193 -0
- package/dist/scene/entityStats.d.ts +18 -11
- package/dist/scene/entityStats.js +21 -16
- package/dist/scene/entityStore.d.ts +12 -1
- package/dist/scene/entityStore.js +15 -0
- package/dist/scene/facing.d.ts +18 -0
- package/dist/scene/facing.js +26 -0
- package/dist/scene/modelSockets.d.ts +33 -0
- package/dist/scene/modelSockets.js +29 -0
- package/dist/scene/objectQuery.d.ts +2 -0
- package/dist/scene/objectQuery.js +2 -0
- package/dist/scene/objectStore.d.ts +4 -0
- package/dist/scene/objectStore.js +6 -0
- package/dist/scene/possession.d.ts +8 -0
- package/dist/scene/possession.js +14 -0
- package/dist/scene/roster.d.ts +3 -0
- package/dist/scene/roster.js +12 -0
- package/dist/scene/sceneKinds.d.ts +256 -0
- package/dist/scene/sceneKinds.js +218 -0
- package/dist/scene/sceneOwnership.d.ts +169 -0
- package/dist/scene/sceneOwnership.js +179 -0
- package/dist/scene/sceneRaycast.js +15 -0
- package/dist/scene/selectionBookmarks.d.ts +93 -0
- package/dist/scene/selectionBookmarks.js +122 -0
- package/dist/scene/vehicleSeat.d.ts +68 -0
- package/dist/scene/vehicleSeat.js +59 -0
- package/dist/sensor/concealment.d.ts +3 -0
- package/dist/sensor/concealment.js +3 -0
- package/dist/sensor/freezeMonitor.d.ts +1 -0
- package/dist/sensor/freezeMonitor.js +1 -0
- package/dist/sensor/frustumSensor.d.ts +7 -3
- package/dist/sensor/frustumSensor.js +7 -3
- package/dist/sensor/hiddenStateProbe.d.ts +5 -2
- package/dist/sensor/hiddenStateProbe.js +5 -2
- package/dist/sensor/recordingBuffer.d.ts +2 -1
- package/dist/sensor/recordingBuffer.js +2 -1
- package/dist/sensor/replayLoop.d.ts +6 -2
- package/dist/sensor/replayLoop.js +6 -2
- package/dist/sensor/revealQuery.d.ts +2 -1
- package/dist/sensor/revealQuery.js +2 -1
- package/dist/sensor/visionCone.d.ts +10 -3
- package/dist/sensor/visionCone.js +10 -3
- package/dist/session/contestedChannel.d.ts +1 -0
- package/dist/session/contestedChannel.js +1 -0
- package/dist/session/extraction.d.ts +1 -0
- package/dist/session/extraction.js +1 -0
- package/dist/session/roles.d.ts +6 -0
- package/dist/session/roles.js +6 -0
- package/dist/session/roundState.d.ts +8 -0
- package/dist/session/roundState.js +2 -0
- package/dist/settings/settingsModel.d.ts +1 -0
- package/dist/settings/settingsModel.js +1 -0
- package/dist/stats/accumulatorMeter.d.ts +6 -0
- package/dist/stats/accumulatorMeter.js +6 -0
- package/dist/stats/eventMeter.d.ts +5 -0
- package/dist/stats/eventMeter.js +5 -0
- package/dist/stats/rollCheck.d.ts +5 -0
- package/dist/stats/rollCheck.js +5 -0
- package/dist/stats/spawnLevelStats.d.ts +110 -0
- package/dist/stats/spawnLevelStats.js +140 -0
- package/dist/stats/statModifiers.d.ts +5 -0
- package/dist/stats/statModifiers.js +5 -0
- package/dist/stats/statPool.d.ts +70 -0
- package/dist/stats/statPool.js +59 -0
- package/dist/store/changeSignal.d.ts +3 -0
- package/dist/store/changeSignal.js +2 -0
- package/dist/store/defineKeyedStore.d.ts +38 -0
- package/dist/store/defineKeyedStore.js +42 -0
- package/dist/store/defineStore.d.ts +33 -0
- package/dist/store/defineStore.js +35 -0
- package/dist/store/observableKeyedStore.d.ts +7 -0
- package/dist/store/observableKeyedStore.js +35 -2
- package/dist/survival/decayMeter.d.ts +55 -0
- package/dist/survival/decayMeter.js +130 -57
- package/dist/survival/moodle.d.ts +2 -0
- package/dist/survival/regionHealth.d.ts +6 -0
- package/dist/survival/regionHealth.js +6 -3
- package/dist/tactics/fallingGrid.d.ts +4 -2
- package/dist/tactics/fallingGrid.js +4 -2
- package/dist/tactics/predictiveQuery.d.ts +3 -0
- package/dist/tactics/predictiveQuery.js +3 -0
- package/dist/tactics/snapshot.d.ts +2 -0
- package/dist/tactics/snapshot.js +2 -0
- package/dist/tactics/surface.d.ts +1 -0
- package/dist/tactics/surface.js +1 -0
- package/dist/tactics/tacticalGrid.d.ts +1 -0
- package/dist/tactics/tacticalGrid.js +1 -0
- package/dist/time/beatClock.d.ts +14 -4
- package/dist/time/beatClock.js +14 -4
- package/dist/time/calendarClock.d.ts +3 -0
- package/dist/time/calendarClock.js +3 -0
- package/dist/time/idleProgress.d.ts +4 -0
- package/dist/time/idleProgress.js +4 -0
- package/dist/time/simClock.d.ts +2 -0
- package/dist/time/simClock.js +20 -5
- package/dist/ui/actionModel.d.ts +110 -0
- package/dist/ui/actionModel.js +159 -0
- package/dist/ui/gameLayout.d.ts +30 -11
- package/dist/ui/gameLayout.js +30 -11
- package/dist/ui/hudDocument.d.ts +114 -0
- package/dist/ui/hudDocument.js +220 -0
- package/dist/ui/hudLayout.d.ts +38 -1
- package/dist/ui/hudLayout.js +220 -17
- package/dist/ui/selectionModel.d.ts +92 -0
- package/dist/ui/selectionModel.js +88 -0
- package/dist/ui/tooltipModel.d.ts +63 -0
- package/dist/ui/tooltipModel.js +82 -0
- package/dist/ui.d.ts +15 -0
- package/dist/ui.js +15 -0
- package/dist/visibility/bounds.d.ts +8 -1
- package/dist/visibility/bounds.js +8 -1
- package/dist/visibility/frustum.d.ts +12 -3
- package/dist/visibility/frustum.js +12 -3
- package/dist/work/jobQueue.d.ts +201 -0
- package/dist/work/jobQueue.js +253 -0
- package/dist/work/unitTraining.d.ts +58 -0
- package/dist/work/unitTraining.js +52 -0
- package/dist/world/authoredEntities.d.ts +29 -0
- package/dist/world/authoredEntities.js +29 -0
- package/dist/world/authoredObjects.d.ts +72 -0
- package/dist/world/authoredObjects.js +81 -0
- package/dist/world/authoredSpawn.d.ts +39 -0
- package/dist/world/authoredSpawn.js +37 -0
- package/dist/world/buildSockets.d.ts +152 -0
- package/dist/world/buildSockets.js +188 -0
- package/dist/world/buildingGenerator.d.ts +18 -0
- package/dist/world/buildingGenerator.js +62 -0
- package/dist/world/buildings.d.ts +5 -0
- package/dist/world/buildings.js +5 -0
- package/dist/world/catenary.d.ts +22 -0
- package/dist/world/catenary.js +69 -0
- package/dist/world/cityBlocks.d.ts +152 -0
- package/dist/world/cityBlocks.js +670 -0
- package/dist/world/cityContent.d.ts +77 -0
- package/dist/world/cityContent.js +261 -0
- package/dist/world/cityGeometry.d.ts +114 -0
- package/dist/world/cityGeometry.js +573 -0
- package/dist/world/cityKind.d.ts +314 -0
- package/dist/world/cityKind.js +1578 -0
- package/dist/world/features.d.ts +133 -10
- package/dist/world/features.js +66 -6
- package/dist/world/footprintGrid.d.ts +59 -0
- package/dist/world/footprintGrid.js +141 -0
- package/dist/world/geometry.d.ts +64 -0
- package/dist/world/geometry.js +94 -0
- package/dist/world/grassKind.d.ts +51 -0
- package/dist/world/grassKind.js +101 -0
- package/dist/world/markers.d.ts +50 -4
- package/dist/world/markers.js +49 -0
- package/dist/world/massing.js +1 -1
- package/dist/world/minimapBake.d.ts +78 -0
- package/dist/world/minimapBake.js +208 -0
- package/dist/world/minimapTrack.d.ts +17 -0
- package/dist/world/minimapTrack.js +22 -0
- package/dist/world/pathInstances.d.ts +27 -0
- package/dist/world/pathInstances.js +27 -0
- package/dist/world/pathNetwork.d.ts +159 -0
- package/dist/world/pathNetwork.js +684 -0
- package/dist/world/pathTerrain.d.ts +80 -0
- package/dist/world/pathTerrain.js +142 -0
- package/dist/world/place.d.ts +166 -0
- package/dist/world/place.js +96 -0
- package/dist/world/placeAsset.d.ts +81 -0
- package/dist/world/placeAsset.js +79 -0
- package/dist/world/placement.d.ts +4 -0
- package/dist/world/placement.js +4 -0
- package/dist/world/placementController.d.ts +6 -0
- package/dist/world/placementController.js +6 -0
- package/dist/world/poleLineKind.d.ts +40 -0
- package/dist/world/poleLineKind.js +97 -0
- package/dist/world/polyline.d.ts +34 -0
- package/dist/world/polyline.js +88 -0
- package/dist/world/resourceNode.d.ts +109 -0
- package/dist/world/resourceNode.js +140 -0
- package/dist/world/roads.d.ts +8 -0
- package/dist/world/roads.js +38 -0
- package/dist/world/scatter.js +2 -20
- package/dist/world/scatterRegion.d.ts +164 -0
- package/dist/world/scatterRegion.js +409 -0
- package/dist/world/sceneShapes.d.ts +43 -0
- package/dist/world/sceneShapes.js +1 -0
- package/dist/world/segment.d.ts +27 -0
- package/dist/world/segment.js +43 -0
- package/dist/world/soilKind.d.ts +48 -0
- package/dist/world/soilKind.js +92 -0
- package/dist/world/spatialSample.d.ts +241 -0
- package/dist/world/spatialSample.js +465 -0
- package/dist/world/streets.d.ts +29 -0
- package/dist/world/streets.js +55 -0
- package/dist/world/terraform.d.ts +213 -1
- package/dist/world/terraform.js +627 -22
- package/dist/world/terrain.d.ts +164 -20
- package/dist/world/terrain.js +325 -41
- package/dist/world/terrainGuides.d.ts +182 -0
- package/dist/world/terrainGuides.js +343 -0
- package/dist/world/vec2.d.ts +81 -0
- package/dist/world/vec2.js +128 -0
- package/dist/world/vec3.d.ts +49 -0
- package/dist/world/vec3.js +76 -0
- package/dist/world/vegetation.d.ts +71 -0
- package/dist/world/vegetation.js +151 -0
- package/dist/world/visibilityField.d.ts +154 -0
- package/dist/world/visibilityField.js +271 -0
- package/dist/world/volumetricClouds.d.ts +52 -0
- package/dist/world/volumetricClouds.js +43 -0
- package/dist/world/walls.d.ts +9 -0
- package/dist/world/walls.js +9 -0
- package/dist/world/waterKind.d.ts +55 -0
- package/dist/world/waterKind.js +99 -0
- package/dist/world.d.ts +141 -0
- package/dist/world.js +141 -0
- package/package.json +32 -8
- package/skills/game-design/SKILL.md +28 -0
- package/skills/game-design/agents/openai.yaml +4 -0
- package/skills/game-design/references/application-playbook.md +170 -0
- package/skills/game-design/references/field-guide.md +288 -0
- package/skills/jgengine/SKILL.md +54 -0
- package/skills/jgengine/api.md +527 -0
- package/skills/jgengine/capabilities.md +131 -0
- package/skills/jgengine/recipes/minimal-game.md +88 -0
- package/skills/jgengine-combat/SKILL.md +38 -0
- package/skills/jgengine-combat/api.md +585 -0
- package/skills/jgengine-combat/capabilities.md +213 -0
- package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
- package/skills/jgengine-combat/reference.md +108 -0
- package/skills/jgengine-gameplay/SKILL.md +39 -0
- package/skills/jgengine-gameplay/api.md +1920 -0
- package/skills/jgengine-gameplay/capabilities.md +454 -0
- package/skills/jgengine-gameplay/reference-systems.md +56 -0
- package/skills/jgengine-world/SKILL.md +51 -0
- package/skills/jgengine-world/api.md +3056 -0
- package/skills/jgengine-world/capabilities.md +476 -0
- package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
- package/skills/jgengine-world/reference.md +261 -0
- package/dist/cartridge/runtime.d.ts +0 -15
- package/dist/cartridge/runtime.js +0 -556
- package/dist/cartridge/spec.d.ts +0 -188
- package/dist/cartridge/spec.js +0 -19
- package/dist/cartridge/validate.d.ts +0 -2
- package/dist/cartridge/validate.js +0 -78
- package/dist/store/engineStore.d.ts +0 -22
- package/dist/store/engineStore.js +0 -50
- package/dist/store/features.d.ts +0 -10
- package/dist/store/features.js +0 -23
- package/llms.txt +0 -5389
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ParamSchema } from "../scene/sceneKinds.js";
|
|
2
|
+
import type { HudAnchor, HudPlacement, HudSize } from "./hudLayout.js";
|
|
3
|
+
/**
|
|
4
|
+
* Which axes a panel type may grow when resized in canvas mode. Resize is semantic —
|
|
5
|
+
* content reflows (longer track, more rows) — never a CSS scale of the whole panel.
|
|
6
|
+
*/
|
|
7
|
+
export type HudResizeAxes = "none" | "x" | "y" | "both";
|
|
8
|
+
/** Authored layout for one HUD panel inside `editor.scene.json` → `ui.panels`. */
|
|
9
|
+
export interface EditorUiPanelLayout {
|
|
10
|
+
anchor: HudAnchor;
|
|
11
|
+
dx: number;
|
|
12
|
+
dy: number;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
visible?: boolean;
|
|
16
|
+
/** Panel type id registered via {@link registerHudPanelType}; drives resize + schema. */
|
|
17
|
+
type?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Scene-document HUD section: panel id → layout. Single source of truth for placement. */
|
|
20
|
+
export interface EditorUiDocument {
|
|
21
|
+
panels: Record<string, EditorUiPanelLayout>;
|
|
22
|
+
}
|
|
23
|
+
/** TSX-declared fallback when the document has no entry for a panel. */
|
|
24
|
+
export interface HudPanelFallback {
|
|
25
|
+
anchor: HudAnchor;
|
|
26
|
+
inset?: {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
};
|
|
30
|
+
width?: number;
|
|
31
|
+
height?: number;
|
|
32
|
+
visible?: boolean;
|
|
33
|
+
type?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Fully resolved panel layout after document + fallback merge. */
|
|
36
|
+
export interface ResolvedHudPanelLayout {
|
|
37
|
+
placement: HudPlacement;
|
|
38
|
+
width?: number;
|
|
39
|
+
height?: number;
|
|
40
|
+
visible: boolean;
|
|
41
|
+
type?: string;
|
|
42
|
+
/** True when the document owned at least one field (not pure TSX fallback). */
|
|
43
|
+
fromDocument: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** Declared panel type: growable axes, size limits, optional ParamSchema for the editor. */
|
|
46
|
+
export interface HudPanelTypeDef {
|
|
47
|
+
id: string;
|
|
48
|
+
label: string;
|
|
49
|
+
resize: HudResizeAxes;
|
|
50
|
+
minWidth?: number;
|
|
51
|
+
maxWidth?: number;
|
|
52
|
+
minHeight?: number;
|
|
53
|
+
maxHeight?: number;
|
|
54
|
+
defaultWidth?: number;
|
|
55
|
+
defaultHeight?: number;
|
|
56
|
+
schema?: ParamSchema;
|
|
57
|
+
}
|
|
58
|
+
/** Register a HUD panel type so the editor can list/add/configure it and canvas resize knows axes. */
|
|
59
|
+
export declare function registerHudPanelType(def: HudPanelTypeDef): void;
|
|
60
|
+
/** @internal Look up a registered panel type by id. */
|
|
61
|
+
export declare function getHudPanelType(id: string): HudPanelTypeDef | undefined;
|
|
62
|
+
/** Every registered panel type, sorted by id — editor palette / agent listing. */
|
|
63
|
+
export declare function listHudPanelTypes(): HudPanelTypeDef[];
|
|
64
|
+
/** @internal Test seam — clear the registry between tests. */
|
|
65
|
+
export declare function clearHudPanelTypes(): void;
|
|
66
|
+
/** @internal Convert a document panel layout into a runtime placement. */
|
|
67
|
+
export declare function placementFromUiPanel(panel: EditorUiPanelLayout): HudPlacement;
|
|
68
|
+
/** @internal Build a document panel layout from a runtime placement plus optional size/visibility. */
|
|
69
|
+
export declare function uiPanelFromPlacement(placement: HudPlacement, options?: {
|
|
70
|
+
width?: number;
|
|
71
|
+
height?: number;
|
|
72
|
+
visible?: boolean;
|
|
73
|
+
type?: string;
|
|
74
|
+
}): EditorUiPanelLayout;
|
|
75
|
+
/**
|
|
76
|
+
* Resolve a panel's layout: document entry wins field-by-field over TSX fallback.
|
|
77
|
+
* TSX props are fallback-only — the scene document is the source of truth once authored.
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolveHudPanelLayout(docPanel: EditorUiPanelLayout | undefined, fallback: HudPanelFallback): ResolvedHudPanelLayout;
|
|
80
|
+
/** @internal Read a panel layout from a document ui section, or undefined when absent. */
|
|
81
|
+
export declare function findUiPanel(ui: EditorUiDocument | undefined, id: string): EditorUiPanelLayout | undefined;
|
|
82
|
+
/** @internal Immutable patch of one panel into a ui section (creates the section when missing). */
|
|
83
|
+
export declare function patchUiPanel(ui: EditorUiDocument | undefined, id: string, patch: Partial<EditorUiPanelLayout>): EditorUiDocument;
|
|
84
|
+
/** @internal Remove a panel entry from the ui section; returns undefined when the section empties. */
|
|
85
|
+
export declare function removeUiPanel(ui: EditorUiDocument | undefined, id: string): EditorUiDocument | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Semantic resize: apply pixel deltas only on growable axes, clamped to min/max.
|
|
88
|
+
* Never scales content — callers reflow layout size (track length, list rows).
|
|
89
|
+
*/
|
|
90
|
+
export declare function resizePanelSize(current: HudSize, delta: {
|
|
91
|
+
dw: number;
|
|
92
|
+
dh: number;
|
|
93
|
+
}, axes: HudResizeAxes, limits?: {
|
|
94
|
+
minWidth?: number;
|
|
95
|
+
maxWidth?: number;
|
|
96
|
+
minHeight?: number;
|
|
97
|
+
maxHeight?: number;
|
|
98
|
+
}): HudSize;
|
|
99
|
+
/** @internal Resolve resize axes + limits for a panel type id (defaults to none when unregistered). */
|
|
100
|
+
export declare function resolvePanelResize(typeId: string | undefined): {
|
|
101
|
+
axes: HudResizeAxes;
|
|
102
|
+
minWidth?: number;
|
|
103
|
+
maxWidth?: number;
|
|
104
|
+
minHeight?: number;
|
|
105
|
+
maxHeight?: number;
|
|
106
|
+
};
|
|
107
|
+
/** @internal Decode a single panel layout from untrusted JSON; null when invalid. */
|
|
108
|
+
export declare function decodeUiPanelLayout(raw: unknown): EditorUiPanelLayout | null;
|
|
109
|
+
/** @internal Decode a ui section from untrusted JSON; undefined when absent, empty object when empty panels. */
|
|
110
|
+
export declare function decodeEditorUiDocument(raw: unknown): EditorUiDocument | undefined;
|
|
111
|
+
/** @internal Deep-clone a ui section for document history snapshots. */
|
|
112
|
+
export declare function cloneEditorUiDocument(ui: EditorUiDocument | undefined): EditorUiDocument | undefined;
|
|
113
|
+
/** @internal Convert a layout store-style placement map into a document ui section. */
|
|
114
|
+
export declare function uiDocumentFromPlacements(panels: Record<string, EditorUiPanelLayout>): EditorUiDocument;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { isHudAnchor } from "./hudLayout.js";
|
|
2
|
+
const panelTypes = new Map();
|
|
3
|
+
/** Register a HUD panel type so the editor can list/add/configure it and canvas resize knows axes. */
|
|
4
|
+
export function registerHudPanelType(def) {
|
|
5
|
+
panelTypes.set(def.id, def);
|
|
6
|
+
}
|
|
7
|
+
/** @internal Look up a registered panel type by id. */
|
|
8
|
+
export function getHudPanelType(id) {
|
|
9
|
+
return panelTypes.get(id);
|
|
10
|
+
}
|
|
11
|
+
/** Every registered panel type, sorted by id — editor palette / agent listing. */
|
|
12
|
+
export function listHudPanelTypes() {
|
|
13
|
+
return [...panelTypes.values()].sort((a, b) => a.id.localeCompare(b.id));
|
|
14
|
+
}
|
|
15
|
+
/** @internal Test seam — clear the registry between tests. */
|
|
16
|
+
export function clearHudPanelTypes() {
|
|
17
|
+
panelTypes.clear();
|
|
18
|
+
}
|
|
19
|
+
/** @internal Convert a document panel layout into a runtime placement. */
|
|
20
|
+
export function placementFromUiPanel(panel) {
|
|
21
|
+
return { anchor: panel.anchor, dx: panel.dx, dy: panel.dy };
|
|
22
|
+
}
|
|
23
|
+
/** @internal Build a document panel layout from a runtime placement plus optional size/visibility. */
|
|
24
|
+
export function uiPanelFromPlacement(placement, options) {
|
|
25
|
+
const panel = {
|
|
26
|
+
anchor: placement.anchor,
|
|
27
|
+
dx: placement.dx,
|
|
28
|
+
dy: placement.dy,
|
|
29
|
+
};
|
|
30
|
+
if (options?.width !== undefined)
|
|
31
|
+
panel.width = options.width;
|
|
32
|
+
if (options?.height !== undefined)
|
|
33
|
+
panel.height = options.height;
|
|
34
|
+
if (options?.visible !== undefined)
|
|
35
|
+
panel.visible = options.visible;
|
|
36
|
+
if (options?.type !== undefined)
|
|
37
|
+
panel.type = options.type;
|
|
38
|
+
return panel;
|
|
39
|
+
}
|
|
40
|
+
function fallbackPlacement(fallback) {
|
|
41
|
+
const inset = fallback.inset ?? { x: 16, y: 16 };
|
|
42
|
+
const { anchor } = fallback;
|
|
43
|
+
const edgeX = anchor.endsWith("right") || anchor === "right";
|
|
44
|
+
const edgeY = anchor.startsWith("bottom") || anchor === "bottom";
|
|
45
|
+
return {
|
|
46
|
+
anchor,
|
|
47
|
+
dx: edgeX ? -inset.x : inset.x,
|
|
48
|
+
dy: edgeY ? -inset.y : inset.y,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a panel's layout: document entry wins field-by-field over TSX fallback.
|
|
53
|
+
* TSX props are fallback-only — the scene document is the source of truth once authored.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveHudPanelLayout(docPanel, fallback) {
|
|
56
|
+
if (docPanel === undefined) {
|
|
57
|
+
return {
|
|
58
|
+
placement: fallbackPlacement(fallback),
|
|
59
|
+
width: fallback.width,
|
|
60
|
+
height: fallback.height,
|
|
61
|
+
visible: fallback.visible !== false,
|
|
62
|
+
type: fallback.type,
|
|
63
|
+
fromDocument: false,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
placement: placementFromUiPanel(docPanel),
|
|
68
|
+
width: docPanel.width ?? fallback.width,
|
|
69
|
+
height: docPanel.height ?? fallback.height,
|
|
70
|
+
visible: docPanel.visible ?? fallback.visible !== false,
|
|
71
|
+
type: docPanel.type ?? fallback.type,
|
|
72
|
+
fromDocument: true,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** @internal Read a panel layout from a document ui section, or undefined when absent. */
|
|
76
|
+
export function findUiPanel(ui, id) {
|
|
77
|
+
return ui?.panels[id];
|
|
78
|
+
}
|
|
79
|
+
/** @internal Immutable patch of one panel into a ui section (creates the section when missing). */
|
|
80
|
+
export function patchUiPanel(ui, id, patch) {
|
|
81
|
+
const existing = ui?.panels[id];
|
|
82
|
+
const base = existing !== undefined
|
|
83
|
+
? { ...existing }
|
|
84
|
+
: {
|
|
85
|
+
anchor: isHudAnchor(patch.anchor) ? patch.anchor : "top-left",
|
|
86
|
+
dx: typeof patch.dx === "number" ? patch.dx : 0,
|
|
87
|
+
dy: typeof patch.dy === "number" ? patch.dy : 0,
|
|
88
|
+
};
|
|
89
|
+
const next = { ...base };
|
|
90
|
+
if (patch.anchor !== undefined && isHudAnchor(patch.anchor))
|
|
91
|
+
next.anchor = patch.anchor;
|
|
92
|
+
if (typeof patch.dx === "number" && Number.isFinite(patch.dx))
|
|
93
|
+
next.dx = patch.dx;
|
|
94
|
+
if (typeof patch.dy === "number" && Number.isFinite(patch.dy))
|
|
95
|
+
next.dy = patch.dy;
|
|
96
|
+
if (typeof patch.width === "number" && Number.isFinite(patch.width))
|
|
97
|
+
next.width = patch.width;
|
|
98
|
+
if (typeof patch.height === "number" && Number.isFinite(patch.height))
|
|
99
|
+
next.height = patch.height;
|
|
100
|
+
if (typeof patch.visible === "boolean")
|
|
101
|
+
next.visible = patch.visible;
|
|
102
|
+
if (typeof patch.type === "string")
|
|
103
|
+
next.type = patch.type;
|
|
104
|
+
return {
|
|
105
|
+
panels: {
|
|
106
|
+
...(ui?.panels ?? {}),
|
|
107
|
+
[id]: next,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** @internal Remove a panel entry from the ui section; returns undefined when the section empties. */
|
|
112
|
+
export function removeUiPanel(ui, id) {
|
|
113
|
+
if (ui === undefined || ui.panels[id] === undefined)
|
|
114
|
+
return ui;
|
|
115
|
+
const panels = { ...ui.panels };
|
|
116
|
+
delete panels[id];
|
|
117
|
+
return Object.keys(panels).length === 0 ? undefined : { panels };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Semantic resize: apply pixel deltas only on growable axes, clamped to min/max.
|
|
121
|
+
* Never scales content — callers reflow layout size (track length, list rows).
|
|
122
|
+
*/
|
|
123
|
+
export function resizePanelSize(current, delta, axes, limits) {
|
|
124
|
+
if (axes === "none")
|
|
125
|
+
return { ...current };
|
|
126
|
+
let width = current.width;
|
|
127
|
+
let height = current.height;
|
|
128
|
+
if (axes === "x" || axes === "both")
|
|
129
|
+
width = current.width + delta.dw;
|
|
130
|
+
if (axes === "y" || axes === "both")
|
|
131
|
+
height = current.height + delta.dh;
|
|
132
|
+
const minW = limits?.minWidth ?? 1;
|
|
133
|
+
const minH = limits?.minHeight ?? 1;
|
|
134
|
+
const maxW = limits?.maxWidth ?? Number.POSITIVE_INFINITY;
|
|
135
|
+
const maxH = limits?.maxHeight ?? Number.POSITIVE_INFINITY;
|
|
136
|
+
return {
|
|
137
|
+
width: Math.max(minW, Math.min(maxW, Math.round(width))),
|
|
138
|
+
height: Math.max(minH, Math.min(maxH, Math.round(height))),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** @internal Resolve resize axes + limits for a panel type id (defaults to none when unregistered). */
|
|
142
|
+
export function resolvePanelResize(typeId) {
|
|
143
|
+
if (typeId === undefined)
|
|
144
|
+
return { axes: "none" };
|
|
145
|
+
const def = panelTypes.get(typeId);
|
|
146
|
+
if (def === undefined)
|
|
147
|
+
return { axes: "none" };
|
|
148
|
+
return {
|
|
149
|
+
axes: def.resize,
|
|
150
|
+
minWidth: def.minWidth,
|
|
151
|
+
maxWidth: def.maxWidth,
|
|
152
|
+
minHeight: def.minHeight,
|
|
153
|
+
maxHeight: def.maxHeight,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function isFiniteNumber(value) {
|
|
157
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
158
|
+
}
|
|
159
|
+
/** @internal Decode a single panel layout from untrusted JSON; null when invalid. */
|
|
160
|
+
export function decodeUiPanelLayout(raw) {
|
|
161
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
162
|
+
return null;
|
|
163
|
+
const value = raw;
|
|
164
|
+
if (!isHudAnchor(value.anchor))
|
|
165
|
+
return null;
|
|
166
|
+
if (!isFiniteNumber(value.dx) || !isFiniteNumber(value.dy))
|
|
167
|
+
return null;
|
|
168
|
+
const panel = {
|
|
169
|
+
anchor: value.anchor,
|
|
170
|
+
dx: value.dx,
|
|
171
|
+
dy: value.dy,
|
|
172
|
+
};
|
|
173
|
+
if (isFiniteNumber(value.width))
|
|
174
|
+
panel.width = value.width;
|
|
175
|
+
if (isFiniteNumber(value.height))
|
|
176
|
+
panel.height = value.height;
|
|
177
|
+
if (typeof value.visible === "boolean")
|
|
178
|
+
panel.visible = value.visible;
|
|
179
|
+
if (typeof value.type === "string" && value.type.length > 0)
|
|
180
|
+
panel.type = value.type;
|
|
181
|
+
return panel;
|
|
182
|
+
}
|
|
183
|
+
/** @internal Decode a ui section from untrusted JSON; undefined when absent, empty object when empty panels. */
|
|
184
|
+
export function decodeEditorUiDocument(raw) {
|
|
185
|
+
if (raw === undefined || raw === null)
|
|
186
|
+
return undefined;
|
|
187
|
+
if (typeof raw !== "object" || Array.isArray(raw))
|
|
188
|
+
return undefined;
|
|
189
|
+
const panelsRaw = raw.panels;
|
|
190
|
+
if (typeof panelsRaw !== "object" || panelsRaw === null || Array.isArray(panelsRaw)) {
|
|
191
|
+
return { panels: {} };
|
|
192
|
+
}
|
|
193
|
+
const panels = {};
|
|
194
|
+
for (const [id, entry] of Object.entries(panelsRaw)) {
|
|
195
|
+
if (id.length === 0)
|
|
196
|
+
continue;
|
|
197
|
+
const decoded = decodeUiPanelLayout(entry);
|
|
198
|
+
if (decoded !== null)
|
|
199
|
+
panels[id] = decoded;
|
|
200
|
+
}
|
|
201
|
+
return { panels };
|
|
202
|
+
}
|
|
203
|
+
/** @internal Deep-clone a ui section for document history snapshots. */
|
|
204
|
+
export function cloneEditorUiDocument(ui) {
|
|
205
|
+
if (ui === undefined)
|
|
206
|
+
return undefined;
|
|
207
|
+
const panels = {};
|
|
208
|
+
for (const [id, panel] of Object.entries(ui.panels)) {
|
|
209
|
+
panels[id] = { ...panel };
|
|
210
|
+
}
|
|
211
|
+
return { panels };
|
|
212
|
+
}
|
|
213
|
+
/** @internal Convert a layout store-style placement map into a document ui section. */
|
|
214
|
+
export function uiDocumentFromPlacements(panels) {
|
|
215
|
+
const out = {};
|
|
216
|
+
for (const [id, panel] of Object.entries(panels)) {
|
|
217
|
+
out[id] = { ...panel };
|
|
218
|
+
}
|
|
219
|
+
return { panels: out };
|
|
220
|
+
}
|
package/dist/ui/hudLayout.d.ts
CHANGED
|
@@ -19,6 +19,10 @@ export interface HudPanelState {
|
|
|
19
19
|
placement: HudPlacement;
|
|
20
20
|
z: number;
|
|
21
21
|
moved: boolean;
|
|
22
|
+
width?: number;
|
|
23
|
+
height?: number;
|
|
24
|
+
visible: boolean;
|
|
25
|
+
type?: string;
|
|
22
26
|
}
|
|
23
27
|
export interface HudLayoutState {
|
|
24
28
|
panels: Record<string, HudPanelState>;
|
|
@@ -28,31 +32,64 @@ export interface HudLayoutState {
|
|
|
28
32
|
export interface HudLayoutOptions {
|
|
29
33
|
snap?: number;
|
|
30
34
|
locked?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Called after a panel placement/size is authored (move, resize, hydrate from document).
|
|
37
|
+
* Canvas mode + agent RPCs use this to write undoable scene-document patches.
|
|
38
|
+
*/
|
|
39
|
+
onDocumentPatch?: (id: string, panel: import("./hudDocument.js").EditorUiPanelLayout) => void;
|
|
31
40
|
}
|
|
41
|
+
/** @internal */
|
|
32
42
|
export declare function isPanelDraggable(state: HudLayoutState, id: string): boolean;
|
|
33
43
|
export interface HudLayoutStore {
|
|
34
44
|
getState(): HudLayoutState;
|
|
35
45
|
subscribe(listener: (state: HudLayoutState) => void): () => void;
|
|
36
|
-
register(id: string, placement: HudPlacement
|
|
46
|
+
register(id: string, placement: HudPlacement, options?: {
|
|
47
|
+
width?: number;
|
|
48
|
+
height?: number;
|
|
49
|
+
visible?: boolean;
|
|
50
|
+
type?: string;
|
|
51
|
+
}): void;
|
|
37
52
|
move(id: string, rect: HudRect, viewport: HudSize): void;
|
|
53
|
+
resize(id: string, size: HudSize): void;
|
|
54
|
+
setVisible(id: string, visible: boolean): void;
|
|
38
55
|
bringToFront(id: string): void;
|
|
39
56
|
setLocked(locked: boolean): void;
|
|
40
57
|
setEditing(editing: boolean): void;
|
|
41
58
|
reset(id?: string): void;
|
|
42
59
|
serialize(): string;
|
|
43
60
|
hydrate(raw: string | null | undefined): void;
|
|
61
|
+
/** Apply scene-document `ui` section as the source of truth for registered/pending panels. */
|
|
62
|
+
applyDocumentUi(ui: import("./hudDocument.js").EditorUiDocument | undefined): void;
|
|
63
|
+
/** Snapshot moved/resized panels as a document ui section. */
|
|
64
|
+
toDocumentUi(): import("./hudDocument.js").EditorUiDocument;
|
|
44
65
|
}
|
|
45
66
|
export declare const HUD_ANCHOR_FRACTIONS: Record<HudAnchor, {
|
|
46
67
|
fx: number;
|
|
47
68
|
fy: number;
|
|
48
69
|
}>;
|
|
70
|
+
/** @internal */
|
|
49
71
|
export declare function isHudAnchor(value: unknown): value is HudAnchor;
|
|
72
|
+
/** @internal */
|
|
50
73
|
export declare function anchoredPlacement(anchor: HudAnchor, inset: {
|
|
51
74
|
x: number;
|
|
52
75
|
y: number;
|
|
53
76
|
}): HudPlacement;
|
|
77
|
+
/** @internal */
|
|
54
78
|
export declare function nearestAnchor(rect: HudRect, viewport: HudSize): HudAnchor;
|
|
79
|
+
/** @internal */
|
|
55
80
|
export declare function clampRect(rect: HudRect, viewport: HudSize): HudRect;
|
|
81
|
+
/** @internal */
|
|
56
82
|
export declare function placementFromRect(rect: HudRect, viewport: HudSize, snap?: number): HudPlacement;
|
|
83
|
+
/** @internal */
|
|
57
84
|
export declare function rectFromPlacement(placement: HudPlacement, size: HudSize, viewport: HudSize): HudRect;
|
|
85
|
+
/** @internal Agent bridge seam — HudCanvas registers its store while mounted so headless drivers can reach canvas mode. */
|
|
86
|
+
export declare function registerActiveHudLayout(store: HudLayoutStore): () => void;
|
|
87
|
+
/** @internal */
|
|
88
|
+
export declare function listActiveHudLayouts(): HudLayoutStore[];
|
|
89
|
+
/**
|
|
90
|
+
* @internal Notified whenever a `HudCanvas` mounts or unmounts (the active-layout set changes).
|
|
91
|
+
* Lets the editor's HUD-layout surface enable editing on layouts that mount after it opens.
|
|
92
|
+
*/
|
|
93
|
+
export declare function subscribeActiveHudLayouts(listener: () => void): () => void;
|
|
94
|
+
/** @internal */
|
|
58
95
|
export declare function createHudLayout(options?: HudLayoutOptions): HudLayoutStore;
|