@driftengine/core 3.61.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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +9 -0
- package/dist/behavior/behaviorTree.d.ts +140 -0
- package/dist/behavior/behaviorTree.js +289 -0
- package/dist/build/shaderComments.d.ts +64 -0
- package/dist/build/shaderComments.js +0 -0
- package/dist/cinematic/player.d.ts +80 -0
- package/dist/cinematic/player.js +184 -0
- package/dist/cinematic/script.d.ts +63 -0
- package/dist/cinematic/script.js +141 -0
- package/dist/core/bootGate.d.ts +37 -0
- package/dist/core/bootGate.js +47 -0
- package/dist/core/loadTracker.d.ts +78 -0
- package/dist/core/loadTracker.js +106 -0
- package/dist/core/loop.d.ts +118 -0
- package/dist/core/loop.js +84 -0
- package/dist/core/messageQueue.d.ts +61 -0
- package/dist/core/messageQueue.js +104 -0
- package/dist/core/onceSet.d.ts +27 -0
- package/dist/core/onceSet.js +62 -0
- package/dist/core/preferences.d.ts +47 -0
- package/dist/core/preferences.js +140 -0
- package/dist/core/remoteSave.d.ts +154 -0
- package/dist/core/remoteSave.js +249 -0
- package/dist/core/rng.d.ts +64 -0
- package/dist/core/rng.js +72 -0
- package/dist/core/stepBudget.d.ts +91 -0
- package/dist/core/stepBudget.js +105 -0
- package/dist/core/storage.d.ts +52 -0
- package/dist/core/storage.js +85 -0
- package/dist/core/tickTrace.d.ts +72 -0
- package/dist/core/tickTrace.js +102 -0
- package/dist/core/timeCurve.d.ts +83 -0
- package/dist/core/timeCurve.js +107 -0
- package/dist/core/withDefaults.d.ts +21 -0
- package/dist/core/withDefaults.js +29 -0
- package/dist/dev/contactProbe.d.ts +41 -0
- package/dist/dev/contactProbe.js +58 -0
- package/dist/dev/fpsMeter.d.ts +45 -0
- package/dist/dev/fpsMeter.js +86 -0
- package/dist/environment/celestialClock.d.ts +141 -0
- package/dist/environment/celestialClock.js +262 -0
- package/dist/geometry/decal.d.ts +61 -0
- package/dist/geometry/decal.js +178 -0
- package/dist/geometry/filmPatch.d.ts +35 -0
- package/dist/geometry/filmPatch.js +112 -0
- package/dist/geometry/growable.d.ts +70 -0
- package/dist/geometry/growable.js +167 -0
- package/dist/geometry/lightVolume.d.ts +76 -0
- package/dist/geometry/lightVolume.js +65 -0
- package/dist/geometry/meshBuilder.d.ts +426 -0
- package/dist/geometry/meshBuilder.js +1184 -0
- package/dist/geometry/pixelFont.d.ts +59 -0
- package/dist/geometry/pixelFont.js +179 -0
- package/dist/geometry/ribbon.d.ts +101 -0
- package/dist/geometry/ribbon.js +546 -0
- package/dist/geometry/shellFill.d.ts +101 -0
- package/dist/geometry/shellFill.js +203 -0
- package/dist/geometry/spline.d.ts +162 -0
- package/dist/geometry/spline.js +527 -0
- package/dist/geometry/tangents.d.ts +30 -0
- package/dist/geometry/tangents.js +142 -0
- package/dist/geometry/textMesh.d.ts +51 -0
- package/dist/geometry/textMesh.js +57 -0
- package/dist/geometry/treeBuilder.d.ts +37 -0
- package/dist/geometry/treeBuilder.js +56 -0
- package/dist/host/display.d.ts +135 -0
- package/dist/host/display.js +114 -0
- package/dist/host/files.d.ts +25 -0
- package/dist/host/files.js +44 -0
- package/dist/host/lifecycle.d.ts +45 -0
- package/dist/host/lifecycle.js +28 -0
- package/dist/host/platformServices.d.ts +23 -0
- package/dist/host/platformServices.js +1 -0
- package/dist/host/screen.d.ts +49 -0
- package/dist/host/screen.js +90 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.js +320 -0
- package/dist/input/actionMap.d.ts +181 -0
- package/dist/input/actionMap.js +314 -0
- package/dist/input/activeDevice.d.ts +55 -0
- package/dist/input/activeDevice.js +83 -0
- package/dist/input/gamepadIdentity.d.ts +43 -0
- package/dist/input/gamepadIdentity.js +108 -0
- package/dist/input/gamepadMapping.d.ts +56 -0
- package/dist/input/gamepadMapping.js +91 -0
- package/dist/input/input.d.ts +281 -0
- package/dist/input/input.js +703 -0
- package/dist/input/inputHarness.d.ts +42 -0
- package/dist/input/inputHarness.js +193 -0
- package/dist/input/rightGesture.d.ts +57 -0
- package/dist/input/rightGesture.js +49 -0
- package/dist/input/rumble.d.ts +71 -0
- package/dist/input/rumble.js +119 -0
- package/dist/input/touchControls.d.ts +138 -0
- package/dist/input/touchControls.js +352 -0
- package/dist/input/typingTarget.d.ts +6 -0
- package/dist/input/typingTarget.js +27 -0
- package/dist/math/bounds.d.ts +61 -0
- package/dist/math/bounds.js +121 -0
- package/dist/math/color.d.ts +8 -0
- package/dist/math/color.js +35 -0
- package/dist/math/exact.d.ts +66 -0
- package/dist/math/exact.js +262 -0
- package/dist/math/frustum.d.ts +44 -0
- package/dist/math/frustum.js +90 -0
- package/dist/math/intersect.d.ts +76 -0
- package/dist/math/intersect.js +185 -0
- package/dist/math/scalar.d.ts +51 -0
- package/dist/math/scalar.js +99 -0
- package/dist/math/spring.d.ts +59 -0
- package/dist/math/spring.js +88 -0
- package/dist/nav/navGraph.d.ts +71 -0
- package/dist/nav/navGraph.js +111 -0
- package/dist/nav/navPath.d.ts +93 -0
- package/dist/nav/navPath.js +162 -0
- package/dist/nav/navSearch.d.ts +74 -0
- package/dist/nav/navSearch.js +198 -0
- package/dist/physics/boxSurface.d.ts +48 -0
- package/dist/physics/boxSurface.js +73 -0
- package/dist/physics/colliderSurface.d.ts +46 -0
- package/dist/physics/colliderSurface.js +146 -0
- package/dist/physics/compositeSurface.d.ts +33 -0
- package/dist/physics/compositeSurface.js +108 -0
- package/dist/physics/heightSurface.d.ts +103 -0
- package/dist/physics/heightSurface.js +153 -0
- package/dist/physics/ribbonSurface.d.ts +239 -0
- package/dist/physics/ribbonSurface.js +522 -0
- package/dist/render/ambientOcclusionPass.d.ts +53 -0
- package/dist/render/ambientOcclusionPass.js +179 -0
- package/dist/render/areaLights.d.ts +116 -0
- package/dist/render/areaLights.js +91 -0
- package/dist/render/areaShadowSet.d.ts +184 -0
- package/dist/render/areaShadowSet.js +277 -0
- package/dist/render/atmosphere.d.ts +94 -0
- package/dist/render/atmosphere.js +91 -0
- package/dist/render/backend/api.d.ts +496 -0
- package/dist/render/backend/api.js +1 -0
- package/dist/render/backend/budget.d.ts +82 -0
- package/dist/render/backend/budget.js +99 -0
- package/dist/render/backend/createRenderer.d.ts +135 -0
- package/dist/render/backend/createRenderer.js +201 -0
- package/dist/render/backend/deadline.d.ts +24 -0
- package/dist/render/backend/deadline.js +38 -0
- package/dist/render/backend/probe.d.ts +30 -0
- package/dist/render/backend/probe.js +129 -0
- package/dist/render/backend/select.d.ts +70 -0
- package/dist/render/backend/select.js +249 -0
- package/dist/render/backend/timer.d.ts +50 -0
- package/dist/render/backend/timer.js +1 -0
- package/dist/render/backend/webgl2/instanced.d.ts +21 -0
- package/dist/render/backend/webgl2/instanced.js +42 -0
- package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
- package/dist/render/backend/webgl2/morphTexture.js +55 -0
- package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
- package/dist/render/backend/webgl2/renderer.js +6041 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
- package/dist/render/backend/webgpu/boltPass.js +160 -0
- package/dist/render/backend/webgpu/buffers.d.ts +159 -0
- package/dist/render/backend/webgpu/buffers.js +402 -0
- package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
- package/dist/render/backend/webgpu/causticsPass.js +138 -0
- package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
- package/dist/render/backend/webgpu/clusterBinner.js +206 -0
- package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
- package/dist/render/backend/webgpu/depthPass.js +228 -0
- package/dist/render/backend/webgpu/device.d.ts +52 -0
- package/dist/render/backend/webgpu/device.js +121 -0
- package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
- package/dist/render/backend/webgpu/drawCommand.js +54 -0
- package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
- package/dist/render/backend/webgpu/environmentTexels.js +79 -0
- package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
- package/dist/render/backend/webgpu/filmPass.js +97 -0
- package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
- package/dist/render/backend/webgpu/flatPass.js +482 -0
- package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
- package/dist/render/backend/webgpu/flockPass.js +129 -0
- package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
- package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
- package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
- package/dist/render/backend/webgpu/insetPass.js +108 -0
- package/dist/render/backend/webgpu/instanced.d.ts +27 -0
- package/dist/render/backend/webgpu/instanced.js +49 -0
- package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
- package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
- package/dist/render/backend/webgpu/linePass.d.ts +90 -0
- package/dist/render/backend/webgpu/linePass.js +220 -0
- package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
- package/dist/render/backend/webgpu/morphTexture.js +51 -0
- package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
- package/dist/render/backend/webgpu/panelPass.js +114 -0
- package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
- package/dist/render/backend/webgpu/particlePass.js +280 -0
- package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
- package/dist/render/backend/webgpu/pipelineCache.js +140 -0
- package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
- package/dist/render/backend/webgpu/plumePass.js +213 -0
- package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
- package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
- package/dist/render/backend/webgpu/postPass.d.ts +342 -0
- package/dist/render/backend/webgpu/postPass.js +366 -0
- package/dist/render/backend/webgpu/probePass.d.ts +108 -0
- package/dist/render/backend/webgpu/probePass.js +188 -0
- package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
- package/dist/render/backend/webgpu/reflectionPass.js +87 -0
- package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
- package/dist/render/backend/webgpu/renderer.js +10911 -0
- package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
- package/dist/render/backend/webgpu/scatterPass.js +266 -0
- package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
- package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
- package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
- package/dist/render/backend/webgpu/shaderModules.js +45 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
- package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
- package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
- package/dist/render/backend/webgpu/skyPass.js +70 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
- package/dist/render/backend/webgpu/textPass.d.ts +73 -0
- package/dist/render/backend/webgpu/textPass.js +190 -0
- package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
- package/dist/render/backend/webgpu/uniformRing.js +208 -0
- package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
- package/dist/render/backend/webgpu/waterPass.js +160 -0
- package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
- package/dist/render/backend/webgpu/windStreakPass.js +153 -0
- package/dist/render/billboard.d.ts +27 -0
- package/dist/render/billboard.js +79 -0
- package/dist/render/bloomChain.d.ts +66 -0
- package/dist/render/bloomChain.js +83 -0
- package/dist/render/bloomPass.d.ts +54 -0
- package/dist/render/bloomPass.js +219 -0
- package/dist/render/boltBatch.d.ts +39 -0
- package/dist/render/boltBatch.js +121 -0
- package/dist/render/boltPool.d.ts +135 -0
- package/dist/render/boltPool.js +259 -0
- package/dist/render/boom.d.ts +46 -0
- package/dist/render/boom.js +81 -0
- package/dist/render/camera.d.ts +119 -0
- package/dist/render/camera.js +304 -0
- package/dist/render/causticsRenderer.d.ts +63 -0
- package/dist/render/causticsRenderer.js +119 -0
- package/dist/render/cinematicCamera.d.ts +102 -0
- package/dist/render/cinematicCamera.js +227 -0
- package/dist/render/clusteredLights.d.ts +260 -0
- package/dist/render/clusteredLights.js +479 -0
- package/dist/render/colourGrade.d.ts +62 -0
- package/dist/render/colourGrade.js +91 -0
- package/dist/render/compute.d.ts +74 -0
- package/dist/render/compute.js +8 -0
- package/dist/render/contextLoss.d.ts +32 -0
- package/dist/render/contextLoss.js +46 -0
- package/dist/render/debugLines.d.ts +75 -0
- package/dist/render/debugLines.js +281 -0
- package/dist/render/decalPass.d.ts +34 -0
- package/dist/render/decalPass.js +103 -0
- package/dist/render/decalProjector.d.ts +140 -0
- package/dist/render/decalProjector.js +282 -0
- package/dist/render/decalQueue.d.ts +53 -0
- package/dist/render/decalQueue.js +87 -0
- package/dist/render/depthConvention.d.ts +314 -0
- package/dist/render/depthConvention.js +346 -0
- package/dist/render/drawingBuffer.d.ts +52 -0
- package/dist/render/drawingBuffer.js +67 -0
- package/dist/render/emptyTexture.d.ts +60 -0
- package/dist/render/emptyTexture.js +103 -0
- package/dist/render/envProbeArray.d.ts +85 -0
- package/dist/render/envProbeArray.js +164 -0
- package/dist/render/equirectToCube.d.ts +54 -0
- package/dist/render/equirectToCube.js +123 -0
- package/dist/render/flockGeometry.d.ts +23 -0
- package/dist/render/flockGeometry.js +43 -0
- package/dist/render/flockRenderer.d.ts +37 -0
- package/dist/render/flockRenderer.js +70 -0
- package/dist/render/frame/arena.d.ts +32 -0
- package/dist/render/frame/arena.js +65 -0
- package/dist/render/frame/index.d.ts +18 -0
- package/dist/render/frame/index.js +4 -0
- package/dist/render/frame/replay.d.ts +34 -0
- package/dist/render/frame/replay.js +48 -0
- package/dist/render/frame/resources.d.ts +25 -0
- package/dist/render/frame/resources.js +55 -0
- package/dist/render/frame/schedule.d.ts +37 -0
- package/dist/render/frame/schedule.js +61 -0
- package/dist/render/frameView.d.ts +19 -0
- package/dist/render/frameView.js +1 -0
- package/dist/render/gizmo.d.ts +236 -0
- package/dist/render/gizmo.js +727 -0
- package/dist/render/globalMedium.d.ts +124 -0
- package/dist/render/globalMedium.js +100 -0
- package/dist/render/globalMediumPass.d.ts +101 -0
- package/dist/render/globalMediumPass.js +250 -0
- package/dist/render/gpuCapability.d.ts +111 -0
- package/dist/render/gpuCapability.js +194 -0
- package/dist/render/gpuTimer.d.ts +87 -0
- package/dist/render/gpuTimer.js +145 -0
- package/dist/render/halfFloat.d.ts +4 -0
- package/dist/render/halfFloat.js +38 -0
- package/dist/render/handleRegistry.d.ts +54 -0
- package/dist/render/handleRegistry.js +84 -0
- package/dist/render/iesProfile.d.ts +64 -0
- package/dist/render/iesProfile.js +179 -0
- package/dist/render/imageTexels.d.ts +50 -0
- package/dist/render/imageTexels.js +91 -0
- package/dist/render/instancedMesh.d.ts +48 -0
- package/dist/render/instancedMesh.js +127 -0
- package/dist/render/instances.d.ts +69 -0
- package/dist/render/instances.js +52 -0
- package/dist/render/lightBudget.d.ts +397 -0
- package/dist/render/lightBudget.js +524 -0
- package/dist/render/lightMatrix.d.ts +3 -0
- package/dist/render/lightMatrix.js +45 -0
- package/dist/render/lightVolumeDraw.d.ts +132 -0
- package/dist/render/lightVolumeDraw.js +181 -0
- package/dist/render/lineBatch.d.ts +60 -0
- package/dist/render/lineBatch.js +160 -0
- package/dist/render/linePoints.d.ts +33 -0
- package/dist/render/linePoints.js +46 -0
- package/dist/render/livePointShadowSet.d.ts +72 -0
- package/dist/render/livePointShadowSet.js +258 -0
- package/dist/render/lod.d.ts +35 -0
- package/dist/render/lod.js +65 -0
- package/dist/render/mesh.d.ts +177 -0
- package/dist/render/mesh.js +466 -0
- package/dist/render/occlusion.d.ts +81 -0
- package/dist/render/occlusion.js +378 -0
- package/dist/render/oitPass.d.ts +67 -0
- package/dist/render/oitPass.js +213 -0
- package/dist/render/orderIndependent.d.ts +92 -0
- package/dist/render/orderIndependent.js +108 -0
- package/dist/render/particleBatch.d.ts +140 -0
- package/dist/render/particleBatch.js +186 -0
- package/dist/render/particleMaterial.d.ts +54 -0
- package/dist/render/particleMaterial.js +42 -0
- package/dist/render/particlePool.d.ts +124 -0
- package/dist/render/particlePool.js +182 -0
- package/dist/render/pass.d.ts +195 -0
- package/dist/render/pass.js +9 -0
- package/dist/render/passTarget.d.ts +86 -0
- package/dist/render/passTarget.js +121 -0
- package/dist/render/pickable.d.ts +31 -0
- package/dist/render/pickable.js +172 -0
- package/dist/render/planarReflection.d.ts +59 -0
- package/dist/render/planarReflection.js +194 -0
- package/dist/render/planarReflectionDraw.d.ts +31 -0
- package/dist/render/planarReflectionDraw.js +65 -0
- package/dist/render/plumeGeometry.d.ts +25 -0
- package/dist/render/plumeGeometry.js +61 -0
- package/dist/render/plumeMaterial.d.ts +31 -0
- package/dist/render/plumeMaterial.js +64 -0
- package/dist/render/plumeRenderer.d.ts +96 -0
- package/dist/render/plumeRenderer.js +185 -0
- package/dist/render/pointLightSelection.d.ts +175 -0
- package/dist/render/pointLightSelection.js +301 -0
- package/dist/render/pointShadowArray.d.ts +95 -0
- package/dist/render/pointShadowArray.js +219 -0
- package/dist/render/pointShadowBudget.d.ts +118 -0
- package/dist/render/pointShadowBudget.js +221 -0
- package/dist/render/pointShadowImage.d.ts +265 -0
- package/dist/render/pointShadowImage.js +339 -0
- package/dist/render/pointShadowMap.d.ts +93 -0
- package/dist/render/pointShadowMap.js +167 -0
- package/dist/render/pointShadowSystem.d.ts +195 -0
- package/dist/render/pointShadowSystem.js +336 -0
- package/dist/render/prefilterEnvMap.d.ts +124 -0
- package/dist/render/prefilterEnvMap.js +146 -0
- package/dist/render/prefilterPass.d.ts +44 -0
- package/dist/render/prefilterPass.js +98 -0
- package/dist/render/probeGrid.d.ts +122 -0
- package/dist/render/probeGrid.js +174 -0
- package/dist/render/rainField.d.ts +99 -0
- package/dist/render/rainField.js +168 -0
- package/dist/render/reflectionProbe.d.ts +188 -0
- package/dist/render/reflectionProbe.js +437 -0
- package/dist/render/renderQuality.d.ts +699 -0
- package/dist/render/renderQuality.js +293 -0
- package/dist/render/rendererHarness.d.ts +39 -0
- package/dist/render/rendererHarness.js +185 -0
- package/dist/render/resolutionGovernor.d.ts +107 -0
- package/dist/render/resolutionGovernor.js +144 -0
- package/dist/render/scatterDeform.d.ts +17 -0
- package/dist/render/scatterDeform.js +46 -0
- package/dist/render/sceneTarget.d.ts +288 -0
- package/dist/render/sceneTarget.js +856 -0
- package/dist/render/screenSpaceReflection.d.ts +233 -0
- package/dist/render/screenSpaceReflection.js +415 -0
- package/dist/render/sdfFont.d.ts +77 -0
- package/dist/render/sdfFont.js +86 -0
- package/dist/render/sdfTextLayout.d.ts +46 -0
- package/dist/render/sdfTextLayout.js +145 -0
- package/dist/render/sdfTextRenderer.d.ts +75 -0
- package/dist/render/sdfTextRenderer.js +194 -0
- package/dist/render/seaState.d.ts +25 -0
- package/dist/render/seaState.js +34 -0
- package/dist/render/segmentQuads.d.ts +29 -0
- package/dist/render/segmentQuads.js +75 -0
- package/dist/render/shader.d.ts +5 -0
- package/dist/render/shader.js +172 -0
- package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
- package/dist/render/shaders/ambientOcclusion.js +352 -0
- package/dist/render/shaders/arcane.d.ts +19 -0
- package/dist/render/shaders/arcane.js +102 -0
- package/dist/render/shaders/bloom.d.ts +70 -0
- package/dist/render/shaders/bloom.js +227 -0
- package/dist/render/shaders/bolt.d.ts +17 -0
- package/dist/render/shaders/bolt.js +161 -0
- package/dist/render/shaders/caustics.d.ts +38 -0
- package/dist/render/shaders/caustics.js +167 -0
- package/dist/render/shaders/conditionals.d.ts +21 -0
- package/dist/render/shaders/conditionals.js +55 -0
- package/dist/render/shaders/decalProject.d.ts +25 -0
- package/dist/render/shaders/decalProject.js +125 -0
- package/dist/render/shaders/depth.d.ts +14 -0
- package/dist/render/shaders/depth.js +114 -0
- package/dist/render/shaders/depthOfField.d.ts +41 -0
- package/dist/render/shaders/depthOfField.js +139 -0
- package/dist/render/shaders/film.d.ts +15 -0
- package/dist/render/shaders/film.js +283 -0
- package/dist/render/shaders/fire.d.ts +12 -0
- package/dist/render/shaders/fire.js +178 -0
- package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
- package/dist/render/shaders/flat/directionalShadow.js +195 -0
- package/dist/render/shaders/flat/index.d.ts +135 -0
- package/dist/render/shaders/flat/index.js +387 -0
- package/dist/render/shaders/flat/lobes.d.ts +1 -0
- package/dist/render/shaders/flat/lobes.js +398 -0
- package/dist/render/shaders/flat/main.d.ts +2 -0
- package/dist/render/shaders/flat/main.js +1630 -0
- package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
- package/dist/render/shaders/flat/pointShadow.js +322 -0
- package/dist/render/shaders/flat/preamble.d.ts +15 -0
- package/dist/render/shaders/flat/preamble.js +864 -0
- package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
- package/dist/render/shaders/flat/probeGrid.js +151 -0
- package/dist/render/shaders/flat/surface.d.ts +2 -0
- package/dist/render/shaders/flat/surface.js +40 -0
- package/dist/render/shaders/flock.d.ts +11 -0
- package/dist/render/shaders/flock.js +102 -0
- package/dist/render/shaders/fog.d.ts +37 -0
- package/dist/render/shaders/fog.js +98 -0
- package/dist/render/shaders/fullscreen.d.ts +16 -0
- package/dist/render/shaders/fullscreen.js +27 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
- package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
- package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
- package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
- package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
- package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
- package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
- package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/depth.wgsl.js +137 -0
- package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
- package/dist/render/shaders/generated/film.wgsl.js +140 -0
- package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/fire.wgsl.js +134 -0
- package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
- package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
- package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/flock.wgsl.js +79 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
- package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/line.wgsl.js +134 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
- package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
- package/dist/render/shaders/generated/panel.wgsl.js +54 -0
- package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
- package/dist/render/shaders/generated/particle.wgsl.js +338 -0
- package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
- package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/rush.wgsl.js +137 -0
- package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
- package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
- package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
- package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
- package/dist/render/shaders/generated/sky.wgsl.js +106 -0
- package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
- package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
- package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
- package/dist/render/shaders/generated/text.wgsl.js +104 -0
- package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
- package/dist/render/shaders/generated/water.wgsl.js +253 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
- package/dist/render/shaders/gerstner.d.ts +21 -0
- package/dist/render/shaders/gerstner.js +110 -0
- package/dist/render/shaders/globalMedium.d.ts +56 -0
- package/dist/render/shaders/globalMedium.js +393 -0
- package/dist/render/shaders/lightVolume.d.ts +61 -0
- package/dist/render/shaders/lightVolume.js +527 -0
- package/dist/render/shaders/line.d.ts +18 -0
- package/dist/render/shaders/line.js +122 -0
- package/dist/render/shaders/morph.d.ts +26 -0
- package/dist/render/shaders/morph.js +61 -0
- package/dist/render/shaders/octahedral.d.ts +76 -0
- package/dist/render/shaders/octahedral.js +161 -0
- package/dist/render/shaders/octahedralResolve.d.ts +25 -0
- package/dist/render/shaders/octahedralResolve.js +81 -0
- package/dist/render/shaders/oitResolve.d.ts +17 -0
- package/dist/render/shaders/oitResolve.js +42 -0
- package/dist/render/shaders/outputTransform.d.ts +37 -0
- package/dist/render/shaders/outputTransform.js +106 -0
- package/dist/render/shaders/panel.d.ts +17 -0
- package/dist/render/shaders/panel.js +50 -0
- package/dist/render/shaders/particle.d.ts +82 -0
- package/dist/render/shaders/particle.js +431 -0
- package/dist/render/shaders/prefilter.d.ts +37 -0
- package/dist/render/shaders/prefilter.js +276 -0
- package/dist/render/shaders/rush.d.ts +21 -0
- package/dist/render/shaders/rush.js +355 -0
- package/dist/render/shaders/scatter.d.ts +14 -0
- package/dist/render/shaders/scatter.js +206 -0
- package/dist/render/shaders/sdfText.d.ts +9 -0
- package/dist/render/shaders/sdfText.js +65 -0
- package/dist/render/shaders/skinning.d.ts +17 -0
- package/dist/render/shaders/skinning.js +59 -0
- package/dist/render/shaders/sky.d.ts +10 -0
- package/dist/render/shaders/sky.js +242 -0
- package/dist/render/shaders/smoke.d.ts +8 -0
- package/dist/render/shaders/smoke.js +88 -0
- package/dist/render/shaders/ssrResolve.d.ts +15 -0
- package/dist/render/shaders/ssrResolve.js +28 -0
- package/dist/render/shaders/ssrTrace.d.ts +22 -0
- package/dist/render/shaders/ssrTrace.js +230 -0
- package/dist/render/shaders/tangentFrame.d.ts +17 -0
- package/dist/render/shaders/tangentFrame.js +70 -0
- package/dist/render/shaders/temporalResolve.d.ts +1 -0
- package/dist/render/shaders/temporalResolve.js +150 -0
- package/dist/render/shaders/text.d.ts +17 -0
- package/dist/render/shaders/text.js +155 -0
- package/dist/render/shaders/vertexChannel.d.ts +39 -0
- package/dist/render/shaders/vertexChannel.js +69 -0
- package/dist/render/shaders/water.d.ts +18 -0
- package/dist/render/shaders/water.js +354 -0
- package/dist/render/shaders/windStreaks.d.ts +14 -0
- package/dist/render/shaders/windStreaks.js +129 -0
- package/dist/render/shadowCasters.d.ts +107 -0
- package/dist/render/shadowCasters.js +1 -0
- package/dist/render/shadowMap.d.ts +10 -0
- package/dist/render/shadowMap.js +80 -0
- package/dist/render/shotPlacement.d.ts +80 -0
- package/dist/render/shotPlacement.js +183 -0
- package/dist/render/skinPalette.d.ts +90 -0
- package/dist/render/skinPalette.js +136 -0
- package/dist/render/ssrPass.d.ts +59 -0
- package/dist/render/ssrPass.js +196 -0
- package/dist/render/surfaceSheet.d.ts +52 -0
- package/dist/render/surfaceSheet.js +99 -0
- package/dist/render/surfaceTexture.d.ts +197 -0
- package/dist/render/surfaceTexture.js +116 -0
- package/dist/render/temporalAa.d.ts +104 -0
- package/dist/render/temporalAa.js +194 -0
- package/dist/render/temporalPass.d.ts +54 -0
- package/dist/render/temporalPass.js +135 -0
- package/dist/render/textLayout.d.ts +88 -0
- package/dist/render/textLayout.js +201 -0
- package/dist/render/textRenderer.d.ts +32 -0
- package/dist/render/textRenderer.js +176 -0
- package/dist/render/thirdPersonCamera.d.ts +272 -0
- package/dist/render/thirdPersonCamera.js +479 -0
- package/dist/render/trample.d.ts +57 -0
- package/dist/render/trample.js +134 -0
- package/dist/render/translucentQueue.d.ts +76 -0
- package/dist/render/translucentQueue.js +90 -0
- package/dist/render/uniformVectorBudget.d.ts +105 -0
- package/dist/render/uniformVectorBudget.js +201 -0
- package/dist/render/uploadStep.d.ts +14 -0
- package/dist/render/uploadStep.js +14 -0
- package/dist/render/vertexDefaults.d.ts +48 -0
- package/dist/render/vertexDefaults.js +111 -0
- package/dist/render/visibility.d.ts +22 -0
- package/dist/render/visibility.js +47 -0
- package/dist/render/waterDraw.d.ts +57 -0
- package/dist/render/waterDraw.js +102 -0
- package/dist/render/waterGrid.d.ts +62 -0
- package/dist/render/waterGrid.js +151 -0
- package/dist/render/waterRenderer.d.ts +163 -0
- package/dist/render/waterRenderer.js +165 -0
- package/dist/render/wind.d.ts +45 -0
- package/dist/render/wind.js +32 -0
- package/dist/render/windField.d.ts +34 -0
- package/dist/render/windField.js +13 -0
- package/dist/render/windStreakDraw.d.ts +73 -0
- package/dist/render/windStreakDraw.js +86 -0
- package/dist/render/windStreakRenderer.d.ts +37 -0
- package/dist/render/windStreakRenderer.js +86 -0
- package/dist/scene/node.d.ts +128 -0
- package/dist/scene/node.js +319 -0
- package/dist/scene/visit.d.ts +38 -0
- package/dist/scene/visit.js +43 -0
- package/dist/ui/clipMime.d.ts +46 -0
- package/dist/ui/clipMime.js +88 -0
- package/dist/ui/exportTarget.d.ts +305 -0
- package/dist/ui/exportTarget.js +368 -0
- package/dist/ui/frameOverlay.d.ts +59 -0
- package/dist/ui/frameOverlay.js +76 -0
- package/dist/ui/framePacer.d.ts +142 -0
- package/dist/ui/framePacer.js +284 -0
- package/dist/ui/frameRecorder.d.ts +188 -0
- package/dist/ui/frameRecorder.js +221 -0
- package/dist/ui/fullscreen.d.ts +72 -0
- package/dist/ui/fullscreen.js +92 -0
- package/dist/ui/pixelCursor.d.ts +28 -0
- package/dist/ui/pixelCursor.js +66 -0
- package/dist/ui/splash.d.ts +86 -0
- package/dist/ui/splash.js +300 -0
- package/dist/ui/stillFrame.d.ts +22 -0
- package/dist/ui/stillFrame.js +40 -0
- package/package.json +60 -0
- package/src/behavior/behaviorTree.ts +346 -0
- package/src/build/shaderComments.ts +0 -0
- package/src/cinematic/player.ts +209 -0
- package/src/cinematic/script.ts +231 -0
- package/src/core/bootGate.ts +49 -0
- package/src/core/loadTracker.ts +144 -0
- package/src/core/loop.ts +211 -0
- package/src/core/messageQueue.ts +145 -0
- package/src/core/onceSet.ts +65 -0
- package/src/core/preferences.ts +177 -0
- package/src/core/remoteSave.ts +347 -0
- package/src/core/rng.ts +101 -0
- package/src/core/stepBudget.ts +136 -0
- package/src/core/storage.ts +114 -0
- package/src/core/tickTrace.ts +129 -0
- package/src/core/timeCurve.ts +175 -0
- package/src/core/withDefaults.ts +28 -0
- package/src/dev/contactProbe.ts +115 -0
- package/src/dev/fpsMeter.ts +101 -0
- package/src/environment/celestialClock.ts +385 -0
- package/src/geometry/decal.ts +260 -0
- package/src/geometry/filmPatch.ts +158 -0
- package/src/geometry/growable.ts +165 -0
- package/src/geometry/lightVolume.ts +161 -0
- package/src/geometry/meshBuilder.ts +1397 -0
- package/src/geometry/pixelFont.ts +189 -0
- package/src/geometry/ribbon.ts +790 -0
- package/src/geometry/shellFill.ts +265 -0
- package/src/geometry/spline.ts +659 -0
- package/src/geometry/tangents.ts +173 -0
- package/src/geometry/textMesh.ts +96 -0
- package/src/geometry/treeBuilder.ts +114 -0
- package/src/host/display.ts +180 -0
- package/src/host/files.ts +77 -0
- package/src/host/lifecycle.ts +63 -0
- package/src/host/platformServices.ts +23 -0
- package/src/host/screen.ts +134 -0
- package/src/index.ts +730 -0
- package/src/input/actionMap.ts +377 -0
- package/src/input/activeDevice.ts +86 -0
- package/src/input/gamepadIdentity.ts +131 -0
- package/src/input/gamepadMapping.ts +121 -0
- package/src/input/input.ts +872 -0
- package/src/input/inputHarness.ts +226 -0
- package/src/input/rightGesture.ts +76 -0
- package/src/input/rumble.ts +138 -0
- package/src/input/touchControls.ts +451 -0
- package/src/input/typingTarget.ts +26 -0
- package/src/math/bounds.ts +153 -0
- package/src/math/color.ts +37 -0
- package/src/math/exact.ts +274 -0
- package/src/math/frustum.ts +115 -0
- package/src/math/intersect.ts +228 -0
- package/src/math/scalar.ts +109 -0
- package/src/math/spring.ts +106 -0
- package/src/nav/navGraph.ts +168 -0
- package/src/nav/navPath.ts +217 -0
- package/src/nav/navSearch.ts +200 -0
- package/src/physics/boxSurface.ts +96 -0
- package/src/physics/colliderSurface.ts +213 -0
- package/src/physics/compositeSurface.ts +111 -0
- package/src/physics/heightSurface.ts +234 -0
- package/src/physics/ribbonSurface.ts +642 -0
- package/src/render/ambientOcclusionPass.ts +200 -0
- package/src/render/areaLights.ts +194 -0
- package/src/render/areaShadowSet.ts +405 -0
- package/src/render/atmosphere.ts +186 -0
- package/src/render/backend/api.ts +802 -0
- package/src/render/backend/budget.ts +139 -0
- package/src/render/backend/createRenderer.ts +343 -0
- package/src/render/backend/deadline.ts +37 -0
- package/src/render/backend/probe.ts +152 -0
- package/src/render/backend/select.ts +288 -0
- package/src/render/backend/timer.ts +59 -0
- package/src/render/backend/webgl2/instanced.ts +46 -0
- package/src/render/backend/webgl2/morphTexture.ts +58 -0
- package/src/render/backend/webgl2/renderer.ts +7484 -0
- package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
- package/src/render/backend/webgpu/boltPass.ts +205 -0
- package/src/render/backend/webgpu/buffers.ts +553 -0
- package/src/render/backend/webgpu/causticsPass.ts +174 -0
- package/src/render/backend/webgpu/clusterBinner.ts +259 -0
- package/src/render/backend/webgpu/depthPass.ts +261 -0
- package/src/render/backend/webgpu/device.ts +148 -0
- package/src/render/backend/webgpu/drawCommand.ts +79 -0
- package/src/render/backend/webgpu/environmentTexels.ts +96 -0
- package/src/render/backend/webgpu/filmPass.ts +123 -0
- package/src/render/backend/webgpu/flatPass.ts +635 -0
- package/src/render/backend/webgpu/flockPass.ts +163 -0
- package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
- package/src/render/backend/webgpu/insetPass.ts +123 -0
- package/src/render/backend/webgpu/instanced.ts +55 -0
- package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
- package/src/render/backend/webgpu/linePass.ts +270 -0
- package/src/render/backend/webgpu/morphTexture.ts +61 -0
- package/src/render/backend/webgpu/panelPass.ts +138 -0
- package/src/render/backend/webgpu/particlePass.ts +370 -0
- package/src/render/backend/webgpu/pipelineCache.ts +152 -0
- package/src/render/backend/webgpu/plumePass.ts +292 -0
- package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
- package/src/render/backend/webgpu/postPass.ts +470 -0
- package/src/render/backend/webgpu/probePass.ts +218 -0
- package/src/render/backend/webgpu/reflectionPass.ts +137 -0
- package/src/render/backend/webgpu/renderer.ts +13004 -0
- package/src/render/backend/webgpu/scatterPass.ts +354 -0
- package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
- package/src/render/backend/webgpu/shaderModules.ts +49 -0
- package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
- package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
- package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
- package/src/render/backend/webgpu/skyPass.ts +85 -0
- package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
- package/src/render/backend/webgpu/textPass.ts +224 -0
- package/src/render/backend/webgpu/uniformRing.ts +228 -0
- package/src/render/backend/webgpu/waterPass.ts +211 -0
- package/src/render/backend/webgpu/windStreakPass.ts +196 -0
- package/src/render/billboard.ts +108 -0
- package/src/render/bloomChain.ts +101 -0
- package/src/render/bloomPass.ts +256 -0
- package/src/render/boltBatch.ts +141 -0
- package/src/render/boltPool.ts +360 -0
- package/src/render/boom.ts +123 -0
- package/src/render/camera.ts +348 -0
- package/src/render/causticsRenderer.ts +171 -0
- package/src/render/cinematicCamera.ts +278 -0
- package/src/render/clusteredLights.ts +598 -0
- package/src/render/colourGrade.ts +109 -0
- package/src/render/compute.ts +83 -0
- package/src/render/contextLoss.ts +50 -0
- package/src/render/debugLines.ts +411 -0
- package/src/render/decalPass.ts +124 -0
- package/src/render/decalProjector.ts +390 -0
- package/src/render/decalQueue.ts +110 -0
- package/src/render/depthConvention.ts +383 -0
- package/src/render/drawingBuffer.ts +89 -0
- package/src/render/emptyTexture.ts +130 -0
- package/src/render/envProbeArray.ts +201 -0
- package/src/render/equirectToCube.ts +160 -0
- package/src/render/flockGeometry.ts +53 -0
- package/src/render/flockRenderer.ts +111 -0
- package/src/render/frame/arena.ts +93 -0
- package/src/render/frame/index.ts +29 -0
- package/src/render/frame/replay.ts +50 -0
- package/src/render/frame/resources.ts +61 -0
- package/src/render/frame/schedule.ts +85 -0
- package/src/render/frameView.ts +20 -0
- package/src/render/gizmo.ts +923 -0
- package/src/render/globalMedium.ts +154 -0
- package/src/render/globalMediumPass.ts +323 -0
- package/src/render/gpuCapability.ts +244 -0
- package/src/render/gpuTimer.ts +182 -0
- package/src/render/halfFloat.ts +39 -0
- package/src/render/handleRegistry.ts +96 -0
- package/src/render/iesProfile.ts +215 -0
- package/src/render/imageTexels.ts +109 -0
- package/src/render/instancedMesh.ts +187 -0
- package/src/render/instances.ts +92 -0
- package/src/render/lightBudget.ts +655 -0
- package/src/render/lightMatrix.ts +69 -0
- package/src/render/lightVolumeDraw.ts +216 -0
- package/src/render/lineBatch.ts +180 -0
- package/src/render/linePoints.ts +61 -0
- package/src/render/livePointShadowSet.ts +285 -0
- package/src/render/lod.ts +86 -0
- package/src/render/mesh.ts +536 -0
- package/src/render/occlusion.ts +406 -0
- package/src/render/oitPass.ts +230 -0
- package/src/render/orderIndependent.ts +136 -0
- package/src/render/particleBatch.ts +299 -0
- package/src/render/particleMaterial.ts +84 -0
- package/src/render/particlePool.ts +291 -0
- package/src/render/pass.ts +203 -0
- package/src/render/passTarget.ts +225 -0
- package/src/render/pickable.ts +222 -0
- package/src/render/planarReflection.ts +233 -0
- package/src/render/planarReflectionDraw.ts +87 -0
- package/src/render/plumeGeometry.ts +75 -0
- package/src/render/plumeMaterial.ts +99 -0
- package/src/render/plumeRenderer.ts +272 -0
- package/src/render/pointLightSelection.ts +447 -0
- package/src/render/pointShadowArray.ts +276 -0
- package/src/render/pointShadowBudget.ts +305 -0
- package/src/render/pointShadowImage.ts +470 -0
- package/src/render/pointShadowMap.ts +228 -0
- package/src/render/pointShadowSystem.ts +408 -0
- package/src/render/prefilterEnvMap.ts +162 -0
- package/src/render/prefilterPass.ts +115 -0
- package/src/render/probeGrid.ts +248 -0
- package/src/render/rainField.ts +240 -0
- package/src/render/reflectionProbe.ts +530 -0
- package/src/render/renderQuality.ts +1054 -0
- package/src/render/rendererHarness.ts +214 -0
- package/src/render/resolutionGovernor.ts +189 -0
- package/src/render/scatterDeform.ts +72 -0
- package/src/render/sceneTarget.ts +1032 -0
- package/src/render/screenSpaceReflection.ts +524 -0
- package/src/render/sdfFont.ts +157 -0
- package/src/render/sdfTextLayout.ts +206 -0
- package/src/render/sdfTextRenderer.ts +233 -0
- package/src/render/seaState.ts +55 -0
- package/src/render/segmentQuads.ts +92 -0
- package/src/render/shader.ts +190 -0
- package/src/render/shaders/ambientOcclusion.ts +354 -0
- package/src/render/shaders/arcane.ts +103 -0
- package/src/render/shaders/bloom.ts +232 -0
- package/src/render/shaders/bolt.ts +164 -0
- package/src/render/shaders/caustics.ts +169 -0
- package/src/render/shaders/conditionals.ts +58 -0
- package/src/render/shaders/decalProject.ts +127 -0
- package/src/render/shaders/depth.ts +131 -0
- package/src/render/shaders/depthOfField.ts +141 -0
- package/src/render/shaders/film.ts +285 -0
- package/src/render/shaders/fire.ts +180 -0
- package/src/render/shaders/flat/directionalShadow.ts +196 -0
- package/src/render/shaders/flat/index.ts +502 -0
- package/src/render/shaders/flat/lobes.ts +399 -0
- package/src/render/shaders/flat/main.ts +1631 -0
- package/src/render/shaders/flat/pointShadow.ts +323 -0
- package/src/render/shaders/flat/preamble.ts +875 -0
- package/src/render/shaders/flat/probeGrid.ts +152 -0
- package/src/render/shaders/flat/surface.ts +41 -0
- package/src/render/shaders/flock.ts +103 -0
- package/src/render/shaders/fog.ts +99 -0
- package/src/render/shaders/fullscreen.ts +28 -0
- package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
- package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
- package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
- package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
- package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
- package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
- package/src/render/shaders/generated/depth.wgsl.ts +142 -0
- package/src/render/shaders/generated/film.wgsl.ts +143 -0
- package/src/render/shaders/generated/fire.wgsl.ts +137 -0
- package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
- package/src/render/shaders/generated/flock.wgsl.ts +82 -0
- package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
- package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
- package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
- package/src/render/shaders/generated/line.wgsl.ts +137 -0
- package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
- package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
- package/src/render/shaders/generated/panel.wgsl.ts +57 -0
- package/src/render/shaders/generated/particle.wgsl.ts +343 -0
- package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
- package/src/render/shaders/generated/rush.wgsl.ts +139 -0
- package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
- package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
- package/src/render/shaders/generated/sky.wgsl.ts +109 -0
- package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
- package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
- package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
- package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
- package/src/render/shaders/generated/text.wgsl.ts +107 -0
- package/src/render/shaders/generated/water.wgsl.ts +256 -0
- package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
- package/src/render/shaders/gerstner.ts +110 -0
- package/src/render/shaders/globalMedium.ts +396 -0
- package/src/render/shaders/lightVolume.ts +546 -0
- package/src/render/shaders/line.ts +125 -0
- package/src/render/shaders/morph.ts +62 -0
- package/src/render/shaders/octahedral.ts +170 -0
- package/src/render/shaders/octahedralResolve.ts +83 -0
- package/src/render/shaders/oitResolve.ts +42 -0
- package/src/render/shaders/outputTransform.ts +107 -0
- package/src/render/shaders/panel.ts +51 -0
- package/src/render/shaders/particle.ts +438 -0
- package/src/render/shaders/prefilter.ts +278 -0
- package/src/render/shaders/rush.ts +357 -0
- package/src/render/shaders/scatter.ts +211 -0
- package/src/render/shaders/sdfText.ts +68 -0
- package/src/render/shaders/skinning.ts +59 -0
- package/src/render/shaders/sky.ts +243 -0
- package/src/render/shaders/smoke.ts +89 -0
- package/src/render/shaders/ssrResolve.ts +28 -0
- package/src/render/shaders/ssrTrace.ts +233 -0
- package/src/render/shaders/tangentFrame.ts +70 -0
- package/src/render/shaders/temporalResolve.ts +151 -0
- package/src/render/shaders/text.ts +156 -0
- package/src/render/shaders/vertexChannel.ts +71 -0
- package/src/render/shaders/water.ts +356 -0
- package/src/render/shaders/windStreaks.ts +130 -0
- package/src/render/shadowCasters.ts +124 -0
- package/src/render/shadowMap.ts +89 -0
- package/src/render/shotPlacement.ts +266 -0
- package/src/render/skinPalette.ts +157 -0
- package/src/render/ssrPass.ts +241 -0
- package/src/render/surfaceSheet.ts +158 -0
- package/src/render/surfaceTexture.ts +310 -0
- package/src/render/temporalAa.ts +221 -0
- package/src/render/temporalPass.ts +153 -0
- package/src/render/textLayout.ts +239 -0
- package/src/render/textRenderer.ts +201 -0
- package/src/render/thirdPersonCamera.ts +578 -0
- package/src/render/trample.ts +140 -0
- package/src/render/translucentQueue.ts +161 -0
- package/src/render/uniformVectorBudget.ts +246 -0
- package/src/render/uploadStep.ts +14 -0
- package/src/render/vertexDefaults.ts +115 -0
- package/src/render/visibility.ts +56 -0
- package/src/render/waterDraw.ts +167 -0
- package/src/render/waterGrid.ts +180 -0
- package/src/render/waterRenderer.ts +352 -0
- package/src/render/wind.ts +79 -0
- package/src/render/windField.ts +50 -0
- package/src/render/windStreakDraw.ts +131 -0
- package/src/render/windStreakRenderer.ts +130 -0
- package/src/scene/node.ts +336 -0
- package/src/scene/visit.ts +82 -0
- package/src/ui/clipMime.ts +109 -0
- package/src/ui/exportTarget.ts +491 -0
- package/src/ui/frameOverlay.ts +159 -0
- package/src/ui/framePacer.ts +351 -0
- package/src/ui/frameRecorder.ts +333 -0
- package/src/ui/fullscreen.ts +113 -0
- package/src/ui/pixelCursor.ts +99 -0
- package/src/ui/splash.ts +347 -0
- package/src/ui/stillFrame.ts +44 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A behaviour tree that is data, so it can be looked at, paused and stepped.
|
|
3
|
+
*
|
|
4
|
+
* **The complaint this answers is not "a routine cannot be written".** It can, and a consumer
|
|
5
|
+
* reported theirs: a table of places and a loop that decides where to send everybody once an
|
|
6
|
+
* in-game hour. It works. What they also reported is what it is — a hand-written behaviour tree
|
|
7
|
+
* that cannot be inspected, paused or stepped — and where it gets expensive, which is the moment a
|
|
8
|
+
* routine needs **interrupting**: an agent dropping what it is doing because it started raining,
|
|
9
|
+
* and picking it up again afterwards.
|
|
10
|
+
*
|
|
11
|
+
* So the two things here are the two things a hand-rolled loop does not give you.
|
|
12
|
+
*
|
|
13
|
+
* **The tree is data.** Nodes are arrays of integers and names resolved once at build time; the
|
|
14
|
+
* consumer's own functions live in a table beside it. A running tree can therefore say which node
|
|
15
|
+
* it is in, by name, without anything having been instrumented — `activePath` walks it — and a
|
|
16
|
+
* `paused` character can be advanced one node at a time.
|
|
17
|
+
*
|
|
18
|
+
* **A preempted branch is suspended, not reset**, which is the whole of "picking it up again". A
|
|
19
|
+
* selector that switches to a higher-priority child leaves the lower one's cursors exactly where
|
|
20
|
+
* they were, so when the interruption ends the agent resumes at the step it had reached rather than
|
|
21
|
+
* at the start of its errand. State is reset only when a branch *finishes* — succeeds or fails —
|
|
22
|
+
* because that is when starting again is what starting again means. Every behaviour-tree
|
|
23
|
+
* implementation has to choose here, most reset on abort, and the difference is a villager who
|
|
24
|
+
* walks back to the shop after a shower against one who walks home and starts the day over.
|
|
25
|
+
*
|
|
26
|
+
* **Nothing allocates during a tick and nothing reads a clock.** A tick is a function of the tree,
|
|
27
|
+
* the character's own cursors, and whatever the consumer's context object holds.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
export const FAILURE = 0;
|
|
31
|
+
export const SUCCESS = 1;
|
|
32
|
+
export const RUNNING = 2;
|
|
33
|
+
export type BehaviorStatus = 0 | 1 | 2;
|
|
34
|
+
|
|
35
|
+
const SEQUENCE = 0;
|
|
36
|
+
const SELECTOR = 1;
|
|
37
|
+
const ACTION = 2;
|
|
38
|
+
const CONDITION = 3;
|
|
39
|
+
const GUARD = 4;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A node, as a consumer writes one.
|
|
43
|
+
*
|
|
44
|
+
* Names are the point of the whole shape: they are what an inspector shows and what a log line
|
|
45
|
+
* says, and a tree whose nodes are anonymous is one you can watch running and still not read.
|
|
46
|
+
*/
|
|
47
|
+
export type BehaviorSpec =
|
|
48
|
+
| { readonly name: string; readonly sequence: readonly BehaviorSpec[] }
|
|
49
|
+
| { readonly name: string; readonly selector: readonly BehaviorSpec[] }
|
|
50
|
+
| { readonly name: string; readonly action: string }
|
|
51
|
+
| { readonly name: string; readonly condition: string }
|
|
52
|
+
/**
|
|
53
|
+
* Run the child only while the condition holds.
|
|
54
|
+
*
|
|
55
|
+
* **The interruption primitive.** A selector of guards is a list of priorities: the first guard
|
|
56
|
+
* whose condition is true runs its branch, and a branch that was running under a lower-priority
|
|
57
|
+
* guard is suspended rather than abandoned. That is how "stop what you are doing because it
|
|
58
|
+
* started raining" is expressed, and how the errand survives it.
|
|
59
|
+
*/
|
|
60
|
+
| { readonly name: string; readonly whileTrue: string; readonly does: BehaviorSpec };
|
|
61
|
+
|
|
62
|
+
/** What a running tree calls: the consumer's own verbs, by the names the tree uses. */
|
|
63
|
+
export interface BehaviorTasks {
|
|
64
|
+
/** Something that takes time. Returns `RUNNING` until it is done. */
|
|
65
|
+
readonly actions: Readonly<Record<string, (context: never) => BehaviorStatus>>;
|
|
66
|
+
/** Something with an answer now. */
|
|
67
|
+
readonly conditions: Readonly<Record<string, (context: never) => boolean>>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The tree, flattened. Built once; a character per agent shares it. */
|
|
71
|
+
export interface BehaviorTree {
|
|
72
|
+
readonly kind: Uint8Array;
|
|
73
|
+
/** For a composite: where its children start in `child`. Length `nodeCount + 1`. */
|
|
74
|
+
readonly childStart: Uint32Array;
|
|
75
|
+
readonly child: Uint32Array;
|
|
76
|
+
/** For an action, condition or guard: which function in the table. */
|
|
77
|
+
readonly slot: Int32Array;
|
|
78
|
+
readonly names: readonly string[];
|
|
79
|
+
readonly nodeCount: number;
|
|
80
|
+
/** The functions, in the order `slot` indexes them. */
|
|
81
|
+
readonly actions: readonly ((context: never) => BehaviorStatus)[];
|
|
82
|
+
readonly conditions: readonly ((context: never) => boolean)[];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Flatten a spec, resolving every name against the tables.
|
|
87
|
+
*
|
|
88
|
+
* **A name with no function is refused here rather than at the moment the agent needs it.** A tree
|
|
89
|
+
* is authored once and run for hours; a typo that surfaces the first time a villager reaches the
|
|
90
|
+
* market is a typo that surfaces in front of somebody playing.
|
|
91
|
+
*/
|
|
92
|
+
export function buildBehaviorTree(root: BehaviorSpec, tasks: BehaviorTasks): BehaviorTree {
|
|
93
|
+
const kind: number[] = [];
|
|
94
|
+
const names: string[] = [];
|
|
95
|
+
const slot: number[] = [];
|
|
96
|
+
const childLists: number[][] = [];
|
|
97
|
+
const actions: ((context: never) => BehaviorStatus)[] = [];
|
|
98
|
+
const conditions: ((context: never) => boolean)[] = [];
|
|
99
|
+
const actionSlot = new Map<string, number>();
|
|
100
|
+
const conditionSlot = new Map<string, number>();
|
|
101
|
+
|
|
102
|
+
const resolveAction = (name: string, node: string): number => {
|
|
103
|
+
const found = actionSlot.get(name);
|
|
104
|
+
if (found !== undefined) return found;
|
|
105
|
+
const fn = tasks.actions[name];
|
|
106
|
+
if (fn === undefined) {
|
|
107
|
+
throw new Error(
|
|
108
|
+
`buildBehaviorTree: node "${node}" does an action "${name}" nothing provides`,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
actions.push(fn);
|
|
112
|
+
actionSlot.set(name, actions.length - 1);
|
|
113
|
+
return actions.length - 1;
|
|
114
|
+
};
|
|
115
|
+
const resolveCondition = (name: string, node: string): number => {
|
|
116
|
+
const found = conditionSlot.get(name);
|
|
117
|
+
if (found !== undefined) return found;
|
|
118
|
+
const fn = tasks.conditions[name];
|
|
119
|
+
if (fn === undefined) {
|
|
120
|
+
throw new Error(`buildBehaviorTree: node "${node}" asks "${name}", which nothing answers`);
|
|
121
|
+
}
|
|
122
|
+
conditions.push(fn);
|
|
123
|
+
conditionSlot.set(name, conditions.length - 1);
|
|
124
|
+
return conditions.length - 1;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const visit = (spec: BehaviorSpec): number => {
|
|
128
|
+
const at = kind.length;
|
|
129
|
+
names.push(spec.name);
|
|
130
|
+
kind.push(0);
|
|
131
|
+
slot.push(-1);
|
|
132
|
+
childLists.push([]);
|
|
133
|
+
|
|
134
|
+
if ('sequence' in spec || 'selector' in spec) {
|
|
135
|
+
const children = 'sequence' in spec ? spec.sequence : spec.selector;
|
|
136
|
+
if (children.length === 0) {
|
|
137
|
+
throw new Error(`buildBehaviorTree: "${spec.name}" is a composite with no children`);
|
|
138
|
+
}
|
|
139
|
+
kind[at] = 'sequence' in spec ? SEQUENCE : SELECTOR;
|
|
140
|
+
const list = childLists[at] as number[];
|
|
141
|
+
for (const each of children) list.push(visit(each));
|
|
142
|
+
} else if ('action' in spec) {
|
|
143
|
+
kind[at] = ACTION;
|
|
144
|
+
slot[at] = resolveAction(spec.action, spec.name);
|
|
145
|
+
} else if ('condition' in spec) {
|
|
146
|
+
kind[at] = CONDITION;
|
|
147
|
+
slot[at] = resolveCondition(spec.condition, spec.name);
|
|
148
|
+
} else {
|
|
149
|
+
kind[at] = GUARD;
|
|
150
|
+
slot[at] = resolveCondition(spec.whileTrue, spec.name);
|
|
151
|
+
(childLists[at] as number[]).push(visit(spec.does));
|
|
152
|
+
}
|
|
153
|
+
return at;
|
|
154
|
+
};
|
|
155
|
+
visit(root);
|
|
156
|
+
|
|
157
|
+
const nodeCount = kind.length;
|
|
158
|
+
const childStart = new Uint32Array(nodeCount + 1);
|
|
159
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
160
|
+
childStart[i + 1] = (childStart[i] ?? 0) + (childLists[i]?.length ?? 0);
|
|
161
|
+
}
|
|
162
|
+
const child = new Uint32Array(childStart[nodeCount] ?? 0);
|
|
163
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
164
|
+
const list = childLists[i] ?? [];
|
|
165
|
+
for (let k = 0; k < list.length; k++) child[(childStart[i] ?? 0) + k] = list[k] ?? 0;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
kind: Uint8Array.from(kind),
|
|
170
|
+
childStart,
|
|
171
|
+
child,
|
|
172
|
+
slot: Int32Array.from(slot),
|
|
173
|
+
names,
|
|
174
|
+
nodeCount,
|
|
175
|
+
actions,
|
|
176
|
+
conditions,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* One agent running one tree.
|
|
182
|
+
*
|
|
183
|
+
* A character per agent and one tree between them: the tree is read-only after building, and
|
|
184
|
+
* everything that differs between two villagers following the same routine is here.
|
|
185
|
+
*/
|
|
186
|
+
export class BehaviorRunner<Context> {
|
|
187
|
+
readonly tree: BehaviorTree;
|
|
188
|
+
/** How far through each composite this agent is. The state a suspension preserves. */
|
|
189
|
+
private readonly cursor: Uint32Array;
|
|
190
|
+
/** Which node each composite last handed control to, so a switch can be noticed. */
|
|
191
|
+
private readonly running: Int32Array;
|
|
192
|
+
/** The chain of nodes entered on the last tick, root first. */
|
|
193
|
+
private readonly path: Uint32Array;
|
|
194
|
+
private pathLength = 0;
|
|
195
|
+
private lastStatus: BehaviorStatus = RUNNING;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* When true, `tick` does nothing and reports the last status.
|
|
199
|
+
*
|
|
200
|
+
* Paused rather than not-called, so a debugger can hold one agent while the world runs — and so
|
|
201
|
+
* `stepOnce` has something to mean.
|
|
202
|
+
*/
|
|
203
|
+
paused = false;
|
|
204
|
+
|
|
205
|
+
constructor(tree: BehaviorTree) {
|
|
206
|
+
this.tree = tree;
|
|
207
|
+
this.cursor = new Uint32Array(tree.nodeCount);
|
|
208
|
+
this.running = new Int32Array(tree.nodeCount).fill(-1);
|
|
209
|
+
this.path = new Uint32Array(tree.nodeCount);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
get status(): BehaviorStatus {
|
|
213
|
+
return this.lastStatus;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Advance one tick, unless paused. */
|
|
217
|
+
tick(context: Context): BehaviorStatus {
|
|
218
|
+
if (this.paused) return this.lastStatus;
|
|
219
|
+
return this.run(context);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Advance one tick even while paused. What a step button is wired to. */
|
|
223
|
+
stepOnce(context: Context): BehaviorStatus {
|
|
224
|
+
return this.run(context);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** Forget everything: the next tick starts the routine from the beginning. */
|
|
228
|
+
reset(): void {
|
|
229
|
+
this.cursor.fill(0);
|
|
230
|
+
this.running.fill(-1);
|
|
231
|
+
this.pathLength = 0;
|
|
232
|
+
this.lastStatus = RUNNING;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* The chain of nodes the last tick was inside, root first, filled into `out`.
|
|
237
|
+
*
|
|
238
|
+
* **This is the inspection the report asked for**, and it costs nothing to keep: the chain is
|
|
239
|
+
* recorded as the tick descends, so asking for it later is a copy rather than a second walk.
|
|
240
|
+
* `nameOf` turns the indices into the names the tree was written with.
|
|
241
|
+
*/
|
|
242
|
+
activePath(out: Uint32Array): number {
|
|
243
|
+
const count = Math.min(this.pathLength, out.length);
|
|
244
|
+
for (let i = 0; i < count; i++) out[i] = this.path[i] ?? 0;
|
|
245
|
+
return count;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
nameOf(node: number): string {
|
|
249
|
+
return this.tree.names[node] ?? '?';
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private run(context: Context): BehaviorStatus {
|
|
253
|
+
this.pathLength = 0;
|
|
254
|
+
this.lastStatus = this.visit(0, context);
|
|
255
|
+
return this.lastStatus;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
private visit(node: number, context: Context): BehaviorStatus {
|
|
259
|
+
if (this.pathLength < this.path.length) this.path[this.pathLength++] = node;
|
|
260
|
+
const tree = this.tree;
|
|
261
|
+
switch (tree.kind[node]) {
|
|
262
|
+
case ACTION: {
|
|
263
|
+
const fn = tree.actions[tree.slot[node] ?? 0];
|
|
264
|
+
return fn === undefined ? FAILURE : fn(context as never);
|
|
265
|
+
}
|
|
266
|
+
case CONDITION: {
|
|
267
|
+
const fn = tree.conditions[tree.slot[node] ?? 0];
|
|
268
|
+
return fn !== undefined && fn(context as never) ? SUCCESS : FAILURE;
|
|
269
|
+
}
|
|
270
|
+
case GUARD: {
|
|
271
|
+
const fn = tree.conditions[tree.slot[node] ?? 0];
|
|
272
|
+
/*
|
|
273
|
+
* The condition has stopped holding. The child keeps every cursor it had: this is the node
|
|
274
|
+
* that makes an interruption resumable, and clearing here is the single change that would
|
|
275
|
+
* turn a villager who returns to their errand into one who starts the day again.
|
|
276
|
+
*/
|
|
277
|
+
if (fn === undefined || !fn(context as never)) return FAILURE;
|
|
278
|
+
return this.visit(tree.child[tree.childStart[node] ?? 0] ?? 0, context);
|
|
279
|
+
}
|
|
280
|
+
case SEQUENCE:
|
|
281
|
+
return this.sequence(node, context);
|
|
282
|
+
default:
|
|
283
|
+
return this.selector(node, context);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
private sequence(node: number, context: Context): BehaviorStatus {
|
|
288
|
+
const tree = this.tree;
|
|
289
|
+
const start = tree.childStart[node] ?? 0;
|
|
290
|
+
const end = tree.childStart[node + 1] ?? 0;
|
|
291
|
+
const count = end - start;
|
|
292
|
+
/* Resumed from the cursor, which is what makes a sequence a routine rather than a list of
|
|
293
|
+
things attempted from the top every tick. */
|
|
294
|
+
for (let i = this.cursor[node] ?? 0; i < count; i++) {
|
|
295
|
+
const status = this.visit(tree.child[start + i] ?? 0, context);
|
|
296
|
+
if (status === RUNNING) {
|
|
297
|
+
this.cursor[node] = i;
|
|
298
|
+
return RUNNING;
|
|
299
|
+
}
|
|
300
|
+
if (status === FAILURE) {
|
|
301
|
+
this.clear(node);
|
|
302
|
+
return FAILURE;
|
|
303
|
+
}
|
|
304
|
+
/* Succeeded: on to the next, and the child starts clean the next time it is entered. */
|
|
305
|
+
this.clear(tree.child[start + i] ?? 0);
|
|
306
|
+
}
|
|
307
|
+
this.clear(node);
|
|
308
|
+
return SUCCESS;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
private selector(node: number, context: Context): BehaviorStatus {
|
|
312
|
+
const tree = this.tree;
|
|
313
|
+
const start = tree.childStart[node] ?? 0;
|
|
314
|
+
const end = tree.childStart[node + 1] ?? 0;
|
|
315
|
+
|
|
316
|
+
for (let i = start; i < end; i++) {
|
|
317
|
+
const branch = tree.child[i] ?? 0;
|
|
318
|
+
const status = this.visit(branch, context);
|
|
319
|
+
if (status === FAILURE) continue;
|
|
320
|
+
/*
|
|
321
|
+
* **A different branch has taken over, and the one it displaced is left exactly as it was.**
|
|
322
|
+
* Nothing is cleared here, which is the whole feature: the displaced branch's cursors say
|
|
323
|
+
* which step of the errand it had reached, and it resumes there when this one stops being
|
|
324
|
+
* eligible. Resetting instead is the version of this that most implementations ship, and it
|
|
325
|
+
* is why interrupting an agent usually costs the thing it was doing.
|
|
326
|
+
*/
|
|
327
|
+
this.running[node] = branch;
|
|
328
|
+
if (status === SUCCESS) {
|
|
329
|
+
this.clear(branch);
|
|
330
|
+
this.running[node] = -1;
|
|
331
|
+
}
|
|
332
|
+
return status;
|
|
333
|
+
}
|
|
334
|
+
this.clear(node);
|
|
335
|
+
return FAILURE;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/** Forget a subtree's progress, so it is entered fresh. Called when a branch finishes. */
|
|
339
|
+
private clear(node: number): void {
|
|
340
|
+
this.cursor[node] = 0;
|
|
341
|
+
this.running[node] = -1;
|
|
342
|
+
const start = this.tree.childStart[node] ?? 0;
|
|
343
|
+
const end = this.tree.childStart[node + 1] ?? 0;
|
|
344
|
+
for (let i = start; i < end; i++) this.clear(this.tree.child[i] ?? 0);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { lerp } from '../math/scalar.ts';
|
|
2
|
+
import type { ShotKind, ShotParams } from '../render/cinematicCamera.ts';
|
|
3
|
+
import { validateCinematic } from './script.ts';
|
|
4
|
+
import type { CameraKeyframe, CinematicLine, CinematicScript } from './script.ts';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Plays a `CinematicScript`: a clock, the shot it is currently in, and the line
|
|
8
|
+
* that is currently up.
|
|
9
|
+
*
|
|
10
|
+
* It knows about time, camera placements and timed strings, and nothing else.
|
|
11
|
+
* Which shot suits which moment is the script's business, what a `look` means
|
|
12
|
+
* is the presentation's, and what any of it is *about* is the game's.
|
|
13
|
+
*
|
|
14
|
+
* Everything is derived from accumulated time rather than advanced per frame,
|
|
15
|
+
* so a script plays identically on a 144 Hz desktop and a phone dropping frames
|
|
16
|
+
* — a playback that steps an index per frame tells a different story at a
|
|
17
|
+
* different frame rate, and only one of the two was ever written down.
|
|
18
|
+
*
|
|
19
|
+
* The caller drives a `CinematicCamera` from it:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* player.update(dt);
|
|
23
|
+
* if (player.shotChanged) camera.cut(player.shot, player.timeSec);
|
|
24
|
+
* camera.update(dt, x, y, z, yaw);
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* `shotChanged` is true only at a *cut*. A keyframed shot moves while it holds,
|
|
28
|
+
* and the object handed out by `shot` is a live view that keeps moving — so the
|
|
29
|
+
* rig damps its way along the authored path instead of snapping to it every
|
|
30
|
+
* frame. Copy it if you need to keep it past the next `update`.
|
|
31
|
+
*/
|
|
32
|
+
export class CinematicPlayer {
|
|
33
|
+
private readonly script: CinematicScript;
|
|
34
|
+
private time = 0;
|
|
35
|
+
private shotIndex = -1;
|
|
36
|
+
private lineIndex = -1;
|
|
37
|
+
private cut = false;
|
|
38
|
+
private current: ShotParams | null = null;
|
|
39
|
+
/**
|
|
40
|
+
* Scratch for keyframed shots, reused every frame. A cinematic is not a hot
|
|
41
|
+
* path in the sim sense, but it runs over a live world and a per-frame object
|
|
42
|
+
* is a per-frame collection somewhere later.
|
|
43
|
+
*/
|
|
44
|
+
private readonly moving: MovingShot = { kind: 'chase', distance: 6, height: 2, fovDeg: 70 };
|
|
45
|
+
private readonly movingAnchor: [number, number, number] = [0, 0, 0];
|
|
46
|
+
|
|
47
|
+
constructor(script: CinematicScript, name = 'cinematic') {
|
|
48
|
+
// Even a script that came through `defineCinematic` is checked again: the
|
|
49
|
+
// ordering and non-overlap rules are what make "the line right now" a
|
|
50
|
+
// single answer, and this is the object that relies on them.
|
|
51
|
+
validateCinematic(name, script);
|
|
52
|
+
this.script = script;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
get timeSec(): number {
|
|
56
|
+
return this.time;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
get finished(): boolean {
|
|
60
|
+
return this.time >= this.script.durationSec;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** The placement the camera should be holding, or null before the first shot. */
|
|
64
|
+
get shot(): ShotParams | null {
|
|
65
|
+
return this.current;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** True on the frame a cut lands — the cue to `cut` the rig. */
|
|
69
|
+
get shotChanged(): boolean {
|
|
70
|
+
return this.cut;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** The one line on screen, or null. Never two: the script cannot express it. */
|
|
74
|
+
get line(): CinematicLine | null {
|
|
75
|
+
return this.lineIndex < 0 ? null : this.script.lines[this.lineIndex];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
update(frameDt: number): void {
|
|
79
|
+
this.cut = false;
|
|
80
|
+
if (this.finished) return;
|
|
81
|
+
this.time = Math.min(this.time + Math.max(0, frameDt), this.script.durationSec);
|
|
82
|
+
this.selectShot();
|
|
83
|
+
this.selectLine();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Straight to the end, holding nothing.
|
|
88
|
+
*
|
|
89
|
+
* Every returning player takes this path, so it has to leave the player inert
|
|
90
|
+
* rather than merely finished: a skip that leaves a cinematic shot behind
|
|
91
|
+
* hands somebody a run they cannot see.
|
|
92
|
+
*/
|
|
93
|
+
skip(): void {
|
|
94
|
+
this.time = this.script.durationSec;
|
|
95
|
+
this.clear();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Back to the top, for a replay from the menu. */
|
|
99
|
+
reset(): void {
|
|
100
|
+
this.time = 0;
|
|
101
|
+
this.clear();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private clear(): void {
|
|
105
|
+
this.shotIndex = -1;
|
|
106
|
+
this.lineIndex = -1;
|
|
107
|
+
this.current = null;
|
|
108
|
+
this.cut = false;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Scanned from the start rather than advanced from the last index: the answer
|
|
113
|
+
* is then a function of the clock alone, which is what survives a `reset`, a
|
|
114
|
+
* long frame that crosses two cuts, and a script short enough that the scan
|
|
115
|
+
* costs less than the branch saving it would.
|
|
116
|
+
*/
|
|
117
|
+
private selectShot(): void {
|
|
118
|
+
const shots = this.script.shots;
|
|
119
|
+
let index = -1;
|
|
120
|
+
for (let i = 0; i < shots.length; i++) {
|
|
121
|
+
if (shots[i].atSec > this.time) break;
|
|
122
|
+
index = i;
|
|
123
|
+
}
|
|
124
|
+
if (index < 0) {
|
|
125
|
+
this.current = null;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (index !== this.shotIndex) {
|
|
129
|
+
this.shotIndex = index;
|
|
130
|
+
this.cut = true;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const camera = shots[index].camera;
|
|
134
|
+
this.current = 'kind' in camera ? camera : this.sample(camera, this.time - shots[index].atSec);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private selectLine(): void {
|
|
138
|
+
const lines = this.script.lines;
|
|
139
|
+
let index = -1;
|
|
140
|
+
for (let i = 0; i < lines.length; i++) {
|
|
141
|
+
const line = lines[i];
|
|
142
|
+
if (line.atSec > this.time) break;
|
|
143
|
+
// The window is closed at its end, so a line and its successor cannot
|
|
144
|
+
// both claim the instant one hands over to the other.
|
|
145
|
+
if (this.time < line.atSec + line.holdSec) {
|
|
146
|
+
index = i;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
this.lineIndex = index;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The placement `localSec` into a keyframed shot.
|
|
155
|
+
*
|
|
156
|
+
* Linear between keyframes, and deliberately not eased: the rig already damps
|
|
157
|
+
* its own motion, and easing each segment would stall the move at every key —
|
|
158
|
+
* a push-in that pulses instead of pushing.
|
|
159
|
+
*/
|
|
160
|
+
private sample(frames: readonly CameraKeyframe[], localSec: number): ShotParams {
|
|
161
|
+
let index = 0;
|
|
162
|
+
for (let i = 0; i < frames.length; i++) {
|
|
163
|
+
if (frames[i].atSec > localSec) break;
|
|
164
|
+
index = i;
|
|
165
|
+
}
|
|
166
|
+
const from = frames[index].camera;
|
|
167
|
+
const fromSec = frames[index].atSec;
|
|
168
|
+
const hasNext = index + 1 < frames.length;
|
|
169
|
+
const to = hasNext ? frames[index + 1].camera : from;
|
|
170
|
+
const span = hasNext ? frames[index + 1].atSec - fromSec : 0;
|
|
171
|
+
// Past the last keyframe a shot holds its final placement rather than
|
|
172
|
+
// running on; the timeline says when it ends.
|
|
173
|
+
const t = span > 0 ? Math.min(1, (localSec - fromSec) / span) : 1;
|
|
174
|
+
|
|
175
|
+
const moving = this.moving;
|
|
176
|
+
moving.kind = from.kind;
|
|
177
|
+
moving.distance = lerp(from.distance, to.distance, t);
|
|
178
|
+
moving.height = lerp(from.height, to.height, t);
|
|
179
|
+
moving.fovDeg = lerp(from.fovDeg, to.fovDeg, t);
|
|
180
|
+
|
|
181
|
+
const fromRate = from.orbitRate;
|
|
182
|
+
const toRate = to.orbitRate;
|
|
183
|
+
moving.orbitRate =
|
|
184
|
+
fromRate === undefined || toRate === undefined ? fromRate : lerp(fromRate, toRate, t);
|
|
185
|
+
|
|
186
|
+
const fromAnchor = from.anchor;
|
|
187
|
+
const toAnchor = to.anchor;
|
|
188
|
+
if (fromAnchor === undefined || toAnchor === undefined) {
|
|
189
|
+
moving.anchor = fromAnchor;
|
|
190
|
+
} else {
|
|
191
|
+
const anchor = this.movingAnchor;
|
|
192
|
+
anchor[0] = lerp(fromAnchor[0], toAnchor[0], t);
|
|
193
|
+
anchor[1] = lerp(fromAnchor[1], toAnchor[1], t);
|
|
194
|
+
anchor[2] = lerp(fromAnchor[2], toAnchor[2], t);
|
|
195
|
+
moving.anchor = anchor;
|
|
196
|
+
}
|
|
197
|
+
return moving;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** `ShotParams` with the readonly taken off, for the one instance we mutate. */
|
|
202
|
+
interface MovingShot {
|
|
203
|
+
kind: ShotKind;
|
|
204
|
+
distance: number;
|
|
205
|
+
height: number;
|
|
206
|
+
fovDeg: number;
|
|
207
|
+
orbitRate?: number | undefined;
|
|
208
|
+
anchor?: readonly [number, number, number] | undefined;
|
|
209
|
+
}
|