@3driseai/3drise-viewer 0.1.26 → 0.1.27
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/dist/animationsV2/ClipPlayer.d.ts +3 -0
- package/dist/animationsV2/ClipPlayer.d.ts.map +1 -1
- package/dist/animationsV2/ClipPlayer.js +67 -8
- package/dist/animationsV2/ClipsRuntime.d.ts +39 -0
- package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +245 -14
- package/dist/animationsV2/appliers.d.ts +5 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +25 -7
- package/dist/animationsV2/index.d.ts +1 -1
- package/dist/animationsV2/index.d.ts.map +1 -1
- package/dist/animationsV2/normalize.d.ts.map +1 -1
- package/dist/animationsV2/normalize.js +18 -7
- package/dist/animationsV2/sequenceUtils.d.ts +42 -1
- package/dist/animationsV2/sequenceUtils.d.ts.map +1 -1
- package/dist/animationsV2/sequenceUtils.js +103 -3
- package/dist/animationsV2/types.d.ts +20 -0
- package/dist/animationsV2/types.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.d.ts +8 -2
- package/dist/components/AdvancedGrid.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.js +31 -14
- package/dist/components/AnimatedObject.d.ts.map +1 -1
- package/dist/components/AnimatedObject.js +7 -5
- package/dist/components/Bubbles.d.ts +7 -1
- package/dist/components/Bubbles.d.ts.map +1 -1
- package/dist/components/Bubbles.js +42 -22
- package/dist/components/ChladniGrid.d.ts +8 -4
- package/dist/components/ChladniGrid.d.ts.map +1 -1
- package/dist/components/ChladniGrid.js +31 -13
- package/dist/components/CircuitGrid.d.ts +8 -11
- package/dist/components/CircuitGrid.d.ts.map +1 -1
- package/dist/components/CircuitGrid.js +31 -13
- package/dist/components/CloudsGenerator.d.ts +1 -1
- package/dist/components/CloudsGenerator.js +1 -1
- package/dist/components/ContourGrid.d.ts +8 -14
- package/dist/components/ContourGrid.d.ts.map +1 -1
- package/dist/components/ContourGrid.js +31 -13
- package/dist/components/EffectsGenerator.d.ts +7 -1
- package/dist/components/EffectsGenerator.d.ts.map +1 -1
- package/dist/components/EffectsGenerator.js +39 -38
- package/dist/components/EnvironmentManager.d.ts +4 -4
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.d.ts +8 -4
- package/dist/components/FlowNetGrid.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.js +31 -13
- package/dist/components/FractalGrid.d.ts +8 -12
- package/dist/components/FractalGrid.d.ts.map +1 -1
- package/dist/components/FractalGrid.js +31 -13
- package/dist/components/GirihGrid.d.ts +8 -1
- package/dist/components/GirihGrid.d.ts.map +1 -1
- package/dist/components/GirihGrid.js +31 -13
- package/dist/components/Glyphs.d.ts +7 -1
- package/dist/components/Glyphs.d.ts.map +1 -1
- package/dist/components/Glyphs.js +40 -34
- package/dist/components/GravWaveGrid.d.ts +8 -1
- package/dist/components/GravWaveGrid.d.ts.map +1 -1
- package/dist/components/GravWaveGrid.js +31 -13
- package/dist/components/GridsGenerator.d.ts +7 -1
- package/dist/components/GridsGenerator.d.ts.map +1 -1
- package/dist/components/GridsGenerator.js +20 -18
- package/dist/components/HexGrid.d.ts +8 -10
- package/dist/components/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid.js +31 -13
- package/dist/components/HyperbolicGrid.d.ts +8 -4
- package/dist/components/HyperbolicGrid.d.ts.map +1 -1
- package/dist/components/HyperbolicGrid.js +31 -13
- package/dist/components/LandscapeBuilder.d.ts +1 -1
- package/dist/components/LandscapeBuilder.d.ts.map +1 -1
- package/dist/components/LandscapeBuilder.js +1 -1
- package/dist/components/LandscapeObject.d.ts +1 -1
- package/dist/components/LandscapeObject.d.ts.map +1 -1
- package/dist/components/LandscapeObject.js +1 -1
- package/dist/components/MoireGrid.d.ts +8 -12
- package/dist/components/MoireGrid.d.ts.map +1 -1
- package/dist/components/MoireGrid.js +31 -13
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +2 -2
- package/dist/components/ObjectsRenderer.d.ts.map +1 -1
- package/dist/components/ObjectsRenderer.js +37 -3
- package/dist/components/OceanBuilder.d.ts +1 -1
- package/dist/components/OceanBuilder.js +1 -1
- package/dist/components/ParticlesGenerator.d.ts.map +1 -1
- package/dist/components/ParticlesGenerator.js +6 -0
- package/dist/components/QuasiGrid.d.ts +8 -11
- package/dist/components/QuasiGrid.d.ts.map +1 -1
- package/dist/components/QuasiGrid.js +31 -13
- package/dist/components/RadarGrid.d.ts +8 -13
- package/dist/components/RadarGrid.d.ts.map +1 -1
- package/dist/components/RadarGrid.js +31 -13
- package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
- package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
- package/dist/components/ReactionDiffusionGrid.js +33 -139
- package/dist/components/SceneBuilder.js +1 -1
- package/dist/components/SkySystem.d.ts +1 -1
- package/dist/components/SparklesBurst.d.ts +7 -1
- package/dist/components/SparklesBurst.d.ts.map +1 -1
- package/dist/components/SparklesBurst.js +31 -28
- package/dist/components/TerrainBuilder.d.ts +1 -1
- package/dist/components/TerrainBuilder.d.ts.map +1 -1
- package/dist/components/TerrainBuilder.js +1 -1
- package/dist/components/VoronoiGrid.d.ts +8 -10
- package/dist/components/VoronoiGrid.d.ts.map +1 -1
- package/dist/components/VoronoiGrid.js +31 -13
- package/dist/components/WallpaperGrid.d.ts +8 -1
- package/dist/components/WallpaperGrid.d.ts.map +1 -1
- package/dist/components/WallpaperGrid.js +33 -210
- package/dist/components/effects/AuraEffect.d.ts +8 -3
- package/dist/components/effects/AuraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuraEffect.js +49 -24
- package/dist/components/effects/AuroraEffect.d.ts +8 -3
- package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuroraEffect.js +45 -25
- package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
- package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
- package/dist/components/effects/BlackHoleEffect.js +42 -21
- package/dist/components/effects/ConstellationEffect.d.ts +8 -3
- package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
- package/dist/components/effects/ConstellationEffect.js +49 -23
- package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
- package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
- package/dist/components/effects/DandelionSeedsEffect.js +19 -9
- package/dist/components/effects/DataStreamEffect.d.ts +8 -3
- package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
- package/dist/components/effects/DataStreamEffect.js +54 -26
- package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
- package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
- package/dist/components/effects/DnaHelixEffect.js +62 -30
- package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
- package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
- package/dist/components/effects/FallingLeavesEffect.js +19 -9
- package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
- package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
- package/dist/components/effects/FieldLinesEffect.js +30 -20
- package/dist/components/effects/Fire.d.ts +8 -3
- package/dist/components/effects/Fire.d.ts.map +1 -1
- package/dist/components/effects/Fire.js +47 -10
- package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
- package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
- package/dist/components/effects/FireflySwarmEffect.js +19 -9
- package/dist/components/effects/Flares.d.ts +10 -3
- package/dist/components/effects/Flares.d.ts.map +1 -1
- package/dist/components/effects/Flares.js +53 -56
- package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
- package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
- package/dist/components/effects/ForcefieldEffect.js +52 -33
- package/dist/components/effects/GalaxyEffect.d.ts +7 -2
- package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
- package/dist/components/effects/GalaxyEffect.js +19 -9
- package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
- package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
- package/dist/components/effects/HarmonicShellEffect.js +30 -22
- package/dist/components/effects/HologramEffect.d.ts +8 -3
- package/dist/components/effects/HologramEffect.d.ts.map +1 -1
- package/dist/components/effects/HologramEffect.js +52 -23
- package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
- package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
- package/dist/components/effects/IceCrystalsEffect.js +36 -21
- package/dist/components/effects/IceHaloEffect.d.ts +7 -2
- package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
- package/dist/components/effects/IceHaloEffect.js +19 -9
- package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
- package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
- package/dist/components/effects/LichtenbergEffect.js +19 -9
- package/dist/components/effects/LightningEffect.d.ts +8 -3
- package/dist/components/effects/LightningEffect.d.ts.map +1 -1
- package/dist/components/effects/LightningEffect.js +54 -32
- package/dist/components/effects/MoleculesEffect.d.ts +8 -3
- package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
- package/dist/components/effects/MoleculesEffect.js +31 -21
- package/dist/components/effects/MurmurationEffect.d.ts +7 -2
- package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
- package/dist/components/effects/MurmurationEffect.js +19 -9
- package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
- package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
- package/dist/components/effects/NeuralNetworkEffect.js +66 -33
- package/dist/components/effects/OrbEffect.d.ts +8 -3
- package/dist/components/effects/OrbEffect.d.ts.map +1 -1
- package/dist/components/effects/OrbEffect.js +89 -42
- package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
- package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
- package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
- package/dist/components/effects/PortalEffect.d.ts +8 -3
- package/dist/components/effects/PortalEffect.d.ts.map +1 -1
- package/dist/components/effects/PortalEffect.js +41 -25
- package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
- package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
- package/dist/components/effects/ShockwaveEffect.js +19 -9
- package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
- package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokePlumeEffect.js +30 -20
- package/dist/components/effects/SmokeRibbon.d.ts +8 -2
- package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
- package/dist/components/effects/SmokeRibbon.js +34 -24
- package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
- package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokeRingEffect.js +33 -21
- package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
- package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
- package/dist/components/effects/StrangeAttractorEffect.js +30 -20
- package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
- package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
- package/dist/components/effects/VolumetricFogEffect.js +38 -20
- package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
- package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
- package/dist/components/effects/WaterCausticsEffect.js +19 -9
- package/dist/components/effects/index.d.ts +0 -1
- package/dist/components/effects/index.d.ts.map +1 -1
- package/dist/components/effects/index.js +0 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +0 -1
- package/dist/components/landscape/LandscapeMesh.js +1 -1
- package/dist/components/landscape/types.d.ts +1 -1
- package/dist/components/landscape/types.d.ts.map +1 -1
- package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
- package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
- package/dist/components/particles/MagneticBottleParticles.js +618 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeBurstParticles.js +588 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeFlowParticles.js +755 -0
- package/dist/components/particles/index.d.ts +6 -0
- package/dist/components/particles/index.d.ts.map +1 -1
- package/dist/components/particles/index.js +3 -0
- package/dist/components/terrain/types.d.ts +1 -1
- package/dist/components/terrain/types.d.ts.map +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
- package/dist/components/volumetricClouds/types.d.ts +1 -1
- package/dist/components/volumetricClouds/types.d.ts.map +1 -1
- package/dist/components/water/types.d.ts +1 -1
- package/dist/components/water/types.d.ts.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useConfigDriver.d.ts +22 -0
- package/dist/hooks/useConfigDriver.d.ts.map +1 -0
- package/dist/hooks/useConfigDriver.js +43 -0
- package/dist/hooks/useConfigLive.d.ts +1 -1
- package/dist/hooks/useConfigLive.d.ts.map +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
- package/dist/hooks/useOceanMaterial.d.ts +1 -1
- package/dist/hooks/useThunder.d.ts +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/interactions/index.d.ts +2 -1
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/interactions/index.js +1 -1
- package/dist/interactions/runner.d.ts +18 -3
- package/dist/interactions/runner.d.ts.map +1 -1
- package/dist/interactions/runner.js +25 -2
- package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
- package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
- package/dist/operations/catalogue/curlSmoke.js +178 -0
- package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
- package/dist/operations/catalogue/displayImage.js +1 -0
- package/dist/operations/catalogue/dissolve.d.ts +3 -0
- package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
- package/dist/operations/catalogue/dissolve.js +57 -0
- package/dist/operations/catalogue/emberAsh.d.ts +3 -0
- package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
- package/dist/operations/catalogue/emberAsh.js +171 -0
- package/dist/operations/catalogue/fade.d.ts.map +1 -1
- package/dist/operations/catalogue/fade.js +1 -0
- package/dist/operations/catalogue/flip.d.ts +3 -0
- package/dist/operations/catalogue/flip.d.ts.map +1 -0
- package/dist/operations/catalogue/flip.js +69 -0
- package/dist/operations/catalogue/flock.d.ts +3 -0
- package/dist/operations/catalogue/flock.d.ts.map +1 -0
- package/dist/operations/catalogue/flock.js +163 -0
- package/dist/operations/catalogue/focus.d.ts.map +1 -1
- package/dist/operations/catalogue/focus.js +1 -0
- package/dist/operations/catalogue/frame.d.ts +3 -0
- package/dist/operations/catalogue/frame.d.ts.map +1 -0
- package/dist/operations/catalogue/frame.js +44 -0
- package/dist/operations/catalogue/frost.d.ts +3 -0
- package/dist/operations/catalogue/frost.d.ts.map +1 -0
- package/dist/operations/catalogue/frost.js +111 -0
- package/dist/operations/catalogue/fxInstances.d.ts +21 -0
- package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
- package/dist/operations/catalogue/fxInstances.js +47 -0
- package/dist/operations/catalogue/fxPoints.d.ts +22 -0
- package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
- package/dist/operations/catalogue/fxPoints.js +70 -0
- package/dist/operations/catalogue/glow.d.ts.map +1 -1
- package/dist/operations/catalogue/glow.js +2 -1
- package/dist/operations/catalogue/heatCracks.d.ts +3 -0
- package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
- package/dist/operations/catalogue/heatCracks.js +134 -0
- package/dist/operations/catalogue/hologram.d.ts +3 -0
- package/dist/operations/catalogue/hologram.d.ts.map +1 -0
- package/dist/operations/catalogue/hologram.js +118 -0
- package/dist/operations/catalogue/inkBloom.d.ts +3 -0
- package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
- package/dist/operations/catalogue/inkBloom.js +156 -0
- package/dist/operations/catalogue/ivy.d.ts +13 -0
- package/dist/operations/catalogue/ivy.d.ts.map +1 -0
- package/dist/operations/catalogue/ivy.js +469 -0
- package/dist/operations/catalogue/jelly.d.ts +3 -0
- package/dist/operations/catalogue/jelly.d.ts.map +1 -0
- package/dist/operations/catalogue/jelly.js +50 -0
- package/dist/operations/catalogue/kintsugi.d.ts +3 -0
- package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
- package/dist/operations/catalogue/kintsugi.js +173 -0
- package/dist/operations/catalogue/lidarScan.d.ts +3 -0
- package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
- package/dist/operations/catalogue/lidarScan.js +240 -0
- package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
- package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
- package/dist/operations/catalogue/liquidMetal.js +122 -0
- package/dist/operations/catalogue/metalize.d.ts +3 -0
- package/dist/operations/catalogue/metalize.d.ts.map +1 -0
- package/dist/operations/catalogue/metalize.js +135 -0
- package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
- package/dist/operations/catalogue/moveToFront.js +1 -0
- package/dist/operations/catalogue/orbit.d.ts +3 -0
- package/dist/operations/catalogue/orbit.d.ts.map +1 -0
- package/dist/operations/catalogue/orbit.js +29 -0
- package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
- package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
- package/dist/operations/catalogue/particleSwarm.js +138 -0
- package/dist/operations/catalogue/petalPeel.d.ts +3 -0
- package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
- package/dist/operations/catalogue/petalPeel.js +137 -0
- package/dist/operations/catalogue/petrify.d.ts +3 -0
- package/dist/operations/catalogue/petrify.d.ts.map +1 -0
- package/dist/operations/catalogue/petrify.js +94 -0
- package/dist/operations/catalogue/portal.d.ts +3 -0
- package/dist/operations/catalogue/portal.d.ts.map +1 -0
- package/dist/operations/catalogue/portal.js +224 -0
- package/dist/operations/catalogue/print3d.d.ts +3 -0
- package/dist/operations/catalogue/print3d.d.ts.map +1 -0
- package/dist/operations/catalogue/print3d.js +275 -0
- package/dist/operations/catalogue/rainBeads.d.ts +3 -0
- package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
- package/dist/operations/catalogue/rainBeads.js +223 -0
- package/dist/operations/catalogue/restPose.d.ts +21 -0
- package/dist/operations/catalogue/restPose.d.ts.map +1 -0
- package/dist/operations/catalogue/restPose.js +55 -0
- package/dist/operations/catalogue/rimLight.d.ts +3 -0
- package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
- package/dist/operations/catalogue/rimLight.js +72 -0
- package/dist/operations/catalogue/sandErosion.d.ts +3 -0
- package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
- package/dist/operations/catalogue/sandErosion.js +167 -0
- package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
- package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
- package/dist/operations/catalogue/shaderLayers.js +322 -0
- package/dist/operations/catalogue/shatter.d.ts +3 -0
- package/dist/operations/catalogue/shatter.d.ts.map +1 -0
- package/dist/operations/catalogue/shatter.js +267 -0
- package/dist/operations/catalogue/silkDrape.d.ts +3 -0
- package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
- package/dist/operations/catalogue/silkDrape.js +340 -0
- package/dist/operations/catalogue/spin.d.ts +3 -0
- package/dist/operations/catalogue/spin.d.ts.map +1 -0
- package/dist/operations/catalogue/spin.js +42 -0
- package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
- package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
- package/dist/operations/catalogue/surfaceSample.js +187 -0
- package/dist/operations/catalogue/swirl.d.ts +3 -0
- package/dist/operations/catalogue/swirl.d.ts.map +1 -0
- package/dist/operations/catalogue/swirl.js +69 -0
- package/dist/operations/catalogue/teleport.d.ts +3 -0
- package/dist/operations/catalogue/teleport.d.ts.map +1 -0
- package/dist/operations/catalogue/teleport.js +213 -0
- package/dist/operations/catalogue/transitionField.d.ts +124 -0
- package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
- package/dist/operations/catalogue/transitionField.js +278 -0
- package/dist/operations/catalogue/unweave.d.ts +3 -0
- package/dist/operations/catalogue/unweave.d.ts.map +1 -0
- package/dist/operations/catalogue/unweave.js +233 -0
- package/dist/operations/catalogue/visibility.d.ts.map +1 -1
- package/dist/operations/catalogue/visibility.js +1 -0
- package/dist/operations/catalogue/voxelize.d.ts +3 -0
- package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
- package/dist/operations/catalogue/voxelize.js +148 -0
- package/dist/operations/catalogue/warmup.d.ts +22 -0
- package/dist/operations/catalogue/warmup.d.ts.map +1 -0
- package/dist/operations/catalogue/warmup.js +106 -0
- package/dist/operations/catalogue/zoom.d.ts.map +1 -1
- package/dist/operations/catalogue/zoom.js +1 -0
- package/dist/operations/index.d.ts +4 -2
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +4 -2
- package/dist/operations/objectEffects.d.ts +46 -0
- package/dist/operations/objectEffects.d.ts.map +1 -0
- package/dist/operations/objectEffects.js +136 -0
- package/dist/operations/registry.d.ts +7 -2
- package/dist/operations/registry.d.ts.map +1 -1
- package/dist/operations/registry.js +45 -3
- package/dist/operations/runtime.d.ts +40 -2
- package/dist/operations/runtime.d.ts.map +1 -1
- package/dist/operations/runtime.js +164 -8
- package/dist/operations/types.d.ts +29 -3
- package/dist/operations/types.d.ts.map +1 -1
- package/dist/operations/types.js +6 -0
- package/dist/operations/useObjectEffectLayers.d.ts +4 -0
- package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
- package/dist/operations/useObjectEffectLayers.js +42 -0
- package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
- package/dist/operations/useOperationsRuntime.js +42 -4
- package/dist/presets/landscapePresets.d.ts +1 -1
- package/dist/presets/landscapePresets.d.ts.map +1 -1
- package/dist/presets/landscapePresets.js +1 -1
- package/dist/presets/landscapeTypes.d.ts +1 -1
- package/dist/presets/landscapeTypes.d.ts.map +1 -1
- package/dist/presets/landscapeTypes.js +1 -1
- package/dist/presets/oceanSurfacePresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts.map +1 -1
- package/dist/presets/volumetricCloudPresets.d.ts +1 -1
- package/dist/types/cloudConfigs.d.ts +2 -309
- package/dist/types/cloudConfigs.d.ts.map +1 -1
- package/dist/types/cloudConfigs.js +2 -339
- package/dist/types/index.d.ts +8 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/landscapeConfigs.d.ts +2 -217
- package/dist/types/landscapeConfigs.d.ts.map +1 -1
- package/dist/types/landscapeConfigs.js +2 -256
- package/dist/types/oceanConfigs.d.ts +2 -289
- package/dist/types/oceanConfigs.d.ts.map +1 -1
- package/dist/types/oceanConfigs.js +2 -380
- package/dist/types/terrainConfigs.d.ts +2 -250
- package/dist/types/terrainConfigs.d.ts.map +1 -1
- package/dist/types/terrainConfigs.js +2 -292
- package/dist/utils/cloudUniforms.d.ts +1 -1
- package/dist/utils/configAnimations.d.ts +6 -0
- package/dist/utils/configAnimations.d.ts.map +1 -1
- package/dist/utils/configAnimations.js +14 -0
- package/dist/utils/gridConfig.d.ts +19 -0
- package/dist/utils/gridConfig.d.ts.map +1 -0
- package/dist/utils/gridConfig.js +52 -0
- package/dist/utils/handleCloudsAnimations.d.ts +1 -1
- package/dist/utils/handleCloudsAnimations.js +1 -1
- package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
- package/dist/utils/hasHoverAnimation.js +0 -2
- package/dist/utils/landscapeUniforms.d.ts +1 -1
- package/dist/utils/landscapeUniforms.d.ts.map +1 -1
- package/dist/utils/oceanUniforms.d.ts +1 -1
- package/dist/utils/particleShape.d.ts +33 -0
- package/dist/utils/particleShape.d.ts.map +1 -0
- package/dist/utils/particleShape.js +207 -0
- package/dist/utils/particleTrails.d.ts.map +1 -1
- package/dist/utils/particleTrails.js +29 -14
- package/dist/utils/terrainUniforms.d.ts +1 -1
- package/dist/utils/terrainUniforms.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AnimationClip, AnimationSequence, StepClip } from './types';
|
|
1
|
+
import type { AnimationClip, AnimationSequence, SequenceCue, StepClip } from './types';
|
|
2
2
|
export interface ScheduledClip {
|
|
3
3
|
/** `${stepClip.id}` — stable across re-resolves of the same sequence. */
|
|
4
4
|
id: string;
|
|
@@ -11,6 +11,12 @@ export interface ScheduledClip {
|
|
|
11
11
|
start: number;
|
|
12
12
|
end: number;
|
|
13
13
|
}
|
|
14
|
+
export interface ScheduledCue {
|
|
15
|
+
cue: SequenceCue;
|
|
16
|
+
stepIndex: number;
|
|
17
|
+
/** Sequence seconds. */
|
|
18
|
+
time: number;
|
|
19
|
+
}
|
|
14
20
|
export interface SequenceSchedule {
|
|
15
21
|
/** In priority order (schedule index = activation order). */
|
|
16
22
|
entries: ScheduledClip[];
|
|
@@ -18,12 +24,47 @@ export interface SequenceSchedule {
|
|
|
18
24
|
start: number;
|
|
19
25
|
end: number;
|
|
20
26
|
}[];
|
|
27
|
+
/** Sorted by time (authored order breaks ties). Cues on a missing step are dropped. */
|
|
28
|
+
cues: ScheduledCue[];
|
|
21
29
|
duration: number;
|
|
22
30
|
}
|
|
23
31
|
export type ClipLookup = ReadonlyMap<string, AnimationClip> | ((id: string) => AnimationClip | undefined);
|
|
24
32
|
export declare const clipMap: (clips: readonly AnimationClip[]) => Map<string, AnimationClip>;
|
|
25
33
|
/** Step clips whose clip is missing (deleted, not loaded) are skipped. */
|
|
26
34
|
export declare function resolveSequence(seq: AnimationSequence, clips: ClipLookup): SequenceSchedule;
|
|
35
|
+
/** Every cued action's state at sequence time T: on when its last cue at or before T is 'apply'. */
|
|
36
|
+
export declare function cueStatesAt(schedule: SequenceSchedule, T: number): Map<string, boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Where sequence time T sits, as a cue anchor: the step it falls in (a boundary
|
|
39
|
+
* belongs to the step that starts there) and the offset into it.
|
|
40
|
+
*/
|
|
41
|
+
export declare function anchorAt(seq: AnimationSequence, schedule: SequenceSchedule, T: number): {
|
|
42
|
+
stepId: string;
|
|
43
|
+
at: number;
|
|
44
|
+
} | null;
|
|
45
|
+
/** On / off spans of one action along the sequence (for drawing). */
|
|
46
|
+
export declare function cueSpans(schedule: SequenceSchedule, actionId: string): Array<{
|
|
47
|
+
from: number;
|
|
48
|
+
to: number;
|
|
49
|
+
}>;
|
|
50
|
+
export interface CueConflict {
|
|
51
|
+
cue: SequenceCue;
|
|
52
|
+
/** The clip whose track animates a property the action patches. */
|
|
53
|
+
clip: AnimationClip;
|
|
54
|
+
state: string;
|
|
55
|
+
path: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 'apply' cues whose action patches a property that a clip of the same step
|
|
59
|
+
* animates — the clip writes over the patch while it runs.
|
|
60
|
+
*/
|
|
61
|
+
export declare function findCueConflicts(seq: AnimationSequence, clips: ClipLookup, getAction: (id: string) => {
|
|
62
|
+
targets?: Array<{
|
|
63
|
+
state: string;
|
|
64
|
+
patch: any;
|
|
65
|
+
}>;
|
|
66
|
+
} | undefined): CueConflict[];
|
|
67
|
+
export declare function newCue(actionId: string, stepId: string, at: number, mode?: SequenceCue['mode']): SequenceCue;
|
|
27
68
|
/** Clip-local time (seconds, 0..clip.duration) of an entry at sequence time T. */
|
|
28
69
|
export declare function entryLocalTime(entry: ScheduledClip, T: number): number;
|
|
29
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceUtils.d.ts","sourceRoot":"","sources":["../../src/animationsV2/sequenceUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sequenceUtils.d.ts","sourceRoot":"","sources":["../../src/animationsV2/sequenceUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,98 @@ export function resolveSequence(seq, clips) {
|
|
|
24
24
|
steps.push({ start: stepStart, end: stepEnd });
|
|
25
25
|
cursor = stepEnd;
|
|
26
26
|
});
|
|
27
|
-
|
|
27
|
+
const stepIndexById = new Map(seq.steps.map((s, i) => [s.id, i]));
|
|
28
|
+
const cues = [];
|
|
29
|
+
(seq.cues ?? []).forEach((cue) => {
|
|
30
|
+
const stepIndex = stepIndexById.get(cue.stepId);
|
|
31
|
+
if (stepIndex === undefined)
|
|
32
|
+
return;
|
|
33
|
+
const time = Math.min(cursor, steps[stepIndex].start + safeDelay(cue.at));
|
|
34
|
+
cues.push({ cue, stepIndex, time });
|
|
35
|
+
});
|
|
36
|
+
cues.sort((a, b) => a.time - b.time); // stable: authored order breaks ties
|
|
37
|
+
return { entries, steps, cues, duration: cursor };
|
|
38
|
+
}
|
|
39
|
+
// --- cues (actions) ----------------------------------------------------------------
|
|
40
|
+
/** Every cued action's state at sequence time T: on when its last cue at or before T is 'apply'. */
|
|
41
|
+
export function cueStatesAt(schedule, T) {
|
|
42
|
+
const out = new Map();
|
|
43
|
+
for (const c of schedule.cues) {
|
|
44
|
+
if (!out.has(c.cue.actionId))
|
|
45
|
+
out.set(c.cue.actionId, false);
|
|
46
|
+
if (c.time <= T + 1e-9)
|
|
47
|
+
out.set(c.cue.actionId, c.cue.mode === 'apply');
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Where sequence time T sits, as a cue anchor: the step it falls in (a boundary
|
|
53
|
+
* belongs to the step that starts there) and the offset into it.
|
|
54
|
+
*/
|
|
55
|
+
export function anchorAt(seq, schedule, T) {
|
|
56
|
+
if (!seq.steps.length)
|
|
57
|
+
return null;
|
|
58
|
+
let index = 0;
|
|
59
|
+
schedule.steps.forEach((s, i) => { if (T >= s.start - 1e-9)
|
|
60
|
+
index = i; });
|
|
61
|
+
const start = schedule.steps[index]?.start ?? 0;
|
|
62
|
+
return { stepId: seq.steps[index].id, at: Math.max(0, T - start) };
|
|
63
|
+
}
|
|
64
|
+
/** On / off spans of one action along the sequence (for drawing). */
|
|
65
|
+
export function cueSpans(schedule, actionId) {
|
|
66
|
+
const spans = [];
|
|
67
|
+
let onAt = null;
|
|
68
|
+
for (const c of schedule.cues) {
|
|
69
|
+
if (c.cue.actionId !== actionId)
|
|
70
|
+
continue;
|
|
71
|
+
if (c.cue.mode === 'apply' && onAt === null)
|
|
72
|
+
onAt = c.time;
|
|
73
|
+
else if (c.cue.mode === 'revert' && onAt !== null) {
|
|
74
|
+
spans.push({ from: onAt, to: c.time });
|
|
75
|
+
onAt = null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (onAt !== null)
|
|
79
|
+
spans.push({ from: onAt, to: schedule.duration });
|
|
80
|
+
return spans;
|
|
81
|
+
}
|
|
82
|
+
/** Leaf paths of a patch ('meshSettings.position', 'config.intensity'…); arrays are leaves. */
|
|
83
|
+
function patchPaths(patch, prefix = '') {
|
|
84
|
+
if (!patch || typeof patch !== 'object' || Array.isArray(patch))
|
|
85
|
+
return prefix ? [prefix] : [];
|
|
86
|
+
return Object.entries(patch).flatMap(([k, v]) => patchPaths(v, prefix ? `${prefix}.${k}` : k));
|
|
87
|
+
}
|
|
88
|
+
const overlapsPath = (a, b) => a === b || a.startsWith(`${b}.`) || b.startsWith(`${a}.`);
|
|
89
|
+
/**
|
|
90
|
+
* 'apply' cues whose action patches a property that a clip of the same step
|
|
91
|
+
* animates — the clip writes over the patch while it runs.
|
|
92
|
+
*/
|
|
93
|
+
export function findCueConflicts(seq, clips, getAction) {
|
|
94
|
+
const schedule = resolveSequence(seq, clips);
|
|
95
|
+
const out = [];
|
|
96
|
+
for (const sc of schedule.cues) {
|
|
97
|
+
if (sc.cue.mode !== 'apply')
|
|
98
|
+
continue;
|
|
99
|
+
const action = getAction(sc.cue.actionId);
|
|
100
|
+
if (!action?.targets?.length)
|
|
101
|
+
continue;
|
|
102
|
+
const entries = schedule.entries.filter(e => e.stepIndex === sc.stepIndex);
|
|
103
|
+
for (const target of action.targets) {
|
|
104
|
+
const paths = patchPaths(target.patch);
|
|
105
|
+
for (const e of entries) {
|
|
106
|
+
for (const track of e.clip.tracks) {
|
|
107
|
+
if (track.muted || track.node || track.state !== target.state || !track.keys.length)
|
|
108
|
+
continue;
|
|
109
|
+
if (paths.some(p => overlapsPath(p, track.path)))
|
|
110
|
+
out.push({ cue: sc.cue, clip: e.clip, state: track.state, path: track.path });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
export function newCue(actionId, stepId, at, mode = 'apply') {
|
|
118
|
+
return { id: uid('cue'), actionId, stepId, at: Math.max(0, at), mode };
|
|
28
119
|
}
|
|
29
120
|
/** Clip-local time (seconds, 0..clip.duration) of an entry at sequence time T. */
|
|
30
121
|
export function entryLocalTime(entry, T) {
|
|
@@ -99,7 +190,7 @@ export function conflictedStepClipIds(conflicts) {
|
|
|
99
190
|
// --- builders ----------------------------------------------------------------------
|
|
100
191
|
export function newSequence(name, key) {
|
|
101
192
|
return {
|
|
102
|
-
id: uid('seq'), name, key, steps: [{ id: uid('step'), clips: [] }],
|
|
193
|
+
id: uid('seq'), name, key, steps: [{ id: uid('step'), clips: [] }], cues: [],
|
|
103
194
|
loop: false, yoyo: false, reverse: false, endMode: 'hold',
|
|
104
195
|
driver: 'time', driverSettings: { ...DEFAULT_DRIVER_SETTINGS }, autoplay: false,
|
|
105
196
|
};
|
|
@@ -115,6 +206,15 @@ export function cloneSequence(seq, name, key) {
|
|
|
115
206
|
name,
|
|
116
207
|
key,
|
|
117
208
|
isDirty: undefined,
|
|
118
|
-
|
|
209
|
+
...(() => {
|
|
210
|
+
// Fresh step ids — cues follow their step to the copy.
|
|
211
|
+
const stepIds = new Map(seq.steps.map(s => [s.id, uid('step')]));
|
|
212
|
+
return {
|
|
213
|
+
steps: seq.steps.map(s => ({ id: stepIds.get(s.id), clips: s.clips.map(c => ({ ...c, id: uid('sc') })) })),
|
|
214
|
+
cues: (seq.cues ?? [])
|
|
215
|
+
.filter(c => stepIds.has(c.stepId))
|
|
216
|
+
.map(c => ({ ...c, id: uid('cue'), stepId: stepIds.get(c.stepId) })),
|
|
217
|
+
};
|
|
218
|
+
})(),
|
|
119
219
|
};
|
|
120
220
|
}
|
|
@@ -59,6 +59,24 @@ export interface SequenceStep {
|
|
|
59
59
|
id: string;
|
|
60
60
|
clips: StepClip[];
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* An action switched at a moment of the sequence. Anchored to a step (not absolute
|
|
64
|
+
* time), so retiming clips or reordering steps keeps it on the moment it was put on.
|
|
65
|
+
*
|
|
66
|
+
* Cues are STATE, not events: at sequence time T an action is on when its last cue
|
|
67
|
+
* at or before T is 'apply' (off when 'revert', or when it has no cue yet). So
|
|
68
|
+
* scrubbing, reverse, yoyo, loop and input drivers all land on the same scene.
|
|
69
|
+
*/
|
|
70
|
+
export interface SequenceCue {
|
|
71
|
+
id: string;
|
|
72
|
+
/** ActionSequence id. */
|
|
73
|
+
actionId: string;
|
|
74
|
+
/** Step it is anchored to. */
|
|
75
|
+
stepId: string;
|
|
76
|
+
/** Seconds after that step starts (>= 0). */
|
|
77
|
+
at: number;
|
|
78
|
+
mode: 'apply' | 'revert';
|
|
79
|
+
}
|
|
62
80
|
/** What moves a sequence's clock: time (it plays), or an input that scrubs it. */
|
|
63
81
|
export type SequenceDriver = 'time' | 'mouseWheel' | 'mouseX' | 'mouseY';
|
|
64
82
|
export interface SequenceDriverSettings {
|
|
@@ -77,6 +95,8 @@ export interface AnimationSequence {
|
|
|
77
95
|
description?: string;
|
|
78
96
|
/** Run in order. */
|
|
79
97
|
steps: SequenceStep[];
|
|
98
|
+
/** Actions switched on / off along the sequence. */
|
|
99
|
+
cues: SequenceCue[];
|
|
80
100
|
/** Whole-sequence playback. */
|
|
81
101
|
loop: boolean;
|
|
82
102
|
yoyo: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/animationsV2/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/animationsV2/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
2
2
|
import type { ThreeElements } from '@react-three/fiber';
|
|
3
|
-
import type { MyGridConfig } from '@3driseai/3drise-core';
|
|
3
|
+
import type { AnimationOptions, MouseMoveDomain, MyGridConfig } from '@3driseai/3drise-core';
|
|
4
4
|
export interface AdvancedGridProps extends ObjectReadyProps {
|
|
5
5
|
config?: MyGridConfig;
|
|
6
6
|
groupProps?: ThreeElements['group'];
|
|
7
|
+
/** Scene object id: the live-edit handle is found by it. */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Keyframes on this grid's config knobs (animations.grid.animations). */
|
|
10
|
+
keyframes?: AnimationOptions[];
|
|
11
|
+
/** Pointer bindings on this grid's config knobs (mouseMove.grid). */
|
|
12
|
+
mouseMove?: MouseMoveDomain;
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
15
|
* MyGridConfig — the single source of truth for a grid instance.
|
|
@@ -11,6 +17,6 @@ export interface AdvancedGridProps extends ObjectReadyProps {
|
|
|
11
17
|
* and any preset/serialization layer.
|
|
12
18
|
*/
|
|
13
19
|
export declare const defaultMyGridConfig: MyGridConfig;
|
|
14
|
-
export declare function AdvancedGrid({ config, groupProps, onObjectReady, onObjectDispose }: AdvancedGridProps): import("react").JSX.Element;
|
|
20
|
+
export declare function AdvancedGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: AdvancedGridProps): import("react").JSX.Element;
|
|
15
21
|
export default AdvancedGrid;
|
|
16
22
|
//# sourceMappingURL=AdvancedGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedGrid.d.ts","sourceRoot":"","sources":["../../src/components/AdvancedGrid.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdvancedGrid.d.ts","sourceRoot":"","sources":["../../src/components/AdvancedGrid.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7F,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAyBjC,CAAC;AAWF,wBAAgB,YAAY,CAAC,EAAE,MAA4B,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,iBAAiB,+BA+CrJ;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
3
3
|
import { useGridSurface } from '../hooks/useGridSurface.js';
|
|
4
|
-
import {
|
|
4
|
+
import { useConfigDriver } from '../hooks/useConfigDriver.js';
|
|
5
|
+
import { withConfigDefaults } from '../utils/configAnimations.js';
|
|
6
|
+
import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
|
|
7
|
+
import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
|
|
5
8
|
import * as THREE from 'three';
|
|
6
|
-
import { MyGridMaterial } from '@3driseai/3drise-core';
|
|
9
|
+
import { MyGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
7
10
|
// Side-effect import registers <myGridMaterial> via extend() in MyGridMaterial.ts.
|
|
8
11
|
void MyGridMaterial;
|
|
9
12
|
/**
|
|
@@ -37,27 +40,41 @@ export const defaultMyGridConfig = {
|
|
|
37
40
|
reveal: 1,
|
|
38
41
|
revealDuration: 0,
|
|
39
42
|
};
|
|
40
|
-
|
|
43
|
+
/** No knobs of its own: the shared surface knobs are all there is. */
|
|
44
|
+
const VARIANT = [];
|
|
45
|
+
/** No computed uniforms: every knob maps straight to its u_<key>. */
|
|
46
|
+
const DERIVE = {};
|
|
47
|
+
/** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
|
|
48
|
+
const STRUCTURAL = [...GRID_STRUCTURAL];
|
|
49
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
50
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.advancedGrid ?? []).map((p) => p.value));
|
|
51
|
+
export function AdvancedGrid({ config = defaultMyGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
41
52
|
const matRef = useRef(null);
|
|
42
53
|
const rootRef = useRef(null);
|
|
43
54
|
const meshRef = useRef(null);
|
|
44
55
|
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
45
|
-
|
|
56
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
57
|
+
// and for a keyframe or pointer binding to start from.
|
|
58
|
+
const base = useMemo(() => withConfigDefaults(defaultMyGridConfig, config), [config]);
|
|
59
|
+
const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
|
|
46
60
|
const segs = segments ?? (displace > 0 ? Math.max(64, Math.ceil(size / cellSize) * 2) : 1);
|
|
47
|
-
const fade = fadeDistance ?? size * 0.5;
|
|
48
|
-
// memoize Color objects so we only re-allocate when the hex actually changes
|
|
49
|
-
const colors = useMemo(() => ({
|
|
50
|
-
line: new THREE.Color(lineColor),
|
|
51
|
-
section: new THREE.Color(sectionColor),
|
|
52
|
-
cell: new THREE.Color(cellColor),
|
|
53
|
-
glow: new THREE.Color(glowColor),
|
|
54
|
-
bg: new THREE.Color(bgColor),
|
|
55
|
-
}), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
|
|
56
61
|
// Shared with every other shader-plane grid. This also fixes the pointer
|
|
57
62
|
// projection: it used to assume the XZ plane, so `followMouse` picked
|
|
58
63
|
// against the wrong plane whenever `flat` was false or a parent transform
|
|
59
64
|
// had rotated the grid.
|
|
60
65
|
useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
|
|
61
|
-
|
|
66
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
67
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
68
|
+
const baseRef = useRef(base);
|
|
69
|
+
baseRef.current = base;
|
|
70
|
+
const setMaterial = useCallback((m) => {
|
|
71
|
+
matRef.current = m;
|
|
72
|
+
if (m)
|
|
73
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
74
|
+
}, []);
|
|
75
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
76
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
77
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
78
|
+
return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("myGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, MyGridMaterial.key)] }) }));
|
|
62
79
|
}
|
|
63
80
|
export default AdvancedGrid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAiFvD,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
3
3
|
import { useRef, useEffect, useCallback, memo } from 'react';
|
|
4
4
|
import { usePathAnimation } from '../hooks/usePathAnimation.js';
|
|
5
|
-
import
|
|
5
|
+
import { useObjectEffectLayers } from '../operations/useObjectEffectLayers.js';
|
|
6
6
|
import { useObjectAnimation } from '../hooks/useObjectAnimation.js';
|
|
7
7
|
import { hasHoverAnimation } from '../utils/hasHoverAnimation.js';
|
|
8
8
|
export const AnimatedObject = memo(({ stateKey, transitionSettings, createdObject,
|
|
@@ -39,6 +39,8 @@ visible = true, children, parentRef, handleObjectClick, onPointerEnter, onPointe
|
|
|
39
39
|
enabled: createdObject.type !== 'gallery', //
|
|
40
40
|
hovered,
|
|
41
41
|
}, groupRef);
|
|
42
|
+
// Effects layered on the object (frost, metalize…) — switched on / off, held while on.
|
|
43
|
+
useObjectEffectLayers(groupRef, createdObject.effects);
|
|
42
44
|
const { startPathAnimation, updatePathAnimation, isAnimating: isPathAnimating } = usePathAnimation();
|
|
43
45
|
const syncTransform = useCallback(() => {
|
|
44
46
|
const obj = groupRef.current;
|
|
@@ -64,13 +66,13 @@ visible = true, children, parentRef, handleObjectClick, onPointerEnter, onPointe
|
|
|
64
66
|
}
|
|
65
67
|
};
|
|
66
68
|
if (createdObject.type === 'particles' || createdObject.type === 'gallery' || (!hasHoverFunctionalities && !hasMouseInteraction)) {
|
|
67
|
-
return _jsx(_Fragment, { children:
|
|
69
|
+
return _jsx(_Fragment, { children: _jsx("group", { ref: groupRef, position: position, scale: scale, rotation: rotation, visible: visible,
|
|
68
70
|
// onClick={onClick}
|
|
69
71
|
// onPointerEnter={onPointerEnter}
|
|
70
72
|
// onPointerLeave={onPointerLeave}
|
|
71
|
-
name: createdObject.meshSettings.name, userData: { id: createdObject.id }, children:
|
|
73
|
+
name: createdObject.meshSettings.name, userData: { id: createdObject.id }, children: children }) });
|
|
72
74
|
}
|
|
73
|
-
return (
|
|
75
|
+
return (_jsx("group", { ref: groupRef, position: position, scale: scale, rotation: rotation, visible: visible, onClick: onClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, name: createdObject.meshSettings.name, userData: { id: createdObject.id }, children: children }));
|
|
74
76
|
});
|
|
75
77
|
AnimatedObject.displayName = 'AnimatedObject';
|
|
76
78
|
export default AnimatedObject;
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
2
|
-
import type { BubblesConfig } from '@3driseai/3drise-core';
|
|
2
|
+
import type { AnimationOptions, BubblesConfig, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
3
3
|
import React from "react";
|
|
4
4
|
export interface BubblesProps extends ObjectReadyProps {
|
|
5
5
|
config: BubblesConfig;
|
|
6
6
|
boundingRadius?: number;
|
|
7
|
+
/** Scene object id of a standalone effect: the live-edit handle is found by it. */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Keyframes on this effect's config knobs (animations.effect.animations). */
|
|
10
|
+
keyframes?: AnimationOptions[];
|
|
11
|
+
/** Pointer bindings on this effect's config knobs (mouseMove.effect). */
|
|
12
|
+
mouseMove?: MouseMoveDomain;
|
|
7
13
|
}
|
|
8
14
|
declare const Bubbles: React.FC<BubblesProps>;
|
|
9
15
|
export default Bubbles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bubbles.d.ts","sourceRoot":"","sources":["../../src/components/Bubbles.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Bubbles.d.ts","sourceRoot":"","sources":["../../src/components/Bubbles.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAK7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IAClD,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAyBD,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqGnC,CAAC;AACF,eAAe,OAAO,CAAC"}
|
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
3
|
-
import {
|
|
3
|
+
import { useConfigDriver } from '../hooks/useConfigDriver.js';
|
|
4
|
+
import { withConfigDefaults } from '../utils/configAnimations.js';
|
|
5
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
4
6
|
import { useFrame } from '@react-three/fiber';
|
|
5
7
|
import * as THREE from 'three';
|
|
6
|
-
import { BubblesPointsMaterial } from '@3driseai/3drise-core';
|
|
8
|
+
import { BubblesPointsMaterial, DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
7
9
|
const MAX_BUBBLES = 256;
|
|
8
|
-
|
|
10
|
+
/** Nothing rebuilds the pool: it is a fixed ring buffer of MAX_BUBBLES. */
|
|
11
|
+
const STRUCTURAL = [];
|
|
12
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
|
|
13
|
+
const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.bubbles.map((p) => p.value));
|
|
14
|
+
/** The single push point: every config knob that lives on the material reaches it here. */
|
|
15
|
+
function applyConfig(material, c) {
|
|
16
|
+
const u = material.uniforms;
|
|
17
|
+
const [cA, cB, cC] = c.colors;
|
|
18
|
+
u.uColorA.value.set(cA);
|
|
19
|
+
u.uColorB.value.set(cB);
|
|
20
|
+
u.uColorC.value.set(cC);
|
|
21
|
+
u.uScale.value = (c.scale) / 10;
|
|
22
|
+
u.uOpacity.value = c.opacity;
|
|
23
|
+
u.uIridescence.value = c.iridescence;
|
|
24
|
+
// speed is integrated into uTime on the CPU (see useFrame), so the shader's
|
|
25
|
+
// uTime * uSpeed never jumps when the speed changes
|
|
26
|
+
u.uSpeed.value = 1;
|
|
27
|
+
}
|
|
28
|
+
const Bubbles = ({ config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
|
|
29
|
+
const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.bubbles, config), [config]);
|
|
30
|
+
// the knobs read per frame by the simulation, from the last merged config
|
|
31
|
+
const cur = useRef(cfg);
|
|
9
32
|
const positions = useMemo(() => new Float32Array(MAX_BUBBLES * 3), []);
|
|
10
33
|
const velocities = useMemo(() => new Float32Array(MAX_BUBBLES * 3), []);
|
|
11
34
|
const ages = useMemo(() => new Float32Array(MAX_BUBBLES), []);
|
|
@@ -31,28 +54,25 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
|
|
|
31
54
|
m.blending = THREE.NormalBlending;
|
|
32
55
|
return m;
|
|
33
56
|
}, []);
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
const u = material.uniforms;
|
|
36
|
-
const [cA, cB, cC] = config.colors ?? ['#aaccff', '#ffaadd', '#aaffcc'];
|
|
37
|
-
u.uColorA.value.set(cA);
|
|
38
|
-
u.uColorB.value.set(cB);
|
|
39
|
-
u.uColorC.value.set(cC);
|
|
40
|
-
u.uScale.value = (config.scale ?? 1) / 10;
|
|
41
|
-
u.uOpacity.value = config.opacity ?? 0.6;
|
|
42
|
-
u.uIridescence.value = config.iridescence ?? 0.7;
|
|
43
|
-
u.uSpeed.value = config.speed ?? 1;
|
|
44
|
-
}, [config.colors, config.scale, config.opacity, config.iridescence, config.speed, material]);
|
|
45
57
|
useEffect(() => () => { geometry.dispose(); material.dispose(); }, [geometry, material]);
|
|
46
58
|
const spawnAccum = useRef(0);
|
|
47
59
|
const rootRef = useRef(null);
|
|
48
60
|
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
61
|
+
const push = useCallback((merged) => {
|
|
62
|
+
cur.current = merged;
|
|
63
|
+
applyConfig(material, merged);
|
|
64
|
+
}, [material]);
|
|
65
|
+
useLayoutEffect(() => { push(cfg); }, [push, cfg]);
|
|
66
|
+
useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
49
67
|
useFrame((state, delta) => {
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
68
|
+
const c = cur.current;
|
|
69
|
+
const speed = c.speed;
|
|
70
|
+
// one integrated clock drives the shader and the CPU wobble, so speed changes never jump
|
|
71
|
+
const t = (material.uniforms.uTime.value += Math.min(delta, 0.1) * speed);
|
|
72
|
+
const scale = c.scale;
|
|
73
|
+
const spawnRate = c.spawnRate;
|
|
74
|
+
const floatSpeed = (c.floatSpeed) * speed;
|
|
75
|
+
const lifetimeMs = c.lifetimeMs;
|
|
56
76
|
spawnAccum.current += spawnRate * delta;
|
|
57
77
|
let toSpawn = Math.floor(spawnAccum.current);
|
|
58
78
|
spawnAccum.current -= toSpawn;
|
|
@@ -61,7 +81,7 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
|
|
|
61
81
|
while (toSpawn > 0 && scan < MAX_BUBBLES) {
|
|
62
82
|
if (alive[scan] === 0) {
|
|
63
83
|
const base = scan * 3;
|
|
64
|
-
// Spawn at local origin with small lateral jitter
|
|
84
|
+
// Spawn at local origin with small lateral jitter - parent group's
|
|
65
85
|
// transform places the system in world space.
|
|
66
86
|
positions[base + 0] = (Math.random() - 0.5) * 0.2 * scale;
|
|
67
87
|
positions[base + 1] = (Math.random() - 0.5) * 0.1 * scale;
|
|
@@ -90,7 +110,7 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
|
|
|
90
110
|
}
|
|
91
111
|
velocities[base + 0] *= 0.99;
|
|
92
112
|
velocities[base + 2] *= 0.99;
|
|
93
|
-
const wobble = Math.sin(
|
|
113
|
+
const wobble = Math.sin(t * 1.3 + phases[j]) * 0.05;
|
|
94
114
|
positions[base + 0] += velocities[base + 0] * delta + wobble * delta;
|
|
95
115
|
positions[base + 1] += velocities[base + 1] * delta;
|
|
96
116
|
positions[base + 2] += velocities[base + 2] * delta;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { ThreeElements } from '@react-three/fiber';
|
|
2
2
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
3
3
|
import type { ChladniGridConfig } from '../types/gridConfigs';
|
|
4
|
+
import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
|
|
4
5
|
export interface ChladniGridProps extends ObjectReadyProps {
|
|
5
6
|
config?: ChladniGridConfig;
|
|
6
7
|
groupProps?: ThreeElements['group'];
|
|
8
|
+
/** Scene object id: the live-edit handle is found by it. */
|
|
9
|
+
id?: string;
|
|
10
|
+
/** Keyframes on this grid's config knobs (animations.grid.animations). */
|
|
11
|
+
keyframes?: AnimationOptions[];
|
|
12
|
+
/** Pointer bindings on this grid's config knobs (mouseMove.grid). */
|
|
13
|
+
mouseMove?: MouseMoveDomain;
|
|
7
14
|
}
|
|
8
15
|
/** ChladniGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
9
16
|
export declare const defaultChladniGridConfig: ChladniGridConfig;
|
|
10
|
-
|
|
11
|
-
* Chladni plates: the nodal lines of a standing wave on a square plate, with sand settling on them, drifting slowly between two neighbouring resonances.
|
|
12
|
-
*/
|
|
13
|
-
export declare function ChladniGrid({ config, groupProps, onObjectReady, onObjectDispose }: ChladniGridProps): import("react").JSX.Element;
|
|
17
|
+
export declare function ChladniGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: ChladniGridProps): import("react").JSX.Element;
|
|
14
18
|
export default ChladniGrid;
|
|
15
19
|
//# sourceMappingURL=ChladniGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChladniGrid.d.ts","sourceRoot":"","sources":["../../src/components/ChladniGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChladniGrid.d.ts","sourceRoot":"","sources":["../../src/components/ChladniGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,EAAE,iBA6BtC,CAAC;AAcF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA4CxJ;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo, useRef } from 'react';
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
5
5
|
import { useGridSurface } from '../hooks/useGridSurface.js';
|
|
6
|
-
import {
|
|
6
|
+
import { useConfigDriver } from '../hooks/useConfigDriver.js';
|
|
7
|
+
import { withConfigDefaults } from '../utils/configAnimations.js';
|
|
8
|
+
import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
|
|
9
|
+
import { ChladniGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
|
|
7
10
|
// Side-effect import registers <chladniGridMaterial> via extend().
|
|
8
11
|
void ChladniGridMaterial;
|
|
9
12
|
/** ChladniGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
|
|
@@ -40,23 +43,38 @@ export const defaultChladniGridConfig = {
|
|
|
40
43
|
/**
|
|
41
44
|
* Chladni plates: the nodal lines of a standing wave on a square plate, with sand settling on them, drifting slowly between two neighbouring resonances.
|
|
42
45
|
*/
|
|
43
|
-
|
|
46
|
+
/** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
|
|
47
|
+
const VARIANT = ['modeN', 'modeM', 'morph', 'grain'];
|
|
48
|
+
/** No computed uniforms: every knob maps straight to its u_<key>. */
|
|
49
|
+
const DERIVE = {};
|
|
50
|
+
/** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
|
|
51
|
+
const STRUCTURAL = [...GRID_STRUCTURAL, 'modeN', 'modeM'];
|
|
52
|
+
/** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
|
|
53
|
+
const ANIMATABLE = new Set((GRIDS_ANIMATABLE.chladniGrid ?? []).map((p) => p.value));
|
|
54
|
+
export function ChladniGrid({ config = defaultChladniGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
|
|
44
55
|
const matRef = useRef(null);
|
|
45
56
|
const rootRef = useRef(null);
|
|
46
57
|
const meshRef = useRef(null);
|
|
47
58
|
useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
|
|
48
|
-
|
|
59
|
+
// The committed config over this grid's defaults: every knob has a value to render
|
|
60
|
+
// and for a keyframe or pointer binding to start from.
|
|
61
|
+
const base = useMemo(() => withConfigDefaults(defaultChladniGridConfig, config), [config]);
|
|
62
|
+
const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
|
|
49
63
|
// the displacement is the standing wave itself, so the mesh has to resolve every mode
|
|
50
64
|
const segs = segments ?? (displace > 0 ? Math.min(512, Math.max(96, Math.ceil(size / Math.max(cellSize, 1e-4)) * 48)) : 1);
|
|
51
|
-
const fade = fadeDistance ?? size * 0.5;
|
|
52
|
-
const colors = useMemo(() => ({
|
|
53
|
-
line: new THREE.Color(lineColor),
|
|
54
|
-
section: new THREE.Color(sectionColor),
|
|
55
|
-
cell: new THREE.Color(cellColor),
|
|
56
|
-
glow: new THREE.Color(glowColor),
|
|
57
|
-
bg: new THREE.Color(bgColor),
|
|
58
|
-
}), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
|
|
59
65
|
useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
|
|
60
|
-
|
|
66
|
+
// One push point for every uniform the config owns: the committed config when the
|
|
67
|
+
// material mounts or the config commits, the merged one while anything overrides it.
|
|
68
|
+
const baseRef = useRef(base);
|
|
69
|
+
baseRef.current = base;
|
|
70
|
+
const setMaterial = useCallback((m) => {
|
|
71
|
+
matRef.current = m;
|
|
72
|
+
if (m)
|
|
73
|
+
applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
|
|
74
|
+
}, []);
|
|
75
|
+
useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
|
|
76
|
+
const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
|
|
77
|
+
useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
|
|
78
|
+
return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("chladniGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, ChladniGridMaterial.key)] }) }));
|
|
61
79
|
}
|
|
62
80
|
export default ChladniGrid;
|