@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,124 @@
|
|
|
1
|
+
import { SURFACE_TRI_FLOATS } from './particles-wgsl.js';
|
|
2
|
+
function isGeometry(src) {
|
|
3
|
+
return 'vertices' in src && 'layout' in src;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Build the sampling table of a `Geometry` (xyz at 0, normal at 3 of each `layout.floats`
|
|
7
|
+
* vertex) or of raw `positions`/`normals`/`indices`. Without indices every three positions
|
|
8
|
+
* are a triangle; without normals the face normal is used. Allocates; build once per mesh.
|
|
9
|
+
*/
|
|
10
|
+
export function buildEmitSurface(src, opts = {}) {
|
|
11
|
+
let positions;
|
|
12
|
+
let normals;
|
|
13
|
+
let indices;
|
|
14
|
+
let stride = 3;
|
|
15
|
+
let nOffset = 3;
|
|
16
|
+
if (isGeometry(src)) {
|
|
17
|
+
positions = src.vertices;
|
|
18
|
+
normals = src.vertices;
|
|
19
|
+
indices = src.indices;
|
|
20
|
+
stride = src.layout.floats;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
positions = src.positions;
|
|
24
|
+
normals = src.normals;
|
|
25
|
+
indices = src.indices;
|
|
26
|
+
nOffset = 0;
|
|
27
|
+
}
|
|
28
|
+
const vertexCount = Math.floor(positions.length / stride);
|
|
29
|
+
const triangles = indices ? Math.floor(indices.length / 3) : Math.floor(vertexCount / 3);
|
|
30
|
+
const table = new Float32Array(triangles * SURFACE_TRI_FLOATS);
|
|
31
|
+
let area = 0;
|
|
32
|
+
const n = new Float32Array(3);
|
|
33
|
+
for (let t = 0; t < triangles; t++) {
|
|
34
|
+
const o = t * SURFACE_TRI_FLOATS;
|
|
35
|
+
for (let k = 0; k < 3; k++) {
|
|
36
|
+
const vi = indices ? indices[t * 3 + k] : t * 3 + k;
|
|
37
|
+
const base = vi * stride;
|
|
38
|
+
table[o + k * 4] = positions[base];
|
|
39
|
+
table[o + k * 4 + 1] = positions[base + 1];
|
|
40
|
+
table[o + k * 4 + 2] = positions[base + 2];
|
|
41
|
+
}
|
|
42
|
+
// Face normal and area from the edge cross product.
|
|
43
|
+
const ax = table[o + 4] - table[o];
|
|
44
|
+
const ay = table[o + 5] - table[o + 1];
|
|
45
|
+
const az = table[o + 6] - table[o + 2];
|
|
46
|
+
const bx = table[o + 8] - table[o];
|
|
47
|
+
const by = table[o + 9] - table[o + 1];
|
|
48
|
+
const bz = table[o + 10] - table[o + 2];
|
|
49
|
+
n[0] = ay * bz - az * by;
|
|
50
|
+
n[1] = az * bx - ax * bz;
|
|
51
|
+
n[2] = ax * by - ay * bx;
|
|
52
|
+
const len = Math.hypot(n[0], n[1], n[2]);
|
|
53
|
+
area += len * 0.5;
|
|
54
|
+
if (len > 0) {
|
|
55
|
+
n[0] /= len;
|
|
56
|
+
n[1] /= len;
|
|
57
|
+
n[2] /= len;
|
|
58
|
+
}
|
|
59
|
+
for (let k = 0; k < 3; k++) {
|
|
60
|
+
const vi = indices ? indices[t * 3 + k] : t * 3 + k;
|
|
61
|
+
const no = o + 12 + k * 4;
|
|
62
|
+
if (normals && normals.length >= (vi + 1) * stride) {
|
|
63
|
+
const base = vi * stride + nOffset;
|
|
64
|
+
const nx = normals[base];
|
|
65
|
+
const ny = normals[base + 1];
|
|
66
|
+
const nz = normals[base + 2];
|
|
67
|
+
const nl = Math.hypot(nx, ny, nz) || 1;
|
|
68
|
+
table[no] = nx / nl;
|
|
69
|
+
table[no + 1] = ny / nl;
|
|
70
|
+
table[no + 2] = nz / nl;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
table[no] = n[0];
|
|
74
|
+
table[no + 1] = n[1];
|
|
75
|
+
table[no + 2] = n[2];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
table[o + 3] = area;
|
|
79
|
+
}
|
|
80
|
+
// Normalise the cumulative areas to 0..1 (the last is exactly 1).
|
|
81
|
+
if (area > 0) {
|
|
82
|
+
for (let t = 0; t < triangles; t++)
|
|
83
|
+
table[t * SURFACE_TRI_FLOATS + 3] /= area;
|
|
84
|
+
}
|
|
85
|
+
if (triangles > 0)
|
|
86
|
+
table[(triangles - 1) * SURFACE_TRI_FLOATS + 3] = 1;
|
|
87
|
+
return {
|
|
88
|
+
kind: 'mesh',
|
|
89
|
+
positions,
|
|
90
|
+
normals,
|
|
91
|
+
indices,
|
|
92
|
+
alongNormal: opts.alongNormal,
|
|
93
|
+
table,
|
|
94
|
+
triangles,
|
|
95
|
+
area,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The CPU mirror of the kernel's sampling: triangle by `u` (binary search of the cumulative
|
|
100
|
+
* areas), point by `v`, `w` (square-root barycentrics, uniform over the triangle). Writes
|
|
101
|
+
* position xyz then normal xyz into `out` (6 floats). Returns the triangle index.
|
|
102
|
+
*/
|
|
103
|
+
export function sampleEmitSurface(surface, u, v, w, out) {
|
|
104
|
+
const tb = surface.table;
|
|
105
|
+
let lo = 0;
|
|
106
|
+
let hi = surface.triangles - 1;
|
|
107
|
+
while (lo < hi) {
|
|
108
|
+
const mid = (lo + hi) >> 1;
|
|
109
|
+
if (tb[mid * SURFACE_TRI_FLOATS + 3] < u)
|
|
110
|
+
lo = mid + 1;
|
|
111
|
+
else
|
|
112
|
+
hi = mid;
|
|
113
|
+
}
|
|
114
|
+
const o = lo * SURFACE_TRI_FLOATS;
|
|
115
|
+
const r1 = Math.sqrt(v);
|
|
116
|
+
const w0 = 1 - r1;
|
|
117
|
+
const w1 = r1 * (1 - w);
|
|
118
|
+
const w2 = r1 * w;
|
|
119
|
+
for (let k = 0; k < 3; k++) {
|
|
120
|
+
out[k] = tb[o + k] * w0 + tb[o + 4 + k] * w1 + tb[o + 8 + k] * w2;
|
|
121
|
+
out[3 + k] = tb[o + 12 + k] * w0 + tb[o + 16 + k] * w1 + tb[o + 20 + k] * w2;
|
|
122
|
+
}
|
|
123
|
+
return lo;
|
|
124
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, allocation-free light helpers. Feed the result into a tint/emissive/intensity value.
|
|
3
|
+
*/
|
|
4
|
+
/** Smooth 1D value noise in [0, 1]. */
|
|
5
|
+
export declare function valueNoise1(x: number, seed?: number): number;
|
|
6
|
+
export interface FlickerOptions {
|
|
7
|
+
/** Distinguishes multiple lights. */
|
|
8
|
+
seed?: number;
|
|
9
|
+
/** Noise frequency in Hz-ish. Default 7. */
|
|
10
|
+
speed?: number;
|
|
11
|
+
/** 0..1 depth of the flicker. Default 0.3. */
|
|
12
|
+
amount?: number;
|
|
13
|
+
/** Value at rest. Default 1. */
|
|
14
|
+
base?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Flame/torch flicker: two octaves of value noise plus a rare dip.
|
|
18
|
+
* Returns `base * (1 - amount * n)` with n in [0, 1].
|
|
19
|
+
*/
|
|
20
|
+
export declare function flicker(t: number, opts?: FlickerOptions): number;
|
|
21
|
+
export interface PulseOptions {
|
|
22
|
+
/** Seconds per cycle. Default 2. */
|
|
23
|
+
period?: number;
|
|
24
|
+
min?: number;
|
|
25
|
+
max?: number;
|
|
26
|
+
/** 0..1 phase offset. */
|
|
27
|
+
phase?: number;
|
|
28
|
+
}
|
|
29
|
+
/** Smooth breathing pulse between `min` and `max` (cosine ease). */
|
|
30
|
+
export declare function pulse(t: number, opts?: PulseOptions): number;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, allocation-free light helpers. Feed the result into a tint/emissive/intensity value.
|
|
3
|
+
*/
|
|
4
|
+
function hash1(n) {
|
|
5
|
+
const s = Math.sin(n * 127.1 + 311.7) * 43758.5453123;
|
|
6
|
+
return s - Math.floor(s);
|
|
7
|
+
}
|
|
8
|
+
/** Smooth 1D value noise in [0, 1]. */
|
|
9
|
+
export function valueNoise1(x, seed = 0) {
|
|
10
|
+
const i = Math.floor(x);
|
|
11
|
+
const f = x - i;
|
|
12
|
+
const u = f * f * (3 - 2 * f);
|
|
13
|
+
const a = hash1(i + seed * 57.13);
|
|
14
|
+
const b = hash1(i + 1 + seed * 57.13);
|
|
15
|
+
return a + (b - a) * u;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Flame/torch flicker: two octaves of value noise plus a rare dip.
|
|
19
|
+
* Returns `base * (1 - amount * n)` with n in [0, 1].
|
|
20
|
+
*/
|
|
21
|
+
export function flicker(t, opts = {}) {
|
|
22
|
+
const seed = opts.seed ?? 0;
|
|
23
|
+
const speed = opts.speed ?? 7;
|
|
24
|
+
const amount = opts.amount ?? 0.3;
|
|
25
|
+
const base = opts.base ?? 1;
|
|
26
|
+
const n1 = valueNoise1(t * speed, seed);
|
|
27
|
+
const n2 = valueNoise1(t * speed * 2.7 + 13.3, seed + 1);
|
|
28
|
+
const dip = valueNoise1(t * speed * 0.21 + 5.1, seed + 2);
|
|
29
|
+
let n = n1 * 0.65 + n2 * 0.35;
|
|
30
|
+
if (dip > 0.85)
|
|
31
|
+
n = Math.min(1, n + (dip - 0.85) * 3);
|
|
32
|
+
return base * (1 - amount * n);
|
|
33
|
+
}
|
|
34
|
+
/** Smooth breathing pulse between `min` and `max` (cosine ease). */
|
|
35
|
+
export function pulse(t, opts = {}) {
|
|
36
|
+
const period = opts.period ?? 2;
|
|
37
|
+
const min = opts.min ?? 0.6;
|
|
38
|
+
const max = opts.max ?? 1;
|
|
39
|
+
const ph = opts.phase ?? 0;
|
|
40
|
+
const k = 0.5 - 0.5 * Math.cos(((t / period + ph) % 1) * Math.PI * 2);
|
|
41
|
+
return min + (max - min) * k;
|
|
42
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type { BillboardDepth, BillboardDesc, BillboardFacing, BillboardSize, BillboardsOptions, } from './billboard.js';
|
|
2
|
+
export { BillboardHandle, Billboards, createBillboards, pxToWorld } from './billboard.js';
|
|
3
|
+
export { BB_FLAG_BAR, BB_FLAG_PX, BB_FLAG_TEXTURED, BB_FLAG_YAW, BILLBOARD_BYTES, BILLBOARD_FLOATS, BILLBOARD_WGSL, } from './billboard-wgsl.js';
|
|
4
|
+
export type { DebugColor, DebugDrawOptions, DebugQuat, DebugVec3 } from './debug-draw.js';
|
|
5
|
+
export { createDebugDraw, DEBUG_VERTEX_FLOATS, DebugDraw } from './debug-draw.js';
|
|
6
|
+
export { DEBUG_DRAW_WGSL } from './debug-wgsl.js';
|
|
7
|
+
export type { DecalBlend, DecalDesc, DecalMode, DecalsOptions } from './decals.js';
|
|
8
|
+
export { DECAL_INSTANCE_FLOATS, DECAL_PARAMS_FLOATS, Decals } from './decals.js';
|
|
9
|
+
export { WGSL_DECAL_BOX, WGSL_DECAL_DEPTH_COPY, WGSL_DECAL_QUAD } from './decals-wgsl.js';
|
|
10
|
+
export type { CreateEffectOptions, EffectDesc, EffectEmitterDesc, EffectFollow, EffectPoint, EffectSystemDesc, EffectSystemOptions, } from './effect.js';
|
|
11
|
+
export { createEffect, Effect, EffectInstance, validateEffectDesc } from './effect.js';
|
|
12
|
+
export { HIT_SPARK_EFFECT, MAGIC_AURA_EFFECT, SMOKE_PUFF_EFFECT } from './effects/index.js';
|
|
13
|
+
export type { EmitSurface, MeshShapeSource } from './emit-surface.js';
|
|
14
|
+
export { buildEmitSurface, sampleEmitSurface } from './emit-surface.js';
|
|
15
|
+
export type { FlickerOptions, PulseOptions } from './flicker.js';
|
|
16
|
+
export { flicker, pulse, valueNoise1 } from './flicker.js';
|
|
17
|
+
export type { AttractFalloff, EmitParams, EmitShape, ParticleFields, ParticleForce, ParticleReadback, ParticleSystemOptions, Range, } from './particles.js';
|
|
18
|
+
export { applyForces, evaluateCurve, MAX_CURVE_STOPS, ParticleEmitter, ParticleSystem, } from './particles.js';
|
|
19
|
+
export { COLOR_CURVE_FLOATS, FX_PARTICLE_FLOATS, FX_REQUEST_FLOATS, FX_SIM_FLOATS, FX_SPAWN_FLOATS, MAX_FORCES, PARTICLE_COLLIDE_WGSL, PARTICLE_COMPUTE_WGSL, PARTICLE_COUNT_WGSL, PARTICLE_EXT_COMPUTE_WGSL, PARTICLE_EXT_RENDER_WGSL, PARTICLE_RENDER_WGSL, PARTICLE_WORLD_COMPUTE_WGSL, PARTICLE_WORLD_RENDER_WGSL, SIZE_CURVE_FLOATS, SURFACE_TRI_FLOATS, } from './particles-wgsl.js';
|
|
20
|
+
export { FX_DEFAULT_SEED } from './random.js';
|
|
21
|
+
export type { SkyOptions, SkyStars } from './sky.js';
|
|
22
|
+
export { SKY_PARAMS_FLOATS, Sky, skyRay } from './sky.js';
|
|
23
|
+
export { SKY_WGSL } from './sky-wgsl.js';
|
|
24
|
+
export type { AtlasCanvas, AtlasContext2D, AtlasRegion, TextAtlasOptions, TextStyle, } from './text-atlas.js';
|
|
25
|
+
export { TextAtlas } from './text-atlas.js';
|
|
26
|
+
export type { TrailBlend, TrailFacing, TrailOptions } from './trail.js';
|
|
27
|
+
export { Trail, TrailBatch } from './trail.js';
|
|
28
|
+
export { TRAIL_TEXTURED_WGSL, TRAIL_WGSL } from './trail-wgsl.js';
|
|
29
|
+
export type { WaterFoam, WaterOptions, WaterWave } from './water.js';
|
|
30
|
+
export { WATER_PARAMS_FLOATS, Water, waterHeight } from './water.js';
|
|
31
|
+
export { WATER_DEPTH_COPY_WGSL, WATER_MAX_WAVES, WATER_WGSL } from './water-wgsl.js';
|
package/dist/fx/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { BillboardHandle, Billboards, createBillboards, pxToWorld } from './billboard.js';
|
|
2
|
+
export { BB_FLAG_BAR, BB_FLAG_PX, BB_FLAG_TEXTURED, BB_FLAG_YAW, BILLBOARD_BYTES, BILLBOARD_FLOATS, BILLBOARD_WGSL, } from './billboard-wgsl.js';
|
|
3
|
+
export { createDebugDraw, DEBUG_VERTEX_FLOATS, DebugDraw } from './debug-draw.js';
|
|
4
|
+
export { DEBUG_DRAW_WGSL } from './debug-wgsl.js';
|
|
5
|
+
export { DECAL_INSTANCE_FLOATS, DECAL_PARAMS_FLOATS, Decals } from './decals.js';
|
|
6
|
+
export { WGSL_DECAL_BOX, WGSL_DECAL_DEPTH_COPY, WGSL_DECAL_QUAD } from './decals-wgsl.js';
|
|
7
|
+
export { createEffect, Effect, EffectInstance, validateEffectDesc } from './effect.js';
|
|
8
|
+
export { HIT_SPARK_EFFECT, MAGIC_AURA_EFFECT, SMOKE_PUFF_EFFECT } from './effects/index.js';
|
|
9
|
+
export { buildEmitSurface, sampleEmitSurface } from './emit-surface.js';
|
|
10
|
+
export { flicker, pulse, valueNoise1 } from './flicker.js';
|
|
11
|
+
export { applyForces, evaluateCurve, MAX_CURVE_STOPS, ParticleEmitter, ParticleSystem, } from './particles.js';
|
|
12
|
+
export { COLOR_CURVE_FLOATS, FX_PARTICLE_FLOATS, FX_REQUEST_FLOATS, FX_SIM_FLOATS, FX_SPAWN_FLOATS, MAX_FORCES, PARTICLE_COLLIDE_WGSL, PARTICLE_COMPUTE_WGSL, PARTICLE_COUNT_WGSL, PARTICLE_EXT_COMPUTE_WGSL, PARTICLE_EXT_RENDER_WGSL, PARTICLE_RENDER_WGSL, PARTICLE_WORLD_COMPUTE_WGSL, PARTICLE_WORLD_RENDER_WGSL, SIZE_CURVE_FLOATS, SURFACE_TRI_FLOATS, } from './particles-wgsl.js';
|
|
13
|
+
export { FX_DEFAULT_SEED } from './random.js';
|
|
14
|
+
export { SKY_PARAMS_FLOATS, Sky, skyRay } from './sky.js';
|
|
15
|
+
export { SKY_WGSL } from './sky-wgsl.js';
|
|
16
|
+
export { TextAtlas } from './text-atlas.js';
|
|
17
|
+
export { Trail, TrailBatch } from './trail.js';
|
|
18
|
+
export { TRAIL_TEXTURED_WGSL, TRAIL_WGSL } from './trail-wgsl.js';
|
|
19
|
+
export { WATER_PARAMS_FLOATS, Water, waterHeight } from './water.js';
|
|
20
|
+
export { WATER_DEPTH_COPY_WGSL, WATER_MAX_WAVES, WATER_WGSL } from './water-wgsl.js';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export declare const PARTICLE_COMPUTE_WGSL = "\n\nstruct Particle {\n posVel: vec4f, // pos.xy, vel.xy (logical px, px/s)\n c0: vec4f, // colour at birth (linear, premultiplied by nothing)\n c1: vec4f, // colour at death\n life: vec4f, // age, lifetime, size at birth, size at death\n phys: vec4f, // gravity.xy, drag, emissive\n};\nstruct Sim {\n dt: f32,\n floorY: f32,\n bounce: f32,\n time: f32,\n capacity: f32,\n stretch: f32,\n spawnCount: f32,\n _pad: f32,\n};\n\nstruct Spawn {\n a: vec4f, // x, y, shapeA, shapeB\n b: vec4f, // angle, spread, speedMin, speedMax\n c: vec4f, // lifeMin, lifeMax, sizeStart, sizeEnd\n c0: vec4f,\n c1: vec4f,\n d: vec4f, // gravX, gravY, drag, shapeKind (0 point, 1 circle, 2 rect, 3 line)\n e: vec4f, // start, count, seed, emissive\n};\n@group(0) @binding(0) var<storage, read_write> particles: array<Particle>;\n@group(0) @binding(1) var<storage, read> spawns: array<Spawn>;\n@group(0) @binding(2) var<uniform> sim: Sim;\n\nfn pcg(v: u32) -> u32 {\n let s = v * 747796405u + 2891336453u;\n let w = ((s >> ((s >> 28u) + 4u)) ^ s) * 277803737u;\n return (w >> 22u) ^ w;\n}\nfn rnd(state: ptr<function, u32>) -> f32 {\n *state = pcg(*state);\n return f32(*state) / 4294967295.0;\n}\n\n@compute @workgroup_size(64) fn spawn(@builtin(global_invocation_id) gid: vec3u) {\n if (f32(gid.y) >= sim.spawnCount) { return; }\n let cmd = spawns[gid.y];\n let i = gid.x;\n if (f32(i) >= cmd.e.y) { return; }\n let cap = u32(sim.capacity);\n let idx = (u32(cmd.e.x) + i) % cap;\n var st = pcg(i ^ pcg(u32(cmd.e.z)));\n\n var pos = cmd.a.xy;\n let kind = cmd.d.w;\n if (kind > 0.5 && kind < 1.5) {\n let r = sqrt(rnd(&st)) * cmd.a.z;\n let th = rnd(&st) * 6.2831853;\n pos += vec2f(cos(th), sin(th)) * r;\n } else if (kind > 1.5 && kind < 2.5) {\n pos += (vec2f(rnd(&st), rnd(&st)) - 0.5) * cmd.a.zw;\n } else if (kind > 2.5) {\n pos += cmd.a.zw * rnd(&st);\n }\n let ang = cmd.b.x + (rnd(&st) - 0.5) * cmd.b.y;\n let speed = mix(cmd.b.z, cmd.b.w, rnd(&st));\n let life = mix(cmd.c.x, cmd.c.y, rnd(&st));\n let sj = 0.7 + 0.6 * rnd(&st);\n\n var p: Particle;\n p.posVel = vec4f(pos, vec2f(cos(ang), sin(ang)) * speed);\n p.c0 = cmd.c0;\n p.c1 = cmd.c1;\n p.life = vec4f(0.0, max(life, 1e-3), cmd.c.z * sj, cmd.c.w * sj);\n p.phys = vec4f(cmd.d.xyz, cmd.e.w);\n particles[idx] = p;\n}\n\n@compute @workgroup_size(64) fn update(@builtin(global_invocation_id) gid: vec3u) {\n let i = gid.x;\n if (f32(i) >= sim.capacity) { return; }\n var p = particles[i];\n if (p.life.x >= p.life.y) { return; }\n let dt = sim.dt;\n p.life.x += dt;\n var v = p.posVel.zw + p.phys.xy * dt;\n v *= exp(-p.phys.z * dt);\n var pos = p.posVel.xy + v * dt;\n if (pos.y > sim.floorY && v.y > 0.0) {\n pos.y = sim.floorY;\n v = vec2f(v.x * 0.75, -v.y * sim.bounce);\n }\n p.posVel = vec4f(pos, v);\n particles[i] = p;\n}\n";
|
|
2
|
+
export declare const PARTICLE_RENDER_WGSL = "\n\nstruct EngineGlobals {\n logicalSize: vec2f,\n targetSize: vec2f,\n time: f32,\n dt: f32,\n _pad: vec2f,\n};\n@group(0) @binding(0) var<uniform> globals: EngineGlobals;\nstruct EngineCamera {\n view: mat4x4f,\n proj: mat4x4f,\n view_proj: mat4x4f,\n camera_pos: vec4f,\n viewport: vec4f,\n view_index: u32,\n _pad0: u32, _pad1: u32, _pad2: u32,\n inv_view_proj: mat4x4f,\n prev_view_proj: mat4x4f,\n prev_view: mat4x4f,\n jitter: vec4f,\n};\n@group(0) @binding(1) var<uniform> camera: EngineCamera;\n\n\nstruct Particle {\n posVel: vec4f, // pos.xy, vel.xy (logical px, px/s)\n c0: vec4f, // colour at birth (linear, premultiplied by nothing)\n c1: vec4f, // colour at death\n life: vec4f, // age, lifetime, size at birth, size at death\n phys: vec4f, // gravity.xy, drag, emissive\n};\nstruct Sim {\n dt: f32,\n floorY: f32,\n bounce: f32,\n time: f32,\n capacity: f32,\n stretch: f32,\n spawnCount: f32,\n _pad: f32,\n};\n\n@group(1) @binding(0) var<storage, read> particles: array<Particle>;\n@group(1) @binding(1) var<uniform> sim: Sim;\n\nstruct PVOut {\n @builtin(position) clip: vec4f,\n @location(0) q: vec2f,\n @location(1) color: vec4f,\n @location(2) emissive: f32,\n};\nstruct FragOut {\n @location(0) color: vec4f,\n @location(1) emissive: vec4f,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32, @builtin(instance_index) ii: u32) -> PVOut {\n var o: PVOut;\n let p = particles[ii];\n if (p.life.x >= p.life.y) {\n o.clip = vec4f(0.0, 0.0, 2.0, 1.0);\n return o;\n }\n var corners = array<vec2f, 6>(\n vec2f(-1.0, -1.0), vec2f(1.0, -1.0), vec2f(1.0, 1.0),\n vec2f(-1.0, -1.0), vec2f(1.0, 1.0), vec2f(-1.0, 1.0)\n );\n let q = corners[vi];\n let t = p.life.x / p.life.y;\n let size = max(mix(p.life.z, p.life.w, t), 0.0);\n let vel = p.posVel.zw;\n let speed = length(vel);\n var dir = vec2f(1.0, 0.0);\n if (speed > 1e-3) { dir = vel / speed; }\n let len = size + speed * sim.stretch;\n let perp = vec2f(-dir.y, dir.x);\n let world = p.posVel.xy + dir * (q.x * len * 0.5) + perp * (q.y * size * 0.5);\n o.clip = camera.view_proj * vec4f(world, 0.0, 1.0);\n o.q = q;\n o.color = mix(p.c0, p.c1, t);\n o.emissive = p.phys.w;\n return o;\n}\n\n@fragment fn fs(in: PVOut) -> FragOut {\n let d = length(in.q);\n var a = clamp(1.0 - d, 0.0, 1.0);\n a = a * a * in.color.a;\n let c = in.color.rgb * a;\n var o: FragOut;\n o.color = vec4f(c, a);\n o.emissive = vec4f(c * in.emissive, a);\n return o;\n}\n";
|
|
3
|
+
/** Particles per `Particle` struct below: 10 vec4 = 160 bytes. */
|
|
4
|
+
export declare const FX_PARTICLE_FLOATS = 40;
|
|
5
|
+
/** Floats per extended spawn record (`Spawn` below). */
|
|
6
|
+
export declare const FX_SPAWN_FLOATS = 52;
|
|
7
|
+
/** Forces the extended sim block carries. */
|
|
8
|
+
export declare const MAX_FORCES = 8;
|
|
9
|
+
/** Floats of the extended sim block: 20 scalars + 8 forces × 3 vec4. */
|
|
10
|
+
export declare const FX_SIM_FLOATS: number;
|
|
11
|
+
/** Floats per size-curve slot (count, 8 stops, 3 pad) and per colour-curve slot (count + pad, 8 RGBA). */
|
|
12
|
+
export declare const SIZE_CURVE_FLOATS = 12;
|
|
13
|
+
export declare const COLOR_CURVE_FLOATS = 36;
|
|
14
|
+
/** Floats per sub-emission request (`Req` below). */
|
|
15
|
+
export declare const FX_REQUEST_FLOATS = 8;
|
|
16
|
+
/** Floats per mesh-surface triangle (p0 + cdf, p1, p2, n0, n1, n2). */
|
|
17
|
+
export declare const SURFACE_TRI_FLOATS = 24;
|
|
18
|
+
/**
|
|
19
|
+
* The extended render kernel: the quad is built from the view rows (world) or the XY axes (2D),
|
|
20
|
+
* aligned to the velocity (streaks) when the particle asks, rotated by its spin, sized and
|
|
21
|
+
* coloured by the curve table or the two-stop sugar, textured from the sprite sheet tile when
|
|
22
|
+
* the system has one (both blend modes; premultiplied on output), with the world-space fades
|
|
23
|
+
* and lighting of before.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* The extended render shader; with `velocity` (the velocity attachment's fragment location, 2
|
|
27
|
+
* or 3; world space only) the build that writes its own motion (ws/render-11): each corner's
|
|
28
|
+
* previous position is `world - vel * sim.dt` (this frame's step back), projected through
|
|
29
|
+
* `camera.prev_view_proj`, and the fragment writes `vec4f(engine_motion(..), 0, alpha)`.
|
|
30
|
+
* `velocity` 0 is the exported strings exactly.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fxRenderWgsl(world: boolean, velocity?: number): string;
|
|
33
|
+
/** The extended 2D kernel (`extended: true`, or implied by `texture`, `forces`, `collide`). */
|
|
34
|
+
export declare const PARTICLE_EXT_COMPUTE_WGSL: string;
|
|
35
|
+
export declare const PARTICLE_EXT_RENDER_WGSL: string;
|
|
36
|
+
/** World space: the same extended kernel with a 3D cone launch, y-up floor and the view-row quad. */
|
|
37
|
+
export declare const PARTICLE_WORLD_COMPUTE_WGSL: string;
|
|
38
|
+
export declare const PARTICLE_WORLD_RENDER_WGSL: string;
|
|
39
|
+
/**
|
|
40
|
+
* Depth collision (world space, \`readsDepth\` + \`collide\`): runs in the depth hook over this
|
|
41
|
+
* frame's opaque depth. A live particle whose projected depth lies behind the scene by less
|
|
42
|
+
* than \`thickness\` (view-ray units) is pushed out along the surface normal (from the depth's
|
|
43
|
+
* neighbours) onto the surface, so a resting particle does not creep along the view ray, and its
|
|
44
|
+
* velocity is reflected about that normal, scaled by
|
|
45
|
+
* \`bounce\` normally and by \`1 - friction\` tangentially. A particle deeper than that is
|
|
46
|
+
* swept: if its position one step back (\`pos - vel * dt\`) was in front of the scene it
|
|
47
|
+
* crossed the surface this frame and is put back there, so a slow frame does not tunnel.
|
|
48
|
+
*/
|
|
49
|
+
export declare const PARTICLE_COLLIDE_WGSL: string;
|
|
50
|
+
/** Copies a depth texture into the particles' own depth32float copy (soft-particle source). */
|
|
51
|
+
export declare const PARTICLE_DEPTH_COPY_WGSL = "\n@group(0) @binding(0) var src: texture_depth_2d;\n@vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {\n let p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));\n return vec4f(p * 2.0 - 1.0, 0.0, 1.0);\n}\n@fragment fn fs(@builtin(position) pos: vec4f) -> @builtin(frag_depth) f32 {\n return textureLoad(src, vec2i(pos.xy), 0);\n}\n";
|
|
52
|
+
/**
|
|
53
|
+
* Counts live particles of either layout: \`stride\` vec4s per particle, \`life\` at vec4 index
|
|
54
|
+
* \`lifeAt\` (age in x, lifetime in y), and among them those whose y (vec4 \`posAt\`) is below
|
|
55
|
+
* \`belowY\`.
|
|
56
|
+
*/
|
|
57
|
+
export declare const PARTICLE_COUNT_WGSL = "\nstruct CountParams {\n capacity: u32,\n stride: u32,\n lifeAt: u32,\n posAt: u32,\n belowY: f32,\n _a: f32,\n _b: f32,\n _c: f32,\n};\nstruct Counts {\n alive: atomic<u32>,\n below: atomic<u32>,\n};\n@group(0) @binding(0) var<storage, read> data: array<vec4f>;\n@group(0) @binding(1) var<storage, read_write> counts: Counts;\n@group(0) @binding(2) var<uniform> params: CountParams;\n@compute @workgroup_size(64) fn count(@builtin(global_invocation_id) gid: vec3u) {\n if (gid.x >= params.capacity) { return; }\n let life = data[gid.x * params.stride + params.lifeAt];\n if (life.x < life.y) {\n atomicAdd(&counts.alive, 1u);\n if (data[gid.x * params.stride + params.posAt].y < params.belowY) {\n atomicAdd(&counts.below, 1u);\n }\n }\n}\n";
|