@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,206 @@
|
|
|
1
|
+
import { scatter } from "../world/scatter.js";
|
|
2
|
+
import { pointInPolygon, polygonBounds } from "../world/scatterRegion.js";
|
|
3
|
+
function hash(text) {
|
|
4
|
+
let h = 2166136261 >>> 0;
|
|
5
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
6
|
+
h ^= text.charCodeAt(i);
|
|
7
|
+
h = Math.imul(h, 16777619);
|
|
8
|
+
}
|
|
9
|
+
return (h >>> 0) / 4294967296;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the footprint a directive fills: an explicit `area`, else the footprint of the named
|
|
13
|
+
* `region` — a scatter/closed path (as a clip polygon) or a volume (its XZ AABB). Null when neither
|
|
14
|
+
* is present or the region id does not resolve.
|
|
15
|
+
* @capability world-directives resolve a directive's region footprint from the scene document
|
|
16
|
+
*/
|
|
17
|
+
export function resolveDirectiveFootprint(doc, directive) {
|
|
18
|
+
if (directive.area !== undefined) {
|
|
19
|
+
const { min, max } = directive.area;
|
|
20
|
+
return { area: { minX: min[0], minZ: min[1], maxX: max[0], maxZ: max[1] } };
|
|
21
|
+
}
|
|
22
|
+
if (directive.region === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
const path = doc.paths.find((p) => p.id === directive.region);
|
|
25
|
+
if (path !== undefined && path.points.length >= 3) {
|
|
26
|
+
const polygon = path.points.map((point) => [point.x, point.z]);
|
|
27
|
+
const area = polygonBounds(polygon);
|
|
28
|
+
if (area === null)
|
|
29
|
+
return null;
|
|
30
|
+
return { area, polygon };
|
|
31
|
+
}
|
|
32
|
+
const volume = doc.volumes.find((v) => v.id === directive.region);
|
|
33
|
+
if (volume !== undefined) {
|
|
34
|
+
const half = volume.halfExtents !== undefined
|
|
35
|
+
? { x: volume.halfExtents.x, z: volume.halfExtents.z }
|
|
36
|
+
: volume.radius !== undefined
|
|
37
|
+
? { x: volume.radius, z: volume.radius }
|
|
38
|
+
: null;
|
|
39
|
+
if (half === null)
|
|
40
|
+
return null;
|
|
41
|
+
return {
|
|
42
|
+
area: {
|
|
43
|
+
minX: volume.center.x - half.x,
|
|
44
|
+
minZ: volume.center.z - half.z,
|
|
45
|
+
maxX: volume.center.x + half.x,
|
|
46
|
+
maxZ: volume.center.z + half.z,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function scatterSeed(directive) {
|
|
53
|
+
return `${directive.id}:${directive.seed ?? directive.id}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Materializes a scatter directive into deterministic catalog-prop placements across its footprint,
|
|
57
|
+
* clipped to the region polygon when one is present. Per-instance scale and yaw derive from the
|
|
58
|
+
* directive id + seed + point index, so ids are stable across re-materializes.
|
|
59
|
+
* @capability world-directives materialize a scatter directive into placements
|
|
60
|
+
*/
|
|
61
|
+
export function materializeScatterDirective(directive, footprint) {
|
|
62
|
+
if (directive.density <= 0)
|
|
63
|
+
return [];
|
|
64
|
+
const seed = scatterSeed(directive);
|
|
65
|
+
const points = scatter({
|
|
66
|
+
area: footprint.area,
|
|
67
|
+
density: directive.density,
|
|
68
|
+
minDistance: directive.minSpacing ?? 0,
|
|
69
|
+
jitter: directive.jitter ?? 1,
|
|
70
|
+
seed,
|
|
71
|
+
});
|
|
72
|
+
const minScale = directive.minScale ?? 1;
|
|
73
|
+
const maxScale = directive.maxScale ?? 1;
|
|
74
|
+
const minYaw = directive.minYaw ?? 0;
|
|
75
|
+
const maxYaw = directive.maxYaw ?? Math.PI * 2;
|
|
76
|
+
const out = [];
|
|
77
|
+
for (const point of points) {
|
|
78
|
+
if (footprint.polygon !== undefined && !pointInPolygon([point.x, point.z], footprint.polygon))
|
|
79
|
+
continue;
|
|
80
|
+
const scaleRoll = hash(`${seed}:scale:${point.index}`);
|
|
81
|
+
const yawRoll = hash(`${seed}:yaw:${point.index}`);
|
|
82
|
+
out.push({
|
|
83
|
+
id: `${directive.id}#${point.index}`,
|
|
84
|
+
directiveId: directive.id,
|
|
85
|
+
kind: "scatter",
|
|
86
|
+
asset: directive.asset,
|
|
87
|
+
x: point.x,
|
|
88
|
+
z: point.z,
|
|
89
|
+
y: 0,
|
|
90
|
+
rotationY: minYaw + (maxYaw - minYaw) * yawRoll,
|
|
91
|
+
scale: minScale + (maxScale - minScale) * scaleRoll,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
function pickSpecies(available, roll) {
|
|
97
|
+
const total = available.reduce((sum, s) => sum + Math.max(0, s.weight ?? 1), 0);
|
|
98
|
+
if (total <= 0)
|
|
99
|
+
return available[0];
|
|
100
|
+
let acc = roll * total;
|
|
101
|
+
for (const species of available) {
|
|
102
|
+
acc -= Math.max(0, species.weight ?? 1);
|
|
103
|
+
if (acc <= 0)
|
|
104
|
+
return species;
|
|
105
|
+
}
|
|
106
|
+
return available[available.length - 1];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Materializes a population directive into deterministic mob spawn placements: at most `cap` of each
|
|
110
|
+
* weighted species, distributed across the footprint. Each placement carries a stable id and its
|
|
111
|
+
* species id in `asset`, ready to feed `ctx.scene.entity.spawn` / `ai/populationDirector`.
|
|
112
|
+
* @capability world-directives materialize a population directive into spawns
|
|
113
|
+
*/
|
|
114
|
+
export function materializePopulationDirective(directive, footprint) {
|
|
115
|
+
const remaining = new Map();
|
|
116
|
+
for (const species of directive.species) {
|
|
117
|
+
remaining.set(species.id, Math.max(0, (remaining.get(species.id) ?? 0) + species.cap));
|
|
118
|
+
}
|
|
119
|
+
const total = [...remaining.values()].reduce((sum, cap) => sum + cap, 0);
|
|
120
|
+
if (total <= 0)
|
|
121
|
+
return [];
|
|
122
|
+
const seed = scatterSeed(directive);
|
|
123
|
+
const points = scatter({ area: footprint.area, count: total, minDistance: 0, seed });
|
|
124
|
+
const out = [];
|
|
125
|
+
for (const point of points) {
|
|
126
|
+
if (footprint.polygon !== undefined && !pointInPolygon([point.x, point.z], footprint.polygon))
|
|
127
|
+
continue;
|
|
128
|
+
const available = directive.species.filter((s) => (remaining.get(s.id) ?? 0) > 0);
|
|
129
|
+
if (available.length === 0)
|
|
130
|
+
break;
|
|
131
|
+
const picked = pickSpecies(available, hash(`${seed}:species:${point.index}`));
|
|
132
|
+
remaining.set(picked.id, (remaining.get(picked.id) ?? 0) - 1);
|
|
133
|
+
out.push({
|
|
134
|
+
id: `${directive.id}#${point.index}`,
|
|
135
|
+
directiveId: directive.id,
|
|
136
|
+
kind: "population",
|
|
137
|
+
asset: picked.id,
|
|
138
|
+
x: point.x,
|
|
139
|
+
z: point.z,
|
|
140
|
+
y: 0,
|
|
141
|
+
rotationY: hash(`${seed}:yaw:${point.index}`) * Math.PI * 2,
|
|
142
|
+
scale: 1,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Materializes one directive against a document, resolving its footprint first. Returns an empty
|
|
149
|
+
* list when the region does not resolve.
|
|
150
|
+
* @capability world-directives materialize one scene directive into instances
|
|
151
|
+
*/
|
|
152
|
+
export function materializeDirective(doc, directive) {
|
|
153
|
+
const footprint = resolveDirectiveFootprint(doc, directive);
|
|
154
|
+
if (footprint === null)
|
|
155
|
+
return [];
|
|
156
|
+
return directive.kind === "scatter"
|
|
157
|
+
? materializeScatterDirective(directive, footprint)
|
|
158
|
+
: materializePopulationDirective(directive, footprint);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Applies a directive overlay to its materialized instances: patched fields override, `deleted`
|
|
162
|
+
* drops the instance. Instances with no patch pass through untouched.
|
|
163
|
+
* @capability world-directives apply a sparse overlay over materialized directive instances
|
|
164
|
+
*/
|
|
165
|
+
export function applyDirectiveOverlay(instances, overlay) {
|
|
166
|
+
const out = [];
|
|
167
|
+
for (const instance of instances) {
|
|
168
|
+
const patch = overlay.patches[instance.id];
|
|
169
|
+
if (patch === undefined) {
|
|
170
|
+
out.push(instance);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (patch.deleted === true)
|
|
174
|
+
continue;
|
|
175
|
+
out.push({
|
|
176
|
+
...instance,
|
|
177
|
+
x: patch.position?.x ?? instance.x,
|
|
178
|
+
z: patch.position?.z ?? instance.z,
|
|
179
|
+
y: patch.y ?? instance.y,
|
|
180
|
+
scale: patch.scale ?? instance.scale,
|
|
181
|
+
rotationY: patch.rotationY ?? instance.rotationY,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Materializes every directive on a document into one flat instance list, applying each directive's
|
|
188
|
+
* overlay (matched by `over` === directive id) as it goes. The bulk-content counterpart to
|
|
189
|
+
* `resolveAuthoredObjects` / `resolveScatter`: games and headless tests read the same list.
|
|
190
|
+
* @capability world-directives materialize all scene directives with their overlays
|
|
191
|
+
*/
|
|
192
|
+
export function materializeDirectives(doc, overlays) {
|
|
193
|
+
const directives = doc.directives ?? [];
|
|
194
|
+
if (directives.length === 0)
|
|
195
|
+
return [];
|
|
196
|
+
const overlayByDirective = new Map((overlays ?? []).map((overlay) => [overlay.over, overlay]));
|
|
197
|
+
const out = [];
|
|
198
|
+
for (const directive of directives) {
|
|
199
|
+
let instances = materializeDirective(doc, directive);
|
|
200
|
+
const overlay = overlayByDirective.get(directive.id);
|
|
201
|
+
if (overlay !== undefined)
|
|
202
|
+
instances = applyDirectiveOverlay(instances, overlay);
|
|
203
|
+
out.push(...instances);
|
|
204
|
+
}
|
|
205
|
+
return out;
|
|
206
|
+
}
|
|
@@ -1,31 +1,212 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { type EditorGridLayer } from "./grid.js";
|
|
2
|
+
import type { EditorCatalogData, EditorCatalogDefinition, EditorCatalogEntry, EditorCollection, EditorDirective, EditorDocument, EditorEnvironment, EditorFragmentContent, EditorLayersInput, EditorMarker, EditorMinimapBake, EditorNote, EditorPath, EditorPrefab, EditorTerrain, EditorVolume } from "./types.js";
|
|
3
|
+
/** Spread-ready non-placeable fields preserved across document rebuilds. @internal */
|
|
4
|
+
export declare function editorDocumentExtras(doc: EditorDocument): {
|
|
5
|
+
prefabs: EditorPrefab[];
|
|
6
|
+
collections: EditorCollection[];
|
|
7
|
+
catalogs: EditorCatalogData[];
|
|
8
|
+
grids?: EditorGridLayer[];
|
|
9
|
+
terrain?: EditorTerrain;
|
|
10
|
+
ui?: EditorDocument["ui"];
|
|
11
|
+
directives?: EditorDirective[];
|
|
12
|
+
minimap?: EditorMinimapBake;
|
|
13
|
+
environment?: EditorEnvironment;
|
|
14
|
+
};
|
|
15
|
+
/** Builds a fresh, empty editor document to start authoring a scene from scratch.
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
3
18
|
export declare function createEmptyEditorDocument(): EditorDocument;
|
|
4
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Deep-copies an editor document so edits never mutate the source. The terrain snapshot is
|
|
21
|
+
* shared by reference: sculpt commands replace it wholesale (copy-on-write), never mutate it in
|
|
22
|
+
* place, so history snapshots stay cheap even on large heightfields.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
5
25
|
export declare function cloneEditorDocument(doc: EditorDocument): EditorDocument;
|
|
6
|
-
/** Resolves a game's `editorLayers` export — document, partial data, or factory — into a full document.
|
|
26
|
+
/** Resolves a game's `editorLayers` export — document, partial data, or factory — into a full document.
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
7
29
|
export declare function normalizeEditorLayers(input: EditorLayersInput | undefined | null): EditorDocument;
|
|
8
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Reserves `id` in `taken` and returns it unchanged when free; otherwise mints the next free
|
|
32
|
+
* `<id>_copy`/`<id>_copyN` suffix and reserves that instead. The one place object ids are made
|
|
33
|
+
* unique across a document's markers/volumes/paths/annotations as a single global namespace, so a
|
|
34
|
+
* merged-in or imported object can never silently shadow an existing object in another collection.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function ensureUniqueEditorId(id: string, taken: Set<string>): string;
|
|
38
|
+
/** Combines multiple editor documents' markers, volumes, paths, notes, prefabs, and collections
|
|
39
|
+
* into one, re-idding any placeable object whose id collides with one already merged in — across
|
|
40
|
+
* all four collections, since selection/parenting/removal treat those ids as one document-global
|
|
41
|
+
* namespace.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
9
44
|
export declare function mergeEditorDocuments(...docs: readonly EditorDocument[]): EditorDocument;
|
|
10
|
-
/**
|
|
45
|
+
/** Extracts the subset of a document matching the given ids — the clipboard fragment for copy/paste.
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractEditorFragment(doc: EditorDocument, ids: readonly string[]): EditorDocument;
|
|
49
|
+
/** Counts every object in a document across markers, volumes, paths, and notes.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export declare function editorDocumentSize(doc: EditorDocument): number;
|
|
53
|
+
/** Looks up a prefab by id in an editor document.
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export declare function findEditorPrefab(doc: EditorDocument, id: string): EditorPrefab | undefined;
|
|
57
|
+
/** Looks up a named collection / selection set by id in an editor document.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
export declare function findEditorCollection(doc: EditorDocument, id: string): EditorCollection | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Looks up a gameplay data catalog by id on the scene document.
|
|
63
|
+
* @capability editor-catalogs Find a persisted catalog bag by id.
|
|
64
|
+
*/
|
|
65
|
+
export declare function findEditorCatalog(doc: EditorDocument, id: string): EditorCatalogData | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Looks up one entry inside a gameplay data catalog.
|
|
68
|
+
* @capability editor-catalogs Find a catalog entry's meta bag by catalog + entry id.
|
|
69
|
+
*/
|
|
70
|
+
export declare function findEditorCatalogEntry(doc: EditorDocument, catalogId: string, entryId: string): EditorCatalogEntry | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Seeds default catalog rows from game-exported definitions into a document: missing catalogs and
|
|
73
|
+
* missing entries are filled from the definition; existing document values win (overlay already applied).
|
|
74
|
+
* @capability editor-catalogs Seed scene-document catalogs from game-exported schemas.
|
|
75
|
+
*/
|
|
76
|
+
export declare function seedEditorCatalogs(doc: EditorDocument, definitions: readonly EditorCatalogDefinition[]): EditorDocument;
|
|
77
|
+
/**
|
|
78
|
+
* True when an object carries a per-object `locked` flag (hierarchy lock toggle).
|
|
79
|
+
* Collection membership is checked separately by {@link isEditorObjectLocked}.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export declare function isEditorObjectSelfLocked(doc: EditorDocument, id: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* True when an object is a member of any locked collection (production group lock).
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
export declare function isEditorObjectCollectionLocked(doc: EditorDocument, id: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* True when an object id is locked for edit — either its own `locked` flag or membership in a
|
|
90
|
+
* locked collection. Blocks move/delete via session mutations.
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
export declare function isEditorObjectLocked(doc: EditorDocument, id: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* True when an object carries `hidden: true` — omitted from editor viewport overlays and picking
|
|
96
|
+
* while remaining in the hierarchy and document.
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
export declare function isEditorObjectHidden(doc: EditorDocument, id: string): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Extracts the selected ids into a prefab fragment centered on their own bounds centroid, so the
|
|
102
|
+
* same prefab reinserts consistently regardless of where in the scene (or which game) it lands.
|
|
103
|
+
* @internal
|
|
104
|
+
*/
|
|
105
|
+
export declare function createPrefabFragment(doc: EditorDocument, ids: readonly string[]): EditorFragmentContent;
|
|
106
|
+
/** Looks up a marker by id in an editor document.
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
11
109
|
export declare function findEditorMarker(doc: EditorDocument, id: string): EditorMarker | undefined;
|
|
12
|
-
/** Looks up a
|
|
110
|
+
/** Looks up a marker by id and throws when it is absent — for scene contracts where a
|
|
111
|
+
* missing marker is an authoring error to surface loudly, not a runtime branch to handle.
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
114
|
+
export declare function requireEditorMarker(doc: EditorDocument, id: string): EditorMarker;
|
|
115
|
+
/** A marker's world position as an `[x, y, z]` tuple — the shared shape gameplay tables read.
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
export declare function editorMarkerPosition(marker: EditorMarker): readonly [x: number, y: number, z: number];
|
|
119
|
+
/** A marker's ground position as an `[x, z]` tuple, dropping the vertical axis.
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export declare function editorMarkerXZ(marker: EditorMarker): readonly [x: number, z: number];
|
|
123
|
+
/** Looks up a volume by id in an editor document.
|
|
124
|
+
* @internal
|
|
125
|
+
*/
|
|
13
126
|
export declare function findEditorVolume(doc: EditorDocument, id: string): EditorVolume | undefined;
|
|
14
|
-
/** Looks up a path by id in an editor document.
|
|
127
|
+
/** Looks up a path by id in an editor document.
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
15
130
|
export declare function findEditorPath(doc: EditorDocument, id: string): EditorPath | undefined;
|
|
16
|
-
/** Looks up an annotation note by id in an editor document.
|
|
131
|
+
/** Looks up an annotation note by id in an editor document.
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
17
134
|
export declare function findEditorNote(doc: EditorDocument, id: string): EditorNote | undefined;
|
|
18
|
-
/** Lists the distinct marker, volume, and path kinds authored in a document.
|
|
135
|
+
/** Lists the distinct marker, volume, and path kinds authored in a document.
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
19
138
|
export declare function listEditorKinds(doc: EditorDocument): {
|
|
20
139
|
markers: string[];
|
|
21
140
|
volumes: string[];
|
|
22
141
|
paths: string[];
|
|
23
142
|
};
|
|
24
|
-
/**
|
|
143
|
+
/** The id of an object's parent, or undefined when it is a root (or unknown).
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
146
|
+
export declare function editorParentOf(doc: EditorDocument, id: string): string | undefined;
|
|
147
|
+
/** The direct child ids of an object (empty when it has none).
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
export declare function editorChildren(doc: EditorDocument, parentId: string): string[];
|
|
151
|
+
/** Object ids with no parent (or whose parent no longer exists) — the roots of the hierarchy.
|
|
152
|
+
* @internal
|
|
153
|
+
*/
|
|
154
|
+
export declare function editorRoots(doc: EditorDocument): string[];
|
|
155
|
+
/** Every descendant id of the given ids (children, grandchildren, …), excluding the inputs.
|
|
156
|
+
* @internal
|
|
157
|
+
*/
|
|
158
|
+
export declare function collectDescendants(doc: EditorDocument, ids: Iterable<string>): Set<string>;
|
|
159
|
+
/** True when parenting `id` under `parentId` would form a cycle (or parent itself to itself).
|
|
160
|
+
* @internal
|
|
161
|
+
*/
|
|
162
|
+
export declare function wouldCreateCycle(doc: EditorDocument, id: string, parentId: string | null): boolean;
|
|
163
|
+
/** Serializes an editor document to JSON text for saving or export.
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
25
166
|
export declare function exportEditorDocumentJson(doc: EditorDocument, pretty?: boolean): string;
|
|
26
|
-
/**
|
|
167
|
+
/** One field-level failure surfaced while decoding an untrusted editor document, `path` pointing
|
|
168
|
+
* at the exact field that failed (e.g. `$.markers[2].position`).
|
|
169
|
+
* @internal
|
|
170
|
+
*/
|
|
171
|
+
export interface EditorDocumentDiagnostic {
|
|
172
|
+
path: string;
|
|
173
|
+
message: string;
|
|
174
|
+
}
|
|
175
|
+
/** Result of {@link decodeEditorDocument}: a typed document, or every diagnostic collected while
|
|
176
|
+
* decoding it.
|
|
177
|
+
* @internal
|
|
178
|
+
*/
|
|
179
|
+
export type DecodeEditorDocumentResult = {
|
|
180
|
+
ok: true;
|
|
181
|
+
document: EditorDocument;
|
|
182
|
+
} | {
|
|
183
|
+
ok: false;
|
|
184
|
+
errors: EditorDocumentDiagnostic[];
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* The authoritative decoder/migrator for an editor document arriving from outside this process
|
|
188
|
+
* (disk, network, an agent's `import_document` RPC): validates every field with a path-specific
|
|
189
|
+
* diagnostic on failure instead of trusting the shape, then migrates forward — routes any embedded
|
|
190
|
+
* terrain through {@link migrateTerrainSnapshot} and normalizes `version` to the one this build
|
|
191
|
+
* understands. Every other loader in this module funnels through here.
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
export declare function decodeEditorDocument(raw: unknown): DecodeEditorDocumentResult;
|
|
195
|
+
/** Parses JSON text back into a normalized editor document, throwing a message that names every
|
|
196
|
+
* field that failed to decode when the shape is malformed.
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
27
199
|
export declare function importEditorDocumentJson(raw: string): EditorDocument;
|
|
28
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* Applies a saved editor document on top of a game's derived layers: overlay objects replace
|
|
202
|
+
* same-id base objects and new overlay objects are appended, so editor saves win over source
|
|
203
|
+
* data until they are folded back in.
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
export declare function applyEditorDocumentOverlay(base: EditorDocument, overlay: EditorDocument): EditorDocument;
|
|
207
|
+
/** Computes the world-space min/max bounds spanning every object in a document, or null if empty.
|
|
208
|
+
* @internal
|
|
209
|
+
*/
|
|
29
210
|
export declare function editorDocumentBounds(doc: EditorDocument): {
|
|
30
211
|
min: {
|
|
31
212
|
x: number;
|