@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
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SurfaceDelta, type TerraformDelta, type TerrainMaterialLayer, type WeightDelta } from "../world/terraform.js";
|
|
2
|
+
import type { EditorUiDocument, EditorUiPanelLayout } from "../ui/hudDocument.js";
|
|
3
|
+
import type { EditorGridCellEdit, EditorGridLayer } from "./grid.js";
|
|
4
|
+
import type { ParamSchema } from "../scene/sceneKinds.js";
|
|
5
|
+
import type { EditorCatalogEntry, EditorDocument, EditorEnvironment, EditorMarker, EditorMinimapBake, EditorNote, EditorPath, EditorTerrain, EditorVec3, EditorVolume } from "./types.js";
|
|
2
6
|
/** A single editor mutation — select, move, add, remove, undo/redo — dispatched to a session. */
|
|
3
7
|
export type EditorCommand = {
|
|
4
8
|
type: "select";
|
|
@@ -10,19 +14,85 @@ export type EditorCommand = {
|
|
|
10
14
|
id: string;
|
|
11
15
|
position?: EditorVec3;
|
|
12
16
|
rotationY?: number;
|
|
17
|
+
} | {
|
|
18
|
+
type: "translate";
|
|
19
|
+
ids: readonly string[];
|
|
20
|
+
delta: EditorVec3;
|
|
21
|
+
} | {
|
|
22
|
+
type: "setParent";
|
|
23
|
+
ids: readonly string[];
|
|
24
|
+
parentId: string | null;
|
|
13
25
|
} | {
|
|
14
26
|
type: "addMarker";
|
|
15
27
|
marker: EditorMarker;
|
|
16
28
|
} | {
|
|
17
|
-
type: "
|
|
29
|
+
type: "addVolume";
|
|
30
|
+
volume: EditorVolume;
|
|
31
|
+
} | {
|
|
32
|
+
type: "addPath";
|
|
33
|
+
path: EditorPath;
|
|
34
|
+
} | {
|
|
35
|
+
type: "addNote";
|
|
36
|
+
note: EditorNote;
|
|
37
|
+
} | {
|
|
38
|
+
type: "setMarker";
|
|
18
39
|
id: string;
|
|
40
|
+
patch: Partial<Omit<EditorMarker, "id">>;
|
|
19
41
|
} | {
|
|
20
42
|
type: "setVolume";
|
|
21
43
|
id: string;
|
|
22
44
|
patch: Partial<Omit<EditorVolume, "id">>;
|
|
23
45
|
} | {
|
|
24
|
-
type: "
|
|
25
|
-
|
|
46
|
+
type: "setPath";
|
|
47
|
+
id: string;
|
|
48
|
+
patch: Partial<Omit<EditorPath, "id">>;
|
|
49
|
+
} | {
|
|
50
|
+
type: "setNote";
|
|
51
|
+
id: string;
|
|
52
|
+
patch: Partial<Omit<EditorNote, "id">>;
|
|
53
|
+
} | {
|
|
54
|
+
type: "setCatalogEntry";
|
|
55
|
+
catalogId: string;
|
|
56
|
+
entryId: string;
|
|
57
|
+
patch: {
|
|
58
|
+
label?: string;
|
|
59
|
+
meta?: Record<string, unknown>;
|
|
60
|
+
};
|
|
61
|
+
} | {
|
|
62
|
+
type: "addCatalogEntry";
|
|
63
|
+
catalogId: string;
|
|
64
|
+
entry: EditorCatalogEntry;
|
|
65
|
+
} | {
|
|
66
|
+
type: "removeCatalogEntry";
|
|
67
|
+
catalogId: string;
|
|
68
|
+
entryId: string;
|
|
69
|
+
} | {
|
|
70
|
+
type: "addCatalog";
|
|
71
|
+
id: string;
|
|
72
|
+
label?: string;
|
|
73
|
+
schema?: ParamSchema;
|
|
74
|
+
} | {
|
|
75
|
+
type: "removeCatalog";
|
|
76
|
+
id: string;
|
|
77
|
+
} | {
|
|
78
|
+
type: "setCatalogSchema";
|
|
79
|
+
id: string;
|
|
80
|
+
schema: ParamSchema;
|
|
81
|
+
label?: string;
|
|
82
|
+
} | {
|
|
83
|
+
type: "remove";
|
|
84
|
+
id: string;
|
|
85
|
+
} | {
|
|
86
|
+
type: "removeMany";
|
|
87
|
+
ids: readonly string[];
|
|
88
|
+
} | {
|
|
89
|
+
type: "duplicate";
|
|
90
|
+
ids: readonly string[];
|
|
91
|
+
offset?: EditorVec3;
|
|
92
|
+
} | {
|
|
93
|
+
type: "addFragment";
|
|
94
|
+
fragment: EditorDocument;
|
|
95
|
+
offset?: EditorVec3;
|
|
26
96
|
} | {
|
|
27
97
|
type: "importDocument";
|
|
28
98
|
document: EditorDocument;
|
|
@@ -32,11 +102,165 @@ export type EditorCommand = {
|
|
|
32
102
|
} | {
|
|
33
103
|
type: "replaceDocument";
|
|
34
104
|
document: EditorDocument;
|
|
105
|
+
} | {
|
|
106
|
+
type: "setTerrain";
|
|
107
|
+
terrain: EditorTerrain;
|
|
108
|
+
} | {
|
|
109
|
+
type: "sculptTerrain";
|
|
110
|
+
delta: TerraformDelta;
|
|
111
|
+
} | {
|
|
112
|
+
type: "paintTerrain";
|
|
113
|
+
delta: SurfaceDelta;
|
|
114
|
+
} | {
|
|
115
|
+
type: "setTerrainLayers";
|
|
116
|
+
layers: readonly TerrainMaterialLayer[];
|
|
117
|
+
} | {
|
|
118
|
+
type: "blendTerrain";
|
|
119
|
+
delta: WeightDelta;
|
|
120
|
+
} | {
|
|
121
|
+
type: "clearTerrain";
|
|
122
|
+
} | {
|
|
123
|
+
type: "setMinimapBake";
|
|
124
|
+
minimap: EditorMinimapBake;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Replace the scene-document environment/lighting bag. Pass `undefined` to clear authored sky/fog
|
|
128
|
+
* so world.ts fallbacks apply again. The lighting workspace writes the full merged bag so
|
|
129
|
+
* undo restores the previous snapshot as one step (use `coalesce` while scrubbing sliders).
|
|
130
|
+
*/
|
|
131
|
+
| {
|
|
132
|
+
type: "setEnvironment";
|
|
133
|
+
environment: EditorEnvironment | undefined;
|
|
134
|
+
} | {
|
|
135
|
+
type: "convertScatterToObjects";
|
|
136
|
+
pathId: string;
|
|
137
|
+
markers: readonly EditorMarker[];
|
|
138
|
+
} | {
|
|
139
|
+
type: "createPrefab";
|
|
140
|
+
id: string;
|
|
141
|
+
name: string;
|
|
142
|
+
ids: readonly string[];
|
|
143
|
+
} | {
|
|
144
|
+
type: "insertPrefab";
|
|
145
|
+
prefabId: string;
|
|
146
|
+
at: EditorVec3;
|
|
147
|
+
instanceId?: string;
|
|
148
|
+
} | {
|
|
149
|
+
type: "detachPrefabInstance";
|
|
150
|
+
instanceId: string;
|
|
151
|
+
} | {
|
|
152
|
+
type: "deletePrefab";
|
|
153
|
+
prefabId: string;
|
|
154
|
+
} | {
|
|
155
|
+
type: "createCollection";
|
|
156
|
+
id: string;
|
|
157
|
+
name: string;
|
|
158
|
+
memberIds?: readonly string[];
|
|
159
|
+
} | {
|
|
160
|
+
type: "renameCollection";
|
|
161
|
+
id: string;
|
|
162
|
+
name: string;
|
|
163
|
+
} | {
|
|
164
|
+
type: "deleteCollection";
|
|
165
|
+
id: string;
|
|
166
|
+
} | {
|
|
167
|
+
type: "setCollectionMembers";
|
|
168
|
+
id: string;
|
|
169
|
+
memberIds: readonly string[];
|
|
170
|
+
} | {
|
|
171
|
+
type: "addToCollection";
|
|
172
|
+
id: string;
|
|
173
|
+
ids: readonly string[];
|
|
174
|
+
} | {
|
|
175
|
+
type: "removeFromCollection";
|
|
176
|
+
id: string;
|
|
177
|
+
ids: readonly string[];
|
|
178
|
+
} | {
|
|
179
|
+
type: "setCollectionFlags";
|
|
180
|
+
id: string;
|
|
181
|
+
patch: {
|
|
182
|
+
color?: string;
|
|
183
|
+
locked?: boolean;
|
|
184
|
+
visible?: boolean;
|
|
185
|
+
};
|
|
186
|
+
} | {
|
|
187
|
+
/**
|
|
188
|
+
* Per-object lock/visibility flags on placeables. `locked: false` / `hidden: false` clear the
|
|
189
|
+
* field so the document stays compact; collection locks are unchanged.
|
|
190
|
+
*/
|
|
191
|
+
type: "setObjectFlags";
|
|
192
|
+
ids: readonly string[];
|
|
193
|
+
patch: {
|
|
194
|
+
locked?: boolean;
|
|
195
|
+
hidden?: boolean;
|
|
196
|
+
};
|
|
197
|
+
} | {
|
|
198
|
+
type: "selectCollection";
|
|
199
|
+
id: string;
|
|
200
|
+
} | {
|
|
201
|
+
type: "batchSetProperties";
|
|
202
|
+
ids: readonly string[];
|
|
203
|
+
patch: {
|
|
204
|
+
color?: string;
|
|
205
|
+
label?: string;
|
|
206
|
+
meta?: Record<string, unknown>;
|
|
207
|
+
};
|
|
208
|
+
} | {
|
|
209
|
+
type: "assignMaterial";
|
|
210
|
+
ids: readonly string[];
|
|
211
|
+
materialId: string;
|
|
212
|
+
} | {
|
|
213
|
+
type: "addGridLayer";
|
|
214
|
+
layer: EditorGridLayer;
|
|
215
|
+
} | {
|
|
216
|
+
type: "removeGridLayer";
|
|
217
|
+
id: string;
|
|
218
|
+
} | {
|
|
219
|
+
type: "setGridLayer";
|
|
220
|
+
id: string;
|
|
221
|
+
patch: Partial<Omit<EditorGridLayer, "id" | "cells">>;
|
|
222
|
+
} | {
|
|
223
|
+
type: "paintGridCells";
|
|
224
|
+
id: string;
|
|
225
|
+
cells: readonly EditorGridCellEdit[];
|
|
226
|
+
} | {
|
|
227
|
+
type: "fillGridRect";
|
|
228
|
+
id: string;
|
|
229
|
+
col0: number;
|
|
230
|
+
row0: number;
|
|
231
|
+
col1: number;
|
|
232
|
+
row1: number;
|
|
233
|
+
value: string;
|
|
234
|
+
} | {
|
|
235
|
+
type: "floodFillGrid";
|
|
236
|
+
id: string;
|
|
237
|
+
col: number;
|
|
238
|
+
row: number;
|
|
239
|
+
value: string;
|
|
240
|
+
} | {
|
|
241
|
+
type: "resizeGridLayer";
|
|
242
|
+
id: string;
|
|
243
|
+
cols: number;
|
|
244
|
+
rows: number;
|
|
245
|
+
} | {
|
|
246
|
+
type: "setUiPanel";
|
|
247
|
+
id: string;
|
|
248
|
+
patch: Partial<EditorUiPanelLayout>;
|
|
249
|
+
} | {
|
|
250
|
+
type: "removeUiPanel";
|
|
251
|
+
id: string;
|
|
252
|
+
} | {
|
|
253
|
+
type: "setUi";
|
|
254
|
+
ui: EditorUiDocument | undefined;
|
|
35
255
|
} | {
|
|
36
256
|
type: "undo";
|
|
37
257
|
} | {
|
|
38
258
|
type: "redo";
|
|
39
259
|
};
|
|
260
|
+
/** Per-dispatch options; `coalesce` merges consecutive same-key edits into one undo step. */
|
|
261
|
+
export interface EditorDispatchOptions {
|
|
262
|
+
coalesce?: string;
|
|
263
|
+
}
|
|
40
264
|
/** The document plus current selection at a point in editor history. */
|
|
41
265
|
export interface EditorSessionState {
|
|
42
266
|
document: EditorDocument;
|
|
@@ -46,14 +270,18 @@ export interface EditorSessionState {
|
|
|
46
270
|
export interface EditorSession {
|
|
47
271
|
getState(): EditorSessionState;
|
|
48
272
|
subscribe(listener: (state: EditorSessionState) => void): () => void;
|
|
49
|
-
dispatch(command: EditorCommand): EditorSessionState;
|
|
273
|
+
dispatch(command: EditorCommand, options?: EditorDispatchOptions): EditorSessionState;
|
|
50
274
|
exportJson(pretty?: boolean): string;
|
|
51
275
|
canUndo(): boolean;
|
|
52
276
|
canRedo(): boolean;
|
|
53
277
|
}
|
|
54
|
-
/** Creates an editor session with undo/redo history seeded from an initial document.
|
|
278
|
+
/** Creates an editor session with undo/redo history seeded from an initial document.
|
|
279
|
+
* @internal
|
|
280
|
+
*/
|
|
55
281
|
export declare function createEditorSession(initial: EditorDocument, historyLimit?: number): EditorSession;
|
|
56
|
-
/** Compact snapshot of a session state — counts, selection, and the selected object.
|
|
282
|
+
/** Compact snapshot of a session state — counts, selection, and the selected object.
|
|
283
|
+
* @internal
|
|
284
|
+
*/
|
|
57
285
|
export declare function summarizeEditorSession(state: EditorSessionState): {
|
|
58
286
|
markers: number;
|
|
59
287
|
volumes: number;
|
package/dist/editor/commands.js
CHANGED
|
@@ -1,120 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyDeltaToSnapshot, applySurfaceDeltaToSnapshot, applyWeightDeltaToSnapshot, revertDeltaFromSnapshot, revertSurfaceDeltaFromSnapshot, revertWeightDeltaFromSnapshot, } from "../world/terraform.js";
|
|
2
|
+
import { cloneEditorDocument, findEditorMarker, findEditorVolume, } from "./document.js";
|
|
3
|
+
import { applyMutating, isStructural } from "./commandApply.js";
|
|
2
4
|
function snapshotState(state) {
|
|
3
5
|
return {
|
|
4
6
|
document: cloneEditorDocument(state.document),
|
|
5
7
|
selection: [...state.selection],
|
|
6
8
|
};
|
|
7
9
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return marker;
|
|
27
|
-
return {
|
|
28
|
-
...marker,
|
|
29
|
-
position: command.position === undefined ? marker.position : { ...command.position },
|
|
30
|
-
...(command.rotationY === undefined ? {} : { rotationY: command.rotationY }),
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
const volumes = state.document.volumes.map((volume) => {
|
|
34
|
-
if (volume.id !== command.id)
|
|
35
|
-
return volume;
|
|
36
|
-
if (command.position === undefined)
|
|
37
|
-
return volume;
|
|
38
|
-
return { ...volume, center: { ...command.position } };
|
|
39
|
-
});
|
|
40
|
-
const annotations = state.document.annotations.map((note) => {
|
|
41
|
-
if (note.id !== command.id)
|
|
42
|
-
return note;
|
|
43
|
-
if (command.position === undefined)
|
|
44
|
-
return note;
|
|
45
|
-
return { ...note, position: { ...command.position } };
|
|
46
|
-
});
|
|
47
|
-
return {
|
|
48
|
-
...state,
|
|
49
|
-
document: { ...state.document, markers, volumes, annotations },
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
case "addMarker":
|
|
53
|
-
return {
|
|
54
|
-
...state,
|
|
55
|
-
document: {
|
|
56
|
-
...state.document,
|
|
57
|
-
markers: [...state.document.markers.filter((m) => m.id !== command.marker.id), command.marker],
|
|
58
|
-
},
|
|
59
|
-
selection: [command.marker.id],
|
|
60
|
-
};
|
|
61
|
-
case "addVolume":
|
|
62
|
-
return {
|
|
63
|
-
...state,
|
|
64
|
-
document: {
|
|
65
|
-
...state.document,
|
|
66
|
-
volumes: [...state.document.volumes.filter((v) => v.id !== command.volume.id), command.volume],
|
|
67
|
-
},
|
|
68
|
-
selection: [command.volume.id],
|
|
69
|
-
};
|
|
70
|
-
case "setVolume": {
|
|
71
|
-
const volumes = state.document.volumes.map((volume) => {
|
|
72
|
-
if (volume.id !== command.id)
|
|
73
|
-
return volume;
|
|
74
|
-
return {
|
|
75
|
-
...volume,
|
|
76
|
-
...command.patch,
|
|
77
|
-
center: command.patch.center === undefined ? volume.center : { ...command.patch.center },
|
|
78
|
-
halfExtents: command.patch.halfExtents === undefined
|
|
79
|
-
? volume.halfExtents
|
|
80
|
-
: { ...command.patch.halfExtents },
|
|
81
|
-
meta: command.patch.meta === undefined ? volume.meta : { ...command.patch.meta },
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
return { ...state, document: { ...state.document, volumes } };
|
|
85
|
-
}
|
|
86
|
-
case "remove":
|
|
87
|
-
return {
|
|
88
|
-
document: removeById(state.document, command.id),
|
|
89
|
-
selection: state.selection.filter((id) => id !== command.id),
|
|
90
|
-
};
|
|
91
|
-
case "importDocument":
|
|
92
|
-
case "replaceDocument":
|
|
93
|
-
return {
|
|
94
|
-
document: cloneEditorDocument(command.document),
|
|
95
|
-
selection: [],
|
|
96
|
-
};
|
|
97
|
-
case "importJson":
|
|
98
|
-
return {
|
|
99
|
-
document: importEditorDocumentJson(command.json),
|
|
100
|
-
selection: [],
|
|
101
|
-
};
|
|
102
|
-
case "undo":
|
|
103
|
-
case "redo":
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function isStructural(command) {
|
|
108
|
-
return (command.type === "setTransform" ||
|
|
109
|
-
command.type === "addMarker" ||
|
|
110
|
-
command.type === "addVolume" ||
|
|
111
|
-
command.type === "setVolume" ||
|
|
112
|
-
command.type === "remove" ||
|
|
113
|
-
command.type === "importDocument" ||
|
|
114
|
-
command.type === "importJson" ||
|
|
115
|
-
command.type === "replaceDocument");
|
|
116
|
-
}
|
|
117
|
-
/** Creates an editor session with undo/redo history seeded from an initial document. */
|
|
10
|
+
/**
|
|
11
|
+
* Per-brush apply/revert pair over the heightfield snapshot. One registry drives every terrain
|
|
12
|
+
* command, push, and undo/redo path, so the three brushes never fork into parallel code.
|
|
13
|
+
*/
|
|
14
|
+
const terrainStrokes = {
|
|
15
|
+
sculpt: { apply: applyDeltaToSnapshot, revert: revertDeltaFromSnapshot },
|
|
16
|
+
paint: { apply: applySurfaceDeltaToSnapshot, revert: revertSurfaceDeltaFromSnapshot },
|
|
17
|
+
blend: { apply: applyWeightDeltaToSnapshot, revert: revertWeightDeltaFromSnapshot },
|
|
18
|
+
};
|
|
19
|
+
/** Maps a terrain-brush command type to its stroke kind. */
|
|
20
|
+
const terrainStrokeKind = {
|
|
21
|
+
sculptTerrain: "sculpt",
|
|
22
|
+
paintTerrain: "paint",
|
|
23
|
+
blendTerrain: "blend",
|
|
24
|
+
};
|
|
25
|
+
/** Creates an editor session with undo/redo history seeded from an initial document.
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
118
28
|
export function createEditorSession(initial, historyLimit = 100) {
|
|
119
29
|
let state = {
|
|
120
30
|
document: cloneEditorDocument(initial),
|
|
@@ -122,11 +32,27 @@ export function createEditorSession(initial, historyLimit = 100) {
|
|
|
122
32
|
};
|
|
123
33
|
const past = [];
|
|
124
34
|
const future = [];
|
|
35
|
+
let lastCoalesce = null;
|
|
125
36
|
const listeners = new Set();
|
|
126
37
|
const emit = () => {
|
|
127
38
|
for (const listener of listeners)
|
|
128
39
|
listener(state);
|
|
129
40
|
};
|
|
41
|
+
const applyStroke = (entry, direction, selection) => {
|
|
42
|
+
const terrain = state.document.terrain;
|
|
43
|
+
if (terrain === undefined)
|
|
44
|
+
return state;
|
|
45
|
+
const next = terrainStrokes[entry.kind][direction](terrain, entry.delta);
|
|
46
|
+
return { document: { ...state.document, terrain: next }, selection };
|
|
47
|
+
};
|
|
48
|
+
const pushTerrainStroke = (entry) => {
|
|
49
|
+
past.push(entry);
|
|
50
|
+
if (past.length > historyLimit)
|
|
51
|
+
past.shift();
|
|
52
|
+
future.length = 0;
|
|
53
|
+
lastCoalesce = null;
|
|
54
|
+
state = applyStroke(entry, "apply", entry.selection);
|
|
55
|
+
};
|
|
130
56
|
return {
|
|
131
57
|
getState: () => state,
|
|
132
58
|
subscribe(listener) {
|
|
@@ -137,22 +63,47 @@ export function createEditorSession(initial, historyLimit = 100) {
|
|
|
137
63
|
},
|
|
138
64
|
canUndo: () => past.length > 0,
|
|
139
65
|
canRedo: () => future.length > 0,
|
|
140
|
-
dispatch(command) {
|
|
66
|
+
dispatch(command, options) {
|
|
141
67
|
if (command.type === "undo") {
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
68
|
+
const entry = past.pop();
|
|
69
|
+
if (entry === undefined)
|
|
144
70
|
return state;
|
|
145
|
-
|
|
146
|
-
|
|
71
|
+
if (entry.kind === "snapshot") {
|
|
72
|
+
future.push({ kind: "snapshot", state: snapshotState(state) });
|
|
73
|
+
state = entry.state;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
future.push({ ...entry, selection: [...state.selection] });
|
|
77
|
+
state = applyStroke(entry, "revert", entry.selection);
|
|
78
|
+
}
|
|
79
|
+
lastCoalesce = null;
|
|
147
80
|
emit();
|
|
148
81
|
return state;
|
|
149
82
|
}
|
|
150
83
|
if (command.type === "redo") {
|
|
151
|
-
const
|
|
152
|
-
if (
|
|
84
|
+
const entry = future.pop();
|
|
85
|
+
if (entry === undefined)
|
|
86
|
+
return state;
|
|
87
|
+
if (entry.kind === "snapshot") {
|
|
88
|
+
past.push({ kind: "snapshot", state: snapshotState(state) });
|
|
89
|
+
state = entry.state;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
past.push({ ...entry, selection: [...state.selection] });
|
|
93
|
+
state = applyStroke(entry, "apply", entry.selection);
|
|
94
|
+
}
|
|
95
|
+
lastCoalesce = null;
|
|
96
|
+
emit();
|
|
97
|
+
return state;
|
|
98
|
+
}
|
|
99
|
+
if (command.type === "sculptTerrain" || command.type === "paintTerrain" || command.type === "blendTerrain") {
|
|
100
|
+
if (state.document.terrain === undefined || command.delta.indices.length === 0)
|
|
153
101
|
return state;
|
|
154
|
-
|
|
155
|
-
|
|
102
|
+
pushTerrainStroke({
|
|
103
|
+
kind: terrainStrokeKind[command.type],
|
|
104
|
+
delta: command.delta,
|
|
105
|
+
selection: [...state.selection],
|
|
106
|
+
});
|
|
156
107
|
emit();
|
|
157
108
|
return state;
|
|
158
109
|
}
|
|
@@ -160,10 +111,15 @@ export function createEditorSession(initial, historyLimit = 100) {
|
|
|
160
111
|
if (next === null)
|
|
161
112
|
return state;
|
|
162
113
|
if (isStructural(command)) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
114
|
+
const coalesce = options?.coalesce;
|
|
115
|
+
const merge = coalesce !== undefined && coalesce === lastCoalesce && past.length > 0;
|
|
116
|
+
if (!merge) {
|
|
117
|
+
past.push({ kind: "snapshot", state: snapshotState(state) });
|
|
118
|
+
if (past.length > historyLimit)
|
|
119
|
+
past.shift();
|
|
120
|
+
}
|
|
166
121
|
future.length = 0;
|
|
122
|
+
lastCoalesce = coalesce ?? null;
|
|
167
123
|
}
|
|
168
124
|
state = next;
|
|
169
125
|
emit();
|
|
@@ -174,7 +130,9 @@ export function createEditorSession(initial, historyLimit = 100) {
|
|
|
174
130
|
},
|
|
175
131
|
};
|
|
176
132
|
}
|
|
177
|
-
/** Compact snapshot of a session state — counts, selection, and the selected object.
|
|
133
|
+
/** Compact snapshot of a session state — counts, selection, and the selected object.
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
178
136
|
export function summarizeEditorSession(state) {
|
|
179
137
|
const selectedId = state.selection[0];
|
|
180
138
|
return {
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { Aabb, Vec2 } from "../world/geometry.js";
|
|
2
|
+
import type { EditorDirective, EditorDirectiveKind, EditorDocument, EditorPopulationDirective, EditorScatterDirective } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The deterministic materializer for scene {@link EditorDirective}s — the bake side of the
|
|
5
|
+
* bake/patch seam in #985. A directive is one authored line ("scatter rocks across the north
|
|
6
|
+
* ridge"); this expands it into many placements with **stable per-instance ids** (`<directiveId>#
|
|
7
|
+
* <index>`) so a sparse overlay can hand-tweak or delete individual instances by id without every
|
|
8
|
+
* re-materialize orphaning those edits. Fully deterministic: same directive + seed + region ⇒ the
|
|
9
|
+
* same field, every time (safe for verify/CI). Built on the existing `scatter` primitive.
|
|
10
|
+
*/
|
|
11
|
+
/** One materialized placement from a directive — grounded XZ, deterministic scale/yaw, stable id. */
|
|
12
|
+
export interface MaterializedInstance {
|
|
13
|
+
/** Stable id `<directiveId>#<index>` — the key an overlay patches or deletes. */
|
|
14
|
+
id: string;
|
|
15
|
+
/** The directive that minted this instance. */
|
|
16
|
+
directiveId: string;
|
|
17
|
+
kind: EditorDirectiveKind;
|
|
18
|
+
/** What to place: a `scatter` directive's catalog asset, or a `population` directive's species id. */
|
|
19
|
+
asset: string;
|
|
20
|
+
x: number;
|
|
21
|
+
z: number;
|
|
22
|
+
/** Vertical offset in meters (0 unless an overlay sets it); grounding on terrain stays the caller's job. */
|
|
23
|
+
y: number;
|
|
24
|
+
rotationY: number;
|
|
25
|
+
scale: number;
|
|
26
|
+
}
|
|
27
|
+
/** A resolved directive footprint: the XZ bounds to scatter within, plus an optional clip polygon. */
|
|
28
|
+
export interface DirectiveFootprint {
|
|
29
|
+
area: Aabb;
|
|
30
|
+
polygon?: Vec2[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the footprint a directive fills: an explicit `area`, else the footprint of the named
|
|
34
|
+
* `region` — a scatter/closed path (as a clip polygon) or a volume (its XZ AABB). Null when neither
|
|
35
|
+
* is present or the region id does not resolve.
|
|
36
|
+
* @capability world-directives resolve a directive's region footprint from the scene document
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveDirectiveFootprint(doc: EditorDocument, directive: EditorDirective): DirectiveFootprint | null;
|
|
39
|
+
/**
|
|
40
|
+
* Materializes a scatter directive into deterministic catalog-prop placements across its footprint,
|
|
41
|
+
* clipped to the region polygon when one is present. Per-instance scale and yaw derive from the
|
|
42
|
+
* directive id + seed + point index, so ids are stable across re-materializes.
|
|
43
|
+
* @capability world-directives materialize a scatter directive into placements
|
|
44
|
+
*/
|
|
45
|
+
export declare function materializeScatterDirective(directive: EditorScatterDirective, footprint: DirectiveFootprint): MaterializedInstance[];
|
|
46
|
+
/**
|
|
47
|
+
* Materializes a population directive into deterministic mob spawn placements: at most `cap` of each
|
|
48
|
+
* weighted species, distributed across the footprint. Each placement carries a stable id and its
|
|
49
|
+
* species id in `asset`, ready to feed `ctx.scene.entity.spawn` / `ai/populationDirector`.
|
|
50
|
+
* @capability world-directives materialize a population directive into spawns
|
|
51
|
+
*/
|
|
52
|
+
export declare function materializePopulationDirective(directive: EditorPopulationDirective, footprint: DirectiveFootprint): MaterializedInstance[];
|
|
53
|
+
/**
|
|
54
|
+
* Materializes one directive against a document, resolving its footprint first. Returns an empty
|
|
55
|
+
* list when the region does not resolve.
|
|
56
|
+
* @capability world-directives materialize one scene directive into instances
|
|
57
|
+
*/
|
|
58
|
+
export declare function materializeDirective(doc: EditorDocument, directive: EditorDirective): MaterializedInstance[];
|
|
59
|
+
/** A per-instance hand-tweak over a materialized directive, keyed by the minted instance id. */
|
|
60
|
+
export interface DirectiveInstancePatch {
|
|
61
|
+
/** Override the placement's XZ position. */
|
|
62
|
+
position?: {
|
|
63
|
+
x: number;
|
|
64
|
+
z: number;
|
|
65
|
+
};
|
|
66
|
+
/** Override the vertical offset. */
|
|
67
|
+
y?: number;
|
|
68
|
+
scale?: number;
|
|
69
|
+
rotationY?: number;
|
|
70
|
+
/** Remove this instance from the materialized set. */
|
|
71
|
+
deleted?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* A sparse overlay over one directive's materialized instances — the "nudge *that one* rock" answer.
|
|
75
|
+
* Hand-edits are keyed by the stable instance id the materializer mints, so they survive re-bakes.
|
|
76
|
+
*/
|
|
77
|
+
export interface EditorDirectiveOverlay {
|
|
78
|
+
/** The directive id whose instances this overlay patches. */
|
|
79
|
+
over: string;
|
|
80
|
+
patches: Record<string, DirectiveInstancePatch>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Applies a directive overlay to its materialized instances: patched fields override, `deleted`
|
|
84
|
+
* drops the instance. Instances with no patch pass through untouched.
|
|
85
|
+
* @capability world-directives apply a sparse overlay over materialized directive instances
|
|
86
|
+
*/
|
|
87
|
+
export declare function applyDirectiveOverlay(instances: readonly MaterializedInstance[], overlay: EditorDirectiveOverlay): MaterializedInstance[];
|
|
88
|
+
/**
|
|
89
|
+
* Materializes every directive on a document into one flat instance list, applying each directive's
|
|
90
|
+
* overlay (matched by `over` === directive id) as it goes. The bulk-content counterpart to
|
|
91
|
+
* `resolveAuthoredObjects` / `resolveScatter`: games and headless tests read the same list.
|
|
92
|
+
* @capability world-directives materialize all scene directives with their overlays
|
|
93
|
+
*/
|
|
94
|
+
export declare function materializeDirectives(doc: EditorDocument, overlays?: readonly EditorDirectiveOverlay[]): MaterializedInstance[];
|