@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,352 @@
|
|
|
1
|
+
/** Configurable two-zone mobile controls over raw touch input. */
|
|
2
|
+
import { InputSource } from './input.js';
|
|
3
|
+
import { classifyRightGesture, isTapRelease } from './rightGesture.js';
|
|
4
|
+
/**
|
|
5
|
+
* Second-zone touches beyond the first, and what they may do.
|
|
6
|
+
*
|
|
7
|
+
* The first thumb in the zone owns everything continuous: the look, and the
|
|
8
|
+
* held form of the primary. Anything after it owns only *edges* — a tap, a
|
|
9
|
+
* flick — because two fingers contributing look at once is one camera being
|
|
10
|
+
* dragged in two directions, which is a worse control than the one this fixes.
|
|
11
|
+
*
|
|
12
|
+
* They exist at all because the zone used to drop every touch after the first
|
|
13
|
+
* outright: a player steering through a corner could not jump out of it without
|
|
14
|
+
* letting go of the corner.
|
|
15
|
+
*/
|
|
16
|
+
const EXTRA_SLOTS = 3;
|
|
17
|
+
const NO_TOUCH = -1;
|
|
18
|
+
/**
|
|
19
|
+
* A reusable mobile scheme: dynamic stick on the first zone; look plus a
|
|
20
|
+
* primary tap/hold and secondary downward swipe on the second. The class
|
|
21
|
+
* reports generic control state. A game decides whether those signals mean
|
|
22
|
+
* jump, fire, crouch, slide, or anything else.
|
|
23
|
+
*/
|
|
24
|
+
export class TouchControls {
|
|
25
|
+
moveX = 0;
|
|
26
|
+
moveY = 0;
|
|
27
|
+
primaryHeld = false;
|
|
28
|
+
secondaryHeld = false;
|
|
29
|
+
onFirstTouch = null;
|
|
30
|
+
primaryQueued = false;
|
|
31
|
+
lookDx = 0;
|
|
32
|
+
lookDy = 0;
|
|
33
|
+
leftId = null;
|
|
34
|
+
rightId = null;
|
|
35
|
+
rightMode = 'pending';
|
|
36
|
+
rightLastX = 0;
|
|
37
|
+
rightLastY = 0;
|
|
38
|
+
/** Greatest distance the owning touch has reached from where it landed. */
|
|
39
|
+
rightTravel = 0;
|
|
40
|
+
rightStart = null;
|
|
41
|
+
firstTouchSeen = false;
|
|
42
|
+
/*
|
|
43
|
+
* The extra second-zone touches, as parallel fixed arrays: a touch event
|
|
44
|
+
* arrives as often as a frame does while a thumb is down, so nothing on this
|
|
45
|
+
* path may allocate.
|
|
46
|
+
*/
|
|
47
|
+
extraIds = new Int32Array(EXTRA_SLOTS).fill(NO_TOUCH);
|
|
48
|
+
extraTravel = new Float32Array(EXTRA_SLOTS);
|
|
49
|
+
extraSliding = new Uint8Array(EXTRA_SLOTS);
|
|
50
|
+
/** Whether the owning touch is the one holding the secondary. */
|
|
51
|
+
ownerSliding = false;
|
|
52
|
+
stickBase;
|
|
53
|
+
stickNub;
|
|
54
|
+
surface;
|
|
55
|
+
splitRatio;
|
|
56
|
+
stickRadiusPx;
|
|
57
|
+
stickDeadzone;
|
|
58
|
+
gestureMovePx;
|
|
59
|
+
holdResolveMs;
|
|
60
|
+
tapMaxMs;
|
|
61
|
+
fireOnHold;
|
|
62
|
+
swipeMaxMs;
|
|
63
|
+
swipeDominance;
|
|
64
|
+
unsubscribe;
|
|
65
|
+
constructor(input, second = {}, third, fourth = {}) {
|
|
66
|
+
/*
|
|
67
|
+
* **A third argument means the positional form, and nothing about the second is inspected.**
|
|
68
|
+
*
|
|
69
|
+
* Sniffing the second argument was tried first and is wrong: `instanceof HTMLElement` needs a
|
|
70
|
+
* DOM constructor this package is checked without, and duck-typing on `nodeType` reads a
|
|
71
|
+
* stand-in element as an options object — which this file's own harness supplies, so the first
|
|
72
|
+
* version silently dropped every option a positional caller passed. The arity carries the
|
|
73
|
+
* answer without asking what anything is.
|
|
74
|
+
*/
|
|
75
|
+
const positional = third !== undefined;
|
|
76
|
+
const options = positional ? fourth : second;
|
|
77
|
+
this.stickBase = positional ? second : (options.stickBase ?? null);
|
|
78
|
+
this.stickNub = positional ? (third ?? null) : (options.stickNub ?? null);
|
|
79
|
+
this.surface = input.target;
|
|
80
|
+
this.splitRatio = options.splitRatio ?? 0.5;
|
|
81
|
+
this.stickRadiusPx = options.stickRadiusPx ?? 40;
|
|
82
|
+
this.stickDeadzone = options.stickDeadzone ?? 0.12;
|
|
83
|
+
/*
|
|
84
|
+
* Twenty rather than fourteen: a thumb rolls a little as it lands, and at
|
|
85
|
+
* fourteen that roll turned a tap into a two-degree camera nudge. Nothing
|
|
86
|
+
* is lost at the start of a look, because the travel that resolves one is
|
|
87
|
+
* credited to it (see `onMove`).
|
|
88
|
+
*/
|
|
89
|
+
this.gestureMovePx = options.gestureMovePx ?? 20;
|
|
90
|
+
this.holdResolveMs = options.holdResolveMs ?? 90;
|
|
91
|
+
this.tapMaxMs = options.tapMaxMs ?? 180;
|
|
92
|
+
this.fireOnHold = options.fireOnHold ?? false;
|
|
93
|
+
this.swipeMaxMs = options.swipeMaxMs ?? 160;
|
|
94
|
+
this.swipeDominance = options.swipeDominance ?? 2.4;
|
|
95
|
+
this.validateOptions();
|
|
96
|
+
this.unsubscribe = input.subscribe({
|
|
97
|
+
onTouchStart: (touch) => this.onStart(touch),
|
|
98
|
+
onTouchMove: (touch) => this.onMove(touch),
|
|
99
|
+
onTouchEnd: (touch, durationMs) => this.onEnd(touch, durationMs),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Resolve a still second-zone touch into the generic primary hold. */
|
|
103
|
+
tick(nowMs) {
|
|
104
|
+
const start = this.rightStart;
|
|
105
|
+
if (this.rightMode !== 'pending' || start === null)
|
|
106
|
+
return;
|
|
107
|
+
if (nowMs - start.startTime >= this.holdResolveMs) {
|
|
108
|
+
// Held, not fired: see `fireOnHold`. A motionless thumb is somebody deciding
|
|
109
|
+
// where to look, and firing under it is the bug this exists to prevent.
|
|
110
|
+
if (this.fireOnHold)
|
|
111
|
+
this.primaryQueued = true;
|
|
112
|
+
this.primaryHeld = true;
|
|
113
|
+
this.rightMode = 'primary-hold';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Consume the primary edge exactly once. */
|
|
117
|
+
consumePrimaryPress() {
|
|
118
|
+
const queued = this.primaryQueued;
|
|
119
|
+
this.primaryQueued = false;
|
|
120
|
+
return queued;
|
|
121
|
+
}
|
|
122
|
+
/** Drain accumulated second-zone look motion into a caller-owned object. */
|
|
123
|
+
consumeLook(out) {
|
|
124
|
+
out.dx = this.lookDx;
|
|
125
|
+
out.dy = this.lookDy;
|
|
126
|
+
this.lookDx = 0;
|
|
127
|
+
this.lookDy = 0;
|
|
128
|
+
}
|
|
129
|
+
dispose() {
|
|
130
|
+
this.unsubscribe();
|
|
131
|
+
if (this.stickBase !== null)
|
|
132
|
+
this.stickBase.hidden = true;
|
|
133
|
+
this.moveX = 0;
|
|
134
|
+
this.moveY = 0;
|
|
135
|
+
this.primaryHeld = false;
|
|
136
|
+
this.secondaryHeld = false;
|
|
137
|
+
this.ownerSliding = false;
|
|
138
|
+
this.extraIds.fill(NO_TOUCH);
|
|
139
|
+
this.extraSliding.fill(0);
|
|
140
|
+
}
|
|
141
|
+
onStart(touch) {
|
|
142
|
+
if (!this.firstTouchSeen) {
|
|
143
|
+
this.firstTouchSeen = true;
|
|
144
|
+
this.onFirstTouch?.();
|
|
145
|
+
}
|
|
146
|
+
const bounds = this.surface.getBoundingClientRect();
|
|
147
|
+
const splitX = bounds.left + bounds.width * this.splitRatio;
|
|
148
|
+
if (touch.startX < splitX) {
|
|
149
|
+
if (this.leftId !== null)
|
|
150
|
+
return;
|
|
151
|
+
this.leftId = touch.id;
|
|
152
|
+
this.showStick(touch.startX, touch.startY);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (this.rightId !== null) {
|
|
156
|
+
this.claimExtra(touch.id);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.rightId = touch.id;
|
|
160
|
+
this.rightMode = 'pending';
|
|
161
|
+
this.rightStart = touch;
|
|
162
|
+
this.rightTravel = 0;
|
|
163
|
+
this.rightLastX = touch.x;
|
|
164
|
+
this.rightLastY = touch.y;
|
|
165
|
+
}
|
|
166
|
+
onMove(touch) {
|
|
167
|
+
if (touch.id === this.leftId) {
|
|
168
|
+
this.updateStick(touch);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (touch.id !== this.rightId) {
|
|
172
|
+
this.moveExtra(touch);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const dx = touch.x - touch.startX;
|
|
176
|
+
const dy = touch.y - touch.startY;
|
|
177
|
+
this.rightTravel = Math.max(this.rightTravel, Math.hypot(dx, dy));
|
|
178
|
+
if (this.rightMode === 'pending') {
|
|
179
|
+
const gesture = this.classify(touch, dx, dy);
|
|
180
|
+
if (gesture === 'secondary') {
|
|
181
|
+
this.rightMode = 'secondary';
|
|
182
|
+
this.ownerSliding = true;
|
|
183
|
+
this.secondaryHeld = true;
|
|
184
|
+
}
|
|
185
|
+
else if (gesture === 'look') {
|
|
186
|
+
this.rightMode = 'look';
|
|
187
|
+
/*
|
|
188
|
+
* Credit the travel that resolved the gesture. Starting the count from
|
|
189
|
+
* here instead threw away the first dozen pixels of every drag, which
|
|
190
|
+
* is a dead zone at the start of each look and reads as the camera
|
|
191
|
+
* being slow to respond rather than as an input being dropped.
|
|
192
|
+
*/
|
|
193
|
+
this.lookDx += dx;
|
|
194
|
+
this.lookDy += dy;
|
|
195
|
+
this.rightLastX = touch.x;
|
|
196
|
+
this.rightLastY = touch.y;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (this.rightMode === 'look' || this.rightMode === 'primary-hold') {
|
|
200
|
+
/*
|
|
201
|
+
* A held thumb still looks, and keeps holding while it does.
|
|
202
|
+
*
|
|
203
|
+
* The hold used to be a terminal state: once a motionless touch resolved
|
|
204
|
+
* into it, the same thumb could no longer move the camera for the rest of
|
|
205
|
+
* its life. That is the wrong half of the input to freeze — the held form
|
|
206
|
+
* is for verbs that last (a glide), and a verb that lasts is exactly the
|
|
207
|
+
* one you need to steer through.
|
|
208
|
+
*/
|
|
209
|
+
this.lookDx += touch.x - this.rightLastX;
|
|
210
|
+
this.lookDy += touch.y - this.rightLastY;
|
|
211
|
+
}
|
|
212
|
+
this.rightLastX = touch.x;
|
|
213
|
+
this.rightLastY = touch.y;
|
|
214
|
+
}
|
|
215
|
+
onEnd(touch, durationMs) {
|
|
216
|
+
if (touch.id === this.leftId) {
|
|
217
|
+
this.leftId = null;
|
|
218
|
+
this.moveX = 0;
|
|
219
|
+
this.moveY = 0;
|
|
220
|
+
if (this.stickBase !== null)
|
|
221
|
+
this.stickBase.hidden = true;
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (touch.id !== this.rightId) {
|
|
225
|
+
this.endExtra(touch, durationMs);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
/*
|
|
229
|
+
* `primary-hold` counts as a tap here, and that is the fix. It is the state
|
|
230
|
+
* a still thumb is promoted into after `holdResolveMs`, so the old test —
|
|
231
|
+
* fire only from `pending` — threw away every tap slower than 90 ms, which
|
|
232
|
+
* on a phone is most of them. `isTapRelease` decides on travel and duration
|
|
233
|
+
* instead, which is what a tap actually is.
|
|
234
|
+
*/
|
|
235
|
+
if ((this.rightMode === 'pending' || this.rightMode === 'primary-hold') &&
|
|
236
|
+
this.isTap(this.rightTravel, durationMs)) {
|
|
237
|
+
this.primaryQueued = true;
|
|
238
|
+
}
|
|
239
|
+
if (this.rightMode === 'secondary') {
|
|
240
|
+
this.ownerSliding = false;
|
|
241
|
+
this.refreshSecondary();
|
|
242
|
+
}
|
|
243
|
+
if (this.rightMode === 'primary-hold')
|
|
244
|
+
this.primaryHeld = false;
|
|
245
|
+
this.rightId = null;
|
|
246
|
+
this.rightStart = null;
|
|
247
|
+
this.rightMode = 'pending';
|
|
248
|
+
this.rightTravel = 0;
|
|
249
|
+
}
|
|
250
|
+
claimExtra(id) {
|
|
251
|
+
for (let i = 0; i < EXTRA_SLOTS; i++) {
|
|
252
|
+
if (this.extraIds[i] !== NO_TOUCH)
|
|
253
|
+
continue;
|
|
254
|
+
this.extraIds[i] = id;
|
|
255
|
+
this.extraTravel[i] = 0;
|
|
256
|
+
this.extraSliding[i] = 0;
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
extraSlot(id) {
|
|
261
|
+
for (let i = 0; i < EXTRA_SLOTS; i++) {
|
|
262
|
+
if (this.extraIds[i] === id)
|
|
263
|
+
return i;
|
|
264
|
+
}
|
|
265
|
+
return -1;
|
|
266
|
+
}
|
|
267
|
+
moveExtra(touch) {
|
|
268
|
+
const slot = this.extraSlot(touch.id);
|
|
269
|
+
if (slot < 0)
|
|
270
|
+
return;
|
|
271
|
+
const dx = touch.x - touch.startX;
|
|
272
|
+
const dy = touch.y - touch.startY;
|
|
273
|
+
this.extraTravel[slot] = Math.max(this.extraTravel[slot] ?? 0, Math.hypot(dx, dy));
|
|
274
|
+
// A flick still reads as one from any finger. A drag does not become a
|
|
275
|
+
// look: the owning thumb has the camera, and a second one joining it would
|
|
276
|
+
// make every two-thumb frame a fight over the same axis.
|
|
277
|
+
if (this.extraSliding[slot] === 0 && this.classify(touch, dx, dy) === 'secondary') {
|
|
278
|
+
this.extraSliding[slot] = 1;
|
|
279
|
+
this.secondaryHeld = true;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
endExtra(touch, durationMs) {
|
|
283
|
+
const slot = this.extraSlot(touch.id);
|
|
284
|
+
if (slot < 0)
|
|
285
|
+
return;
|
|
286
|
+
if (this.isTap(this.extraTravel[slot] ?? 0, durationMs))
|
|
287
|
+
this.primaryQueued = true;
|
|
288
|
+
this.extraIds[slot] = NO_TOUCH;
|
|
289
|
+
this.extraSliding[slot] = 0;
|
|
290
|
+
this.refreshSecondary();
|
|
291
|
+
}
|
|
292
|
+
/** The secondary is held while *any* touch in the zone is holding it. */
|
|
293
|
+
refreshSecondary() {
|
|
294
|
+
let held = this.ownerSliding;
|
|
295
|
+
for (let i = 0; i < EXTRA_SLOTS && !held; i++)
|
|
296
|
+
held = this.extraSliding[i] === 1;
|
|
297
|
+
this.secondaryHeld = held;
|
|
298
|
+
}
|
|
299
|
+
classify(touch, dx, dy) {
|
|
300
|
+
return classifyRightGesture(dx, dy, performance.now() - touch.startTime, {
|
|
301
|
+
gestureMovePx: this.gestureMovePx,
|
|
302
|
+
swipeMaxMs: this.swipeMaxMs,
|
|
303
|
+
swipeDominance: this.swipeDominance,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
isTap(travelPx, durationMs) {
|
|
307
|
+
return isTapRelease(travelPx, durationMs, {
|
|
308
|
+
gestureMovePx: this.gestureMovePx,
|
|
309
|
+
tapMaxMs: this.tapMaxMs,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
showStick(x, y) {
|
|
313
|
+
if (this.stickBase !== null) {
|
|
314
|
+
this.stickBase.style.left = `${x}px`;
|
|
315
|
+
this.stickBase.style.top = `${y}px`;
|
|
316
|
+
this.stickBase.hidden = false;
|
|
317
|
+
}
|
|
318
|
+
if (this.stickNub !== null)
|
|
319
|
+
this.stickNub.style.transform = 'translate3d(0, 0, 0)';
|
|
320
|
+
}
|
|
321
|
+
updateStick(touch) {
|
|
322
|
+
const dx = touch.x - touch.startX;
|
|
323
|
+
const dy = touch.y - touch.startY;
|
|
324
|
+
const length = Math.hypot(dx, dy);
|
|
325
|
+
const strength = Math.min(length / this.stickRadiusPx, 1);
|
|
326
|
+
if (strength < this.stickDeadzone || length < 1e-6) {
|
|
327
|
+
this.moveX = 0;
|
|
328
|
+
this.moveY = 0;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.moveX = (dx / length) * strength;
|
|
332
|
+
this.moveY = (-dy / length) * strength;
|
|
333
|
+
}
|
|
334
|
+
const clampedLength = Math.min(length, this.stickRadiusPx);
|
|
335
|
+
const nx = length > 1e-6 ? (dx / length) * clampedLength : 0;
|
|
336
|
+
const ny = length > 1e-6 ? (dy / length) * clampedLength : 0;
|
|
337
|
+
if (this.stickNub !== null) {
|
|
338
|
+
this.stickNub.style.transform = `translate3d(${nx}px, ${ny}px, 0)`;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
validateOptions() {
|
|
342
|
+
if (this.splitRatio <= 0 || this.splitRatio >= 1) {
|
|
343
|
+
throw new Error(`TouchControls.splitRatio must be between 0 and 1, got ${this.splitRatio}`);
|
|
344
|
+
}
|
|
345
|
+
if (this.stickRadiusPx <= 0) {
|
|
346
|
+
throw new Error(`TouchControls.stickRadiusPx must be positive, got ${this.stickRadiusPx}`);
|
|
347
|
+
}
|
|
348
|
+
if (this.stickDeadzone < 0 || this.stickDeadzone >= 1) {
|
|
349
|
+
throw new Error(`TouchControls.stickDeadzone must be in [0, 1), got ${this.stickDeadzone}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `INPUT` covers buttons and checkboxes too, which do not take text — but a Space on a
|
|
3
|
+
* focused button is the browser's own "press it", so leaving those alone is right for
|
|
4
|
+
* the same reason.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isTypingTarget(target: EventTarget | null): boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the keystroke belongs to a text field rather than to the game.
|
|
3
|
+
*
|
|
4
|
+
* An input layer that swallows keys while somebody is typing is a text field that
|
|
5
|
+
* silently drops characters. A consumer found this the hard way: it asks for
|
|
6
|
+
* `Space`, `KeyE` and the arrows to be `preventDefault`ed — reasonably, since Space
|
|
7
|
+
* scrolls the page and the arrows move it — and a player writing a bug report could
|
|
8
|
+
* not type a space, an `e`, or move the caret.
|
|
9
|
+
*
|
|
10
|
+
* Game-agnostic and deliberately conservative: it asks what the event is *for*, not
|
|
11
|
+
* what the game wants. A consumer that genuinely wants keys while a field has focus
|
|
12
|
+
* can read `keys` directly; nothing here stops that.
|
|
13
|
+
*/
|
|
14
|
+
const TYPING_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);
|
|
15
|
+
/**
|
|
16
|
+
* `INPUT` covers buttons and checkboxes too, which do not take text — but a Space on a
|
|
17
|
+
* focused button is the browser's own "press it", so leaving those alone is right for
|
|
18
|
+
* the same reason.
|
|
19
|
+
*/
|
|
20
|
+
export function isTypingTarget(target) {
|
|
21
|
+
if (target === null)
|
|
22
|
+
return false;
|
|
23
|
+
const element = target;
|
|
24
|
+
if (typeof element.tagName === 'string' && TYPING_TAGS.has(element.tagName))
|
|
25
|
+
return true;
|
|
26
|
+
return element.isContentEditable === true;
|
|
27
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How big a piece of geometry is, and where it sits.
|
|
3
|
+
*
|
|
4
|
+
* **Nothing in this engine knew either until now**, which is why there has never been a frustum
|
|
5
|
+
* test: a renderer cannot decide whether a mesh is on screen without knowing what part of space
|
|
6
|
+
* it occupies. `CAPABILITIES.md` recorded the consequence — no draw culling at all, only backface
|
|
7
|
+
* — and every track on the roadmap that wants culling, level of detail, a broadphase or a
|
|
8
|
+
* bounding gizmo wants this object first.
|
|
9
|
+
*
|
|
10
|
+
* Both a box and a sphere, because the two answer different questions cheaply. A sphere survives
|
|
11
|
+
* an arbitrary transform as a sphere, which makes it the right shape for a per-draw visibility
|
|
12
|
+
* test; a box is tighter and is what a physics broadphase and an editor's selection want.
|
|
13
|
+
*/
|
|
14
|
+
export interface Bounds {
|
|
15
|
+
/** The axis-aligned box, in the geometry's own space. */
|
|
16
|
+
readonly min: Float32Array;
|
|
17
|
+
readonly max: Float32Array;
|
|
18
|
+
/** The box's midpoint, which is what the radius is measured from. */
|
|
19
|
+
readonly centre: Float32Array;
|
|
20
|
+
/** The furthest vertex from `centre`. See `boundsOfPositions` for why not half the diagonal. */
|
|
21
|
+
radius: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function createBounds(): Bounds;
|
|
24
|
+
/**
|
|
25
|
+
* Measure a vertex array, into bounds the caller owns.
|
|
26
|
+
*
|
|
27
|
+
* **Two passes, and the second one is the point.** The first finds the box; the second finds the
|
|
28
|
+
* furthest vertex from the box's midpoint. Half the diagonal would be one pass and would be the
|
|
29
|
+
* box's circumradius — right for a box, and loose for anything rounded, which is most geometry.
|
|
30
|
+
* A sphere that reaches the corners of a box the geometry never visits answers every test too
|
|
31
|
+
* generously, and the cost is a second walk of an array that is already in cache.
|
|
32
|
+
*
|
|
33
|
+
* **Measured about the box's centre and never about the origin.** A mesh modelled a kilometre
|
|
34
|
+
* from the origin gets a kilometre-wide sphere the other way, and culls nothing for the rest of
|
|
35
|
+
* its life.
|
|
36
|
+
*
|
|
37
|
+
* Allocates nothing: `out` is the caller's and is returned for convenience.
|
|
38
|
+
*/
|
|
39
|
+
export declare function boundsOfPositions(positions: Float32Array, out: Bounds): Bounds;
|
|
40
|
+
/**
|
|
41
|
+
* Bounds for a box the caller names itself, into bounds the caller owns.
|
|
42
|
+
*
|
|
43
|
+
* **`boundsOfPositions` was the only way to make one of these, and it demands a vertex array.**
|
|
44
|
+
* A consumer that wants to ask the renderer about a region rather than about a mesh — a streamed
|
|
45
|
+
* world testing its squares, a trigger volume, a room — has no vertices to hand it, so making the
|
|
46
|
+
* object meant filling `centre` and `radius` by hand and getting the sphere's invariant right. A
|
|
47
|
+
* consumer measured what that costs: with one mesh per material per square, a two-kilometre ring
|
|
48
|
+
* is 1,618 draws it walks one at a time, where the world itself knows 68 squares it could have
|
|
49
|
+
* tested instead.
|
|
50
|
+
*
|
|
51
|
+
* **Here the radius *is* half the diagonal**, which is the opposite of what `boundsOfPositions`
|
|
52
|
+
* does and is right for the same reason. That function measures the furthest actual vertex,
|
|
53
|
+
* because a mesh's corners are usually empty; a named box has no vertices and its corners are
|
|
54
|
+
* exactly the points it promises to contain, so anything tighter would report a region as off
|
|
55
|
+
* screen while part of it is on.
|
|
56
|
+
*
|
|
57
|
+
* Degenerate is allowed: a flat square gives a real box and a real radius, and a caller that
|
|
58
|
+
* passes a max below a min gets those values back rather than a silent swap — the box it asked
|
|
59
|
+
* for is the box it gets, and an inverted one is a bug at the call site.
|
|
60
|
+
*/
|
|
61
|
+
export declare function boundsOfBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, out: Bounds): Bounds;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export function createBounds() {
|
|
2
|
+
return {
|
|
3
|
+
min: new Float32Array(3),
|
|
4
|
+
max: new Float32Array(3),
|
|
5
|
+
centre: new Float32Array(3),
|
|
6
|
+
radius: 0,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Measure a vertex array, into bounds the caller owns.
|
|
11
|
+
*
|
|
12
|
+
* **Two passes, and the second one is the point.** The first finds the box; the second finds the
|
|
13
|
+
* furthest vertex from the box's midpoint. Half the diagonal would be one pass and would be the
|
|
14
|
+
* box's circumradius — right for a box, and loose for anything rounded, which is most geometry.
|
|
15
|
+
* A sphere that reaches the corners of a box the geometry never visits answers every test too
|
|
16
|
+
* generously, and the cost is a second walk of an array that is already in cache.
|
|
17
|
+
*
|
|
18
|
+
* **Measured about the box's centre and never about the origin.** A mesh modelled a kilometre
|
|
19
|
+
* from the origin gets a kilometre-wide sphere the other way, and culls nothing for the rest of
|
|
20
|
+
* its life.
|
|
21
|
+
*
|
|
22
|
+
* Allocates nothing: `out` is the caller's and is returned for convenience.
|
|
23
|
+
*/
|
|
24
|
+
export function boundsOfPositions(positions, out) {
|
|
25
|
+
/* Whole vertices only. A trailing partial one has no third component and cannot be placed;
|
|
26
|
+
reading it as a zero would drag the box to the origin. */
|
|
27
|
+
const vertices = Math.floor(positions.length / 3);
|
|
28
|
+
if (vertices === 0) {
|
|
29
|
+
out.min.fill(0);
|
|
30
|
+
out.max.fill(0);
|
|
31
|
+
out.centre.fill(0);
|
|
32
|
+
out.radius = 0;
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
let minX = Infinity;
|
|
36
|
+
let minY = Infinity;
|
|
37
|
+
let minZ = Infinity;
|
|
38
|
+
let maxX = -Infinity;
|
|
39
|
+
let maxY = -Infinity;
|
|
40
|
+
let maxZ = -Infinity;
|
|
41
|
+
for (let i = 0; i < vertices; i += 1) {
|
|
42
|
+
const x = positions[i * 3] ?? 0;
|
|
43
|
+
const y = positions[i * 3 + 1] ?? 0;
|
|
44
|
+
const z = positions[i * 3 + 2] ?? 0;
|
|
45
|
+
if (x < minX)
|
|
46
|
+
minX = x;
|
|
47
|
+
if (y < minY)
|
|
48
|
+
minY = y;
|
|
49
|
+
if (z < minZ)
|
|
50
|
+
minZ = z;
|
|
51
|
+
if (x > maxX)
|
|
52
|
+
maxX = x;
|
|
53
|
+
if (y > maxY)
|
|
54
|
+
maxY = y;
|
|
55
|
+
if (z > maxZ)
|
|
56
|
+
maxZ = z;
|
|
57
|
+
}
|
|
58
|
+
out.min[0] = minX;
|
|
59
|
+
out.min[1] = minY;
|
|
60
|
+
out.min[2] = minZ;
|
|
61
|
+
out.max[0] = maxX;
|
|
62
|
+
out.max[1] = maxY;
|
|
63
|
+
out.max[2] = maxZ;
|
|
64
|
+
const cx = (minX + maxX) * 0.5;
|
|
65
|
+
const cy = (minY + maxY) * 0.5;
|
|
66
|
+
const cz = (minZ + maxZ) * 0.5;
|
|
67
|
+
out.centre[0] = cx;
|
|
68
|
+
out.centre[1] = cy;
|
|
69
|
+
out.centre[2] = cz;
|
|
70
|
+
let furthest = 0;
|
|
71
|
+
for (let i = 0; i < vertices; i += 1) {
|
|
72
|
+
const dx = (positions[i * 3] ?? 0) - cx;
|
|
73
|
+
const dy = (positions[i * 3 + 1] ?? 0) - cy;
|
|
74
|
+
const dz = (positions[i * 3 + 2] ?? 0) - cz;
|
|
75
|
+
const squared = dx * dx + dy * dy + dz * dz;
|
|
76
|
+
if (squared > furthest)
|
|
77
|
+
furthest = squared;
|
|
78
|
+
}
|
|
79
|
+
out.radius = Math.sqrt(furthest);
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Bounds for a box the caller names itself, into bounds the caller owns.
|
|
84
|
+
*
|
|
85
|
+
* **`boundsOfPositions` was the only way to make one of these, and it demands a vertex array.**
|
|
86
|
+
* A consumer that wants to ask the renderer about a region rather than about a mesh — a streamed
|
|
87
|
+
* world testing its squares, a trigger volume, a room — has no vertices to hand it, so making the
|
|
88
|
+
* object meant filling `centre` and `radius` by hand and getting the sphere's invariant right. A
|
|
89
|
+
* consumer measured what that costs: with one mesh per material per square, a two-kilometre ring
|
|
90
|
+
* is 1,618 draws it walks one at a time, where the world itself knows 68 squares it could have
|
|
91
|
+
* tested instead.
|
|
92
|
+
*
|
|
93
|
+
* **Here the radius *is* half the diagonal**, which is the opposite of what `boundsOfPositions`
|
|
94
|
+
* does and is right for the same reason. That function measures the furthest actual vertex,
|
|
95
|
+
* because a mesh's corners are usually empty; a named box has no vertices and its corners are
|
|
96
|
+
* exactly the points it promises to contain, so anything tighter would report a region as off
|
|
97
|
+
* screen while part of it is on.
|
|
98
|
+
*
|
|
99
|
+
* Degenerate is allowed: a flat square gives a real box and a real radius, and a caller that
|
|
100
|
+
* passes a max below a min gets those values back rather than a silent swap — the box it asked
|
|
101
|
+
* for is the box it gets, and an inverted one is a bug at the call site.
|
|
102
|
+
*/
|
|
103
|
+
export function boundsOfBox(minX, minY, minZ, maxX, maxY, maxZ, out) {
|
|
104
|
+
out.min[0] = minX;
|
|
105
|
+
out.min[1] = minY;
|
|
106
|
+
out.min[2] = minZ;
|
|
107
|
+
out.max[0] = maxX;
|
|
108
|
+
out.max[1] = maxY;
|
|
109
|
+
out.max[2] = maxZ;
|
|
110
|
+
const cx = (minX + maxX) * 0.5;
|
|
111
|
+
const cy = (minY + maxY) * 0.5;
|
|
112
|
+
const cz = (minZ + maxZ) * 0.5;
|
|
113
|
+
out.centre[0] = cx;
|
|
114
|
+
out.centre[1] = cy;
|
|
115
|
+
out.centre[2] = cz;
|
|
116
|
+
const dx = maxX - cx;
|
|
117
|
+
const dy = maxY - cy;
|
|
118
|
+
const dz = maxZ - cz;
|
|
119
|
+
out.radius = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** RGB triplet, each channel in [0, 1]. Mutable tuple for direct uniform upload. */
|
|
2
|
+
export type Vec3 = [number, number, number];
|
|
3
|
+
/** hue in degrees (any range), saturation/lightness in [0, 1]. */
|
|
4
|
+
export declare function hslToRgb(hue: number, saturation: number, lightness: number): Vec3;
|
|
5
|
+
export declare function mixColor(a: Vec3, b: Vec3, t: number): Vec3;
|
|
6
|
+
/** In-place `mixColor` for per-frame use — allocating here would be a hot-path bug. */
|
|
7
|
+
export declare function mixColorInto(out: Vec3, a: Vec3, b: Vec3, t: number): void;
|
|
8
|
+
export declare function scaleColor(color: Vec3, factor: number): Vec3;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** hue in degrees (any range), saturation/lightness in [0, 1]. */
|
|
2
|
+
export function hslToRgb(hue, saturation, lightness) {
|
|
3
|
+
const h = ((hue % 360) + 360) % 360;
|
|
4
|
+
const c = (1 - Math.abs(2 * lightness - 1)) * saturation;
|
|
5
|
+
const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
|
|
6
|
+
const m = lightness - c / 2;
|
|
7
|
+
let r = 0;
|
|
8
|
+
let g = 0;
|
|
9
|
+
let b = 0;
|
|
10
|
+
if (h < 60)
|
|
11
|
+
[r, g, b] = [c, x, 0];
|
|
12
|
+
else if (h < 120)
|
|
13
|
+
[r, g, b] = [x, c, 0];
|
|
14
|
+
else if (h < 180)
|
|
15
|
+
[r, g, b] = [0, c, x];
|
|
16
|
+
else if (h < 240)
|
|
17
|
+
[r, g, b] = [0, x, c];
|
|
18
|
+
else if (h < 300)
|
|
19
|
+
[r, g, b] = [x, 0, c];
|
|
20
|
+
else
|
|
21
|
+
[r, g, b] = [c, 0, x];
|
|
22
|
+
return [r + m, g + m, b + m];
|
|
23
|
+
}
|
|
24
|
+
export function mixColor(a, b, t) {
|
|
25
|
+
return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
|
|
26
|
+
}
|
|
27
|
+
/** In-place `mixColor` for per-frame use — allocating here would be a hot-path bug. */
|
|
28
|
+
export function mixColorInto(out, a, b, t) {
|
|
29
|
+
out[0] = a[0] + (b[0] - a[0]) * t;
|
|
30
|
+
out[1] = a[1] + (b[1] - a[1]) * t;
|
|
31
|
+
out[2] = a[2] + (b[2] - a[2]) * t;
|
|
32
|
+
}
|
|
33
|
+
export function scaleColor(color, factor) {
|
|
34
|
+
return [color[0] * factor, color[1] * factor, color[2] * factor];
|
|
35
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcendentals that give the same bits on every JavaScript engine.
|
|
3
|
+
*
|
|
4
|
+
* **Not more accurate than `Math`, and that is not what they are for.** These are within a couple
|
|
5
|
+
* of units in the last place of correctly rounded, which is about what a platform `sin` gives you.
|
|
6
|
+
* What they are is *reproducible*: ECMAScript declines to specify `sin`, `cos`, `exp`, `acos` and
|
|
7
|
+
* eighteen more, so two engines may differ by an ulp, and an ulp is enough to make two peers running
|
|
8
|
+
* the same simulation disagree — first invisibly, then completely.
|
|
9
|
+
*
|
|
10
|
+
* `scripts/determinism.mjs` is the gate that refuses the unspecified ones inside the simulation set
|
|
11
|
+
* and names the twenty-two. Its header carries the other half of the argument: `+ - * /` are IEEE
|
|
12
|
+
* 754 operations by specification, JavaScript permits no fused-multiply-add contraction, and
|
|
13
|
+
* `Math.sqrt` is required correctly rounded and is *not* on that list. **So everything below uses
|
|
14
|
+
* only those five operations**, which is the whole design: reproducibility by construction rather
|
|
15
|
+
* than by hoping two engines chose the same algorithm.
|
|
16
|
+
*
|
|
17
|
+
* ---
|
|
18
|
+
*
|
|
19
|
+
* ## What is here, and what is deliberately not
|
|
20
|
+
*
|
|
21
|
+
* `exactSin`, `exactCos`, `exactExp`, `exactAcos`. Four, because four is what the engine and its
|
|
22
|
+
* first consumer actually reach for: the terrain binding's slope angle needs `acos`, a lockstep
|
|
23
|
+
* fixture rotating anything needs `sin` and `cos`, and exponential decay needs `exp`.
|
|
24
|
+
*
|
|
25
|
+
* **`atan2` is absent.** It is the obvious fifth and nothing here needs one: `shape.ts` sorts by a
|
|
26
|
+
* comparison key computed from two in-plane axes rather than by an angle, and `joints.ts` compares
|
|
27
|
+
* a quaternion component against a half-angle's sine. *Reversed by* a site that genuinely needs a
|
|
28
|
+
* signed angle from two components, at which point it arrives with its own golden vectors.
|
|
29
|
+
*
|
|
30
|
+
* ## Nothing in core imports these
|
|
31
|
+
*
|
|
32
|
+
* Deliberately. `core-only` is the one size figure in this repository that every consumer pays, and
|
|
33
|
+
* a module reachable from `createRenderer` is in it whether anybody calls it or not. These are
|
|
34
|
+
* reached by the script bindings and by consumers who ask for them, so tree-shaking keeps them out
|
|
35
|
+
* of a bundle that does not, which is measured rather than assumed.
|
|
36
|
+
*
|
|
37
|
+
* ## The coefficients
|
|
38
|
+
*
|
|
39
|
+
* The polynomial and rational coefficients are fdlibm's, which is the ancestor of most platform
|
|
40
|
+
* libms and is public domain. They are written as literals: **a literal is the same number on
|
|
41
|
+
* every engine, which is the only property being bought.** Their provenance matters less than their
|
|
42
|
+
* fixity — a coefficient somebody re-derived to one more digit is a different function, and
|
|
43
|
+
* `exact.test.ts`'s golden bit patterns are what would catch that.
|
|
44
|
+
*/
|
|
45
|
+
/** `Math.sin`, reproducibly. NaN in, NaN out; an infinity answers NaN, as `Math.sin` does. */
|
|
46
|
+
export declare function exactSin(x: number): number;
|
|
47
|
+
/** `Math.cos`, reproducibly. */
|
|
48
|
+
export declare function exactCos(x: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* `Math.exp`, reproducibly.
|
|
51
|
+
*
|
|
52
|
+
* Reduce by a multiple of ln 2 into [-ln2/2, ln2/2], sum the Taylor series there, and scale by a
|
|
53
|
+
* power of two. **A degree-14 series and not a shorter minimax**, because on that interval the
|
|
54
|
+
* fifteenth term is about 4e-20 — below the precision of a double — so the series is exact to the
|
|
55
|
+
* representation and there is nothing a fitted polynomial would buy.
|
|
56
|
+
*/
|
|
57
|
+
export declare function exactExp(x: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* `Math.acos`, reproducibly. Outside [-1, 1] this answers NaN, as `Math.acos` does.
|
|
60
|
+
*
|
|
61
|
+
* Three branches rather than one, and the split at ±0.5 is the reason it is accurate near the ends:
|
|
62
|
+
* `acos` has infinite derivative at ±1, so a polynomial in `x` loses its footing there. Substituting
|
|
63
|
+
* `s = sqrt((1 ∓ x)/2)` moves the awkward point to zero, where a polynomial is comfortable — which
|
|
64
|
+
* is also why `sqrt` being exactly rounded matters here rather than being a convenience.
|
|
65
|
+
*/
|
|
66
|
+
export declare function exactAcos(x: number): number;
|