@jgengine/core 0.9.0 → 0.11.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 +34 -3
- 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/spawnDirector.d.ts +19 -1
- package/dist/ai/spawnDirector.js +53 -26
- package/dist/ai/spawnPoint.d.ts +7 -0
- package/dist/ai/spawnPoint.js +7 -0
- 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/audio/audioFalloff.d.ts +5 -2
- package/dist/audio/music.d.ts +53 -0
- package/dist/audio/music.js +34 -0
- package/dist/audio/synth.d.ts +60 -0
- package/dist/audio/synth.js +8 -0
- package/dist/authoring.d.ts +15 -0
- package/dist/authoring.js +15 -0
- 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 +47 -0
- package/dist/combat/dotField.js +52 -0
- 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 +7 -2
- package/dist/combat/projectiles.js +48 -17
- package/dist/combat/receivedDamage.d.ts +117 -0
- package/dist/combat/receivedDamage.js +92 -0
- package/dist/combat/regenShield.d.ts +39 -0
- package/dist/combat/regenShield.js +49 -0
- 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 +30 -1
- package/dist/combat/shotOrigin.js +70 -2
- 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 +34 -0
- package/dist/combat.js +34 -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/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/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/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/wallet.d.ts +26 -2
- package/dist/economy/wallet.js +35 -6
- package/dist/editor/commands.d.ts +248 -0
- package/dist/editor/commands.js +865 -0
- package/dist/editor/document.d.ts +186 -0
- package/dist/editor/document.js +884 -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 +97 -0
- package/dist/editor/index.js +10 -0
- package/dist/editor/liveSync.d.ts +127 -0
- package/dist/editor/liveSync.js +249 -0
- package/dist/editor/runtimeInspector.d.ts +88 -0
- package/dist/editor/runtimeInspector.js +239 -0
- package/dist/editor/types.d.ts +175 -0
- package/dist/editor/types.js +29 -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/connectedPlayers.d.ts +30 -0
- package/dist/game/connectedPlayers.js +21 -0
- package/dist/game/cosmetics.d.ts +9 -0
- package/dist/game/cosmetics.js +16 -0
- package/dist/game/defineGame.d.ts +141 -2
- package/dist/game/defineGame.js +39 -1
- package/dist/game/defineSystem.d.ts +88 -0
- package/dist/game/defineSystem.js +45 -0
- package/dist/game/dialogue.d.ts +33 -0
- package/dist/game/dialogue.js +21 -0
- package/dist/game/events.d.ts +50 -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/keyValueStore.d.ts +25 -0
- package/dist/game/keyValueStore.js +61 -0
- package/dist/game/leaderboard.d.ts +5 -0
- package/dist/game/leaderboard.js +5 -0
- package/dist/game/levelSequence.d.ts +24 -2
- package/dist/game/levelSequence.js +51 -2
- 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 +21 -0
- package/dist/game/lootTable.js +15 -4
- package/dist/game/modelAnimation.d.ts +8 -0
- package/dist/game/modelAnimation.js +18 -0
- 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 +160 -12
- package/dist/game/quest.d.ts +8 -0
- package/dist/game/quest.js +29 -0
- package/dist/game/race.d.ts +141 -0
- package/dist/game/race.js +169 -0
- package/dist/game/recordBook.d.ts +5 -5
- 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/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 +91 -0
- package/dist/gameplay.js +91 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.js +5 -7
- package/dist/input/actionBindings.d.ts +24 -5
- package/dist/input/actionBindings.js +23 -5
- package/dist/input/axisInput.d.ts +13 -1
- package/dist/input/axisInput.js +22 -1
- 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/contextMenu.d.ts +1 -0
- package/dist/interaction/contextMenu.js +1 -0
- package/dist/interaction/lockpick.d.ts +61 -0
- package/dist/interaction/lockpick.js +168 -0
- package/dist/interaction/proximityPrompt.d.ts +5 -1
- package/dist/interaction/proximityPrompt.js +5 -3
- 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/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 +5 -0
- 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 +36 -1
- 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 +38 -7
- package/dist/movement/movementModel.js +54 -13
- package/dist/movement/playerMovement.d.ts +41 -0
- package/dist/movement/playerMovement.js +236 -0
- 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 +3 -0
- package/dist/multiplayer/lagCompensation.d.ts +5 -0
- package/dist/multiplayer/lagCompensation.js +5 -0
- package/dist/multiplayer/presenceModel.d.ts +9 -1
- package/dist/multiplayer/presenceModel.js +9 -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 +29 -0
- package/dist/physics/drivableVehicle.js +16 -0
- package/dist/physics/kinematicVehicle.d.ts +21 -1
- package/dist/physics/kinematicVehicle.js +23 -8
- package/dist/physics/physicsWorld.d.ts +24 -12
- package/dist/physics/physicsWorld.js +11 -5
- package/dist/physics/radialImpulse.d.ts +25 -0
- package/dist/physics/radialImpulse.js +27 -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 +24 -0
- package/dist/random/rng.js +30 -8
- 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 +76 -0
- package/dist/render/postProcessing.js +21 -0
- 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 +58 -0
- package/dist/runtime/adapter.js +54 -5
- 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/combatFx.d.ts +23 -0
- package/dist/runtime/context/combatFx.js +161 -0
- package/dist/runtime/context/registries.d.ts +13 -0
- package/dist/runtime/context/registries.js +84 -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 +134 -0
- package/dist/runtime/descriptors/features.d.ts +74 -0
- package/dist/runtime/descriptors/features.js +281 -0
- package/dist/runtime/gameContext.d.ts +163 -19
- package/dist/runtime/gameContext.js +385 -339
- package/dist/runtime/gameRuntime.d.ts +1 -0
- package/dist/runtime/gameRuntime.js +1 -0
- package/dist/runtime/headlessRunner.d.ts +60 -0
- package/dist/runtime/headlessRunner.js +44 -0
- package/dist/runtime/hostPersistence.d.ts +12 -0
- package/dist/runtime/hostPersistence.js +12 -0
- package/dist/runtime/hostedGameRunner.d.ts +54 -0
- package/dist/runtime/hostedGameRunner.js +85 -0
- package/dist/runtime/hostedWorldSession.d.ts +73 -0
- package/dist/runtime/hostedWorldSession.js +64 -0
- package/dist/runtime/inputSnapshot.d.ts +21 -3
- package/dist/runtime/inputSnapshot.js +8 -2
- package/dist/runtime/motionIntents.d.ts +12 -1
- package/dist/runtime/motionIntents.js +26 -1
- 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 +62 -0
- package/dist/runtime/worldChannel.js +114 -0
- package/dist/runtime/worldMirror.d.ts +36 -0
- package/dist/runtime/worldMirror.js +44 -0
- package/dist/runtime/worldProjection.d.ts +47 -0
- package/dist/runtime/worldProjection.js +52 -0
- package/dist/runtime/worldReplication.d.ts +69 -0
- package/dist/runtime/worldReplication.js +217 -0
- package/dist/runtime/worldSnapshot.d.ts +44 -0
- package/dist/runtime/worldSnapshot.js +30 -0
- package/dist/scene/assetCatalog.d.ts +22 -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 +259 -0
- package/dist/scene/authoredTriggers.d.ts +169 -0
- package/dist/scene/authoredTriggers.js +340 -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 +62 -0
- package/dist/scene/colliders.d.ts +18 -0
- package/dist/scene/colliders.js +61 -1
- package/dist/scene/entityStats.d.ts +13 -0
- package/dist/scene/entityStats.js +30 -0
- package/dist/scene/entityStore.d.ts +41 -1
- package/dist/scene/entityStore.js +75 -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 +240 -0
- package/dist/scene/sceneKinds.js +214 -0
- package/dist/scene/sceneOwnership.d.ts +169 -0
- package/dist/scene/sceneOwnership.js +179 -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/statModifiers.d.ts +5 -0
- package/dist/stats/statModifiers.js +5 -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 +9 -0
- package/dist/store/observableKeyedStore.js +43 -2
- package/dist/survival/decayMeter.d.ts +55 -0
- package/dist/survival/decayMeter.js +130 -55
- package/dist/survival/moodle.d.ts +2 -0
- package/dist/survival/regionHealth.d.ts +6 -0
- package/dist/survival/regionHealth.js +5 -0
- package/dist/tactics/fallingGrid.d.ts +6 -4
- package/dist/tactics/fallingGrid.js +6 -4
- 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 +144 -0
- package/dist/ui/gameLayout.js +148 -0
- package/dist/ui/hudDocument.d.ts +114 -0
- package/dist/ui/hudDocument.js +220 -0
- package/dist/ui/hudLayout.d.ts +33 -1
- package/dist/ui/hudLayout.js +204 -17
- package/dist/ui/orientation.d.ts +39 -0
- package/dist/ui/orientation.js +49 -0
- package/dist/ui/selectionModel.d.ts +92 -0
- package/dist/ui/selectionModel.js +88 -0
- package/dist/ui/swingTimer.d.ts +42 -0
- package/dist/ui/swingTimer.js +38 -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/visibility/spatialIndex.js +34 -20
- 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/authoredObjects.d.ts +58 -0
- package/dist/world/authoredObjects.js +69 -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/environmentSummary.d.ts +11 -2
- package/dist/world/environmentSummary.js +11 -1
- package/dist/world/features.d.ts +244 -7
- package/dist/world/features.js +92 -4
- 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/pathInstances.d.ts +27 -0
- package/dist/world/pathInstances.js +27 -0
- package/dist/world/pathTerrain.d.ts +80 -0
- package/dist/world/pathTerrain.js +142 -0
- package/dist/world/placeAsset.d.ts +81 -0
- package/dist/world/placeAsset.js +77 -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/polyline.d.ts +34 -0
- package/dist/world/polyline.js +81 -0
- package/dist/world/roads.d.ts +55 -0
- package/dist/world/roads.js +184 -0
- 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 +80 -0
- package/dist/world/streets.js +144 -0
- package/dist/world/terraform.d.ts +213 -1
- package/dist/world/terraform.js +655 -20
- package/dist/world/terrain.d.ts +138 -12
- package/dist/world/terrain.js +346 -28
- 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 +132 -0
- package/dist/world.js +132 -0
- package/package.json +32 -8
- package/skills/jgengine/SKILL.md +51 -0
- package/skills/jgengine/api.md +434 -0
- package/skills/jgengine/capabilities.md +29 -0
- package/skills/jgengine/reference-cartridge.md +72 -0
- package/skills/jgengine-combat/SKILL.md +34 -0
- package/skills/jgengine-combat/api.md +549 -0
- package/skills/jgengine-combat/capabilities.md +169 -0
- package/skills/jgengine-combat/reference.md +98 -0
- package/skills/jgengine-gameplay/SKILL.md +39 -0
- package/skills/jgengine-gameplay/api.md +1794 -0
- package/skills/jgengine-gameplay/capabilities.md +378 -0
- package/skills/jgengine-gameplay/reference-systems.md +60 -0
- package/skills/jgengine-world/SKILL.md +38 -0
- package/skills/jgengine-world/api.md +2652 -0
- package/skills/jgengine-world/capabilities.md +370 -0
- package/skills/jgengine-world/reference.md +222 -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 -4983
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Threshold above which a timer jump is treated as a fresh swing (period reset). */
|
|
2
|
+
export const SWING_EDGE_EPSILON = 1e-4;
|
|
3
|
+
function clamp01(v) {
|
|
4
|
+
return v < 0 ? 0 : v > 1 ? 1 : v;
|
|
5
|
+
}
|
|
6
|
+
const HIDDEN = {
|
|
7
|
+
visible: false,
|
|
8
|
+
frac: 0,
|
|
9
|
+
ready: false,
|
|
10
|
+
labelKind: "seconds",
|
|
11
|
+
seconds: 0,
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Pure swing-timer bar state — no hidden state, no clock, no DOM. The caller
|
|
15
|
+
* threads `prevPeriod`/`prevTimer` back each frame. The period is recovered on
|
|
16
|
+
* the reset edge (when `swingTimer` jumps up = a new swing began) as
|
|
17
|
+
* `max(swingTimer, weapon.speed)`, so the fill is correct even without knowing
|
|
18
|
+
* the weapon's exact cadence. Hidden unless auto-attacking a live, non-object target.
|
|
19
|
+
*/
|
|
20
|
+
export function swingTimerState(player, target, prevPeriod, prevTimer) {
|
|
21
|
+
const swingTimer = player.swingTimer;
|
|
22
|
+
if (!player.autoAttack || target === null || target.dead || target.kind === "object") {
|
|
23
|
+
return { ...HIDDEN, nextPeriod: prevPeriod, nextTimer: swingTimer };
|
|
24
|
+
}
|
|
25
|
+
const isResetEdge = swingTimer > prevTimer + SWING_EDGE_EPSILON || prevPeriod <= 0;
|
|
26
|
+
const period = isResetEdge ? Math.max(swingTimer, player.weapon.speed) : prevPeriod;
|
|
27
|
+
const frac = period <= 0 ? 1 : clamp01(1 - swingTimer / period);
|
|
28
|
+
const ready = swingTimer <= 0;
|
|
29
|
+
return {
|
|
30
|
+
visible: true,
|
|
31
|
+
frac,
|
|
32
|
+
ready,
|
|
33
|
+
labelKind: ready ? "ready" : "seconds",
|
|
34
|
+
seconds: Math.max(0, swingTimer),
|
|
35
|
+
nextPeriod: period,
|
|
36
|
+
nextTimer: swingTimer,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless model for HUD tooltips and popovers — the shared description seam games have been
|
|
3
|
+
* hand-rolling with a bare DOM `title=` attribute. {@link actionTooltip} turns a
|
|
4
|
+
* {@link ResolvedAction} into structured {@link TooltipContent} (title, cost, cooldown, blocking
|
|
5
|
+
* notes), and {@link placePopover} is the pure, SSR-safe positioning math the React tooltip uses to
|
|
6
|
+
* flip and clamp against the viewport. Both are rendering-agnostic.
|
|
7
|
+
*/
|
|
8
|
+
import type { ActionCooldown, ActionCost, ResolvedAction } from "./actionModel.js";
|
|
9
|
+
/** Structured tooltip content — a renderer lays these fields out; the model owns what is shown. */
|
|
10
|
+
export interface TooltipContent {
|
|
11
|
+
title: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
body?: string;
|
|
14
|
+
/** Hotkey label to echo (e.g. `"Q"`). */
|
|
15
|
+
hotkey?: string;
|
|
16
|
+
costs?: readonly ActionCost[];
|
|
17
|
+
cooldown?: ActionCooldown | null;
|
|
18
|
+
/** Blocking reasons rendered as a warning footer (why the action is unavailable). */
|
|
19
|
+
notes?: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build {@link TooltipContent} from a {@link ResolvedAction}: title from the label, the group as a
|
|
23
|
+
* subtitle, the description as the body, and the blocking reasons as warning notes. The single place
|
|
24
|
+
* an action's tooltip copy is assembled, so every renderer shows the same thing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function actionTooltip(action: ResolvedAction): TooltipContent;
|
|
27
|
+
/** Which side of its anchor a popover opens toward. */
|
|
28
|
+
export type PopoverSide = "top" | "bottom" | "left" | "right";
|
|
29
|
+
/** A positioned rectangle (viewport/anchor space, top-left origin, pixels). */
|
|
30
|
+
export interface UiRect {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
}
|
|
36
|
+
/** A width/height pair (pixels). */
|
|
37
|
+
export interface UiSize {
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}
|
|
41
|
+
/** The resolved popover position — the side it actually opened on and its clamped top-left. */
|
|
42
|
+
export interface PopoverPlacement {
|
|
43
|
+
side: PopoverSide;
|
|
44
|
+
left: number;
|
|
45
|
+
top: number;
|
|
46
|
+
}
|
|
47
|
+
/** Options for {@link placePopover}. */
|
|
48
|
+
export interface PopoverOptions {
|
|
49
|
+
/** Side to try first (default `"top"`). Flips to the opposite when it would overflow. */
|
|
50
|
+
preferred?: PopoverSide;
|
|
51
|
+
/** Gap between the anchor and the popover, in pixels (default 8). */
|
|
52
|
+
gap?: number;
|
|
53
|
+
/** Minimum inset from the viewport edges, in pixels (default 8). */
|
|
54
|
+
margin?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Position a popover/tooltip of `content` size against its `anchor` rectangle inside `viewport`:
|
|
58
|
+
* open on the `preferred` side, flip to the opposite when that side lacks room and the opposite has
|
|
59
|
+
* more, then clamp the top-left so the box stays fully on screen (respecting `margin`). Pure and
|
|
60
|
+
* deterministic — no DOM reads — so it is SSR-safe and unit-testable, and the React tooltip is a thin
|
|
61
|
+
* shell over it.
|
|
62
|
+
*/
|
|
63
|
+
export declare function placePopover(anchor: UiRect, content: UiSize, viewport: UiSize, options?: PopoverOptions): PopoverPlacement;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless model for HUD tooltips and popovers — the shared description seam games have been
|
|
3
|
+
* hand-rolling with a bare DOM `title=` attribute. {@link actionTooltip} turns a
|
|
4
|
+
* {@link ResolvedAction} into structured {@link TooltipContent} (title, cost, cooldown, blocking
|
|
5
|
+
* notes), and {@link placePopover} is the pure, SSR-safe positioning math the React tooltip uses to
|
|
6
|
+
* flip and clamp against the viewport. Both are rendering-agnostic.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Build {@link TooltipContent} from a {@link ResolvedAction}: title from the label, the group as a
|
|
10
|
+
* subtitle, the description as the body, and the blocking reasons as warning notes. The single place
|
|
11
|
+
* an action's tooltip copy is assembled, so every renderer shows the same thing.
|
|
12
|
+
*/
|
|
13
|
+
export function actionTooltip(action) {
|
|
14
|
+
const content = { title: action.label };
|
|
15
|
+
if (action.group !== undefined)
|
|
16
|
+
content.subtitle = action.group;
|
|
17
|
+
if (action.description !== undefined)
|
|
18
|
+
content.body = action.description;
|
|
19
|
+
if (action.hotkey !== undefined)
|
|
20
|
+
content.hotkey = action.hotkey;
|
|
21
|
+
if (action.costs.length > 0)
|
|
22
|
+
content.costs = action.costs;
|
|
23
|
+
if (action.cooldown !== null && !action.cooldown.ready)
|
|
24
|
+
content.cooldown = action.cooldown;
|
|
25
|
+
if (action.reasons.length > 0)
|
|
26
|
+
content.notes = action.reasons.map((reason) => reason.message);
|
|
27
|
+
return content;
|
|
28
|
+
}
|
|
29
|
+
const OPPOSITE = {
|
|
30
|
+
top: "bottom",
|
|
31
|
+
bottom: "top",
|
|
32
|
+
left: "right",
|
|
33
|
+
right: "left",
|
|
34
|
+
};
|
|
35
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(max, max < min ? min : value));
|
|
36
|
+
/** @internal Room in pixels between the anchor and the viewport edge on a given side. */
|
|
37
|
+
function roomOn(side, anchor, viewport) {
|
|
38
|
+
if (side === "top")
|
|
39
|
+
return anchor.y;
|
|
40
|
+
if (side === "bottom")
|
|
41
|
+
return viewport.height - (anchor.y + anchor.height);
|
|
42
|
+
if (side === "left")
|
|
43
|
+
return anchor.x;
|
|
44
|
+
return viewport.width - (anchor.x + anchor.width);
|
|
45
|
+
}
|
|
46
|
+
/** @internal The top-left of `content` placed on `side` of `anchor`, before viewport clamping. */
|
|
47
|
+
function topLeftFor(side, anchor, content, gap) {
|
|
48
|
+
if (side === "top") {
|
|
49
|
+
return { left: anchor.x + anchor.width / 2 - content.width / 2, top: anchor.y - gap - content.height };
|
|
50
|
+
}
|
|
51
|
+
if (side === "bottom") {
|
|
52
|
+
return { left: anchor.x + anchor.width / 2 - content.width / 2, top: anchor.y + anchor.height + gap };
|
|
53
|
+
}
|
|
54
|
+
if (side === "left") {
|
|
55
|
+
return { left: anchor.x - gap - content.width, top: anchor.y + anchor.height / 2 - content.height / 2 };
|
|
56
|
+
}
|
|
57
|
+
return { left: anchor.x + anchor.width + gap, top: anchor.y + anchor.height / 2 - content.height / 2 };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Position a popover/tooltip of `content` size against its `anchor` rectangle inside `viewport`:
|
|
61
|
+
* open on the `preferred` side, flip to the opposite when that side lacks room and the opposite has
|
|
62
|
+
* more, then clamp the top-left so the box stays fully on screen (respecting `margin`). Pure and
|
|
63
|
+
* deterministic — no DOM reads — so it is SSR-safe and unit-testable, and the React tooltip is a thin
|
|
64
|
+
* shell over it.
|
|
65
|
+
*/
|
|
66
|
+
export function placePopover(anchor, content, viewport, options) {
|
|
67
|
+
const gap = options?.gap ?? 8;
|
|
68
|
+
const margin = options?.margin ?? 8;
|
|
69
|
+
const preferred = options?.preferred ?? "top";
|
|
70
|
+
const needed = preferred === "top" || preferred === "bottom" ? content.height : content.width;
|
|
71
|
+
let side = preferred;
|
|
72
|
+
const opposite = OPPOSITE[preferred];
|
|
73
|
+
if (roomOn(preferred, anchor, viewport) < needed + gap && roomOn(opposite, anchor, viewport) > roomOn(preferred, anchor, viewport)) {
|
|
74
|
+
side = opposite;
|
|
75
|
+
}
|
|
76
|
+
const { left, top } = topLeftFor(side, anchor, content, gap);
|
|
77
|
+
return {
|
|
78
|
+
side,
|
|
79
|
+
left: clamp(left, margin, viewport.width - content.width - margin),
|
|
80
|
+
top: clamp(top, margin, viewport.height - content.height - margin),
|
|
81
|
+
};
|
|
82
|
+
}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { formatDistance } from "./format/distance.js";
|
|
2
|
+
export { formatDelta, formatDuration, formatOrdinal } from "./format/duration.js";
|
|
3
|
+
export { formatSpeed } from "./format/speed.js";
|
|
4
|
+
export { resolveGameLook, type LookPreset } from "./render/lookPreset.js";
|
|
5
|
+
export { STUDIO_STAGE_POST, type GradeConfig, type PostProcessingConfig, type ToneMappingMode, } from "./render/postProcessing.js";
|
|
6
|
+
export { BUILT_IN_SETTING_CATEGORIES, DEFAULT_GRAPHICS_QUALITY, DEFAULT_GRAPHICS_SHADOWS, DEFAULT_MASTER_VOLUME, DEFAULT_UI_SCALE, GRAPHICS_QUALITY_DPR, GRAPHICS_QUALITY_OPTIONS, SETTING_IDS, UI_SCALE_MAX, UI_SCALE_MIN, busVolumeSettingId, createSettingsStore, type GameSettingDef, type GameSettingsConfig, type GraphicsQuality, type SettingCategory, type SettingCategoryDef, type SettingKind, type SettingOption, type SettingValue, type SettingsActionDef, type SettingsStore, type SettingsSurface, type SettingsVariant, } from "./settings/settingsModel.js";
|
|
7
|
+
export { actionByHotkey, actionCooldown, actionCooldownFromFraction, actionCost, moveGridFocus, resolveAction, resolveActionCollection, type ActionCooldown, type ActionCost, type ActionDef, type ActionReason, type FocusDirection, type GridFocusOptions, type ResolvedAction, } from "./ui/actionModel.js";
|
|
8
|
+
export { type GameLayoutMode, type GameViewportLayout, type HudPriority, type Insets, type LayoutCollision, type LayoutCollisionPolicy, type LayoutRect, type LayoutRegion, type MobileHudBehavior, } from "./ui/gameLayout.js";
|
|
9
|
+
export { listHudPanelTypes, registerHudPanelType, resizePanelSize, resolveHudPanelLayout, type EditorUiDocument, type EditorUiPanelLayout, type HudResizeAxes, } from "./ui/hudDocument.js";
|
|
10
|
+
export { HUD_ANCHOR_FRACTIONS, type HudAnchor, type HudLayoutStore, type HudPlacement, type HudSize, } from "./ui/hudLayout.js";
|
|
11
|
+
export { hudScaleForViewport, overflowingPanels, resolveHudFit, type HudPlatform, type HudViewportConfig, } from "./ui/hudScale.js";
|
|
12
|
+
export { orientationGateActive, orientationHintActive, resolveOrientationRequirement, type LayoutOrientation, } from "./ui/orientation.js";
|
|
13
|
+
export { moveSelectionFocus, selectionWindow, summarizeSelection, type EntitySummaryDef, type EntityVital, type SelectionFocusDirection, type SelectionGroup, type SelectionView, type SelectionWindow, type SummarizeSelectionOptions, } from "./ui/selectionModel.js";
|
|
14
|
+
export { swingTimerState, type SwingTargetInput } from "./ui/swingTimer.js";
|
|
15
|
+
export { actionTooltip, placePopover, type PopoverOptions, type PopoverPlacement, type PopoverSide, type TooltipContent, type UiRect, type UiSize, } from "./ui/tooltipModel.js";
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { formatDistance } from "./format/distance.js";
|
|
2
|
+
export { formatDelta, formatDuration, formatOrdinal } from "./format/duration.js";
|
|
3
|
+
export { formatSpeed } from "./format/speed.js";
|
|
4
|
+
export { resolveGameLook } from "./render/lookPreset.js";
|
|
5
|
+
export { STUDIO_STAGE_POST, } from "./render/postProcessing.js";
|
|
6
|
+
export { BUILT_IN_SETTING_CATEGORIES, DEFAULT_GRAPHICS_QUALITY, DEFAULT_GRAPHICS_SHADOWS, DEFAULT_MASTER_VOLUME, DEFAULT_UI_SCALE, GRAPHICS_QUALITY_DPR, GRAPHICS_QUALITY_OPTIONS, SETTING_IDS, UI_SCALE_MAX, UI_SCALE_MIN, busVolumeSettingId, createSettingsStore, } from "./settings/settingsModel.js";
|
|
7
|
+
export { actionByHotkey, actionCooldown, actionCooldownFromFraction, actionCost, moveGridFocus, resolveAction, resolveActionCollection, } from "./ui/actionModel.js";
|
|
8
|
+
export {} from "./ui/gameLayout.js";
|
|
9
|
+
export { listHudPanelTypes, registerHudPanelType, resizePanelSize, resolveHudPanelLayout, } from "./ui/hudDocument.js";
|
|
10
|
+
export { HUD_ANCHOR_FRACTIONS, } from "./ui/hudLayout.js";
|
|
11
|
+
export { hudScaleForViewport, overflowingPanels, resolveHudFit, } from "./ui/hudScale.js";
|
|
12
|
+
export { orientationGateActive, orientationHintActive, resolveOrientationRequirement, } from "./ui/orientation.js";
|
|
13
|
+
export { moveSelectionFocus, selectionWindow, summarizeSelection, } from "./ui/selectionModel.js";
|
|
14
|
+
export { swingTimerState } from "./ui/swingTimer.js";
|
|
15
|
+
export { actionTooltip, placePopover, } from "./ui/tooltipModel.js";
|
|
@@ -42,11 +42,17 @@ export type BoundsSpec = {
|
|
|
42
42
|
};
|
|
43
43
|
/** Conservative default: a unit sphere. Objects without explicit bounds cull as a small volume, never a point. */
|
|
44
44
|
export declare const DEFAULT_BOUNDS: BoundsSpec;
|
|
45
|
+
/** @internal */
|
|
45
46
|
export declare function createRenderBounds(): RenderBounds;
|
|
46
|
-
/** Resolve a spec + world position into concrete bounds. Writes into `out` when supplied (no allocation).
|
|
47
|
+
/** Resolve a spec + world position into concrete bounds. Writes into `out` when supplied (no allocation).
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
47
50
|
export declare function resolveBounds(spec: BoundsSpec, position: Vec3, out?: RenderBounds): RenderBounds;
|
|
51
|
+
/** @internal */
|
|
48
52
|
export declare function expandRenderBounds(bounds: RenderBounds, margin: number, out?: RenderBounds): RenderBounds;
|
|
53
|
+
/** @internal */
|
|
49
54
|
export declare function aabbIntersects(aMinX: number, aMinY: number, aMinZ: number, aMaxX: number, aMaxY: number, aMaxZ: number, bMinX: number, bMinY: number, bMinZ: number, bMaxX: number, bMaxY: number, bMaxZ: number): boolean;
|
|
55
|
+
/** @internal */
|
|
50
56
|
export declare function boundsIntersect(a: RenderBounds, b: RenderBounds): boolean;
|
|
51
57
|
/**
|
|
52
58
|
* BoundsSystem: caches resolved bounds per object and recomputes only when the caller's
|
|
@@ -63,4 +69,5 @@ export interface BoundsCache {
|
|
|
63
69
|
size(): number;
|
|
64
70
|
recomputes(): number;
|
|
65
71
|
}
|
|
72
|
+
/** @internal */
|
|
66
73
|
export declare function createBoundsCache(): BoundsCache;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Conservative default: a unit sphere. Objects without explicit bounds cull as a small volume, never a point. */
|
|
2
2
|
export const DEFAULT_BOUNDS = { kind: "sphere", radius: 1 };
|
|
3
|
+
/** @internal */
|
|
3
4
|
export function createRenderBounds() {
|
|
4
5
|
return {
|
|
5
6
|
centerX: 0,
|
|
@@ -27,7 +28,9 @@ function fillBounds(out, cx, cy, cz, hx, hy, hz) {
|
|
|
27
28
|
out.radius = Math.sqrt(hx * hx + hy * hy + hz * hz);
|
|
28
29
|
return out;
|
|
29
30
|
}
|
|
30
|
-
/** Resolve a spec + world position into concrete bounds. Writes into `out` when supplied (no allocation).
|
|
31
|
+
/** Resolve a spec + world position into concrete bounds. Writes into `out` when supplied (no allocation).
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
31
34
|
export function resolveBounds(spec, position, out = createRenderBounds()) {
|
|
32
35
|
if (spec.kind === "point") {
|
|
33
36
|
return fillBounds(out, position[0], position[1], position[2], 0, 0, 0);
|
|
@@ -49,6 +52,7 @@ export function resolveBounds(spec, position, out = createRenderBounds()) {
|
|
|
49
52
|
return fillBounds(out, cx, cy, cz, spec.halfWidth, spec.halfHeight ?? 0, spec.halfDepth);
|
|
50
53
|
}
|
|
51
54
|
}
|
|
55
|
+
/** @internal */
|
|
52
56
|
export function expandRenderBounds(bounds, margin, out = createRenderBounds()) {
|
|
53
57
|
out.centerX = bounds.centerX;
|
|
54
58
|
out.centerY = bounds.centerY;
|
|
@@ -62,14 +66,17 @@ export function expandRenderBounds(bounds, margin, out = createRenderBounds()) {
|
|
|
62
66
|
out.maxZ = bounds.maxZ + margin;
|
|
63
67
|
return out;
|
|
64
68
|
}
|
|
69
|
+
/** @internal */
|
|
65
70
|
export function aabbIntersects(aMinX, aMinY, aMinZ, aMaxX, aMaxY, aMaxZ, bMinX, bMinY, bMinZ, bMaxX, bMaxY, bMaxZ) {
|
|
66
71
|
return (aMinX <= bMaxX && aMaxX >= bMinX &&
|
|
67
72
|
aMinY <= bMaxY && aMaxY >= bMinY &&
|
|
68
73
|
aMinZ <= bMaxZ && aMaxZ >= bMinZ);
|
|
69
74
|
}
|
|
75
|
+
/** @internal */
|
|
70
76
|
export function boundsIntersect(a, b) {
|
|
71
77
|
return aabbIntersects(a.minX, a.minY, a.minZ, a.maxX, a.maxY, a.maxZ, b.minX, b.minY, b.minZ, b.maxX, b.maxY, b.maxZ);
|
|
72
78
|
}
|
|
79
|
+
/** @internal */
|
|
73
80
|
export function createBoundsCache() {
|
|
74
81
|
const entries = new Map();
|
|
75
82
|
let recomputes = 0;
|
|
@@ -36,12 +36,21 @@ export interface Frustum {
|
|
|
36
36
|
maxY: number;
|
|
37
37
|
maxZ: number;
|
|
38
38
|
}
|
|
39
|
+
/** @internal */
|
|
39
40
|
export declare function createFrustum(): Frustum;
|
|
41
|
+
/** @internal */
|
|
40
42
|
export declare function updateFrustum(out: Frustum, view: CameraView): Frustum;
|
|
41
|
-
/** Conservative AABB-vs-frustum: never a false negative (may keep a corner-case that is truly outside).
|
|
43
|
+
/** Conservative AABB-vs-frustum: never a false negative (may keep a corner-case that is truly outside).
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
42
46
|
export declare function aabbInFrustum(f: Frustum, minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): boolean;
|
|
47
|
+
/** @internal */
|
|
43
48
|
export declare function sphereInFrustum(f: Frustum, cx: number, cy: number, cz: number, radius: number): boolean;
|
|
44
|
-
/** Sphere broad-phase reject, then the tight AABB test. Both conservative.
|
|
49
|
+
/** Sphere broad-phase reject, then the tight AABB test. Both conservative.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
45
52
|
export declare function boundsInFrustum(f: Frustum, b: RenderBounds): boolean;
|
|
46
|
-
/** Push every plane outward by `margin` (unit normals ⇒ d += margin) to form a preload/hysteresis region.
|
|
53
|
+
/** Push every plane outward by `margin` (unit normals ⇒ d += margin) to form a preload/hysteresis region.
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
47
56
|
export declare function dilateFrustum(src: Frustum, margin: number, out: Frustum): Frustum;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const WORLD_UP = [0, 1, 0];
|
|
2
2
|
const ALT_UP = [1, 0, 0];
|
|
3
|
+
/** @internal */
|
|
3
4
|
export function createFrustum() {
|
|
4
5
|
return {
|
|
5
6
|
planes: new Float64Array(24),
|
|
@@ -43,6 +44,7 @@ function planeFromCorners(planes, slot, corners, a, b, c, centroidX, centroidY,
|
|
|
43
44
|
planes[slot * 4 + 2] = nz;
|
|
44
45
|
planes[slot * 4 + 3] = d;
|
|
45
46
|
}
|
|
47
|
+
/** @internal */
|
|
46
48
|
export function updateFrustum(out, view) {
|
|
47
49
|
const { position, target } = view;
|
|
48
50
|
let fx = target[0] - position[0];
|
|
@@ -137,7 +139,9 @@ export function updateFrustum(out, view) {
|
|
|
137
139
|
planeFromCorners(planes, 5, corners, 2, 3, 6, cX, cY, cZ); // bottom
|
|
138
140
|
return out;
|
|
139
141
|
}
|
|
140
|
-
/** Conservative AABB-vs-frustum: never a false negative (may keep a corner-case that is truly outside).
|
|
142
|
+
/** Conservative AABB-vs-frustum: never a false negative (may keep a corner-case that is truly outside).
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
141
145
|
export function aabbInFrustum(f, minX, minY, minZ, maxX, maxY, maxZ) {
|
|
142
146
|
const planes = f.planes;
|
|
143
147
|
for (let i = 0; i < 6; i += 1) {
|
|
@@ -150,6 +154,7 @@ export function aabbInFrustum(f, minX, minY, minZ, maxX, maxY, maxZ) {
|
|
|
150
154
|
}
|
|
151
155
|
return true;
|
|
152
156
|
}
|
|
157
|
+
/** @internal */
|
|
153
158
|
export function sphereInFrustum(f, cx, cy, cz, radius) {
|
|
154
159
|
const planes = f.planes;
|
|
155
160
|
for (let i = 0; i < 6; i += 1) {
|
|
@@ -159,13 +164,17 @@ export function sphereInFrustum(f, cx, cy, cz, radius) {
|
|
|
159
164
|
}
|
|
160
165
|
return true;
|
|
161
166
|
}
|
|
162
|
-
/** Sphere broad-phase reject, then the tight AABB test. Both conservative.
|
|
167
|
+
/** Sphere broad-phase reject, then the tight AABB test. Both conservative.
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
163
170
|
export function boundsInFrustum(f, b) {
|
|
164
171
|
if (!sphereInFrustum(f, b.centerX, b.centerY, b.centerZ, b.radius))
|
|
165
172
|
return false;
|
|
166
173
|
return aabbInFrustum(f, b.minX, b.minY, b.minZ, b.maxX, b.maxY, b.maxZ);
|
|
167
174
|
}
|
|
168
|
-
/** Push every plane outward by `margin` (unit normals ⇒ d += margin) to form a preload/hysteresis region.
|
|
175
|
+
/** Push every plane outward by `margin` (unit normals ⇒ d += margin) to form a preload/hysteresis region.
|
|
176
|
+
* @internal
|
|
177
|
+
*/
|
|
169
178
|
export function dilateFrustum(src, margin, out) {
|
|
170
179
|
const sp = src.planes;
|
|
171
180
|
const op = out.planes;
|
|
@@ -33,10 +33,10 @@ export function createSpatialIndex(options = {}) {
|
|
|
33
33
|
const key = packCell(x, y, z);
|
|
34
34
|
let bucket = cells.get(key);
|
|
35
35
|
if (bucket === undefined) {
|
|
36
|
-
bucket = new Set();
|
|
36
|
+
bucket = { x, y, z, ids: new Set() };
|
|
37
37
|
cells.set(key, bucket);
|
|
38
38
|
}
|
|
39
|
-
bucket.add(id);
|
|
39
|
+
bucket.ids.add(id);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -49,8 +49,8 @@ export function createSpatialIndex(options = {}) {
|
|
|
49
49
|
const bucket = cells.get(key);
|
|
50
50
|
if (bucket === undefined)
|
|
51
51
|
continue;
|
|
52
|
-
bucket.delete(id);
|
|
53
|
-
if (bucket.size === 0)
|
|
52
|
+
bucket.ids.delete(id);
|
|
53
|
+
if (bucket.ids.size === 0)
|
|
54
54
|
cells.delete(key);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -69,17 +69,20 @@ export function createSpatialIndex(options = {}) {
|
|
|
69
69
|
addToCells(id, range);
|
|
70
70
|
entries.set(id, { range, dynamic });
|
|
71
71
|
}
|
|
72
|
-
function
|
|
73
|
-
const
|
|
74
|
-
if (bucket === undefined)
|
|
75
|
-
return;
|
|
76
|
-
for (const id of bucket) {
|
|
72
|
+
function collectBucket(bucket, out) {
|
|
73
|
+
for (const id of bucket.ids) {
|
|
77
74
|
if (stamps.get(id) === queryStamp)
|
|
78
75
|
continue;
|
|
79
76
|
stamps.set(id, queryStamp);
|
|
80
77
|
out.push(id);
|
|
81
78
|
}
|
|
82
79
|
}
|
|
80
|
+
function collectCell(key, out) {
|
|
81
|
+
const bucket = cells.get(key);
|
|
82
|
+
if (bucket === undefined)
|
|
83
|
+
return;
|
|
84
|
+
collectBucket(bucket, out);
|
|
85
|
+
}
|
|
83
86
|
function collectOversized(out) {
|
|
84
87
|
for (const id of oversized) {
|
|
85
88
|
if (stamps.get(id) === queryStamp)
|
|
@@ -93,12 +96,25 @@ export function createSpatialIndex(options = {}) {
|
|
|
93
96
|
out.length = 0;
|
|
94
97
|
const x0 = cellOf(minX, size), y0 = cellOf(minY, size), z0 = cellOf(minZ, size);
|
|
95
98
|
const x1 = cellOf(maxX, size), y1 = cellOf(maxY, size), z1 = cellOf(maxZ, size);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
const rangeCellCount = (x1 - x0 + 1) * (y1 - y0 + 1) * (z1 - z0 + 1);
|
|
100
|
+
if (rangeCellCount > cells.size) {
|
|
101
|
+
for (const bucket of cells.values()) {
|
|
102
|
+
if (bucket.x < x0 || bucket.x > x1 || bucket.y < y0 || bucket.y > y1 || bucket.z < z0 || bucket.z > z1) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (cellFilter !== undefined && !cellFilter(bucket.x, bucket.y, bucket.z))
|
|
106
|
+
continue;
|
|
107
|
+
collectBucket(bucket, out);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (let x = x0; x <= x1; x += 1) {
|
|
112
|
+
for (let y = y0; y <= y1; y += 1) {
|
|
113
|
+
for (let z = z0; z <= z1; z += 1) {
|
|
114
|
+
if (cellFilter !== undefined && !cellFilter(x, y, z))
|
|
115
|
+
continue;
|
|
116
|
+
collectCell(packCell(x, y, z), out);
|
|
117
|
+
}
|
|
102
118
|
}
|
|
103
119
|
}
|
|
104
120
|
}
|
|
@@ -172,13 +188,11 @@ export function createSpatialIndex(options = {}) {
|
|
|
172
188
|
cells() {
|
|
173
189
|
const result = [];
|
|
174
190
|
for (const [key, bucket] of cells) {
|
|
175
|
-
const parts = key.split(":");
|
|
176
|
-
const x = Number(parts[0]), y = Number(parts[1]), z = Number(parts[2]);
|
|
177
191
|
result.push({
|
|
178
192
|
key,
|
|
179
|
-
count: bucket.size,
|
|
180
|
-
minX: x * size, minY: y * size, minZ: z * size,
|
|
181
|
-
maxX: (x + 1) * size, maxY: (y + 1) * size, maxZ: (z + 1) * size,
|
|
193
|
+
count: bucket.ids.size,
|
|
194
|
+
minX: bucket.x * size, minY: bucket.y * size, minZ: bucket.z * size,
|
|
195
|
+
maxX: (bucket.x + 1) * size, maxY: (bucket.y + 1) * size, maxZ: (bucket.z + 1) * size,
|
|
182
196
|
});
|
|
183
197
|
}
|
|
184
198
|
return result;
|