@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,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fillets sharp corners of a centerline into short arcs so a ribbon built from it reads as a smooth
|
|
3
|
+
* road instead of overlapping/notching rectangles at each bend. Each interior vertex is replaced by a
|
|
4
|
+
* quadratic-bezier arc of `radius` (clamped to half the shorter adjacent segment) sampled at
|
|
5
|
+
* `cornerSegments` steps; endpoints and near-straight vertices pass through unchanged.
|
|
6
|
+
* @internal — the corner-smoothing behind `<AuthoredPaths>`; games get it for free through the render.
|
|
7
|
+
*/
|
|
8
|
+
export function roundPathCorners(points, radius, cornerSegments = 5) {
|
|
9
|
+
if (points.length < 3 || radius <= 0)
|
|
10
|
+
return points.map((point) => [point[0], point[1]]);
|
|
11
|
+
const out = [[points[0][0], points[0][1]]];
|
|
12
|
+
for (let i = 1; i < points.length - 1; i += 1) {
|
|
13
|
+
const a = points[i - 1];
|
|
14
|
+
const v = points[i];
|
|
15
|
+
const b = points[i + 1];
|
|
16
|
+
const ax = a[0] - v[0];
|
|
17
|
+
const az = a[1] - v[1];
|
|
18
|
+
const bx = b[0] - v[0];
|
|
19
|
+
const bz = b[1] - v[1];
|
|
20
|
+
const la = Math.hypot(ax, az) || 1;
|
|
21
|
+
const lb = Math.hypot(bx, bz) || 1;
|
|
22
|
+
const r = Math.min(radius, la / 2, lb / 2);
|
|
23
|
+
const p0 = [v[0] + (ax / la) * r, v[1] + (az / la) * r];
|
|
24
|
+
const p1 = [v[0] + (bx / lb) * r, v[1] + (bz / lb) * r];
|
|
25
|
+
out.push(p0);
|
|
26
|
+
for (let s = 1; s < cornerSegments; s += 1) {
|
|
27
|
+
const t = s / cornerSegments;
|
|
28
|
+
const u = 1 - t;
|
|
29
|
+
out.push([
|
|
30
|
+
u * u * p0[0] + 2 * u * t * v[0] + t * t * p1[0],
|
|
31
|
+
u * u * p0[1] + 2 * u * t * v[1] + t * t * p1[1],
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
out.push(p1);
|
|
35
|
+
}
|
|
36
|
+
out.push([points[points.length - 1][0], points[points.length - 1][1]]);
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
function subdividePath(path, maxLength) {
|
|
40
|
+
const out = [];
|
|
41
|
+
for (let i = 0; i < path.length - 1; i += 1) {
|
|
42
|
+
const a = path[i];
|
|
43
|
+
const b = path[i + 1];
|
|
44
|
+
const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
45
|
+
const steps = Math.max(1, Math.ceil(length / maxLength));
|
|
46
|
+
for (let s = 0; s < steps; s += 1) {
|
|
47
|
+
const t = s / steps;
|
|
48
|
+
out.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const last = path[path.length - 1];
|
|
52
|
+
if (last !== undefined)
|
|
53
|
+
out.push(last);
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
function normalAt(points, index) {
|
|
57
|
+
const prev = points[Math.max(0, index - 1)];
|
|
58
|
+
const next = points[Math.min(points.length - 1, index + 1)];
|
|
59
|
+
const dx = next[0] - prev[0];
|
|
60
|
+
const dz = next[1] - prev[1];
|
|
61
|
+
const length = Math.hypot(dx, dz) || 1;
|
|
62
|
+
return [-dz / length, dx / length];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Triangulate a road centerline into a ground-draped ribbon mesh: the polyline is subdivided,
|
|
66
|
+
* each vertex is offset half a `width` along the local perpendicular, and every vertex sits at
|
|
67
|
+
* `sampleHeight(x, z) + elevation`. Pure geometry — the shell (or any renderer) turns the result
|
|
68
|
+
* into a mesh, and tests can assert on it directly.
|
|
69
|
+
*/
|
|
70
|
+
export function buildRoadRibbon(path, width, sampleHeight, options = {}) {
|
|
71
|
+
const elevation = options.elevation ?? 0.08;
|
|
72
|
+
const maxSegmentLength = options.maxSegmentLength ?? 4;
|
|
73
|
+
if (path.length < 2 || width <= 0) {
|
|
74
|
+
return { positions: new Float32Array(0), indices: new Uint32Array(0) };
|
|
75
|
+
}
|
|
76
|
+
const points = subdividePath(path, maxSegmentLength);
|
|
77
|
+
const half = width / 2;
|
|
78
|
+
const positions = new Float32Array(points.length * 6);
|
|
79
|
+
for (let i = 0; i < points.length; i += 1) {
|
|
80
|
+
const [x, z] = points[i];
|
|
81
|
+
const [nx, nz] = normalAt(points, i);
|
|
82
|
+
const lx = x + nx * half;
|
|
83
|
+
const lz = z + nz * half;
|
|
84
|
+
const rx = x - nx * half;
|
|
85
|
+
const rz = z - nz * half;
|
|
86
|
+
positions[i * 6] = lx;
|
|
87
|
+
positions[i * 6 + 1] = sampleHeight(lx, lz) + elevation;
|
|
88
|
+
positions[i * 6 + 2] = lz;
|
|
89
|
+
positions[i * 6 + 3] = rx;
|
|
90
|
+
positions[i * 6 + 4] = sampleHeight(rx, rz) + elevation;
|
|
91
|
+
positions[i * 6 + 5] = rz;
|
|
92
|
+
}
|
|
93
|
+
const indices = new Uint32Array((points.length - 1) * 6);
|
|
94
|
+
for (let i = 0; i < points.length - 1; i += 1) {
|
|
95
|
+
const a = i * 2;
|
|
96
|
+
indices[i * 6] = a;
|
|
97
|
+
indices[i * 6 + 1] = a + 1;
|
|
98
|
+
indices[i * 6 + 2] = a + 2;
|
|
99
|
+
indices[i * 6 + 3] = a + 1;
|
|
100
|
+
indices[i * 6 + 4] = a + 3;
|
|
101
|
+
indices[i * 6 + 5] = a + 2;
|
|
102
|
+
}
|
|
103
|
+
return { positions, indices };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Split a centerline into dash sub-polylines for lane markings: `dashLength` of painted line,
|
|
107
|
+
* `gapLength` of asphalt, repeated along the path's arc length. Feed each returned sub-path back
|
|
108
|
+
* through {@link buildRoadRibbon} with a thin width to mesh the dashes.
|
|
109
|
+
*/
|
|
110
|
+
export function dashSegments(path, dashLength = 3, gapLength = 3) {
|
|
111
|
+
if (path.length < 2 || dashLength <= 0 || gapLength < 0)
|
|
112
|
+
return [];
|
|
113
|
+
const cumulative = [0];
|
|
114
|
+
for (let i = 0; i < path.length - 1; i += 1) {
|
|
115
|
+
const a = path[i];
|
|
116
|
+
const b = path[i + 1];
|
|
117
|
+
cumulative.push(cumulative[i] + Math.hypot(b[0] - a[0], b[1] - a[1]));
|
|
118
|
+
}
|
|
119
|
+
const total = cumulative[cumulative.length - 1];
|
|
120
|
+
if (total <= 0)
|
|
121
|
+
return [];
|
|
122
|
+
const pointAt = (s) => {
|
|
123
|
+
const clamped = Math.max(0, Math.min(total, s));
|
|
124
|
+
let index = 0;
|
|
125
|
+
while (index < cumulative.length - 2 && cumulative[index + 1] < clamped)
|
|
126
|
+
index += 1;
|
|
127
|
+
const a = path[index];
|
|
128
|
+
const b = path[index + 1];
|
|
129
|
+
const segLength = cumulative[index + 1] - cumulative[index];
|
|
130
|
+
const t = segLength <= 0 ? 0 : (clamped - cumulative[index]) / segLength;
|
|
131
|
+
return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];
|
|
132
|
+
};
|
|
133
|
+
const period = dashLength + gapLength;
|
|
134
|
+
const dashes = [];
|
|
135
|
+
for (let start = 0; start < total; start += period) {
|
|
136
|
+
const end = Math.min(total, start + dashLength);
|
|
137
|
+
if (end - start < 1e-6)
|
|
138
|
+
break;
|
|
139
|
+
dashes.push([pointAt(start), pointAt(end)]);
|
|
140
|
+
if (period <= 0)
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
return dashes;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Closest-point query against a road centerline — the seam traffic AI, spawn placement, and
|
|
147
|
+
* "am I on the road" checks share. Returns null for a degenerate path.
|
|
148
|
+
*/
|
|
149
|
+
export function nearestOnPath(path, x, z) {
|
|
150
|
+
if (path.length < 2)
|
|
151
|
+
return null;
|
|
152
|
+
let best = null;
|
|
153
|
+
for (let i = 0; i < path.length - 1; i += 1) {
|
|
154
|
+
const a = path[i];
|
|
155
|
+
const b = path[i + 1];
|
|
156
|
+
const abx = b[0] - a[0];
|
|
157
|
+
const abz = b[1] - a[1];
|
|
158
|
+
const lengthSq = abx * abx + abz * abz;
|
|
159
|
+
const t = lengthSq === 0 ? 0 : Math.max(0, Math.min(1, ((x - a[0]) * abx + (z - a[1]) * abz) / lengthSq));
|
|
160
|
+
const px = a[0] + abx * t;
|
|
161
|
+
const pz = a[1] + abz * t;
|
|
162
|
+
const distance = Math.hypot(x - px, z - pz);
|
|
163
|
+
if (best === null || distance < best.distance) {
|
|
164
|
+
const length = Math.sqrt(lengthSq) || 1;
|
|
165
|
+
best = { point: [px, pz], distance, tangent: [abx / length, abz / length] };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return best;
|
|
169
|
+
}
|
|
170
|
+
/** True when the query point lies within half the road `width` of the centerline. */
|
|
171
|
+
export function isOnRoad(path, width, x, z) {
|
|
172
|
+
const sample = nearestOnPath(path, x, z);
|
|
173
|
+
return sample !== null && sample.distance <= width / 2;
|
|
174
|
+
}
|
|
175
|
+
/** Total arc length of a centerline in world units. */
|
|
176
|
+
export function pathLength(path) {
|
|
177
|
+
let total = 0;
|
|
178
|
+
for (let i = 0; i < path.length - 1; i += 1) {
|
|
179
|
+
const a = path[i];
|
|
180
|
+
const b = path[i + 1];
|
|
181
|
+
total += Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
182
|
+
}
|
|
183
|
+
return total;
|
|
184
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { type Aabb, type AvoidMasks, type AvoidZone, type Vec2 } from "./geometry.js";
|
|
2
|
+
import type { SceneDocumentLike, ScenePathLike } from "./sceneShapes.js";
|
|
3
|
+
import type { TerrainNormal } from "./terrain.js";
|
|
4
|
+
/** The editor path kind that marks a closed polyline as a foliage/scatter region. */
|
|
5
|
+
export declare const SCATTER_PATH_KIND = "scatter";
|
|
6
|
+
/** One species/prop in a scatter region's palette, with a relative spawn weight. */
|
|
7
|
+
export interface ScatterPaletteEntry {
|
|
8
|
+
item: string;
|
|
9
|
+
weight: number;
|
|
10
|
+
}
|
|
11
|
+
/** How a scatter region fills its polygon: density, spacing, variation, and masking rules. */
|
|
12
|
+
export interface ScatterRegionRules {
|
|
13
|
+
/** Items per square meter across the region's footprint. */
|
|
14
|
+
density: number;
|
|
15
|
+
/** Minimum spacing between placements in meters; 0 allows clumping. */
|
|
16
|
+
minSpacing: number;
|
|
17
|
+
/** Seed string — same seed reproduces the same field. */
|
|
18
|
+
seed: string;
|
|
19
|
+
minScale: number;
|
|
20
|
+
maxScale: number;
|
|
21
|
+
/** Yaw range in radians applied per placement. */
|
|
22
|
+
minYaw: number;
|
|
23
|
+
maxYaw: number;
|
|
24
|
+
/** Lift every instance by this many meters off the ground. */
|
|
25
|
+
verticalOffset: number;
|
|
26
|
+
/** Orient instances to the terrain normal instead of straight up. */
|
|
27
|
+
alignToNormal: boolean;
|
|
28
|
+
/** Reject placements on ground steeper than this slope (rise/run); 0 disables. */
|
|
29
|
+
maxSlope: number;
|
|
30
|
+
minHeight: number;
|
|
31
|
+
maxHeight: number;
|
|
32
|
+
/** Thin placements out within this many meters of the region edge; 0 disables. */
|
|
33
|
+
edgeFalloff: number;
|
|
34
|
+
/** Grid jitter 0..1 — 0 is a rigid lattice, 1 fully scattered. */
|
|
35
|
+
jitter: number;
|
|
36
|
+
/** Weighted species palette; falls back to a single `grass` entry. */
|
|
37
|
+
palette: readonly ScatterPaletteEntry[];
|
|
38
|
+
/** Explicit no-scatter clearance discs this region always honors (manual exclusion). */
|
|
39
|
+
avoid: readonly AvoidZone[];
|
|
40
|
+
/** Honor document-wide clearance zones (tagged markers/paths) too; false = manual `avoid` only. */
|
|
41
|
+
autoAvoid: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** Defaults a bare scatter region fills with: sparse grass, lightly spaced. */
|
|
44
|
+
export declare const SCATTER_DEFAULTS: ScatterRegionRules;
|
|
45
|
+
/** Default clearance radius (m) for an auto-avoided gameplay marker with no explicit `meta.clearance`. */
|
|
46
|
+
export declare const DEFAULT_MARKER_CLEARANCE = 3.5;
|
|
47
|
+
/** Marker/volume kinds that repel scatter and flatten terrain by default (spawns, objectives, vendors). */
|
|
48
|
+
export declare const DEFAULT_CLEARANCE_KINDS: readonly string[];
|
|
49
|
+
/** A resolvable scatter region: a closed polygon footprint plus its fill rules. */
|
|
50
|
+
export interface ScatterRegion {
|
|
51
|
+
id: string;
|
|
52
|
+
polygon: readonly Vec2[];
|
|
53
|
+
rules: ScatterRegionRules;
|
|
54
|
+
}
|
|
55
|
+
/** A single placed scatter instance — grounded world position plus per-instance variation. */
|
|
56
|
+
export interface ScatterInstance {
|
|
57
|
+
id: string;
|
|
58
|
+
regionId: string;
|
|
59
|
+
item: string;
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
z: number;
|
|
63
|
+
rotationY: number;
|
|
64
|
+
scale: number;
|
|
65
|
+
normal?: TerrainNormal;
|
|
66
|
+
}
|
|
67
|
+
/** Ground sampler a scatter resolve reads height/normal from (the sculpt terrain or the game's ground). */
|
|
68
|
+
export interface ScatterTerrain {
|
|
69
|
+
sampleHeight(x: number, z: number): number;
|
|
70
|
+
sampleNormal(x: number, z: number): TerrainNormal;
|
|
71
|
+
}
|
|
72
|
+
/** Ray-casting point-in-polygon test on the XZ plane. */
|
|
73
|
+
export declare function pointInPolygon(point: Vec2, polygon: readonly Vec2[]): boolean;
|
|
74
|
+
/** Shortest distance from a point to a polygon's boundary. */
|
|
75
|
+
export declare function distanceToPolygonEdge(point: Vec2, polygon: readonly Vec2[]): number;
|
|
76
|
+
/** Axis-aligned bounds of a polygon, or null if it has no points. */
|
|
77
|
+
export declare function polygonBounds(polygon: readonly Vec2[]): Aabb | null;
|
|
78
|
+
/** Shoelace area of a polygon (always non-negative), in square meters. */
|
|
79
|
+
export declare function polygonArea(polygon: readonly Vec2[]): number;
|
|
80
|
+
/**
|
|
81
|
+
* Deterministic placements for one scatter region: scatter its polygon footprint at `density`
|
|
82
|
+
* items/m² (respecting `minSpacing`), clip to the polygon, thin near the edge, drop placements
|
|
83
|
+
* outside the slope/height mask, and derive item/scale/yaw from the region id + seed — so the same
|
|
84
|
+
* saved region always grows the same field. Grounds each instance on `terrain` when provided.
|
|
85
|
+
*/
|
|
86
|
+
export declare function resolveScatterRegion(region: ScatterRegion, terrain?: ScatterTerrain, avoid?: AvoidMasks): ScatterInstance[];
|
|
87
|
+
/** Parses a scatter region's palette from meta: a weighted `palette` array, else a single `item`. */
|
|
88
|
+
export declare function readScatterPalette(meta: Record<string, unknown> | undefined): ScatterPaletteEntry[];
|
|
89
|
+
/** True when an editor path is a foliage/scatter region. */
|
|
90
|
+
export declare function isScatterPath(path: ScenePathLike): boolean;
|
|
91
|
+
/** The path's scatter rules with defaults filled in; null for non-scatter paths. */
|
|
92
|
+
export declare function readScatterRules(path: ScenePathLike): ScatterRegionRules | null;
|
|
93
|
+
/**
|
|
94
|
+
* Parses a region's manual clearance discs from `meta.avoid` (array of {x,z,radius,feather?}).
|
|
95
|
+
* @internal — used by `readScatterRules`; games author `avoid` through the region inspector.
|
|
96
|
+
*/
|
|
97
|
+
export declare function readAvoidZones(meta: Record<string, unknown> | undefined): AvoidZone[];
|
|
98
|
+
/** Builds a resolvable {@link ScatterRegion} from a scatter path (XZ polygon + rules), or null. */
|
|
99
|
+
export declare function scatterRegionFromPath(path: ScenePathLike): ScatterRegion | null;
|
|
100
|
+
/** Estimated placement count for a scatter path — density × polygon area, for a live UI readout. */
|
|
101
|
+
export declare function scatterRegionEstimate(path: ScenePathLike): {
|
|
102
|
+
area: number;
|
|
103
|
+
count: number;
|
|
104
|
+
};
|
|
105
|
+
/** Controls which gameplay objects auto-repel scatter (and, for markers, flatten terrain). */
|
|
106
|
+
export interface ClearanceOptions {
|
|
107
|
+
/** Marker/volume/path kinds that auto-clear even without a `meta.clearance` tag. Default {@link DEFAULT_CLEARANCE_KINDS}. */
|
|
108
|
+
kinds?: readonly string[];
|
|
109
|
+
/** Restrict auto-clearing to these object ids only (any kind); overrides `kinds` when set. */
|
|
110
|
+
ids?: readonly string[];
|
|
111
|
+
/** Clearance radius (m) for a kind-matched object with no explicit tag. Default {@link DEFAULT_MARKER_CLEARANCE}. */
|
|
112
|
+
defaultClearance?: number;
|
|
113
|
+
/** Soft outer band (m) on every derived zone/corridor. Default 2. */
|
|
114
|
+
feather?: number;
|
|
115
|
+
/** Include a corridor along non-scatter paths (roads/routes) in {@link clearanceMasksFrom}. Default true. */
|
|
116
|
+
includePaths?: boolean;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Point-pad clearance **discs** from a document's markers/volumes — the terrain-flatten set (spawns,
|
|
120
|
+
* plots, POIs get a level pad). A marker/volume contributes a disc when it carries `meta.clearance`
|
|
121
|
+
* or its kind is in `kinds`. Paths are *not* included (they render draped, never flattened — see
|
|
122
|
+
* {@link clearanceMasksFrom} for their foliage corridor). Pass `ids`/`kinds` to scope it.
|
|
123
|
+
*/
|
|
124
|
+
export declare function clearanceZonesFrom(doc: SceneDocumentLike, options?: ClearanceOptions): AvoidZone[];
|
|
125
|
+
/**
|
|
126
|
+
* The full clearance region for scatter avoidance: point-pad {@link clearanceZonesFrom} **discs**
|
|
127
|
+
* plus clean-edged **corridors** along non-scatter paths (each `halfWidth` = `path.width/2 +
|
|
128
|
+
* clearance`). Corridors give a straight tree-line along a road instead of a scalloped disc chain —
|
|
129
|
+
* this is what `resolveScatter` auto-avoids. Set `includePaths: false` to drop the path corridors.
|
|
130
|
+
* @internal — `resolveScatter` builds these automatically; games rarely call it directly.
|
|
131
|
+
*/
|
|
132
|
+
export declare function clearanceMasksFrom(doc: SceneDocumentLike, options?: ClearanceOptions): AvoidMasks;
|
|
133
|
+
/** Extra inputs for {@link resolveScatter}: manual discs plus the auto-clearance toggle/scoping. */
|
|
134
|
+
export interface ResolveScatterOptions extends ClearanceOptions {
|
|
135
|
+
/** Additional clearance discs applied to every region regardless of per-region `autoAvoid`. */
|
|
136
|
+
avoid?: readonly AvoidZone[];
|
|
137
|
+
/** Master switch for document-derived auto-clearance; false = per-region `avoid` (and `options.avoid`) only. */
|
|
138
|
+
autoAvoid?: boolean;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Every scatter region's placements across a document, grounded on `terrain` when provided. Regions
|
|
142
|
+
* honor clearance masks: their own manual `avoid` discs, plus (when the region's `autoAvoid` is on and
|
|
143
|
+
* `options.autoAvoid !== false`) the document-wide discs + path corridors from {@link clearanceMasksFrom}
|
|
144
|
+
* — so foliage auto-clears spawns, plots, and paths without hand-carving the polygon.
|
|
145
|
+
*/
|
|
146
|
+
export declare function resolveScatter(doc: SceneDocumentLike, terrain?: ScatterTerrain, options?: ResolveScatterOptions): ScatterInstance[];
|
|
147
|
+
/** A spatial bucket of scatter instances — one draw unit the renderer can frustum-cull as a whole. */
|
|
148
|
+
export interface ScatterChunk {
|
|
149
|
+
/** `gx:gz` grid key of the chunk. */
|
|
150
|
+
key: string;
|
|
151
|
+
/** Chunk minimum XZ corner in world space. */
|
|
152
|
+
min: Vec2;
|
|
153
|
+
/** Chunk edge length in meters. */
|
|
154
|
+
size: number;
|
|
155
|
+
instances: ScatterInstance[];
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Buckets scatter instances into a uniform XZ grid of `chunkSize`-meter cells, so a dense region
|
|
159
|
+
* renders as many small draw units instead of one huge mesh — each chunk carries its own bounds and
|
|
160
|
+
* is frustum-culled independently, and offscreen chunks cost nothing. Empty chunks are omitted;
|
|
161
|
+
* order is deterministic (row-major by grid coordinate).
|
|
162
|
+
* @internal — the chunking behind the `InstancedScatter` renderer; not called directly by games.
|
|
163
|
+
*/
|
|
164
|
+
export declare function chunkScatterInstances(instances: readonly ScatterInstance[], chunkSize: number): ScatterChunk[];
|