@thunderclap-engine/engine 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +390 -0
- package/LICENSE +21 -0
- package/README.md +333 -2
- package/dist/analytics/analytics.d.ts +80 -0
- package/dist/analytics/analytics.js +129 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +1 -0
- package/dist/anim/aim.d.ts +43 -0
- package/dist/anim/aim.js +157 -0
- package/dist/anim/clip.d.ts +98 -0
- package/dist/anim/clip.js +282 -0
- package/dist/anim/compress.d.ts +65 -0
- package/dist/anim/compress.js +339 -0
- package/dist/anim/foot-ik.d.ts +74 -0
- package/dist/anim/foot-ik.js +241 -0
- package/dist/anim/graph.d.ts +153 -0
- package/dist/anim/graph.js +532 -0
- package/dist/anim/ik.d.ts +105 -0
- package/dist/anim/ik.js +435 -0
- package/dist/anim/index.d.ts +36 -0
- package/dist/anim/index.js +21 -0
- package/dist/anim/match.d.ts +66 -0
- package/dist/anim/match.js +153 -0
- package/dist/anim/mixer.d.ts +113 -0
- package/dist/anim/mixer.js +314 -0
- package/dist/anim/morph.d.ts +41 -0
- package/dist/anim/morph.js +94 -0
- package/dist/anim/pose.d.ts +74 -0
- package/dist/anim/pose.js +254 -0
- package/dist/anim/quat.d.ts +44 -0
- package/dist/anim/quat.js +187 -0
- package/dist/anim/retarget.d.ts +97 -0
- package/dist/anim/retarget.js +366 -0
- package/dist/anim/root-motion.d.ts +44 -0
- package/dist/anim/root-motion.js +224 -0
- package/dist/anim/skin-pose.d.ts +39 -0
- package/dist/anim/skin-pose.js +53 -0
- package/dist/anim/socket.d.ts +47 -0
- package/dist/anim/socket.js +84 -0
- package/dist/anim/spring-chain.d.ts +73 -0
- package/dist/anim/spring-chain.js +294 -0
- package/dist/assets/atlas.d.ts +90 -0
- package/dist/assets/atlas.js +212 -0
- package/dist/assets/baked.d.ts +33 -0
- package/dist/assets/baked.js +38 -0
- package/dist/assets/bundle.d.ts +88 -0
- package/dist/assets/bundle.js +464 -0
- package/dist/assets/cache.d.ts +56 -0
- package/dist/assets/cache.js +123 -0
- package/dist/assets/gltf-load.d.ts +252 -0
- package/dist/assets/gltf-load.js +661 -0
- package/dist/assets/gltf-skin.d.ts +36 -0
- package/dist/assets/gltf-skin.js +109 -0
- package/dist/assets/gltf.d.ts +706 -0
- package/dist/assets/gltf.js +1376 -0
- package/dist/assets/index.d.ts +20 -0
- package/dist/assets/index.js +10 -0
- package/dist/assets/ktx2.d.ts +71 -0
- package/dist/assets/ktx2.js +213 -0
- package/dist/assets/manifest.d.ts +79 -0
- package/dist/assets/manifest.js +7 -0
- package/dist/assets/meshopt.d.ts +23 -0
- package/dist/assets/meshopt.js +403 -0
- package/dist/audio/audio.d.ts +733 -0
- package/dist/audio/audio.js +2013 -0
- package/dist/audio/dsp.d.ts +61 -0
- package/dist/audio/dsp.js +159 -0
- package/dist/audio/duck.d.ts +44 -0
- package/dist/audio/duck.js +101 -0
- package/dist/audio/envelope.d.ts +53 -0
- package/dist/audio/envelope.js +106 -0
- package/dist/audio/index.d.ts +13 -0
- package/dist/audio/index.js +14 -0
- package/dist/audio/music.d.ts +113 -0
- package/dist/audio/music.js +548 -0
- package/dist/audio/occlusion.d.ts +55 -0
- package/dist/audio/occlusion.js +61 -0
- package/dist/audio/persist.d.ts +23 -0
- package/dist/audio/persist.js +27 -0
- package/dist/audio/recipes.d.ts +55 -0
- package/dist/audio/recipes.js +227 -0
- package/dist/audio/send.d.ts +41 -0
- package/dist/audio/send.js +118 -0
- package/dist/audio/sprites.d.ts +59 -0
- package/dist/audio/sprites.js +43 -0
- package/dist/audio/synth.d.ts +103 -0
- package/dist/audio/synth.js +197 -0
- package/dist/audio/variations.d.ts +25 -0
- package/dist/audio/variations.js +55 -0
- package/dist/audio/zones.d.ts +100 -0
- package/dist/audio/zones.js +167 -0
- package/dist/core/detached-surface.d.ts +44 -0
- package/dist/core/detached-surface.js +104 -0
- package/dist/core/events.d.ts +24 -0
- package/dist/core/events.js +43 -0
- package/dist/core/game.d.ts +409 -0
- package/dist/core/game.js +530 -0
- package/dist/core/hash.d.ts +24 -0
- package/dist/core/hash.js +49 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +9 -0
- package/dist/core/loop.d.ts +113 -0
- package/dist/core/loop.js +185 -0
- package/dist/core/math.d.ts +58 -0
- package/dist/core/math.js +210 -0
- package/dist/core/noise.d.ts +40 -0
- package/dist/core/noise.js +247 -0
- package/dist/core/pool.d.ts +42 -0
- package/dist/core/pool.js +85 -0
- package/dist/core/random.d.ts +61 -0
- package/dist/core/random.js +199 -0
- package/dist/core/scene.d.ts +79 -0
- package/dist/core/scene.js +195 -0
- package/dist/core/timer.d.ts +66 -0
- package/dist/core/timer.js +286 -0
- package/dist/fx/billboard-wgsl.d.ts +29 -0
- package/dist/fx/billboard-wgsl.js +158 -0
- package/dist/fx/billboard.d.ts +249 -0
- package/dist/fx/billboard.js +702 -0
- package/dist/fx/debug-draw.d.ts +127 -0
- package/dist/fx/debug-draw.js +523 -0
- package/dist/fx/debug-wgsl.d.ts +7 -0
- package/dist/fx/debug-wgsl.js +32 -0
- package/dist/fx/decals-wgsl.d.ts +15 -0
- package/dist/fx/decals-wgsl.js +173 -0
- package/dist/fx/decals.d.ts +216 -0
- package/dist/fx/decals.js +607 -0
- package/dist/fx/effect.d.ts +129 -0
- package/dist/fx/effect.js +349 -0
- package/dist/fx/effects/hit-spark.json +48 -0
- package/dist/fx/effects/index.d.ts +8 -0
- package/dist/fx/effects/index.js +9 -0
- package/dist/fx/effects/magic-aura.json +47 -0
- package/dist/fx/effects/smoke-puff.json +34 -0
- package/dist/fx/emit-surface.d.ts +40 -0
- package/dist/fx/emit-surface.js +124 -0
- package/dist/fx/flicker.d.ts +30 -0
- package/dist/fx/flicker.js +42 -0
- package/dist/fx/index.d.ts +31 -0
- package/dist/fx/index.js +20 -0
- package/dist/fx/particles-wgsl.d.ts +57 -0
- package/dist/fx/particles-wgsl.js +828 -0
- package/dist/fx/particles.d.ts +566 -0
- package/dist/fx/particles.js +1533 -0
- package/dist/fx/random.d.ts +15 -0
- package/dist/fx/random.js +20 -0
- package/dist/fx/sky-wgsl.d.ts +23 -0
- package/dist/fx/sky-wgsl.js +127 -0
- package/dist/fx/sky.d.ts +96 -0
- package/dist/fx/sky.js +175 -0
- package/dist/fx/text-atlas.d.ts +143 -0
- package/dist/fx/text-atlas.js +327 -0
- package/dist/fx/trail-wgsl.d.ts +11 -0
- package/dist/fx/trail-wgsl.js +42 -0
- package/dist/fx/trail.d.ts +194 -0
- package/dist/fx/trail.js +555 -0
- package/dist/fx/water-wgsl.d.ts +34 -0
- package/dist/fx/water-wgsl.js +197 -0
- package/dist/fx/water.d.ts +176 -0
- package/dist/fx/water.js +371 -0
- package/dist/geom/collide/bvh.d.ts +151 -0
- package/dist/geom/collide/bvh.js +493 -0
- package/dist/geom/collide/debug.d.ts +14 -0
- package/dist/geom/collide/debug.js +74 -0
- package/dist/geom/collide/grid.d.ts +26 -0
- package/dist/geom/collide/grid.js +91 -0
- package/dist/geom/collide/index.d.ts +8 -0
- package/dist/geom/collide/index.js +8 -0
- package/dist/geom/collide/queries.d.ts +70 -0
- package/dist/geom/collide/queries.js +583 -0
- package/dist/geom/collide/serialize.d.ts +14 -0
- package/dist/geom/collide/serialize.js +145 -0
- package/dist/geom/collide/shapes.d.ts +161 -0
- package/dist/geom/collide/shapes.js +686 -0
- package/dist/geom/collide/slide.d.ts +66 -0
- package/dist/geom/collide/slide.js +375 -0
- package/dist/geom/collide/tile-slide.d.ts +88 -0
- package/dist/geom/collide/tile-slide.js +255 -0
- package/dist/geom/geometry.d.ts +95 -0
- package/dist/geom/geometry.js +322 -0
- package/dist/geom/heightfield.d.ts +72 -0
- package/dist/geom/heightfield.js +295 -0
- package/dist/geom/hull.d.ts +27 -0
- package/dist/geom/hull.js +279 -0
- package/dist/geom/index.d.ts +35 -0
- package/dist/geom/index.js +23 -0
- package/dist/geom/iso.d.ts +74 -0
- package/dist/geom/iso.js +89 -0
- package/dist/geom/lod.d.ts +29 -0
- package/dist/geom/lod.js +27 -0
- package/dist/geom/ops.d.ts +47 -0
- package/dist/geom/ops.js +285 -0
- package/dist/geom/primitives.d.ts +97 -0
- package/dist/geom/primitives.js +359 -0
- package/dist/geom/shapes.d.ts +43 -0
- package/dist/geom/shapes.js +88 -0
- package/dist/geom/simplify.d.ts +38 -0
- package/dist/geom/simplify.js +519 -0
- package/dist/geom/split.d.ts +37 -0
- package/dist/geom/split.js +413 -0
- package/dist/geom/sweep.d.ts +83 -0
- package/dist/geom/sweep.js +534 -0
- package/dist/geom/tangents.d.ts +16 -0
- package/dist/geom/tangents.js +124 -0
- package/dist/geom/triangulate.d.ts +19 -0
- package/dist/geom/triangulate.js +147 -0
- package/dist/host/default.d.ts +10 -0
- package/dist/host/default.js +10 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.js +3 -0
- package/dist/host/types.d.ts +144 -0
- package/dist/host/types.js +1 -0
- package/dist/host/web-links.d.ts +38 -0
- package/dist/host/web-links.js +110 -0
- package/dist/host/web.d.ts +30 -0
- package/dist/host/web.js +216 -0
- package/dist/host/xr.d.ts +24 -0
- package/dist/host/xr.js +59 -0
- package/dist/i18n/i18n.d.ts +59 -0
- package/dist/i18n/i18n.js +241 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/message.d.ts +72 -0
- package/dist/i18n/message.js +369 -0
- package/dist/i18n/negotiate.d.ts +17 -0
- package/dist/i18n/negotiate.js +58 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/input/bindings.d.ts +31 -0
- package/dist/input/bindings.js +141 -0
- package/dist/input/clock.d.ts +44 -0
- package/dist/input/clock.js +49 -0
- package/dist/input/follow.d.ts +133 -0
- package/dist/input/follow.js +218 -0
- package/dist/input/gestures.d.ts +281 -0
- package/dist/input/gestures.js +662 -0
- package/dist/input/glyphs.d.ts +35 -0
- package/dist/input/glyphs.js +216 -0
- package/dist/input/gyro.d.ts +85 -0
- package/dist/input/gyro.js +140 -0
- package/dist/input/index.d.ts +19 -0
- package/dist/input/index.js +16 -0
- package/dist/input/input.d.ts +543 -0
- package/dist/input/input.js +1492 -0
- package/dist/input/look.d.ts +327 -0
- package/dist/input/look.js +681 -0
- package/dist/input/magnify.d.ts +177 -0
- package/dist/input/magnify.js +131 -0
- package/dist/input/pointer-dispatch.d.ts +138 -0
- package/dist/input/pointer-dispatch.js +180 -0
- package/dist/input/pointer-router.d.ts +204 -0
- package/dist/input/pointer-router.js +533 -0
- package/dist/input/pointer-sources.d.ts +164 -0
- package/dist/input/pointer-sources.js +306 -0
- package/dist/input/rays.d.ts +138 -0
- package/dist/input/rays.js +615 -0
- package/dist/input/record.d.ts +209 -0
- package/dist/input/record.js +601 -0
- package/dist/input/touch-zones.d.ts +147 -0
- package/dist/input/touch-zones.js +300 -0
- package/dist/input/types.d.ts +158 -0
- package/dist/input/types.js +1 -0
- package/dist/input/xr-source.d.ts +53 -0
- package/dist/input/xr-source.js +164 -0
- package/dist/nav/astar.d.ts +45 -0
- package/dist/nav/astar.js +182 -0
- package/dist/nav/corridor.d.ts +40 -0
- package/dist/nav/corridor.js +95 -0
- package/dist/nav/crowd.d.ts +94 -0
- package/dist/nav/crowd.js +624 -0
- package/dist/nav/flow.d.ts +61 -0
- package/dist/nav/flow.js +193 -0
- package/dist/nav/grid.d.ts +108 -0
- package/dist/nav/grid.js +210 -0
- package/dist/nav/heap.d.ts +22 -0
- package/dist/nav/heap.js +92 -0
- package/dist/nav/index.d.ts +37 -0
- package/dist/nav/index.js +19 -0
- package/dist/nav/mesh/areas.d.ts +44 -0
- package/dist/nav/mesh/areas.js +98 -0
- package/dist/nav/mesh/bake-options.d.ts +33 -0
- package/dist/nav/mesh/bake-options.js +76 -0
- package/dist/nav/mesh/contour.d.ts +22 -0
- package/dist/nav/mesh/contour.js +323 -0
- package/dist/nav/mesh/flow3.d.ts +35 -0
- package/dist/nav/mesh/flow3.js +229 -0
- package/dist/nav/mesh/links.d.ts +38 -0
- package/dist/nav/mesh/links.js +72 -0
- package/dist/nav/mesh/mesh-path.d.ts +152 -0
- package/dist/nav/mesh/mesh-path.js +643 -0
- package/dist/nav/mesh/mesh-reach.d.ts +78 -0
- package/dist/nav/mesh/mesh-reach.js +450 -0
- package/dist/nav/mesh/navmesh.d.ts +117 -0
- package/dist/nav/mesh/navmesh.js +647 -0
- package/dist/nav/mesh/polymesh.d.ts +24 -0
- package/dist/nav/mesh/polymesh.js +384 -0
- package/dist/nav/mesh/regions.d.ts +12 -0
- package/dist/nav/mesh/regions.js +367 -0
- package/dist/nav/mesh/serialize.d.ts +13 -0
- package/dist/nav/mesh/serialize.js +197 -0
- package/dist/nav/mesh/voxelize.d.ts +111 -0
- package/dist/nav/mesh/voxelize.js +552 -0
- package/dist/nav/obstacles.d.ts +75 -0
- package/dist/nav/obstacles.js +294 -0
- package/dist/nav/path.d.ts +59 -0
- package/dist/nav/path.js +177 -0
- package/dist/nav/query-queue.d.ts +46 -0
- package/dist/nav/query-queue.js +308 -0
- package/dist/nav/reach.d.ts +53 -0
- package/dist/nav/reach.js +148 -0
- package/dist/nav/steer.d.ts +36 -0
- package/dist/nav/steer.js +78 -0
- package/dist/platform/boot.d.ts +28 -0
- package/dist/platform/boot.js +43 -0
- package/dist/platform/device-mode.d.ts +40 -0
- package/dist/platform/device-mode.js +104 -0
- package/dist/platform/device.d.ts +31 -0
- package/dist/platform/device.js +91 -0
- package/dist/platform/environment.d.ts +42 -0
- package/dist/platform/environment.js +82 -0
- package/dist/platform/gpu.d.ts +40 -0
- package/dist/platform/gpu.js +57 -0
- package/dist/platform/index.d.ts +18 -0
- package/dist/platform/index.js +10 -0
- package/dist/platform/letterbox.d.ts +43 -0
- package/dist/platform/letterbox.js +57 -0
- package/dist/platform/links.d.ts +20 -0
- package/dist/platform/links.js +43 -0
- package/dist/platform/screens.d.ts +36 -0
- package/dist/platform/screens.js +138 -0
- package/dist/platform/surface.d.ts +72 -0
- package/dist/platform/surface.js +157 -0
- package/dist/platform/xr-fake.d.ts +168 -0
- package/dist/platform/xr-fake.js +434 -0
- package/dist/platform/xr-surface.d.ts +120 -0
- package/dist/platform/xr-surface.js +214 -0
- package/dist/platform/xr-types.d.ts +262 -0
- package/dist/post/ao.d.ts +12 -0
- package/dist/post/ao.js +136 -0
- package/dist/post/blend.d.ts +27 -0
- package/dist/post/blend.js +129 -0
- package/dist/post/depth-pass.d.ts +43 -0
- package/dist/post/depth-pass.js +118 -0
- package/dist/post/dof.d.ts +1 -0
- package/dist/post/dof.js +66 -0
- package/dist/post/exposure.d.ts +80 -0
- package/dist/post/exposure.js +322 -0
- package/dist/post/index.d.ts +12 -0
- package/dist/post/index.js +11 -0
- package/dist/post/lens-dirt.d.ts +13 -0
- package/dist/post/lens-dirt.js +91 -0
- package/dist/post/lut.d.ts +19 -0
- package/dist/post/lut.js +50 -0
- package/dist/post/motion-blur.d.ts +9 -0
- package/dist/post/motion-blur.js +78 -0
- package/dist/post/post-stack.d.ts +302 -0
- package/dist/post/post-stack.js +1137 -0
- package/dist/post/settings.d.ts +485 -0
- package/dist/post/settings.js +416 -0
- package/dist/post/shaders.d.ts +25 -0
- package/dist/post/shaders.js +410 -0
- package/dist/post/ssr.d.ts +16 -0
- package/dist/post/ssr.js +155 -0
- package/dist/post/taa.d.ts +74 -0
- package/dist/post/taa.js +235 -0
- package/dist/post/white-balance.d.ts +25 -0
- package/dist/post/white-balance.js +98 -0
- package/dist/render/bindings.d.ts +98 -0
- package/dist/render/bindings.js +281 -0
- package/dist/render/blend.d.ts +13 -0
- package/dist/render/blend.js +26 -0
- package/dist/render/camera-2d.d.ts +72 -0
- package/dist/render/camera-2d.js +92 -0
- package/dist/render/camera.d.ts +302 -0
- package/dist/render/camera.js +671 -0
- package/dist/render/color.d.ts +16 -0
- package/dist/render/color.js +41 -0
- package/dist/render/compressed.d.ts +104 -0
- package/dist/render/compressed.js +248 -0
- package/dist/render/diagnostics.d.ts +15 -0
- package/dist/render/diagnostics.js +43 -0
- package/dist/render/dynamic-resolution.d.ts +70 -0
- package/dist/render/dynamic-resolution.js +126 -0
- package/dist/render/fake-gpu.d.ts +204 -0
- package/dist/render/fake-gpu.js +426 -0
- package/dist/render/flipbook.d.ts +56 -0
- package/dist/render/flipbook.js +87 -0
- package/dist/render/frame.d.ts +278 -0
- package/dist/render/frame.js +174 -0
- package/dist/render/fullscreen.d.ts +54 -0
- package/dist/render/fullscreen.js +91 -0
- package/dist/render/gpu-timer.d.ts +73 -0
- package/dist/render/gpu-timer.js +186 -0
- package/dist/render/index.d.ts +53 -0
- package/dist/render/index.js +29 -0
- package/dist/render/instance-list.d.ts +185 -0
- package/dist/render/instance-list.js +547 -0
- package/dist/render/lights.d.ts +181 -0
- package/dist/render/lights.js +233 -0
- package/dist/render/lod.d.ts +54 -0
- package/dist/render/lod.js +52 -0
- package/dist/render/material.d.ts +165 -0
- package/dist/render/material.js +292 -0
- package/dist/render/mesh.d.ts +284 -0
- package/dist/render/mesh.js +472 -0
- package/dist/render/mipmap.d.ts +16 -0
- package/dist/render/mipmap.js +121 -0
- package/dist/render/parallax.d.ts +50 -0
- package/dist/render/parallax.js +47 -0
- package/dist/render/pbr-wgsl.d.ts +31 -0
- package/dist/render/pbr-wgsl.js +119 -0
- package/dist/render/ping-pong.d.ts +42 -0
- package/dist/render/ping-pong.js +74 -0
- package/dist/render/renderer.d.ts +741 -0
- package/dist/render/renderer.js +2486 -0
- package/dist/render/scene-pipelines.d.ts +44 -0
- package/dist/render/scene-pipelines.js +92 -0
- package/dist/render/scene-target.d.ts +170 -0
- package/dist/render/scene-target.js +450 -0
- package/dist/render/shadow.d.ts +74 -0
- package/dist/render/shadow.js +208 -0
- package/dist/render/skin.d.ts +112 -0
- package/dist/render/skin.js +240 -0
- package/dist/render/snapshot.d.ts +36 -0
- package/dist/render/snapshot.js +34 -0
- package/dist/render/standard.d.ts +162 -0
- package/dist/render/standard.js +263 -0
- package/dist/render/texture.d.ts +142 -0
- package/dist/render/texture.js +228 -0
- package/dist/render/tile-layer.d.ts +110 -0
- package/dist/render/tile-layer.js +304 -0
- package/dist/render/transform.d.ts +115 -0
- package/dist/render/transform.js +318 -0
- package/dist/render/wgsl.d.ts +131 -0
- package/dist/render/wgsl.js +528 -0
- package/dist/save/codec.d.ts +49 -0
- package/dist/save/codec.js +169 -0
- package/dist/save/index.d.ts +8 -0
- package/dist/save/index.js +8 -0
- package/dist/save/journal.d.ts +24 -0
- package/dist/save/journal.js +102 -0
- package/dist/save/migrate.d.ts +15 -0
- package/dist/save/migrate.js +37 -0
- package/dist/save/schema.d.ts +72 -0
- package/dist/save/schema.js +154 -0
- package/dist/save/settings.d.ts +28 -0
- package/dist/save/settings.js +59 -0
- package/dist/save/slots.d.ts +56 -0
- package/dist/save/slots.js +200 -0
- package/dist/save/storage.d.ts +35 -0
- package/dist/save/storage.js +62 -0
- package/dist/save/store.d.ts +114 -0
- package/dist/save/store.js +269 -0
- package/dist/testing/fake-host.d.ts +103 -0
- package/dist/testing/fake-host.js +163 -0
- package/dist/testing/fixed-clock.d.ts +25 -0
- package/dist/testing/fixed-clock.js +30 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/test-game.d.ts +76 -0
- package/dist/testing/test-game.js +92 -0
- package/dist/tween/ease.d.ts +77 -0
- package/dist/tween/ease.js +192 -0
- package/dist/tween/index.d.ts +8 -0
- package/dist/tween/index.js +7 -0
- package/dist/tween/timeline.d.ts +78 -0
- package/dist/tween/timeline.js +269 -0
- package/dist/tween/tween.d.ts +168 -0
- package/dist/tween/tween.js +320 -0
- package/dist/ui/anchor.d.ts +206 -0
- package/dist/ui/anchor.js +307 -0
- package/dist/ui/caption.d.ts +122 -0
- package/dist/ui/caption.js +286 -0
- package/dist/ui/cursor.d.ts +105 -0
- package/dist/ui/cursor.js +261 -0
- package/dist/ui/dom.d.ts +30 -0
- package/dist/ui/dom.js +92 -0
- package/dist/ui/floats.d.ts +86 -0
- package/dist/ui/floats.js +260 -0
- package/dist/ui/hud.d.ts +198 -0
- package/dist/ui/hud.js +431 -0
- package/dist/ui/index.d.ts +37 -0
- package/dist/ui/index.js +34 -0
- package/dist/ui/inventory-card.d.ts +52 -0
- package/dist/ui/inventory-card.js +173 -0
- package/dist/ui/inventory-context.d.ts +29 -0
- package/dist/ui/inventory-context.js +125 -0
- package/dist/ui/inventory-drag.d.ts +63 -0
- package/dist/ui/inventory-drag.js +394 -0
- package/dist/ui/inventory-grid.d.ts +66 -0
- package/dist/ui/inventory-grid.js +625 -0
- package/dist/ui/inventory-radial.d.ts +39 -0
- package/dist/ui/inventory-radial.js +168 -0
- package/dist/ui/inventory.d.ts +128 -0
- package/dist/ui/inventory.js +154 -0
- package/dist/ui/layout.d.ts +356 -0
- package/dist/ui/layout.js +856 -0
- package/dist/ui/link.d.ts +64 -0
- package/dist/ui/link.js +155 -0
- package/dist/ui/loading.d.ts +40 -0
- package/dist/ui/loading.js +157 -0
- package/dist/ui/loupe.d.ts +74 -0
- package/dist/ui/loupe.js +164 -0
- package/dist/ui/menu-nav.d.ts +33 -0
- package/dist/ui/menu-nav.js +28 -0
- package/dist/ui/minimap-canvas.d.ts +145 -0
- package/dist/ui/minimap-canvas.js +460 -0
- package/dist/ui/notify.d.ts +40 -0
- package/dist/ui/notify.js +141 -0
- package/dist/ui/orb.d.ts +53 -0
- package/dist/ui/orb.js +304 -0
- package/dist/ui/overlay.d.ts +213 -0
- package/dist/ui/overlay.js +394 -0
- package/dist/ui/padnav.d.ts +53 -0
- package/dist/ui/padnav.js +146 -0
- package/dist/ui/perf.d.ts +130 -0
- package/dist/ui/perf.js +329 -0
- package/dist/ui/rotate-card.d.ts +54 -0
- package/dist/ui/rotate-card.js +97 -0
- package/dist/ui/stack.d.ts +128 -0
- package/dist/ui/stack.js +312 -0
- package/dist/ui/styles.d.ts +13 -0
- package/dist/ui/styles.js +200 -0
- package/dist/ui/text-scale.d.ts +67 -0
- package/dist/ui/text-scale.js +102 -0
- package/dist/ui/theme.d.ts +70 -0
- package/dist/ui/theme.js +98 -0
- package/dist/ui/toast.d.ts +23 -0
- package/dist/ui/toast.js +46 -0
- package/dist/ui/tooltip.d.ts +89 -0
- package/dist/ui/tooltip.js +333 -0
- package/dist/ui/widgets-2.d.ts +134 -0
- package/dist/ui/widgets-2.js +399 -0
- package/dist/ui/widgets-3.d.ts +91 -0
- package/dist/ui/widgets-3.js +212 -0
- package/dist/ui/widgets.d.ts +34 -0
- package/dist/ui/widgets.js +50 -0
- package/dist/ui/world-panel/index.d.ts +5 -0
- package/dist/ui/world-panel/index.js +5 -0
- package/dist/ui/world-panel/layout.d.ts +38 -0
- package/dist/ui/world-panel/layout.js +68 -0
- package/dist/ui/world-panel/paint.d.ts +96 -0
- package/dist/ui/world-panel/paint.js +136 -0
- package/dist/ui/world-panel/panel.d.ts +235 -0
- package/dist/ui/world-panel/panel.js +762 -0
- package/dist/ui/world-panel/wgsl.d.ts +10 -0
- package/dist/ui/world-panel/wgsl.js +52 -0
- package/dist/ui/world-panel/widgets.d.ts +207 -0
- package/dist/ui/world-panel/widgets.js +569 -0
- package/dist/voxel/chunks.d.ts +77 -0
- package/dist/voxel/chunks.js +149 -0
- package/dist/voxel/grid.d.ts +84 -0
- package/dist/voxel/grid.js +223 -0
- package/dist/voxel/index.d.ts +22 -0
- package/dist/voxel/index.js +7 -0
- package/dist/voxel/mesher-worker.d.ts +14 -0
- package/dist/voxel/mesher-worker.js +47 -0
- package/dist/voxel/mesher.d.ts +73 -0
- package/dist/voxel/mesher.js +306 -0
- package/dist/voxel/ray.d.ts +32 -0
- package/dist/voxel/ray.js +73 -0
- package/dist/voxel/wgsl.d.ts +16 -0
- package/dist/voxel/wgsl.js +28 -0
- package/dist/voxel/worker-client.d.ts +79 -0
- package/dist/voxel/worker-client.js +122 -0
- package/package.json +177 -3
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The asset cache: one place that knows what a game has loaded and what it costs. Entries are
|
|
3
|
+
* keyed (a uri, usually), loaded once however many callers ask at the same time, refcounted,
|
|
4
|
+
* and sized by the caller (`size(value)`: bytes of GPU memory, of decoded data, whatever the
|
|
5
|
+
* budget counts). Once the total passes `budgetBytes`, unreferenced, unpinned entries go,
|
|
6
|
+
* least recently used first, through `onEvict` so the game frees what the value holds
|
|
7
|
+
* (`scene.destroy()`, `texture.destroy()`).
|
|
8
|
+
*
|
|
9
|
+
* The cache never fetches: `load` is the caller's, typically over the bundle's `read`
|
|
10
|
+
* (`() => read(uri).then(decode)`).
|
|
11
|
+
*/
|
|
12
|
+
/** Make an asset cache (`AssetCache`); see the module comment. */
|
|
13
|
+
export function createAssetCache(opts) {
|
|
14
|
+
if (!(opts.budgetBytes >= 0))
|
|
15
|
+
throw new Error(`asset cache: budgetBytes ${opts.budgetBytes} must be >= 0`);
|
|
16
|
+
// Map order is recency: a touched entry is moved to the end, eviction walks from the start.
|
|
17
|
+
const entries = new Map();
|
|
18
|
+
let bytes = 0;
|
|
19
|
+
let hits = 0;
|
|
20
|
+
let misses = 0;
|
|
21
|
+
let evictions = 0;
|
|
22
|
+
const touch = (key, e) => {
|
|
23
|
+
entries.delete(key);
|
|
24
|
+
entries.set(key, e);
|
|
25
|
+
};
|
|
26
|
+
const remove = (key, e) => {
|
|
27
|
+
entries.delete(key);
|
|
28
|
+
bytes -= e.size;
|
|
29
|
+
opts.onEvict?.(key, e.value);
|
|
30
|
+
};
|
|
31
|
+
const trim = () => {
|
|
32
|
+
if (bytes <= opts.budgetBytes)
|
|
33
|
+
return;
|
|
34
|
+
for (const [key, e] of entries) {
|
|
35
|
+
if (bytes <= opts.budgetBytes)
|
|
36
|
+
break;
|
|
37
|
+
if (e.refs > 0 || e.pinned || !e.loaded)
|
|
38
|
+
continue;
|
|
39
|
+
evictions++;
|
|
40
|
+
remove(key, e);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const entry = (key, op) => {
|
|
44
|
+
const e = entries.get(key);
|
|
45
|
+
if (!e)
|
|
46
|
+
throw new Error(`asset cache: ${op}("${key}"): key not in the cache`);
|
|
47
|
+
return e;
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
acquire(key, load, size) {
|
|
51
|
+
const found = entries.get(key);
|
|
52
|
+
if (found) {
|
|
53
|
+
hits++;
|
|
54
|
+
found.refs++;
|
|
55
|
+
touch(key, found);
|
|
56
|
+
return found.promise;
|
|
57
|
+
}
|
|
58
|
+
misses++;
|
|
59
|
+
const e = {
|
|
60
|
+
promise: undefined,
|
|
61
|
+
value: undefined,
|
|
62
|
+
loaded: false,
|
|
63
|
+
size: 0,
|
|
64
|
+
refs: 1,
|
|
65
|
+
pinned: false,
|
|
66
|
+
};
|
|
67
|
+
e.promise = Promise.resolve()
|
|
68
|
+
.then(load)
|
|
69
|
+
.then((value) => {
|
|
70
|
+
e.value = value;
|
|
71
|
+
e.size = Math.max(0, size(value));
|
|
72
|
+
e.loaded = true;
|
|
73
|
+
if (entries.get(key) === e) {
|
|
74
|
+
bytes += e.size;
|
|
75
|
+
trim();
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}, (err) => {
|
|
79
|
+
if (entries.get(key) === e)
|
|
80
|
+
entries.delete(key);
|
|
81
|
+
throw err;
|
|
82
|
+
});
|
|
83
|
+
entries.set(key, e);
|
|
84
|
+
return e.promise;
|
|
85
|
+
},
|
|
86
|
+
release(key) {
|
|
87
|
+
const e = entry(key, 'release');
|
|
88
|
+
if (e.refs === 0)
|
|
89
|
+
throw new Error(`asset cache: release("${key}"): no reference held`);
|
|
90
|
+
e.refs--;
|
|
91
|
+
if (e.refs === 0) {
|
|
92
|
+
touch(key, e);
|
|
93
|
+
trim();
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
pin(key) {
|
|
97
|
+
entry(key, 'pin').pinned = true;
|
|
98
|
+
},
|
|
99
|
+
unpin(key) {
|
|
100
|
+
entry(key, 'unpin').pinned = false;
|
|
101
|
+
trim();
|
|
102
|
+
},
|
|
103
|
+
has(key) {
|
|
104
|
+
return entries.has(key);
|
|
105
|
+
},
|
|
106
|
+
refs(key) {
|
|
107
|
+
return entries.get(key)?.refs ?? 0;
|
|
108
|
+
},
|
|
109
|
+
dispose(key) {
|
|
110
|
+
const e = entries.get(key);
|
|
111
|
+
if (!e?.loaded)
|
|
112
|
+
return false;
|
|
113
|
+
if (e.refs > 0) {
|
|
114
|
+
throw new Error(`asset cache: dispose("${key}"): ${e.refs} reference(s) still held`);
|
|
115
|
+
}
|
|
116
|
+
remove(key, e);
|
|
117
|
+
return true;
|
|
118
|
+
},
|
|
119
|
+
get stats() {
|
|
120
|
+
return { bytes, entries: entries.size, hits, misses, evictions };
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `loadGltf`: a parsed `GltfDocument` → engine meshes (`VERTEX_LAYOUT_3D`, the tangent layout
|
|
3
|
+
* for primitives with `TANGENT`, the skinned layout for skinned ones when a palette is given),
|
|
4
|
+
* one `Transform` per node, one `Texture` per (image, colour space) a material reads, one
|
|
5
|
+
* standard PBR `Material` per glTF material (every map, factor, sampler, alpha mode and
|
|
6
|
+
* `KHR_texture_transform` carried over; `opts.lit: 'lit'` keeps the older base-colour-only
|
|
7
|
+
* material), and a `GltfScene` whose `draw(frame)` pushes one instance per (node, primitive)
|
|
8
|
+
* with no allocation. Images decode through `createImageBitmap` (or `opts.decodeImage`);
|
|
9
|
+
* external URIs come from `opts.resources`, fetched by the game. The engine fetches nothing.
|
|
10
|
+
*
|
|
11
|
+
* Morph targets: a mesh with targets keeps its primitives' base vertex buffers on the CPU and
|
|
12
|
+
* blends them through `anim`'s `createMorphBlender` into a second buffer `draw` uploads with
|
|
13
|
+
* `Mesh.update` when `scene.morph(node).apply()` reported a change. Meshes without targets keep
|
|
14
|
+
* nothing on the CPU.
|
|
15
|
+
*
|
|
16
|
+
* Lights and cameras: `scene.lights` holds the file's `KHR_lights_punctual` lights as the
|
|
17
|
+
* render module's `SunLight` / `PointLight` / `SpotLight` records (push them into
|
|
18
|
+
* `frame.lights`); `scene.cameras` the file's cameras, which `applyGltfCamera` sets on a
|
|
19
|
+
* `Camera`. Material variants (`KHR_materials_variants`): every material is created at load;
|
|
20
|
+
* `scene.setVariant(name)` swaps the material of each mapped draw in place.
|
|
21
|
+
*/
|
|
22
|
+
import { type MorphBlender } from '../anim/morph.js';
|
|
23
|
+
import type { Camera } from '../render/camera.js';
|
|
24
|
+
import type { Frame, InstanceParams } from '../render/frame.js';
|
|
25
|
+
import type { PointLight, SpotLight, SunLight } from '../render/lights.js';
|
|
26
|
+
import type { Material } from '../render/material.js';
|
|
27
|
+
import { Mesh, type MeshUpdate } from '../render/mesh.js';
|
|
28
|
+
import type { Renderer } from '../render/renderer.js';
|
|
29
|
+
import type { SkinPalette } from '../render/skin.js';
|
|
30
|
+
import type { SamplerKind, Texture } from '../render/texture.js';
|
|
31
|
+
import { Transform } from '../render/transform.js';
|
|
32
|
+
import { type GltfAnimation, type GltfCamera, type GltfDocument, type GltfPrimitive, type GltfSampler, type GltfSkin, type GltfVariantMapping } from './gltf.js';
|
|
33
|
+
/** Which material the loader builds per glTF material. */
|
|
34
|
+
export type GltfLitMode = 'standard' | 'lit';
|
|
35
|
+
/** A decoded image the loader can upload: an `ImageBitmap` or anything `copyExternalImageToTexture` takes. */
|
|
36
|
+
export type GltfImageSource = ImageBitmap | HTMLCanvasElement | OffscreenCanvas;
|
|
37
|
+
export interface LoadGltfOptions {
|
|
38
|
+
/**
|
|
39
|
+
* External resources by the URI the file names (`GltfDocument.externalUris`): encoded image
|
|
40
|
+
* bytes, or an already decoded image. A URI the document needs and this lacks throws.
|
|
41
|
+
*/
|
|
42
|
+
resources?: Record<string, ArrayBuffer | GltfImageSource>;
|
|
43
|
+
/**
|
|
44
|
+
* Draw every primitive with this material instead of the built-in ones. The scene's
|
|
45
|
+
* textures are still created (`scene.textures`) for the game to bind as it likes; `lit`
|
|
46
|
+
* and `palette` only pick the mesh layouts.
|
|
47
|
+
*/
|
|
48
|
+
material?: Material;
|
|
49
|
+
/**
|
|
50
|
+
* `'standard'` (default): one `createStandardMaterial` per glTF material with every map,
|
|
51
|
+
* factor, sampler, alpha mode and texture transform the file gives (`scene.materials[i]`
|
|
52
|
+
* for `doc.materials[i]`, `scene.materialNames[i]` its name). `'lit'`: the older
|
|
53
|
+
* base-colour-only `GLTF_LIT_WGSL` material (base colour factor as `tint`, mask cutoff as
|
|
54
|
+
* `params.x`).
|
|
55
|
+
*/
|
|
56
|
+
lit?: GltfLitMode;
|
|
57
|
+
/**
|
|
58
|
+
* Skinned primitives (`JOINTS_0`) become `VERTEX_LAYOUT_SKINNED` meshes bound to this
|
|
59
|
+
* palette: the standard materials are created with `skin: palette`, and a skinned draw's
|
|
60
|
+
* `params.params[3]` picks its palette slot (`SKIN_PARAM`). Without one, skinned primitives
|
|
61
|
+
* are built in the 3D layout at their bind pose (their joints and weights stay on the
|
|
62
|
+
* document); a material cannot take a palette later, so give it here.
|
|
63
|
+
*/
|
|
64
|
+
palette?: SkinPalette;
|
|
65
|
+
/** Label prefix for GPU objects (default `'gltf'`). */
|
|
66
|
+
label?: string;
|
|
67
|
+
/** Build mip chains for the textures (default true; `generateMipmaps` on the GPU). */
|
|
68
|
+
mips?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* How encoded image bytes become an image (default: `createImageBitmap` on a `Blob`). Tests
|
|
71
|
+
* and Workers without image decoding pass their own.
|
|
72
|
+
*/
|
|
73
|
+
decodeImage?: (bytes: Uint8Array, mimeType: string | null) => Promise<GltfImageSource>;
|
|
74
|
+
/**
|
|
75
|
+
* Multiplies glTF light intensity on its way into `scene.lights` (default 1). The engine's
|
|
76
|
+
* light colours are unitless linear RGB; a file's candela (point, spot) and lux
|
|
77
|
+
* (directional) usually want a scale well below 1.
|
|
78
|
+
*/
|
|
79
|
+
lightScale?: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The file's `KHR_lights_punctual` lights as the render module's records, in scene order
|
|
83
|
+
* (`GltfDocument.lights` keeps glTF's units). `color` is glTF `color × intensity × lightScale`;
|
|
84
|
+
* `radius` is `range`, or `16·√(intensity × lightScale)` without one (where an inverse-square
|
|
85
|
+
* light has fallen to 1/256); spot `innerAngle` / `outerAngle` are the cone half-angles.
|
|
86
|
+
* A directional light is a `SunLight` (ws/assets-4): `direction` is the node's world -Z,
|
|
87
|
+
* normalised, the way the light travels (the engine's convention, as `SpotLight.direction`),
|
|
88
|
+
* and the deprecated `dir` reads and replaces the same array. Push the points and spots into
|
|
89
|
+
* `frame.lights.points` / `.spots`, or copy a sun's `direction` and `color` into
|
|
90
|
+
* `frame.lights.sun`.
|
|
91
|
+
*/
|
|
92
|
+
export interface GltfSceneLights {
|
|
93
|
+
directional: SunLight[];
|
|
94
|
+
points: PointLight[];
|
|
95
|
+
spots: SpotLight[];
|
|
96
|
+
}
|
|
97
|
+
/** One draw of the scene: a primitive's mesh placed by its node's transform. */
|
|
98
|
+
export interface GltfSceneNode {
|
|
99
|
+
/** Index into `GltfDocument.nodes` / `GltfScene.transforms`. */
|
|
100
|
+
node: number;
|
|
101
|
+
transform: Transform;
|
|
102
|
+
mesh: Mesh;
|
|
103
|
+
material: Material;
|
|
104
|
+
/**
|
|
105
|
+
* Mutate to recolour the draw. `lit: 'standard'`: `tint` white, `params` zero (the factors
|
|
106
|
+
* live in the material); a skinned draw sets `params[3]` to its palette slot. `lit: 'lit'`:
|
|
107
|
+
* base colour factor as `tint`, alpha cutoff as `params.x`.
|
|
108
|
+
*/
|
|
109
|
+
params: InstanceParams;
|
|
110
|
+
/** The node's skin (index into `GltfScene.skins`), or null for a static draw. */
|
|
111
|
+
skin: number | null;
|
|
112
|
+
/**
|
|
113
|
+
* The glTF material the draw uses (index into `GltfDocument.materials` and
|
|
114
|
+
* `GltfScene.materials`), or null for the default; `setVariant` changes it.
|
|
115
|
+
*/
|
|
116
|
+
materialIndex: number | null;
|
|
117
|
+
}
|
|
118
|
+
/** One draw whose primitive has `KHR_materials_variants` mappings. */
|
|
119
|
+
interface VariantDraw {
|
|
120
|
+
draw: GltfSceneNode;
|
|
121
|
+
/** The primitive's own material (no variant, or a variant no mapping names). */
|
|
122
|
+
base: number | null;
|
|
123
|
+
mappings: readonly GltfVariantMapping[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The morph state of one glTF mesh (shared by every node drawing it): one `weights` array for
|
|
127
|
+
* all its primitives, blended by one `MorphBlender` per primitive. Write `weights` (by hand or
|
|
128
|
+
* with `anim`'s `sampleWeights`), call `apply()`; the scene uploads changed primitives on its
|
|
129
|
+
* next `draw`.
|
|
130
|
+
*/
|
|
131
|
+
export interface GltfMorph {
|
|
132
|
+
/** Index into `GltfDocument.meshes`. */
|
|
133
|
+
readonly mesh: number;
|
|
134
|
+
/** One weight per target, starting at the file's `mesh.weights` (or zeros). */
|
|
135
|
+
readonly weights: Float32Array;
|
|
136
|
+
readonly targetCount: number;
|
|
137
|
+
/** One per primitive of the mesh, all reading `weights`. */
|
|
138
|
+
readonly blenders: readonly MorphBlender[];
|
|
139
|
+
/** Blend every primitive; true when any vertex buffer changed (and so will be uploaded). */
|
|
140
|
+
apply(): boolean;
|
|
141
|
+
}
|
|
142
|
+
/** One morphed primitive: its blender, the buffer it writes and the mesh that uploads it. */
|
|
143
|
+
interface MorphEntry {
|
|
144
|
+
blender: MorphBlender;
|
|
145
|
+
mesh: Mesh;
|
|
146
|
+
update: MeshUpdate;
|
|
147
|
+
dirty: boolean;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Built-in material: base colour texture × factor × vertex colour, lit by the engine's lighting
|
|
151
|
+
* block (`engine_lambert`) plus a faint sky term from above. `params.x` > 0 is a `MASK` cutoff.
|
|
152
|
+
*/
|
|
153
|
+
export declare const GLTF_LIT_WGSL = "\n@group(1) @binding(1) var baseSampler: sampler;\n@group(1) @binding(2) var baseTex: texture_2d<f32>;\n\n@fragment fn fs_main(in: VSOut) -> FragOut {\n let c = textureSample(baseTex, baseSampler, in.uv) * in.color;\n if (in.params.x > 0.0 && c.a < in.params.x) { discard; }\n let n = normalize(in.normal);\n let sky = 0.5 + 0.5 * n.y;\n var o: FragOut;\n o.color = vec4f(c.rgb * (engine_lambert(n, in.worldPos) + 0.12 * sky), c.a);\n o.emissive = vec4f(0.0);\n return o;\n}\n";
|
|
154
|
+
/** The GPU side of one glTF document. Owns what it created; `destroy()` frees it. */
|
|
155
|
+
export declare class GltfScene {
|
|
156
|
+
/** One per primitive, in document order (mesh 0's primitives, then mesh 1's, …). */
|
|
157
|
+
readonly meshes: Mesh[];
|
|
158
|
+
/**
|
|
159
|
+
* One per (image, colour space) a material reads, in first-use order: base colour and
|
|
160
|
+
* emissive maps are sRGB, the rest linear, so an image used both ways is uploaded twice.
|
|
161
|
+
*/
|
|
162
|
+
readonly textures: Texture[];
|
|
163
|
+
/** One per glTF material, built by the loader (empty when `opts.material` was given). */
|
|
164
|
+
readonly materials: Material[];
|
|
165
|
+
/** The file's `material.name` per glTF material (null when unnamed). */
|
|
166
|
+
readonly materialNames: (string | null)[];
|
|
167
|
+
/** The palette skinned meshes are bound to (`opts.palette`), or null. */
|
|
168
|
+
readonly palette: SkinPalette | null;
|
|
169
|
+
/** One per document node, parented like the file (`doc.nodes[i]` → `transforms[i]`). */
|
|
170
|
+
readonly transforms: Transform[];
|
|
171
|
+
/** Every draw: one per (node in the default scene, primitive of its mesh). */
|
|
172
|
+
readonly nodes: GltfSceneNode[];
|
|
173
|
+
/** World-space bounds of the default scene (from the document). */
|
|
174
|
+
readonly bounds: {
|
|
175
|
+
center: [number, number, number];
|
|
176
|
+
radius: number;
|
|
177
|
+
};
|
|
178
|
+
/** The document's skins (`skeletonFromSkin(doc, i)` builds the animation module's skeleton). */
|
|
179
|
+
readonly skins: readonly GltfSkin[];
|
|
180
|
+
/** The document's clips, in the animation module's `AnimationClip` shape. */
|
|
181
|
+
readonly animations: readonly GltfAnimation[];
|
|
182
|
+
/** One per mesh that carries morph targets, in mesh order. */
|
|
183
|
+
readonly morphs: readonly GltfMorph[];
|
|
184
|
+
/** The file's lights as render records (`GltfSceneLights`; empty lists when it has none). */
|
|
185
|
+
readonly lights: GltfSceneLights;
|
|
186
|
+
/** The file's cameras placed by their nodes (`applyGltfCamera` sets one on a `Camera`). */
|
|
187
|
+
readonly cameras: readonly GltfCamera[];
|
|
188
|
+
/** The file's `KHR_materials_variants` names (`setVariant` takes one). */
|
|
189
|
+
readonly variants: readonly string[];
|
|
190
|
+
/** Whether the default material or textures were created here (and so destroyed here). */
|
|
191
|
+
private readonly ownsMaterials;
|
|
192
|
+
private readonly morphByMesh;
|
|
193
|
+
private readonly morphEntries;
|
|
194
|
+
private readonly doc;
|
|
195
|
+
private readonly variantDraws;
|
|
196
|
+
private resolveMaterial;
|
|
197
|
+
private litParams;
|
|
198
|
+
private activeVariant;
|
|
199
|
+
constructor(doc: GltfDocument, ownsMaterials: boolean, palette?: SkinPalette | null);
|
|
200
|
+
/** The active material variant, or null for each primitive's own material. */
|
|
201
|
+
get variant(): string | null;
|
|
202
|
+
/**
|
|
203
|
+
* Switch every draw with `KHR_materials_variants` mappings to the material `name` binds (a
|
|
204
|
+
* draw no mapping of `name` covers goes back to its own material); null restores every
|
|
205
|
+
* draw's own material. Swaps `material` (and `materialIndex`) in place: no material is
|
|
206
|
+
* created. Throws `GltfError` listing the file's variants for an unknown name.
|
|
207
|
+
*/
|
|
208
|
+
setVariant(name: string | null): this;
|
|
209
|
+
/** @internal The loader: how `setVariant` finds a material, and which draws it touches. */
|
|
210
|
+
bindVariants(resolve: ((index: number | null) => Material) | null, litParams: boolean, draws: VariantDraw[]): void;
|
|
211
|
+
/**
|
|
212
|
+
* The morph state of the mesh `nodeIndex` (into `GltfDocument.nodes`) draws, or null when the
|
|
213
|
+
* node has no mesh or the mesh no targets. Nodes sharing a mesh share the object.
|
|
214
|
+
*/
|
|
215
|
+
morph(nodeIndex: number): GltfMorph | null;
|
|
216
|
+
/** @internal Register a mesh's morph state (the loader). */
|
|
217
|
+
addMorph(morph: GltfMorph, entries: MorphEntry[]): void;
|
|
218
|
+
/**
|
|
219
|
+
* Upload every morphed primitive whose `apply()` changed it, then record every draw into
|
|
220
|
+
* `frame`. Allocation-free.
|
|
221
|
+
*/
|
|
222
|
+
draw(frame: Frame): void;
|
|
223
|
+
destroy(): void;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Upload a document to the GPU. Resolves once every image is decoded; everything else is
|
|
227
|
+
* synchronous. Throws `GltfError` for a missing external resource or an undecodable image.
|
|
228
|
+
*/
|
|
229
|
+
export declare function loadGltf(renderer: Renderer, doc: GltfDocument, opts?: LoadGltfOptions): Promise<GltfScene>;
|
|
230
|
+
/**
|
|
231
|
+
* Set `camera` to a glTF camera: its projection (perspective `yfov`, the file's `aspectRatio`
|
|
232
|
+
* or `aspect`, `znear`, `zfar` or an infinite far plane; orthographic `xmag` / `ymag` half
|
|
233
|
+
* extents and its depth range) and its node's view (`GltfCamera.view`). Turns depth test,
|
|
234
|
+
* depth write and culling on. Allocation-free; returns `camera`.
|
|
235
|
+
*/
|
|
236
|
+
export declare function applyGltfCamera(camera: Camera, c: GltfCamera, aspect: number): Camera;
|
|
237
|
+
/**
|
|
238
|
+
* The engine sampler nearest a glTF one: nearest magnification → `nearest-mip-clamp` (or
|
|
239
|
+
* `nearest-clamp` without mips; the engine has no nearest-repeat), linear → `linear-clamp`
|
|
240
|
+
* when both wraps clamp, else `linear-mip-repeat` (`linear-repeat` without mips; mirrored
|
|
241
|
+
* repeat is treated as repeat). `mips` false, or a glTF `minFilter` without a mipmap mode,
|
|
242
|
+
* picks the level-0 sampler.
|
|
243
|
+
*/
|
|
244
|
+
export declare function gltfSamplerKind(sampler: GltfSampler, mips: boolean): SamplerKind;
|
|
245
|
+
/** `x, y, z, nx, ny, nz, u, v, r, g, b, a` per vertex (the `VERTEX_LAYOUT_3D` float order). */
|
|
246
|
+
export declare function interleave3d(p: GltfPrimitive): Float32Array;
|
|
247
|
+
/**
|
|
248
|
+
* `VERTEX_LAYOUT_3D_TANGENT`: the 12 floats of `interleave3d` then `tangent.xyzw` per vertex.
|
|
249
|
+
* A primitive without `TANGENT` gets `(1, 0, 0, 1)`.
|
|
250
|
+
*/
|
|
251
|
+
export declare function interleave3dTangent(p: GltfPrimitive): Float32Array;
|
|
252
|
+
export {};
|