@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,276 @@
|
|
|
1
|
+
/** Renders a tunable value as TS source, or null when the value has no safe literal form.
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
export function formatTunableLiteral(value) {
|
|
5
|
+
if (typeof value === "number")
|
|
6
|
+
return Number.isFinite(value) ? String(value) : null;
|
|
7
|
+
if (typeof value === "boolean")
|
|
8
|
+
return String(value);
|
|
9
|
+
if (typeof value === "string")
|
|
10
|
+
return JSON.stringify(value);
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
for (const item of value) {
|
|
14
|
+
if (typeof item !== "number" || !Number.isFinite(item))
|
|
15
|
+
return null;
|
|
16
|
+
parts.push(String(item));
|
|
17
|
+
}
|
|
18
|
+
return `[${parts.join(", ")}]`;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function isIdentifierStart(ch) {
|
|
23
|
+
return /[A-Za-z_$]/.test(ch);
|
|
24
|
+
}
|
|
25
|
+
function isIdentifierPart(ch) {
|
|
26
|
+
return /[\w$]/.test(ch);
|
|
27
|
+
}
|
|
28
|
+
function skipWhitespaceAndComments(code, at) {
|
|
29
|
+
let i = at;
|
|
30
|
+
while (i < code.length) {
|
|
31
|
+
const ch = code[i];
|
|
32
|
+
if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") {
|
|
33
|
+
i += 1;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (ch === "/" && code[i + 1] === "/") {
|
|
37
|
+
const end = code.indexOf("\n", i);
|
|
38
|
+
i = end < 0 ? code.length : end + 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (ch === "/" && code[i + 1] === "*") {
|
|
42
|
+
const end = code.indexOf("*/", i + 2);
|
|
43
|
+
i = end < 0 ? code.length : end + 2;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
return i;
|
|
49
|
+
}
|
|
50
|
+
function skipString(code, at) {
|
|
51
|
+
const quote = code[at];
|
|
52
|
+
let i = at + 1;
|
|
53
|
+
while (i < code.length) {
|
|
54
|
+
const ch = code[i];
|
|
55
|
+
if (ch === "\\") {
|
|
56
|
+
i += 2;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (ch === quote)
|
|
60
|
+
return i + 1;
|
|
61
|
+
if (quote === "`" && ch === "$" && code[i + 1] === "{") {
|
|
62
|
+
const end = skipBalanced(code, i + 1);
|
|
63
|
+
if (end < 0)
|
|
64
|
+
return -1;
|
|
65
|
+
i = end;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
i += 1;
|
|
69
|
+
}
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
const CLOSERS = { "{": "}", "[": "]", "(": ")" };
|
|
73
|
+
function skipBalanced(code, at) {
|
|
74
|
+
const open = code[at];
|
|
75
|
+
const close = CLOSERS[open];
|
|
76
|
+
if (close === undefined)
|
|
77
|
+
return -1;
|
|
78
|
+
let depth = 0;
|
|
79
|
+
let i = at;
|
|
80
|
+
while (i < code.length) {
|
|
81
|
+
const ch = code[i];
|
|
82
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
83
|
+
i = skipString(code, i);
|
|
84
|
+
if (i < 0)
|
|
85
|
+
return -1;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (ch === "/" && (code[i + 1] === "/" || code[i + 1] === "*")) {
|
|
89
|
+
i = skipWhitespaceAndComments(code, i);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (ch === "{" || ch === "[" || ch === "(")
|
|
93
|
+
depth += 1;
|
|
94
|
+
else if (ch === "}" || ch === "]" || ch === ")") {
|
|
95
|
+
depth -= 1;
|
|
96
|
+
if (depth === 0)
|
|
97
|
+
return i + 1;
|
|
98
|
+
}
|
|
99
|
+
i += 1;
|
|
100
|
+
}
|
|
101
|
+
return -1;
|
|
102
|
+
}
|
|
103
|
+
function trimTrailingWhitespace(code, start, end) {
|
|
104
|
+
let i = end;
|
|
105
|
+
while (i > start && /\s/.test(code[i - 1]))
|
|
106
|
+
i -= 1;
|
|
107
|
+
return i;
|
|
108
|
+
}
|
|
109
|
+
function scalarEnd(code, at) {
|
|
110
|
+
let i = at;
|
|
111
|
+
while (i < code.length) {
|
|
112
|
+
const ch = code[i];
|
|
113
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
114
|
+
i = skipString(code, i);
|
|
115
|
+
if (i < 0)
|
|
116
|
+
return -1;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (ch === "{" || ch === "[" || ch === "(") {
|
|
120
|
+
i = skipBalanced(code, i);
|
|
121
|
+
if (i < 0)
|
|
122
|
+
return -1;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (ch === "," || ch === "}" || ch === "]" || ch === ";" || ch === ")") {
|
|
126
|
+
return trimTrailingWhitespace(code, at, i);
|
|
127
|
+
}
|
|
128
|
+
if (ch === "/" && (code[i + 1] === "/" || code[i + 1] === "*")) {
|
|
129
|
+
return trimTrailingWhitespace(code, at, i);
|
|
130
|
+
}
|
|
131
|
+
i += 1;
|
|
132
|
+
}
|
|
133
|
+
return trimTrailingWhitespace(code, at, i);
|
|
134
|
+
}
|
|
135
|
+
function readPropertyName(code, at) {
|
|
136
|
+
const ch = code[at];
|
|
137
|
+
if (ch === '"' || ch === "'") {
|
|
138
|
+
const end = skipString(code, at);
|
|
139
|
+
if (end < 0)
|
|
140
|
+
return null;
|
|
141
|
+
return { name: code.slice(at + 1, end - 1), end };
|
|
142
|
+
}
|
|
143
|
+
if (isIdentifierStart(ch) || /[0-9]/.test(ch)) {
|
|
144
|
+
let i = at;
|
|
145
|
+
while (i < code.length && (isIdentifierPart(code[i]) || code[i] === "."))
|
|
146
|
+
i += 1;
|
|
147
|
+
return { name: code.slice(at, i), end: i };
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
function findInObject(code, objStart, segment) {
|
|
152
|
+
let i = objStart + 1;
|
|
153
|
+
while (i < code.length) {
|
|
154
|
+
i = skipWhitespaceAndComments(code, i);
|
|
155
|
+
if (i >= code.length || code[i] === "}")
|
|
156
|
+
return null;
|
|
157
|
+
if (code[i] === ",") {
|
|
158
|
+
i += 1;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (code.startsWith("...", i)) {
|
|
162
|
+
const end = scalarEnd(code, i + 3);
|
|
163
|
+
if (end < 0)
|
|
164
|
+
return null;
|
|
165
|
+
i = end;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const prop = readPropertyName(code, i);
|
|
169
|
+
if (prop === null)
|
|
170
|
+
return null;
|
|
171
|
+
let j = skipWhitespaceAndComments(code, prop.end);
|
|
172
|
+
if (code[j] === "(") {
|
|
173
|
+
const afterParams = skipBalanced(code, j);
|
|
174
|
+
if (afterParams < 0)
|
|
175
|
+
return null;
|
|
176
|
+
j = skipWhitespaceAndComments(code, afterParams);
|
|
177
|
+
if (code[j] !== "{")
|
|
178
|
+
return null;
|
|
179
|
+
const afterBody = skipBalanced(code, j);
|
|
180
|
+
if (afterBody < 0)
|
|
181
|
+
return null;
|
|
182
|
+
i = afterBody;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (code[j] !== ":") {
|
|
186
|
+
if (prop.name === segment)
|
|
187
|
+
return null;
|
|
188
|
+
i = j;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const valueStart = skipWhitespaceAndComments(code, j + 1);
|
|
192
|
+
const first = code[valueStart];
|
|
193
|
+
const valueEnd = first === "{" || first === "[" || first === "("
|
|
194
|
+
? skipBalanced(code, valueStart)
|
|
195
|
+
: scalarEnd(code, valueStart);
|
|
196
|
+
if (valueEnd < 0)
|
|
197
|
+
return null;
|
|
198
|
+
if (prop.name === segment)
|
|
199
|
+
return { start: valueStart, end: valueEnd };
|
|
200
|
+
i = valueEnd;
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function findInArray(code, arrStart, index) {
|
|
205
|
+
let i = arrStart + 1;
|
|
206
|
+
let at = 0;
|
|
207
|
+
while (i < code.length) {
|
|
208
|
+
i = skipWhitespaceAndComments(code, i);
|
|
209
|
+
if (i >= code.length || code[i] === "]")
|
|
210
|
+
return null;
|
|
211
|
+
const first = code[i];
|
|
212
|
+
const end = first === "{" || first === "[" || first === "("
|
|
213
|
+
? skipBalanced(code, i)
|
|
214
|
+
: scalarEnd(code, i);
|
|
215
|
+
if (end < 0)
|
|
216
|
+
return null;
|
|
217
|
+
if (at === index)
|
|
218
|
+
return { start: i, end };
|
|
219
|
+
at += 1;
|
|
220
|
+
i = skipWhitespaceAndComments(code, end);
|
|
221
|
+
if (code[i] === ",")
|
|
222
|
+
i += 1;
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
function exportInitializerStart(code, exportName) {
|
|
227
|
+
const pattern = new RegExp(`export\\s+(?:const|let)\\s+${exportName.replace(/[$]/g, "\\$&")}\\b[^=;\\n]*=`);
|
|
228
|
+
const match = pattern.exec(code);
|
|
229
|
+
if (match === null)
|
|
230
|
+
return -1;
|
|
231
|
+
return skipWhitespaceAndComments(code, match.index + match[0].length);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Rewrites one tunable's literal inside TS source: `exportName` names the `export const/let`,
|
|
235
|
+
* `path` descends object keys and array indices to the scalar, and `value` becomes the new
|
|
236
|
+
* literal. Returns the updated source, or null when the target cannot be safely located.
|
|
237
|
+
* @internal
|
|
238
|
+
*/
|
|
239
|
+
export function rewriteTunableExport(code, exportName, path, value) {
|
|
240
|
+
const literal = formatTunableLiteral(value);
|
|
241
|
+
if (literal === null)
|
|
242
|
+
return null;
|
|
243
|
+
const start = exportInitializerStart(code, exportName);
|
|
244
|
+
if (start < 0)
|
|
245
|
+
return null;
|
|
246
|
+
let span;
|
|
247
|
+
const first = code[start];
|
|
248
|
+
if (path.length === 0) {
|
|
249
|
+
const end = first === "{" || first === "[" || first === "("
|
|
250
|
+
? skipBalanced(code, start)
|
|
251
|
+
: scalarEnd(code, start);
|
|
252
|
+
if (end < 0)
|
|
253
|
+
return null;
|
|
254
|
+
span = { start, end };
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
let container = { start, end: start };
|
|
258
|
+
if (first !== "{" && first !== "[")
|
|
259
|
+
return null;
|
|
260
|
+
let cursor = start;
|
|
261
|
+
for (const segment of path) {
|
|
262
|
+
const ch = code[cursor];
|
|
263
|
+
const found = ch === "{"
|
|
264
|
+
? findInObject(code, cursor, segment)
|
|
265
|
+
: ch === "[" && /^\d+$/.test(segment)
|
|
266
|
+
? findInArray(code, cursor, Number(segment))
|
|
267
|
+
: null;
|
|
268
|
+
if (found === null)
|
|
269
|
+
return null;
|
|
270
|
+
container = found;
|
|
271
|
+
cursor = found.start;
|
|
272
|
+
}
|
|
273
|
+
span = container;
|
|
274
|
+
}
|
|
275
|
+
return `${code.slice(0, span.start)}${literal}${code.slice(span.end)}`;
|
|
276
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** One write request the dev save endpoint accepts: a scene document or tunable deltas. */
|
|
2
|
+
export type SaveEndpointRequest = {
|
|
3
|
+
kind: "editor-document";
|
|
4
|
+
gameId: string;
|
|
5
|
+
json: string;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "tunables";
|
|
8
|
+
gameId: string;
|
|
9
|
+
deltas: readonly {
|
|
10
|
+
table: string;
|
|
11
|
+
key: string;
|
|
12
|
+
value: unknown;
|
|
13
|
+
}[];
|
|
14
|
+
};
|
|
15
|
+
/** Result envelope the dev save endpoint returns for every write request. */
|
|
16
|
+
export interface SaveEndpointResponse {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
path?: string;
|
|
19
|
+
applied?: number;
|
|
20
|
+
skipped?: readonly {
|
|
21
|
+
table: string;
|
|
22
|
+
key: string;
|
|
23
|
+
reason: string;
|
|
24
|
+
}[];
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Where dev-time saves land: the endpoint URL plus the Games/<gameId> directory it targets. */
|
|
28
|
+
export interface SaveEndpointInfo {
|
|
29
|
+
url: string;
|
|
30
|
+
gameId: string;
|
|
31
|
+
}
|
|
32
|
+
/** True once a bundler or Node marks the build as production — the signal
|
|
33
|
+
* `installSaveEndpoint` refuses to run under, even if a caller forgot its own
|
|
34
|
+
* `import.meta.env.DEV` guard.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function isProductionEnvironment(): boolean;
|
|
38
|
+
/** Publishes the dev-server save endpoint so editor and devtools UIs show Save buttons.
|
|
39
|
+
* No-ops in a production build even if the caller forgot its own DEV guard.
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function installSaveEndpoint(url: string, gameId: string): () => void;
|
|
43
|
+
/** Returns the installed dev save endpoint, or null when saves cannot reach disk.
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSaveEndpoint(): SaveEndpointInfo | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const GLOBAL_KEY = "__jgengineSaveEndpoint";
|
|
2
|
+
function readImportMetaEnv() {
|
|
3
|
+
try {
|
|
4
|
+
const meta = import.meta;
|
|
5
|
+
return meta.env ?? {};
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function readProcessNodeEnv() {
|
|
12
|
+
const proc = globalThis.process;
|
|
13
|
+
return proc?.env?.NODE_ENV;
|
|
14
|
+
}
|
|
15
|
+
/** True once a bundler or Node marks the build as production — the signal
|
|
16
|
+
* `installSaveEndpoint` refuses to run under, even if a caller forgot its own
|
|
17
|
+
* `import.meta.env.DEV` guard.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function isProductionEnvironment() {
|
|
21
|
+
const env = readImportMetaEnv();
|
|
22
|
+
if (env.PROD === true)
|
|
23
|
+
return true;
|
|
24
|
+
if (env.DEV === true)
|
|
25
|
+
return false;
|
|
26
|
+
return (env.NODE_ENV ?? readProcessNodeEnv()) === "production";
|
|
27
|
+
}
|
|
28
|
+
/** Publishes the dev-server save endpoint so editor and devtools UIs show Save buttons.
|
|
29
|
+
* No-ops in a production build even if the caller forgot its own DEV guard.
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export function installSaveEndpoint(url, gameId) {
|
|
33
|
+
if (isProductionEnvironment())
|
|
34
|
+
return () => { };
|
|
35
|
+
const root = globalThis;
|
|
36
|
+
const info = { url, gameId };
|
|
37
|
+
root[GLOBAL_KEY] = info;
|
|
38
|
+
return () => {
|
|
39
|
+
if (root[GLOBAL_KEY] === info)
|
|
40
|
+
delete root[GLOBAL_KEY];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Returns the installed dev save endpoint, or null when saves cannot reach disk.
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export function getSaveEndpoint() {
|
|
47
|
+
return globalThis[GLOBAL_KEY] ?? null;
|
|
48
|
+
}
|
|
@@ -2,8 +2,11 @@ export interface TunableTransformResult {
|
|
|
2
2
|
code: string;
|
|
3
3
|
bound: string[];
|
|
4
4
|
}
|
|
5
|
+
/** @internal */
|
|
5
6
|
export declare function transformTunableExports(code: string, table: string): TunableTransformResult;
|
|
7
|
+
/** @internal */
|
|
6
8
|
export declare function tunableModuleTable(id: string): string | null;
|
|
9
|
+
/** @internal */
|
|
7
10
|
export declare function tunableDiscoveryPlugin(): {
|
|
8
11
|
name: string;
|
|
9
12
|
enforce: "pre";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const TUNABLE_EXPORT_PATTERN = /^export const ([A-Za-z_$][\w$]*)((?:\s*:\s*[^=;\r\n]+?)?)\s*=\s*("#(?:[0-9a-fA-F]{3,8})"|'#(?:[0-9a-fA-F]{3,8})'|[^"'`;{}<>\r\n]+?)\s*;[ \t]*$/gm;
|
|
2
|
+
/** @internal */
|
|
2
3
|
export function transformTunableExports(code, table) {
|
|
3
4
|
const bound = [];
|
|
4
5
|
const rewritten = code.replace(TUNABLE_EXPORT_PATTERN, (_match, name, annotation, expression) => {
|
|
@@ -17,12 +18,14 @@ export function transformTunableExports(code, table) {
|
|
|
17
18
|
}
|
|
18
19
|
const GAME_MODULE_PATTERN = /[/\\]Games[/\\][^/\\]+[/\\]src[/\\](.+)\.(ts|tsx)$/;
|
|
19
20
|
const SKIP_MODULE_PATTERN = /(\.test\.|[/\\]main\.tsx$)/;
|
|
21
|
+
/** @internal */
|
|
20
22
|
export function tunableModuleTable(id) {
|
|
21
23
|
if (SKIP_MODULE_PATTERN.test(id))
|
|
22
24
|
return null;
|
|
23
25
|
const match = GAME_MODULE_PATTERN.exec(id);
|
|
24
26
|
return match === null ? null : match[1].replace(/\\/g, "/");
|
|
25
27
|
}
|
|
28
|
+
/** @internal */
|
|
26
29
|
export function tunableDiscoveryPlugin() {
|
|
27
30
|
return {
|
|
28
31
|
name: "jgengine-tunable-discovery",
|
|
@@ -56,42 +56,70 @@ export interface ResolvedAxisBounds {
|
|
|
56
56
|
readonly max: readonly number[];
|
|
57
57
|
readonly step: readonly number[];
|
|
58
58
|
}
|
|
59
|
+
/** @internal */
|
|
59
60
|
export declare function isFiniteNumber(value: unknown): value is number;
|
|
61
|
+
/** @internal */
|
|
60
62
|
export declare function escapePathSegment(segment: string): string;
|
|
63
|
+
/** @internal */
|
|
61
64
|
export declare function unescapePathSegment(segment: string): string;
|
|
65
|
+
/** @internal */
|
|
62
66
|
export declare function joinTunablePath(parent: string, segment: string): string;
|
|
67
|
+
/** @internal */
|
|
63
68
|
export declare function splitTunablePath(path: string): string[];
|
|
69
|
+
/** @internal */
|
|
64
70
|
export declare function parseColor(input: unknown): NormalizedColor | null;
|
|
71
|
+
/** @internal */
|
|
65
72
|
export declare function formatColor(rgb: string, alpha: number, withAlpha: boolean): string | null;
|
|
73
|
+
/** @internal */
|
|
66
74
|
export declare function normalizeColorValue(input: unknown, forceAlpha?: boolean): string | null;
|
|
75
|
+
/** @internal */
|
|
67
76
|
export declare function isColorString(value: unknown): value is string;
|
|
77
|
+
/** @internal */
|
|
68
78
|
export declare function vecLength(kind: "vec2" | "vec3" | "vec4"): number;
|
|
79
|
+
/** @internal */
|
|
69
80
|
export declare function isNumericTuple(value: unknown, length: number): value is number[];
|
|
81
|
+
/** @internal */
|
|
70
82
|
export declare function isIntervalShape(value: unknown): value is TunableInterval;
|
|
83
|
+
/** @internal */
|
|
71
84
|
export declare function expandAxisMeta(length: number, labels: readonly string[] | undefined, min: number | readonly number[] | undefined, max: number | readonly number[] | undefined, step: number | readonly number[] | undefined, sample: readonly number[]): ResolvedAxisBounds;
|
|
85
|
+
/** @internal */
|
|
72
86
|
export declare function clampAxisValue(value: number, min: number, max: number): number;
|
|
87
|
+
/** @internal */
|
|
73
88
|
export declare function parseVec(kind: "vec2" | "vec3" | "vec4", raw: unknown, bounds: ResolvedAxisBounds): number[] | null;
|
|
89
|
+
/** @internal */
|
|
74
90
|
export declare function parseInterval(raw: unknown, options: {
|
|
75
91
|
min?: number;
|
|
76
92
|
max?: number;
|
|
77
93
|
step?: number;
|
|
78
94
|
integer?: boolean;
|
|
79
95
|
}): TunableInterval | null;
|
|
96
|
+
/** @internal */
|
|
80
97
|
export declare function convertAngle(value: number, from: AngleUnit, to: AngleUnit): number;
|
|
98
|
+
/** @internal */
|
|
81
99
|
export declare function normalizeAngle(value: number, unit: AngleUnit, options: {
|
|
82
100
|
min?: number;
|
|
83
101
|
max?: number;
|
|
84
102
|
wrap?: boolean;
|
|
85
103
|
}): number;
|
|
104
|
+
/** @internal */
|
|
86
105
|
export declare function resolveChoices<T>(options: readonly T[] | undefined, choices: readonly TunableChoice<T>[] | undefined): readonly TunableChoice<T>[] | undefined;
|
|
106
|
+
/** @internal */
|
|
87
107
|
export declare function choiceValues(choices: readonly TunableChoice[] | undefined): readonly unknown[] | undefined;
|
|
108
|
+
/** @internal */
|
|
88
109
|
export declare function findChoice(choices: readonly TunableChoice[] | undefined, raw: unknown): TunableChoice | undefined;
|
|
110
|
+
/** @internal */
|
|
89
111
|
export declare function parseEnumValue(raw: unknown, choices: readonly TunableChoice[] | undefined): unknown | null;
|
|
112
|
+
/** @internal */
|
|
90
113
|
export declare function coerceSelectWrite(raw: unknown, choices: readonly TunableChoice[] | undefined, options: readonly unknown[] | undefined): unknown | null;
|
|
114
|
+
/** @internal */
|
|
91
115
|
export declare function inferKind(initial: unknown, options?: TunableOptions): DevtoolsControlKind;
|
|
116
|
+
/** @internal */
|
|
92
117
|
export declare function discoverableKind(value: unknown, meta?: ScanFieldMeta): DevtoolsControlKind | null;
|
|
118
|
+
/** @internal */
|
|
93
119
|
export declare function isScannableContainer(value: unknown): value is Record<string, unknown>;
|
|
120
|
+
/** @internal */
|
|
94
121
|
export declare function ownWritableDataKeys(target: Record<string, unknown>): string[];
|
|
122
|
+
/** @internal */
|
|
95
123
|
export declare function sliderBounds(initial: number, options: {
|
|
96
124
|
min?: number;
|
|
97
125
|
max?: number;
|
|
@@ -101,6 +129,7 @@ export declare function sliderBounds(initial: number, options: {
|
|
|
101
129
|
max: number;
|
|
102
130
|
step: number;
|
|
103
131
|
};
|
|
132
|
+
/** @internal */
|
|
104
133
|
export declare function validateControlValue(kind: DevtoolsControlKind, raw: unknown, context: {
|
|
105
134
|
min?: number;
|
|
106
135
|
max?: number;
|
|
@@ -136,5 +165,7 @@ export interface OverrideParseResult {
|
|
|
136
165
|
readonly overrides: DevtoolsOverrides | null;
|
|
137
166
|
readonly diagnostics: readonly string[];
|
|
138
167
|
}
|
|
168
|
+
/** @internal */
|
|
139
169
|
export declare function parseOverridesPayload(raw: unknown): OverrideParseResult;
|
|
170
|
+
/** @internal */
|
|
140
171
|
export declare function cloneValue<T>(value: T): T;
|