@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
|
@@ -6,12 +6,15 @@ export const MAX_SCAN_TARGETS = 512;
|
|
|
6
6
|
const COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
7
7
|
const UNSAFE_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
8
8
|
const DEFAULT_AXIS = ["x", "y", "z", "w"];
|
|
9
|
+
/** @internal */
|
|
9
10
|
export function isFiniteNumber(value) {
|
|
10
11
|
return typeof value === "number" && Number.isFinite(value);
|
|
11
12
|
}
|
|
13
|
+
/** @internal */
|
|
12
14
|
export function escapePathSegment(segment) {
|
|
13
15
|
return segment.replace(/\\/g, "\\\\").replace(/\./g, "\\.");
|
|
14
16
|
}
|
|
17
|
+
/** @internal */
|
|
15
18
|
export function unescapePathSegment(segment) {
|
|
16
19
|
let out = "";
|
|
17
20
|
for (let i = 0; i < segment.length; i += 1) {
|
|
@@ -25,10 +28,12 @@ export function unescapePathSegment(segment) {
|
|
|
25
28
|
}
|
|
26
29
|
return out;
|
|
27
30
|
}
|
|
31
|
+
/** @internal */
|
|
28
32
|
export function joinTunablePath(parent, segment) {
|
|
29
33
|
const escaped = escapePathSegment(segment);
|
|
30
34
|
return parent === "" ? escaped : `${parent}.${escaped}`;
|
|
31
35
|
}
|
|
36
|
+
/** @internal */
|
|
32
37
|
export function splitTunablePath(path) {
|
|
33
38
|
const parts = [];
|
|
34
39
|
let current = "";
|
|
@@ -49,6 +54,7 @@ export function splitTunablePath(path) {
|
|
|
49
54
|
parts.push(unescapePathSegment(current));
|
|
50
55
|
return parts;
|
|
51
56
|
}
|
|
57
|
+
/** @internal */
|
|
52
58
|
export function parseColor(input) {
|
|
53
59
|
if (typeof input !== "string" || !COLOR_PATTERN.test(input))
|
|
54
60
|
return null;
|
|
@@ -81,6 +87,7 @@ export function parseColor(input) {
|
|
|
81
87
|
const hex = `${rgb}${a.toLowerCase()}`;
|
|
82
88
|
return { hex, rgb, alpha, hasAlpha: true };
|
|
83
89
|
}
|
|
90
|
+
/** @internal */
|
|
84
91
|
export function formatColor(rgb, alpha, withAlpha) {
|
|
85
92
|
const parsed = parseColor(rgb);
|
|
86
93
|
const rgbHex = parsed?.rgb ?? (/^#[0-9a-fA-F]{6}$/.test(rgb) ? rgb.toLowerCase() : null);
|
|
@@ -94,6 +101,7 @@ export function formatColor(rgb, alpha, withAlpha) {
|
|
|
94
101
|
.padStart(2, "0");
|
|
95
102
|
return `${rgbHex}${a}`;
|
|
96
103
|
}
|
|
104
|
+
/** @internal */
|
|
97
105
|
export function normalizeColorValue(input, forceAlpha) {
|
|
98
106
|
const parsed = parseColor(input);
|
|
99
107
|
if (parsed === null)
|
|
@@ -103,9 +111,11 @@ export function normalizeColorValue(input, forceAlpha) {
|
|
|
103
111
|
}
|
|
104
112
|
return parsed.rgb;
|
|
105
113
|
}
|
|
114
|
+
/** @internal */
|
|
106
115
|
export function isColorString(value) {
|
|
107
116
|
return typeof value === "string" && COLOR_PATTERN.test(value);
|
|
108
117
|
}
|
|
118
|
+
/** @internal */
|
|
109
119
|
export function vecLength(kind) {
|
|
110
120
|
if (kind === "vec2")
|
|
111
121
|
return 2;
|
|
@@ -113,11 +123,13 @@ export function vecLength(kind) {
|
|
|
113
123
|
return 3;
|
|
114
124
|
return 4;
|
|
115
125
|
}
|
|
126
|
+
/** @internal */
|
|
116
127
|
export function isNumericTuple(value, length) {
|
|
117
128
|
if (!Array.isArray(value) || value.length !== length)
|
|
118
129
|
return false;
|
|
119
130
|
return value.every(isFiniteNumber);
|
|
120
131
|
}
|
|
132
|
+
/** @internal */
|
|
121
133
|
export function isIntervalShape(value) {
|
|
122
134
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
123
135
|
return false;
|
|
@@ -127,6 +139,7 @@ export function isIntervalShape(value) {
|
|
|
127
139
|
return false;
|
|
128
140
|
return isFiniteNumber(record.min) && isFiniteNumber(record.max);
|
|
129
141
|
}
|
|
142
|
+
/** @internal */
|
|
130
143
|
export function expandAxisMeta(length, labels, min, max, step, sample) {
|
|
131
144
|
const resolvedLabels = Array.from({ length }, (_, i) => labels?.[i] ?? DEFAULT_AXIS[i] ?? `a${i}`);
|
|
132
145
|
const resolvedMin = Array.from({ length }, (_, i) => {
|
|
@@ -154,15 +167,18 @@ export function expandAxisMeta(length, labels, min, max, step, sample) {
|
|
|
154
167
|
});
|
|
155
168
|
return { labels: resolvedLabels, min: resolvedMin, max: resolvedMax, step: resolvedStep };
|
|
156
169
|
}
|
|
170
|
+
/** @internal */
|
|
157
171
|
export function clampAxisValue(value, min, max) {
|
|
158
172
|
return Math.min(max, Math.max(min, value));
|
|
159
173
|
}
|
|
174
|
+
/** @internal */
|
|
160
175
|
export function parseVec(kind, raw, bounds) {
|
|
161
176
|
const length = vecLength(kind);
|
|
162
177
|
if (!isNumericTuple(raw, length))
|
|
163
178
|
return null;
|
|
164
179
|
return raw.map((value, i) => clampAxisValue(value, bounds.min[i], bounds.max[i]));
|
|
165
180
|
}
|
|
181
|
+
/** @internal */
|
|
166
182
|
export function parseInterval(raw, options) {
|
|
167
183
|
if (!isIntervalShape(raw))
|
|
168
184
|
return null;
|
|
@@ -200,6 +216,7 @@ export function parseInterval(raw, options) {
|
|
|
200
216
|
}
|
|
201
217
|
return { min: lo, max: hi };
|
|
202
218
|
}
|
|
219
|
+
/** @internal */
|
|
203
220
|
export function convertAngle(value, from, to) {
|
|
204
221
|
if (from === to)
|
|
205
222
|
return value;
|
|
@@ -207,6 +224,7 @@ export function convertAngle(value, from, to) {
|
|
|
207
224
|
return (value * Math.PI) / 180;
|
|
208
225
|
return (value * 180) / Math.PI;
|
|
209
226
|
}
|
|
227
|
+
/** @internal */
|
|
210
228
|
export function normalizeAngle(value, unit, options) {
|
|
211
229
|
let next = value;
|
|
212
230
|
if (options.wrap === true) {
|
|
@@ -225,6 +243,7 @@ export function normalizeAngle(value, unit, options) {
|
|
|
225
243
|
}
|
|
226
244
|
return next;
|
|
227
245
|
}
|
|
246
|
+
/** @internal */
|
|
228
247
|
export function resolveChoices(options, choices) {
|
|
229
248
|
if (choices !== undefined)
|
|
230
249
|
return choices;
|
|
@@ -232,22 +251,26 @@ export function resolveChoices(options, choices) {
|
|
|
232
251
|
return options.map((value) => ({ value }));
|
|
233
252
|
return undefined;
|
|
234
253
|
}
|
|
254
|
+
/** @internal */
|
|
235
255
|
export function choiceValues(choices) {
|
|
236
256
|
if (choices === undefined)
|
|
237
257
|
return undefined;
|
|
238
258
|
return choices.map((choice) => choice.value);
|
|
239
259
|
}
|
|
260
|
+
/** @internal */
|
|
240
261
|
export function findChoice(choices, raw) {
|
|
241
262
|
if (choices === undefined)
|
|
242
263
|
return undefined;
|
|
243
264
|
return choices.find((choice) => Object.is(choice.value, raw));
|
|
244
265
|
}
|
|
266
|
+
/** @internal */
|
|
245
267
|
export function parseEnumValue(raw, choices) {
|
|
246
268
|
if (choices === undefined)
|
|
247
269
|
return null;
|
|
248
270
|
const match = findChoice(choices, raw);
|
|
249
271
|
return match === undefined ? null : match.value;
|
|
250
272
|
}
|
|
273
|
+
/** @internal */
|
|
251
274
|
export function coerceSelectWrite(raw, choices, options) {
|
|
252
275
|
if (choices !== undefined) {
|
|
253
276
|
const byValue = findChoice(choices, raw);
|
|
@@ -275,6 +298,7 @@ export function coerceSelectWrite(raw, choices, options) {
|
|
|
275
298
|
}
|
|
276
299
|
return raw;
|
|
277
300
|
}
|
|
301
|
+
/** @internal */
|
|
278
302
|
export function inferKind(initial, options) {
|
|
279
303
|
if (options?.kind !== undefined)
|
|
280
304
|
return options.kind;
|
|
@@ -289,6 +313,7 @@ export function inferKind(initial, options) {
|
|
|
289
313
|
return "color";
|
|
290
314
|
return "text";
|
|
291
315
|
}
|
|
316
|
+
/** @internal */
|
|
292
317
|
export function discoverableKind(value, meta) {
|
|
293
318
|
if (meta?.kind !== undefined) {
|
|
294
319
|
if (meta.kind === "vec2" || meta.kind === "vec3" || meta.kind === "vec4") {
|
|
@@ -320,6 +345,7 @@ export function discoverableKind(value, meta) {
|
|
|
320
345
|
return "color";
|
|
321
346
|
return null;
|
|
322
347
|
}
|
|
348
|
+
/** @internal */
|
|
323
349
|
export function isScannableContainer(value) {
|
|
324
350
|
if (value === null || typeof value !== "object")
|
|
325
351
|
return false;
|
|
@@ -328,6 +354,7 @@ export function isScannableContainer(value) {
|
|
|
328
354
|
const proto = Object.getPrototypeOf(value);
|
|
329
355
|
return proto === Object.prototype || proto === null;
|
|
330
356
|
}
|
|
357
|
+
/** @internal */
|
|
331
358
|
export function ownWritableDataKeys(target) {
|
|
332
359
|
return Object.keys(target).filter((key) => {
|
|
333
360
|
if (UNSAFE_KEYS.has(key))
|
|
@@ -342,12 +369,14 @@ export function ownWritableDataKeys(target) {
|
|
|
342
369
|
return true;
|
|
343
370
|
});
|
|
344
371
|
}
|
|
372
|
+
/** @internal */
|
|
345
373
|
export function sliderBounds(initial, options) {
|
|
346
374
|
const min = options?.min ?? (initial < 0 ? initial * 2 : 0);
|
|
347
375
|
const max = options?.max ?? (initial > 0 ? initial * 2 : initial < 0 ? 0 : 1);
|
|
348
376
|
const step = options?.step ?? (max - min) / 100;
|
|
349
377
|
return { min, max, step };
|
|
350
378
|
}
|
|
379
|
+
/** @internal */
|
|
351
380
|
export function validateControlValue(kind, raw, context) {
|
|
352
381
|
switch (kind) {
|
|
353
382
|
case "slider": {
|
|
@@ -420,6 +449,7 @@ export function validateControlValue(kind, raw, context) {
|
|
|
420
449
|
return { ok: false, reason: "unknown kind" };
|
|
421
450
|
}
|
|
422
451
|
}
|
|
452
|
+
/** @internal */
|
|
423
453
|
export function parseOverridesPayload(raw) {
|
|
424
454
|
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
425
455
|
return { overrides: null, diagnostics: ["overrides payload is not an object"] };
|
|
@@ -467,6 +497,7 @@ export function parseOverridesPayload(raw) {
|
|
|
467
497
|
diagnostics: version === 0 ? ["migrated unversioned overrides to v1"] : [],
|
|
468
498
|
};
|
|
469
499
|
}
|
|
500
|
+
/** @internal */
|
|
470
501
|
export function cloneValue(value) {
|
|
471
502
|
if (Array.isArray(value))
|
|
472
503
|
return value.slice();
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import type { ChangeSignal } from "../store/changeSignal.js";
|
|
2
|
+
import type { AngleUnit, DevtoolsControlKind, DevtoolsOverrides, DiscoverySkip, OverrideApplyDiagnostic, ScanMeta, TunableChoice, TunableOptions } from "./tunableSchema.js";
|
|
3
|
+
/** Registered tunable control with its resolved schema metadata and read/write/reset accessors. */
|
|
4
|
+
export interface DevtoolsControl {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly kind: DevtoolsControlKind;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
readonly group: string;
|
|
9
|
+
readonly initial: unknown;
|
|
10
|
+
readonly min?: number;
|
|
11
|
+
readonly max?: number;
|
|
12
|
+
readonly step?: number;
|
|
13
|
+
readonly options?: readonly unknown[];
|
|
14
|
+
readonly choices?: readonly TunableChoice[];
|
|
15
|
+
readonly unit?: AngleUnit;
|
|
16
|
+
readonly displayUnit?: AngleUnit;
|
|
17
|
+
readonly wrap?: boolean;
|
|
18
|
+
readonly integer?: boolean;
|
|
19
|
+
readonly axisLabels?: readonly string[];
|
|
20
|
+
readonly axisMin?: readonly number[];
|
|
21
|
+
readonly axisMax?: readonly number[];
|
|
22
|
+
readonly axisStep?: readonly number[];
|
|
23
|
+
readonly hasAlpha?: boolean;
|
|
24
|
+
readonly schemaVersion: number;
|
|
25
|
+
read(): unknown;
|
|
26
|
+
write(value: unknown): boolean;
|
|
27
|
+
reset(): void;
|
|
28
|
+
}
|
|
29
|
+
/** Typed handle to a registered control, exposing its live value and subscribe/set/reset operations. */
|
|
30
|
+
export interface Tunable<T> {
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly kind: DevtoolsControlKind;
|
|
33
|
+
readonly initial: T;
|
|
34
|
+
readonly value: T;
|
|
35
|
+
set(value: T): boolean;
|
|
36
|
+
reset(): void;
|
|
37
|
+
subscribe(listener: (value: T) => void): () => void;
|
|
38
|
+
}
|
|
39
|
+
/** Outcome of applying a devtools overrides payload: counts of applied and skipped entries plus diagnostics. */
|
|
40
|
+
export interface OverrideApplyResult {
|
|
41
|
+
applied: number;
|
|
42
|
+
skipped: readonly OverrideApplyDiagnostic[];
|
|
43
|
+
diagnostics: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/** Aggregated frame-timing statistics over the recent sampling window, including per-phase breakdown. */
|
|
46
|
+
export interface FrameStats {
|
|
47
|
+
fps: number;
|
|
48
|
+
avgFrameMs: number;
|
|
49
|
+
p95FrameMs: number;
|
|
50
|
+
maxFrameMs: number;
|
|
51
|
+
avgSimMs: number;
|
|
52
|
+
maxSimMs: number;
|
|
53
|
+
avgOutsideMs: number;
|
|
54
|
+
maxOutsideMs: number;
|
|
55
|
+
longFrames: number;
|
|
56
|
+
samples: number;
|
|
57
|
+
recentFrameMs: readonly number[];
|
|
58
|
+
phases: readonly PhaseStats[];
|
|
59
|
+
}
|
|
60
|
+
/** Timing summary for a single named profiling phase across the sampling window. */
|
|
61
|
+
export interface PhaseStats {
|
|
62
|
+
name: string;
|
|
63
|
+
avgMs: number;
|
|
64
|
+
maxMs: number;
|
|
65
|
+
lastMs: number;
|
|
66
|
+
samples: number;
|
|
67
|
+
pctOfSim: number;
|
|
68
|
+
}
|
|
69
|
+
/** Recorded spike event for a frame that exceeded the long-frame threshold, with culprit attribution. */
|
|
70
|
+
export interface LongFrameEvent {
|
|
71
|
+
at: number;
|
|
72
|
+
frameMs: number;
|
|
73
|
+
simMs: number;
|
|
74
|
+
outsideMs: number;
|
|
75
|
+
phases: readonly {
|
|
76
|
+
name: string;
|
|
77
|
+
ms: number;
|
|
78
|
+
pct: number;
|
|
79
|
+
}[];
|
|
80
|
+
topPhase: string | null;
|
|
81
|
+
culprit: string;
|
|
82
|
+
reason: string;
|
|
83
|
+
probes: Record<string, unknown>;
|
|
84
|
+
render: RenderSample | null;
|
|
85
|
+
}
|
|
86
|
+
/** Snapshot of renderer resource counts (draw calls, triangles, geometries, textures) for a frame. */
|
|
87
|
+
export interface RenderSample {
|
|
88
|
+
drawCalls: number;
|
|
89
|
+
triangles: number;
|
|
90
|
+
geometries: number;
|
|
91
|
+
textures: number;
|
|
92
|
+
}
|
|
93
|
+
/** Aggregated latency statistics (last/avg/min/max) over recorded latency samples. */
|
|
94
|
+
export interface LatencyStats {
|
|
95
|
+
lastMs: number;
|
|
96
|
+
avgMs: number;
|
|
97
|
+
minMs: number;
|
|
98
|
+
maxMs: number;
|
|
99
|
+
samples: number;
|
|
100
|
+
}
|
|
101
|
+
/** Severity level for a captured devtools log entry. */
|
|
102
|
+
export type DevtoolsLogLevel = "log" | "info" | "warn" | "error";
|
|
103
|
+
/** A single captured log line with timestamp, level, and formatted message. */
|
|
104
|
+
export interface DevtoolsLogEntry {
|
|
105
|
+
at: number;
|
|
106
|
+
level: DevtoolsLogLevel;
|
|
107
|
+
message: string;
|
|
108
|
+
}
|
|
109
|
+
/** A control auto-discovered by scanning an object/table, with its binding metadata and current reader. */
|
|
110
|
+
export interface DiscoveredEntry {
|
|
111
|
+
readonly id: string;
|
|
112
|
+
readonly table: string;
|
|
113
|
+
readonly key: string;
|
|
114
|
+
readonly kind: DevtoolsControlKind;
|
|
115
|
+
readonly initial: unknown;
|
|
116
|
+
readonly enabled: boolean;
|
|
117
|
+
read(): unknown;
|
|
118
|
+
}
|
|
119
|
+
/** Get/set accessor pair plus initial value used to bind a discovered field to a control. */
|
|
120
|
+
export interface TunableAccessor {
|
|
121
|
+
initial: unknown;
|
|
122
|
+
get(): unknown;
|
|
123
|
+
set(value: unknown): void;
|
|
124
|
+
}
|
|
125
|
+
/** Serializable point-in-time snapshot of devtools state: frame, render, latency, logs, controls, and discovered fields. */
|
|
126
|
+
export interface DevtoolsSnapshot {
|
|
127
|
+
at: number;
|
|
128
|
+
frame: FrameStats | null;
|
|
129
|
+
render: RenderSample | null;
|
|
130
|
+
latency: LatencyStats | null;
|
|
131
|
+
longFrames: readonly LongFrameEvent[];
|
|
132
|
+
logs: readonly DevtoolsLogEntry[];
|
|
133
|
+
probes: Record<string, unknown>;
|
|
134
|
+
controls: readonly {
|
|
135
|
+
name: string;
|
|
136
|
+
kind: DevtoolsControlKind;
|
|
137
|
+
value: unknown;
|
|
138
|
+
initial: unknown;
|
|
139
|
+
}[];
|
|
140
|
+
discovered: readonly {
|
|
141
|
+
id: string;
|
|
142
|
+
kind: DevtoolsControlKind;
|
|
143
|
+
value: unknown;
|
|
144
|
+
enabled: boolean;
|
|
145
|
+
}[];
|
|
146
|
+
skipped: readonly DiscoverySkip[];
|
|
147
|
+
}
|
|
148
|
+
/** Per-frame timing input recorded by callers: total frame time, sim time, and optional named phase durations. */
|
|
149
|
+
export interface FrameRecordSample {
|
|
150
|
+
frameMs: number;
|
|
151
|
+
simMs: number;
|
|
152
|
+
phases?: Readonly<Record<string, number>>;
|
|
153
|
+
}
|
|
154
|
+
/** Top-level devtools facade aggregating frame, profile, render, logs, latency, controls, discover, overrides, and probes. */
|
|
155
|
+
export interface Devtools {
|
|
156
|
+
frame: {
|
|
157
|
+
record(sample: FrameRecordSample): void;
|
|
158
|
+
stats(): FrameStats | null;
|
|
159
|
+
longFrames(): readonly LongFrameEvent[];
|
|
160
|
+
clearLongFrames(): void;
|
|
161
|
+
/** Drop all frame/phase/long-frame history so the next stats() window starts clean — use after load/shader warmup before measuring. */
|
|
162
|
+
reset(): void;
|
|
163
|
+
};
|
|
164
|
+
profile: {
|
|
165
|
+
begin(name: string): () => void;
|
|
166
|
+
measure<T>(name: string, fn: () => T): T;
|
|
167
|
+
add(name: string, ms: number): void;
|
|
168
|
+
current(): Record<string, number>;
|
|
169
|
+
reset(): void;
|
|
170
|
+
};
|
|
171
|
+
render: {
|
|
172
|
+
record(sample: RenderSample): void;
|
|
173
|
+
latest(): RenderSample | null;
|
|
174
|
+
};
|
|
175
|
+
logs: {
|
|
176
|
+
push(level: DevtoolsLogLevel, message: string): void;
|
|
177
|
+
captureConsole(): void;
|
|
178
|
+
list(): readonly DevtoolsLogEntry[];
|
|
179
|
+
clear(): void;
|
|
180
|
+
};
|
|
181
|
+
latency: {
|
|
182
|
+
record(ms: number): void;
|
|
183
|
+
stats(): LatencyStats | null;
|
|
184
|
+
};
|
|
185
|
+
controls: {
|
|
186
|
+
register<T>(name: string, initial: T, options?: TunableOptions<T>): Tunable<T>;
|
|
187
|
+
list(): readonly DevtoolsControl[];
|
|
188
|
+
get(name: string): DevtoolsControl | null;
|
|
189
|
+
remove(name: string): void;
|
|
190
|
+
resetAll(): void;
|
|
191
|
+
};
|
|
192
|
+
discover: {
|
|
193
|
+
bind(table: string, key: string, accessor: TunableAccessor, options?: TunableOptions): void;
|
|
194
|
+
scanTable(table: string, candidate: unknown, meta?: ScanMeta): number;
|
|
195
|
+
scanModule(exports: Record<string, unknown>, meta?: ScanMeta): number;
|
|
196
|
+
list(): readonly DiscoveredEntry[];
|
|
197
|
+
skipped(): readonly DiscoverySkip[];
|
|
198
|
+
enable(id: string): void;
|
|
199
|
+
disable(id: string): void;
|
|
200
|
+
clear(): void;
|
|
201
|
+
};
|
|
202
|
+
overrides: {
|
|
203
|
+
export(): DevtoolsOverrides;
|
|
204
|
+
apply(overrides: DevtoolsOverrides | unknown): OverrideApplyResult;
|
|
205
|
+
};
|
|
206
|
+
probes: {
|
|
207
|
+
register(name: string, read: () => unknown): () => void;
|
|
208
|
+
read(): Record<string, unknown>;
|
|
209
|
+
};
|
|
210
|
+
signal: ChangeSignal;
|
|
211
|
+
snapshot(): DevtoolsSnapshot;
|
|
212
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { CollectionBoxSnapshot } from "./listingBook.js";
|
|
2
|
+
/** One live timed auction in an {@link AuctionBook}: an item stack under open bidding until it closes. */
|
|
3
|
+
export interface Auction {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly sellerId: string;
|
|
6
|
+
readonly itemId: string;
|
|
7
|
+
readonly count: number;
|
|
8
|
+
readonly currency: string;
|
|
9
|
+
readonly startPrice: number;
|
|
10
|
+
readonly minIncrement: number;
|
|
11
|
+
readonly buyoutPrice: number | null;
|
|
12
|
+
readonly listedAt: number;
|
|
13
|
+
readonly endsAt: number;
|
|
14
|
+
readonly highBid: HighBid | null;
|
|
15
|
+
}
|
|
16
|
+
/** The current leading bid on an {@link Auction}. */
|
|
17
|
+
export interface HighBid {
|
|
18
|
+
readonly bidderId: string;
|
|
19
|
+
readonly amount: number;
|
|
20
|
+
readonly at: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Tunables for {@link createAuctionBook} — per-seller auction cap, run length, house cut, and the
|
|
24
|
+
* anti-snipe window: a bid landing within `antiSnipeWindowSeconds` of the close pushes the close
|
|
25
|
+
* out so it ends at least `antiSnipeExtensionSeconds` after that bid.
|
|
26
|
+
*/
|
|
27
|
+
export interface AuctionBookConfig {
|
|
28
|
+
maxAuctionsPerSeller: number;
|
|
29
|
+
durationSeconds: number;
|
|
30
|
+
cutRate: number;
|
|
31
|
+
antiSnipeWindowSeconds?: number;
|
|
32
|
+
antiSnipeExtensionSeconds?: number;
|
|
33
|
+
}
|
|
34
|
+
/** Input to {@link AuctionBook.post} — the goods, opening terms, and current game-time. */
|
|
35
|
+
export interface PostAuctionInput {
|
|
36
|
+
id?: string;
|
|
37
|
+
sellerId: string;
|
|
38
|
+
itemId: string;
|
|
39
|
+
count: number;
|
|
40
|
+
currency: string;
|
|
41
|
+
startPrice: number;
|
|
42
|
+
minIncrement: number;
|
|
43
|
+
buyoutPrice?: number;
|
|
44
|
+
now: number;
|
|
45
|
+
}
|
|
46
|
+
/** Why {@link AuctionBook.post} refused an auction. */
|
|
47
|
+
export type PostAuctionReason = "invalid-count" | "invalid-price" | "invalid-increment" | "invalid-buyout" | "auction-cap-reached";
|
|
48
|
+
/** Result of {@link AuctionBook.post}. */
|
|
49
|
+
export type PostAuctionResult = {
|
|
50
|
+
status: "ok";
|
|
51
|
+
auction: Auction;
|
|
52
|
+
} | {
|
|
53
|
+
status: "rejected";
|
|
54
|
+
reason: PostAuctionReason;
|
|
55
|
+
};
|
|
56
|
+
/** Why {@link AuctionBook.bid} refused a bid. */
|
|
57
|
+
export type BidReason = "not-found" | "ended" | "own-auction" | "already-leading" | "bid-too-low" | "invalid-amount" | "no-buyout";
|
|
58
|
+
/**
|
|
59
|
+
* Result of {@link AuctionBook.bid}. On `ok` the caller must escrow `escrowed` from the bidder's
|
|
60
|
+
* wallet; any previously escrowed leading bid has already been refunded to that bidder's
|
|
61
|
+
* collection box. `won` is true when the bid met the buyout price and settled the auction
|
|
62
|
+
* immediately.
|
|
63
|
+
*/
|
|
64
|
+
export type BidResult = {
|
|
65
|
+
status: "ok";
|
|
66
|
+
auction: Auction;
|
|
67
|
+
escrowed: number;
|
|
68
|
+
won: boolean;
|
|
69
|
+
} | {
|
|
70
|
+
status: "rejected";
|
|
71
|
+
reason: BidReason;
|
|
72
|
+
};
|
|
73
|
+
/** Result of {@link AuctionBook.cancel}: a bid-on auction can no longer be withdrawn. */
|
|
74
|
+
export type CancelAuctionResult = {
|
|
75
|
+
status: "ok";
|
|
76
|
+
auction: Auction;
|
|
77
|
+
} | {
|
|
78
|
+
status: "rejected";
|
|
79
|
+
reason: "not-found" | "not-owner" | "has-bids";
|
|
80
|
+
};
|
|
81
|
+
/** How one closed auction resolved during {@link AuctionBook.settleExpired}. */
|
|
82
|
+
export type AuctionSettlement = {
|
|
83
|
+
status: "sold";
|
|
84
|
+
auction: Auction;
|
|
85
|
+
winnerId: string;
|
|
86
|
+
price: number;
|
|
87
|
+
houseCut: number;
|
|
88
|
+
sellerProceeds: number;
|
|
89
|
+
} | {
|
|
90
|
+
status: "returned";
|
|
91
|
+
auction: Auction;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* A timed-bid auction marketplace plus the per-player collection boxes behind it. See
|
|
95
|
+
* {@link createAuctionBook}.
|
|
96
|
+
*/
|
|
97
|
+
export interface AuctionBook {
|
|
98
|
+
post(input: PostAuctionInput): PostAuctionResult;
|
|
99
|
+
bid(auctionId: string, bidderId: string, amount: number, now: number): BidResult;
|
|
100
|
+
buyout(auctionId: string, buyerId: string, now: number): BidResult;
|
|
101
|
+
cancel(auctionId: string, sellerId: string): CancelAuctionResult;
|
|
102
|
+
settleExpired(now: number): readonly AuctionSettlement[];
|
|
103
|
+
get(auctionId: string): Auction | null;
|
|
104
|
+
active(): readonly Auction[];
|
|
105
|
+
auctionsOf(sellerId: string): readonly Auction[];
|
|
106
|
+
countOf(sellerId: string): number;
|
|
107
|
+
collectionOf(playerId: string): CollectionBoxSnapshot;
|
|
108
|
+
claimCurrency(playerId: string): Readonly<Record<string, number>>;
|
|
109
|
+
claimItem(playerId: string, itemId: string, count: number): boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Timed-bid auctions in the WoW/BDO auction-house mold: post an item with a start price, minimum
|
|
113
|
+
* increment, and optional buyout; bids escrow currency, outbid players are refunded into their
|
|
114
|
+
* collection box, bids near the close extend it (anti-snipe), and settlement pays the seller minus
|
|
115
|
+
* the house cut while the item lands in the winner's collection box. Unsold auctions return the
|
|
116
|
+
* goods to the seller's box. Wallet and inventory movement is the caller's job (mirrors
|
|
117
|
+
* `economy/listingBook`) — this primitive owns the auction lifecycle and the escrowed
|
|
118
|
+
* collection-box bookkeeping behind it.
|
|
119
|
+
*
|
|
120
|
+
* @capability auction-book timed bid auctions with escrowed bids, buyout, anti-snipe close extension, and collection-box settlement
|
|
121
|
+
*/
|
|
122
|
+
export declare function createAuctionBook(config: AuctionBookConfig): AuctionBook;
|