@3driseai/3drise-viewer 0.1.42 → 0.1.43
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/ClipsRuntime.d.ts +16 -1
- package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +144 -25
- package/dist/animationsV2/appliers.d.ts +9 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +62 -2
- package/dist/animationsV2/clipUtils.d.ts +30 -0
- package/dist/animationsV2/clipUtils.d.ts.map +1 -1
- package/dist/animationsV2/clipUtils.js +163 -17
- package/dist/animationsV2/elementSettings.d.ts +5 -0
- package/dist/animationsV2/elementSettings.d.ts.map +1 -1
- package/dist/animationsV2/elementSettings.js +6 -3
- package/dist/animationsV2/sequenceUtils.js +4 -4
- package/dist/animationsV2/types.d.ts +23 -0
- package/dist/animationsV2/types.d.ts.map +1 -1
- package/dist/api/sceneHandle.js +2 -2
- package/dist/components/CreatedObject.d.ts +3 -0
- package/dist/components/CreatedObject.d.ts.map +1 -1
- package/dist/components/CreatedObject.js +6 -2
- package/dist/components/CustomPrimitive.d.ts.map +1 -1
- package/dist/components/CustomPrimitive.js +1 -10
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/EnvironmentManager.js +11 -5
- package/dist/components/GeometryShape.d.ts +5 -2
- package/dist/components/GeometryShape.d.ts.map +1 -1
- package/dist/components/GeometryShape.js +71 -10
- package/dist/components/LandObject.d.ts.map +1 -1
- package/dist/components/LandObject.js +1 -1
- package/dist/components/LayoutInstances.d.ts +2 -1
- package/dist/components/LayoutInstances.d.ts.map +1 -1
- package/dist/components/LayoutInstances.js +39 -6
- package/dist/components/LightObject.d.ts.map +1 -1
- package/dist/components/LightObject.js +3 -0
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +62 -13
- package/dist/components/OceanBuilder.d.ts +2 -0
- package/dist/components/OceanBuilder.d.ts.map +1 -1
- package/dist/components/OceanBuilder.js +2 -1
- package/dist/components/RenderEffects.d.ts +8 -0
- package/dist/components/RenderEffects.d.ts.map +1 -0
- package/dist/components/RenderEffects.js +120 -0
- package/dist/components/SceneBuilder.d.ts.map +1 -1
- package/dist/components/SceneBuilder.js +18 -9
- package/dist/components/SportsObject.d.ts +9 -0
- package/dist/components/SportsObject.d.ts.map +1 -0
- package/dist/components/SportsObject.js +20 -0
- package/dist/components/UrbanObject.d.ts +9 -0
- package/dist/components/UrbanObject.d.ts.map +1 -0
- package/dist/components/UrbanObject.js +28 -0
- package/dist/components/VegetationObject.d.ts +9 -0
- package/dist/components/VegetationObject.d.ts.map +1 -0
- package/dist/components/VegetationObject.js +26 -0
- package/dist/components/WaterObject.d.ts +15 -0
- package/dist/components/WaterObject.d.ts.map +1 -0
- package/dist/components/WaterObject.js +29 -0
- package/dist/components/index.d.ts +7 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -1
- package/dist/components/land/LandPatch.d.ts +3 -1
- package/dist/components/land/LandPatch.d.ts.map +1 -1
- package/dist/components/land/LandPatch.js +80 -7
- package/dist/components/layout/InstancedLayout.d.ts +19 -0
- package/dist/components/layout/InstancedLayout.d.ts.map +1 -0
- package/dist/components/layout/InstancedLayout.js +154 -0
- package/dist/components/layout/LayoutGrounds.d.ts +19 -0
- package/dist/components/layout/LayoutGrounds.d.ts.map +1 -0
- package/dist/components/layout/LayoutGrounds.js +104 -0
- package/dist/components/layout/LinkProxies.d.ts +5 -0
- package/dist/components/layout/LinkProxies.d.ts.map +1 -0
- package/dist/components/layout/LinkProxies.js +51 -0
- package/dist/components/layout/LinkedSource.d.ts +14 -0
- package/dist/components/layout/LinkedSource.d.ts.map +1 -0
- package/dist/components/layout/LinkedSource.js +129 -0
- package/dist/components/projector/Projector.d.ts +14 -0
- package/dist/components/projector/Projector.d.ts.map +1 -0
- package/dist/components/projector/Projector.js +44 -0
- package/dist/components/projector/index.d.ts +4 -0
- package/dist/components/projector/index.d.ts.map +1 -0
- package/dist/components/projector/index.js +2 -0
- package/dist/components/projector/projectorCore.d.ts +19 -0
- package/dist/components/projector/projectorCore.d.ts.map +1 -0
- package/dist/components/projector/projectorCore.js +545 -0
- package/dist/components/sports/SportsBall.d.ts +9 -0
- package/dist/components/sports/SportsBall.d.ts.map +1 -0
- package/dist/components/sports/SportsBall.js +23 -0
- package/dist/components/sports/SportsCourt.d.ts +9 -0
- package/dist/components/sports/SportsCourt.d.ts.map +1 -0
- package/dist/components/sports/SportsCourt.js +23 -0
- package/dist/components/sports/SportsEquipment.d.ts +9 -0
- package/dist/components/sports/SportsEquipment.d.ts.map +1 -0
- package/dist/components/sports/SportsEquipment.js +23 -0
- package/dist/components/sports/SportsGoal.d.ts +9 -0
- package/dist/components/sports/SportsGoal.d.ts.map +1 -0
- package/dist/components/sports/SportsGoal.js +23 -0
- package/dist/components/sports/core/ball.d.ts +166 -0
- package/dist/components/sports/core/ball.d.ts.map +1 -0
- package/dist/components/sports/core/ball.js +402 -0
- package/dist/components/sports/core/court.d.ts +442 -0
- package/dist/components/sports/core/court.d.ts.map +1 -0
- package/dist/components/sports/core/court.js +658 -0
- package/dist/components/sports/core/equipment.d.ts +103 -0
- package/dist/components/sports/core/equipment.d.ts.map +1 -0
- package/dist/components/sports/core/equipment.js +403 -0
- package/dist/components/sports/core/goal.d.ts +98 -0
- package/dist/components/sports/core/goal.d.ts.map +1 -0
- package/dist/components/sports/core/goal.js +44 -0
- package/dist/components/sports/index.d.ts +11 -0
- package/dist/components/sports/index.d.ts.map +1 -0
- package/dist/components/sports/index.js +8 -0
- package/dist/components/sports/sportsCore.d.ts +195 -0
- package/dist/components/sports/sportsCore.d.ts.map +1 -0
- package/dist/components/sports/sportsCore.js +758 -0
- package/dist/components/sports/useSportsInstance.d.ts +35 -0
- package/dist/components/sports/useSportsInstance.d.ts.map +1 -0
- package/dist/components/sports/useSportsInstance.js +47 -0
- package/dist/components/terrain/TerrainSurface.d.ts.map +1 -1
- package/dist/components/terrain/TerrainSurface.js +14 -0
- package/dist/components/urban/UrbanBlock.d.ts +9 -0
- package/dist/components/urban/UrbanBlock.d.ts.map +1 -0
- package/dist/components/urban/UrbanBlock.js +23 -0
- package/dist/components/urban/UrbanBuilding.d.ts +9 -0
- package/dist/components/urban/UrbanBuilding.d.ts.map +1 -0
- package/dist/components/urban/UrbanBuilding.js +23 -0
- package/dist/components/urban/UrbanJunction.d.ts +9 -0
- package/dist/components/urban/UrbanJunction.d.ts.map +1 -0
- package/dist/components/urban/UrbanJunction.js +23 -0
- package/dist/components/urban/UrbanPark.d.ts +9 -0
- package/dist/components/urban/UrbanPark.d.ts.map +1 -0
- package/dist/components/urban/UrbanPark.js +23 -0
- package/dist/components/urban/UrbanParkingLot.d.ts +9 -0
- package/dist/components/urban/UrbanParkingLot.d.ts.map +1 -0
- package/dist/components/urban/UrbanParkingLot.js +23 -0
- package/dist/components/urban/UrbanPlaza.d.ts +9 -0
- package/dist/components/urban/UrbanPlaza.d.ts.map +1 -0
- package/dist/components/urban/UrbanPlaza.js +23 -0
- package/dist/components/urban/UrbanRoad.d.ts +9 -0
- package/dist/components/urban/UrbanRoad.d.ts.map +1 -0
- package/dist/components/urban/UrbanRoad.js +23 -0
- package/dist/components/urban/UrbanSignage.d.ts +9 -0
- package/dist/components/urban/UrbanSignage.d.ts.map +1 -0
- package/dist/components/urban/UrbanSignage.js +23 -0
- package/dist/components/urban/UrbanSkyline.d.ts +9 -0
- package/dist/components/urban/UrbanSkyline.d.ts.map +1 -0
- package/dist/components/urban/UrbanSkyline.js +23 -0
- package/dist/components/urban/UrbanStreetFurniture.d.ts +9 -0
- package/dist/components/urban/UrbanStreetFurniture.d.ts.map +1 -0
- package/dist/components/urban/UrbanStreetFurniture.js +23 -0
- package/dist/components/urban/UrbanStreetGrid.d.ts +9 -0
- package/dist/components/urban/UrbanStreetGrid.d.ts.map +1 -0
- package/dist/components/urban/UrbanStreetGrid.js +34 -0
- package/dist/components/urban/UrbanTraffic.d.ts +9 -0
- package/dist/components/urban/UrbanTraffic.d.ts.map +1 -0
- package/dist/components/urban/UrbanTraffic.js +23 -0
- package/dist/components/urban/core/block.d.ts +119 -0
- package/dist/components/urban/core/block.d.ts.map +1 -0
- package/dist/components/urban/core/block.js +266 -0
- package/dist/components/urban/core/building.d.ts +128 -0
- package/dist/components/urban/core/building.d.ts.map +1 -0
- package/dist/components/urban/core/building.js +741 -0
- package/dist/components/urban/core/junction.d.ts +152 -0
- package/dist/components/urban/core/junction.d.ts.map +1 -0
- package/dist/components/urban/core/junction.js +617 -0
- package/dist/components/urban/core/park.d.ts +67 -0
- package/dist/components/urban/core/park.d.ts.map +1 -0
- package/dist/components/urban/core/park.js +176 -0
- package/dist/components/urban/core/parkingLot.d.ts +82 -0
- package/dist/components/urban/core/parkingLot.d.ts.map +1 -0
- package/dist/components/urban/core/parkingLot.js +284 -0
- package/dist/components/urban/core/plaza.d.ts +24 -0
- package/dist/components/urban/core/plaza.d.ts.map +1 -0
- package/dist/components/urban/core/plaza.js +243 -0
- package/dist/components/urban/core/road.d.ts +113 -0
- package/dist/components/urban/core/road.d.ts.map +1 -0
- package/dist/components/urban/core/road.js +347 -0
- package/dist/components/urban/core/signage.d.ts +83 -0
- package/dist/components/urban/core/signage.d.ts.map +1 -0
- package/dist/components/urban/core/signage.js +209 -0
- package/dist/components/urban/core/skyline.d.ts +100 -0
- package/dist/components/urban/core/skyline.d.ts.map +1 -0
- package/dist/components/urban/core/skyline.js +89 -0
- package/dist/components/urban/core/streetFurniture.d.ts +75 -0
- package/dist/components/urban/core/streetFurniture.d.ts.map +1 -0
- package/dist/components/urban/core/streetFurniture.js +193 -0
- package/dist/components/urban/core/streetGrid.d.ts +134 -0
- package/dist/components/urban/core/streetGrid.d.ts.map +1 -0
- package/dist/components/urban/core/streetGrid.js +422 -0
- package/dist/components/urban/core/traffic.d.ts +125 -0
- package/dist/components/urban/core/traffic.d.ts.map +1 -0
- package/dist/components/urban/core/traffic.js +305 -0
- package/dist/components/urban/index.d.ts +29 -0
- package/dist/components/urban/index.d.ts.map +1 -0
- package/dist/components/urban/index.js +16 -0
- package/dist/components/urban/textureSetResolver.d.ts +8 -0
- package/dist/components/urban/textureSetResolver.d.ts.map +1 -0
- package/dist/components/urban/textureSetResolver.js +16 -0
- package/dist/components/urban/urbanCore.d.ts +262 -0
- package/dist/components/urban/urbanCore.d.ts.map +1 -0
- package/dist/components/urban/urbanCore.js +928 -0
- package/dist/components/urban/useUrbanInstance.d.ts +53 -0
- package/dist/components/urban/useUrbanInstance.d.ts.map +1 -0
- package/dist/components/urban/useUrbanInstance.js +100 -0
- package/dist/components/vegetation/VegetationBush.d.ts +9 -0
- package/dist/components/vegetation/VegetationBush.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationBush.js +23 -0
- package/dist/components/vegetation/VegetationCrops.d.ts +9 -0
- package/dist/components/vegetation/VegetationCrops.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationCrops.js +23 -0
- package/dist/components/vegetation/VegetationFlowers.d.ts +9 -0
- package/dist/components/vegetation/VegetationFlowers.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationFlowers.js +23 -0
- package/dist/components/vegetation/VegetationForest.d.ts +9 -0
- package/dist/components/vegetation/VegetationForest.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationForest.js +23 -0
- package/dist/components/vegetation/VegetationFruit.d.ts +9 -0
- package/dist/components/vegetation/VegetationFruit.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationFruit.js +23 -0
- package/dist/components/vegetation/VegetationGrass.d.ts +9 -0
- package/dist/components/vegetation/VegetationGrass.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationGrass.js +23 -0
- package/dist/components/vegetation/VegetationHedge.d.ts +9 -0
- package/dist/components/vegetation/VegetationHedge.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationHedge.js +23 -0
- package/dist/components/vegetation/VegetationIvy.d.ts +9 -0
- package/dist/components/vegetation/VegetationIvy.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationIvy.js +23 -0
- package/dist/components/vegetation/VegetationTree.d.ts +9 -0
- package/dist/components/vegetation/VegetationTree.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationTree.js +23 -0
- package/dist/components/vegetation/VegetationVegetable.d.ts +9 -0
- package/dist/components/vegetation/VegetationVegetable.d.ts.map +1 -0
- package/dist/components/vegetation/VegetationVegetable.js +23 -0
- package/dist/components/vegetation/core/bush.d.ts +1256 -0
- package/dist/components/vegetation/core/bush.d.ts.map +1 -0
- package/dist/components/vegetation/core/bush.js +376 -0
- package/dist/components/vegetation/core/crops.d.ts +1033 -0
- package/dist/components/vegetation/core/crops.d.ts.map +1 -0
- package/dist/components/vegetation/core/crops.js +378 -0
- package/dist/components/vegetation/core/flowers.d.ts +648 -0
- package/dist/components/vegetation/core/flowers.d.ts.map +1 -0
- package/dist/components/vegetation/core/flowers.js +225 -0
- package/dist/components/vegetation/core/forest.d.ts +138 -0
- package/dist/components/vegetation/core/forest.d.ts.map +1 -0
- package/dist/components/vegetation/core/forest.js +310 -0
- package/dist/components/vegetation/core/fruit.d.ts +99 -0
- package/dist/components/vegetation/core/fruit.d.ts.map +1 -0
- package/dist/components/vegetation/core/fruit.js +77 -0
- package/dist/components/vegetation/core/grass.d.ts +103 -0
- package/dist/components/vegetation/core/grass.d.ts.map +1 -0
- package/dist/components/vegetation/core/grass.js +102 -0
- package/dist/components/vegetation/core/hedge.d.ts +193 -0
- package/dist/components/vegetation/core/hedge.d.ts.map +1 -0
- package/dist/components/vegetation/core/hedge.js +243 -0
- package/dist/components/vegetation/core/ivy.d.ts +213 -0
- package/dist/components/vegetation/core/ivy.d.ts.map +1 -0
- package/dist/components/vegetation/core/ivy.js +173 -0
- package/dist/components/vegetation/core/tree.d.ts +1117 -0
- package/dist/components/vegetation/core/tree.d.ts.map +1 -0
- package/dist/components/vegetation/core/tree.js +408 -0
- package/dist/components/vegetation/core/vegetable.d.ts +99 -0
- package/dist/components/vegetation/core/vegetable.d.ts.map +1 -0
- package/dist/components/vegetation/core/vegetable.js +76 -0
- package/dist/components/vegetation/index.d.ts +23 -0
- package/dist/components/vegetation/index.d.ts.map +1 -0
- package/dist/components/vegetation/index.js +14 -0
- package/dist/components/vegetation/produceCore.d.ts +929 -0
- package/dist/components/vegetation/produceCore.d.ts.map +1 -0
- package/dist/components/vegetation/produceCore.js +723 -0
- package/dist/components/vegetation/useVegetationInstance.d.ts +39 -0
- package/dist/components/vegetation/useVegetationInstance.d.ts.map +1 -0
- package/dist/components/vegetation/useVegetationInstance.js +45 -0
- package/dist/components/vegetation/vegetationCore.d.ts +412 -0
- package/dist/components/vegetation/vegetationCore.d.ts.map +1 -0
- package/dist/components/vegetation/vegetationCore.js +1728 -0
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +5 -0
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.js +39 -13
- package/dist/components/water/OceanSurface.d.ts.map +1 -1
- package/dist/components/water/OceanSurface.js +3 -2
- package/dist/components/water/WaterBody.d.ts.map +1 -1
- package/dist/components/water/WaterBody.js +31 -10
- package/dist/components/water/WaterFountain.d.ts +9 -0
- package/dist/components/water/WaterFountain.d.ts.map +1 -0
- package/dist/components/water/WaterFountain.js +24 -0
- package/dist/components/water/WaterStream.d.ts +9 -0
- package/dist/components/water/WaterStream.d.ts.map +1 -0
- package/dist/components/water/WaterStream.js +24 -0
- package/dist/components/water/WaterWaterfall.d.ts +9 -0
- package/dist/components/water/WaterWaterfall.d.ts.map +1 -0
- package/dist/components/water/WaterWaterfall.js +24 -0
- package/dist/components/water/core/fountain.d.ts +70 -0
- package/dist/components/water/core/fountain.d.ts.map +1 -0
- package/dist/components/water/core/fountain.js +619 -0
- package/dist/components/water/core/stream.d.ts +72 -0
- package/dist/components/water/core/stream.d.ts.map +1 -0
- package/dist/components/water/core/stream.js +167 -0
- package/dist/components/water/core/waterfall.d.ts +78 -0
- package/dist/components/water/core/waterfall.d.ts.map +1 -0
- package/dist/components/water/core/waterfall.js +325 -0
- package/dist/components/water/index.d.ts +8 -0
- package/dist/components/water/index.d.ts.map +1 -1
- package/dist/components/water/index.js +7 -0
- package/dist/components/water/types.d.ts +3 -0
- package/dist/components/water/types.d.ts.map +1 -1
- package/dist/components/water/useWaterInstance.d.ts +43 -0
- package/dist/components/water/useWaterInstance.d.ts.map +1 -0
- package/dist/components/water/useWaterInstance.js +89 -0
- package/dist/components/water/waterCore.d.ts +179 -0
- package/dist/components/water/waterCore.d.ts.map +1 -0
- package/dist/components/water/waterCore.js +516 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +9 -1
- package/dist/hooks/index.d.ts +7 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -2
- package/dist/hooks/useActionPatch.d.ts +23 -0
- package/dist/hooks/useActionPatch.d.ts.map +1 -0
- package/dist/hooks/useActionPatch.js +38 -0
- package/dist/hooks/useCloudSun.d.ts.map +1 -1
- package/dist/hooks/useCloudSun.js +3 -2
- package/dist/hooks/useCommittedInstance.d.ts +6 -0
- package/dist/hooks/useCommittedInstance.d.ts.map +1 -0
- package/dist/hooks/useCommittedInstance.js +42 -0
- package/dist/hooks/useConfigLive.d.ts +1 -1
- package/dist/hooks/useConfigLive.d.ts.map +1 -1
- package/dist/hooks/useContinuousEffects.d.ts.map +1 -1
- package/dist/hooks/useContinuousEffects.js +36 -20
- package/dist/hooks/useGridLayout.d.ts +7 -0
- package/dist/hooks/useGridLayout.d.ts.map +1 -0
- package/dist/hooks/useGridLayout.js +10 -0
- package/dist/hooks/useInteractionEffects.d.ts.map +1 -1
- package/dist/hooks/useInteractionEffects.js +48 -9
- package/dist/hooks/useLightLive.d.ts.map +1 -1
- package/dist/hooks/useLightLive.js +2 -0
- package/dist/hooks/useLinkStatus.d.ts +7 -0
- package/dist/hooks/useLinkStatus.d.ts.map +1 -0
- package/dist/hooks/useLinkStatus.js +20 -0
- package/dist/hooks/useMaterialApplication.d.ts +6 -1
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
- package/dist/hooks/useMaterialApplication.js +7 -2
- package/dist/hooks/useOceanMaterial.d.ts +11 -1
- package/dist/hooks/useOceanMaterial.d.ts.map +1 -1
- package/dist/hooks/useOceanMaterial.js +185 -27
- package/dist/hooks/usePathAnimation.d.ts +8 -0
- package/dist/hooks/usePathAnimation.d.ts.map +1 -1
- package/dist/hooks/usePathAnimation.js +140 -59
- package/dist/hooks/useResolvedLayout.d.ts +10 -0
- package/dist/hooks/useResolvedLayout.d.ts.map +1 -0
- package/dist/hooks/useResolvedLayout.js +17 -0
- package/dist/hooks/useTimeLighting.d.ts +36 -0
- package/dist/hooks/useTimeLighting.d.ts.map +1 -0
- package/dist/hooks/useTimeLighting.js +67 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -1
- package/dist/operations/catalogue/shaderLayers.js +26 -3
- package/dist/render/renderLive.d.ts +11 -0
- package/dist/render/renderLive.d.ts.map +1 -0
- package/dist/render/renderLive.js +57 -0
- package/dist/shaders/glsl/oceanCore.glsl.d.ts +2 -2
- package/dist/shaders/glsl/oceanCore.glsl.d.ts.map +1 -1
- package/dist/shaders/glsl/oceanCore.glsl.js +35 -5
- package/dist/shaders/ocean/OceanSurfaceMaterial.d.ts +12 -0
- package/dist/shaders/ocean/OceanSurfaceMaterial.d.ts.map +1 -1
- package/dist/shaders/ocean/OceanSurfaceMaterial.js +55 -7
- package/dist/shaders/terrain/TerrainMaterial.d.ts.map +1 -1
- package/dist/shaders/terrain/TerrainMaterial.js +28 -0
- package/dist/triggers/kinds/change.js +1 -1
- package/dist/utils/composerHostedPass.d.ts +74 -0
- package/dist/utils/composerHostedPass.d.ts.map +1 -0
- package/dist/utils/composerHostedPass.js +63 -0
- package/dist/utils/geometryScript.d.ts +17 -0
- package/dist/utils/geometryScript.d.ts.map +1 -0
- package/dist/utils/geometryScript.js +92 -0
- package/dist/utils/geometryScript.worker.d.ts +2 -0
- package/dist/utils/geometryScript.worker.d.ts.map +1 -0
- package/dist/utils/geometryScript.worker.js +42 -0
- package/dist/utils/groundRegistry.d.ts +11 -0
- package/dist/utils/groundRegistry.d.ts.map +1 -0
- package/dist/utils/groundRegistry.js +39 -0
- package/dist/utils/instancingSupport.d.ts +9 -0
- package/dist/utils/instancingSupport.d.ts.map +1 -0
- package/dist/utils/instancingSupport.js +13 -0
- package/dist/utils/landPatch.d.ts +26 -5
- package/dist/utils/landPatch.d.ts.map +1 -1
- package/dist/utils/landPatch.js +124 -9
- package/dist/utils/layoutPlacement.d.ts +30 -0
- package/dist/utils/layoutPlacement.d.ts.map +1 -0
- package/dist/utils/layoutPlacement.js +113 -0
- package/dist/utils/linkRegistry.d.ts +15 -0
- package/dist/utils/linkRegistry.d.ts.map +1 -0
- package/dist/utils/linkRegistry.js +11 -0
- package/dist/utils/shapes.d.ts +28 -2
- package/dist/utils/shapes.d.ts.map +1 -1
- package/dist/utils/shapes.js +32 -3
- package/dist/utils/sharedParts.d.ts +61 -0
- package/dist/utils/sharedParts.d.ts.map +1 -0
- package/dist/utils/sharedParts.js +268 -0
- package/dist/utils/svgAsset.d.ts +6 -0
- package/dist/utils/svgAsset.d.ts.map +1 -0
- package/dist/utils/svgAsset.js +46 -0
- package/dist/utils/waterLight.d.ts +29 -0
- package/dist/utils/waterLight.d.ts.map +1 -0
- package/dist/utils/waterLight.js +67 -0
- package/dist/utils/waterReflection.d.ts +185 -0
- package/dist/utils/waterReflection.d.ts.map +1 -0
- package/dist/utils/waterReflection.js +616 -0
- package/package.json +4 -3
|
@@ -64,6 +64,8 @@ declare class ClipsRuntime {
|
|
|
64
64
|
private clock;
|
|
65
65
|
/** Blend seconds of the driver that last wrote each property (for its blend-out). */
|
|
66
66
|
private blendOf;
|
|
67
|
+
/** The driver that last wrote each property (Proposal.driver). */
|
|
68
|
+
private writer;
|
|
67
69
|
/** Next tick writes every winner even if unchanged (an edited clip). */
|
|
68
70
|
private forceWrite;
|
|
69
71
|
/** Diagnostics: keys written last tick, and keys written for the FIRST time last tick. */
|
|
@@ -98,7 +100,7 @@ declare class ClipsRuntime {
|
|
|
98
100
|
/** Diagnostics: a write whose speed differs sharply from the previous frame's (a velocity discontinuity), per property. */
|
|
99
101
|
private lastSpeed;
|
|
100
102
|
private probeJump;
|
|
101
|
-
/** Where a property is right now: the last value the runtime wrote, else the live / authored value. */
|
|
103
|
+
/** Where a property is right now: the live scene where it can be read, else the last value the runtime wrote, else the live / authored value. */
|
|
102
104
|
private currentValue;
|
|
103
105
|
/** Whether `setLiveValue` can write this path (it has an applier). */
|
|
104
106
|
canSetLiveValue(state: string, path: string): boolean;
|
|
@@ -216,6 +218,19 @@ declare class ClipsRuntime {
|
|
|
216
218
|
private releaseCues;
|
|
217
219
|
/** Revert every lane the sequence switched on (stop / close). */
|
|
218
220
|
private releaseActions;
|
|
221
|
+
/**
|
|
222
|
+
* Tracks with their "from current" keys replaced by the run's captured values. A value not
|
|
223
|
+
* captured yet is read now (the scene as it is, before this frame's writes) and kept for the
|
|
224
|
+
* run. `pending`: a target isn't mounted yet — the key's own value stands in this frame and
|
|
225
|
+
* the caller resolves again next tick.
|
|
226
|
+
*/
|
|
227
|
+
private resolveCurrent;
|
|
228
|
+
/**
|
|
229
|
+
* A new run of a timeline that wrote before (a held clip played again): what it wrote may not
|
|
230
|
+
* be where the properties are any more (the visitor orbited the camera since), so its first
|
|
231
|
+
* write is a take-over again — it blends from the scene as it is.
|
|
232
|
+
*/
|
|
233
|
+
private forgetWrites;
|
|
219
234
|
/** Every driver's values for this frame, lowest priority first. */
|
|
220
235
|
private proposals;
|
|
221
236
|
private runRestores;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipsRuntime.d.ts","sourceRoot":"","sources":["../../src/animationsV2/ClipsRuntime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClipsRuntime.d.ts","sourceRoot":"","sources":["../../src/animationsV2/ClipsRuntime.ts"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1E,OAAO,EAA8F,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3I,OAAO,EAEL,KAAK,UAAU,EAAE,KAAK,aAAa,EAEpC,MAAM,iBAAiB,CAAC;AA0DzB,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAKxD,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC/F,iDAAiD;AACjD,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC;AAgBrC;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,OAAO,CAAC;AAkClC;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,IAAI,EAAE;IACvF,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;CACzH,KAAK,OAAO,CAAC;AAEd,cAAM,YAAY;IAChB,OAAO,CAAC,SAAS,CAA0B;IAC3C,qDAAqD;IACrD,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAExC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAyB;IAC1C,wFAAwF;IACxF,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAwC;IAC9D,wEAAwE;IACxE,OAAO,CAAC,cAAc,CAAe;IACrC,qDAAqD;IACrD,OAAO,CAAC,MAAM,CAA4B;IAC1C,0EAA0E;IAC1E,OAAO,CAAC,SAAS,CAA+B;IAChD,mEAAmE;IACnE,OAAO,CAAC,KAAK,CAAK;IAClB,qFAAqF;IACrF,OAAO,CAAC,OAAO,CAA6B;IAC5C,kEAAkE;IAClE,OAAO,CAAC,MAAM,CAA6B;IAC3C,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAAS;IAC3B,0FAA0F;IAC1F,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,0DAA0D;IAC1D,OAAO,CAAC,OAAO,CAA6B;IAC5C,0FAA0F;IAC1F,OAAO,CAAC,IAAI,CAA6B;IACzC,4FAA4F;IAC5F,OAAO,CAAC,OAAO,CAA6B;IAC5C,8EAA8E;IAC9E,OAAO,CAAC,IAAI,CAA+B;IAO3C,KAAK,UAAS;IACd,OAAO,CAAC,KAAK,CAA6B;IAC1C,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAG9B,qCAAqC;IACrC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,MAAM;IAMd,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAW1C;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAUlF,kGAAkG;IAClG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQ9E,2HAA2H;IAC3H,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,SAAS;IAejB,iJAAiJ;IACjJ,OAAO,CAAC,YAAY;IAYpB,sEAAsE;IACtE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAI3C,UAAU,IAAI,MAAM;IACpB,+FAA+F;IAC/F,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAIhD,eAAe,IAAI,MAAM;IAEzB;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBlE,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAAM;IAC1B,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAsBb,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAoBhG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO5B,wEAAwE;IACxE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU1B,kFAAkF;IAClF,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAe1C,yFAAyF;IACzF,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAarC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ/D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAEjC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS;IAOjE;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IA0CxJ,mFAAmF;IACnF,kBAAkB,IAAI,cAAc,EAAE;IAStC;;;OAGG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAU7D;;;;OAIG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAW5D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK1C,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,MAAM;IAKd,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQlC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQnC,iFAAiF;IACjF,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUjC,gFAAgF;IAChF,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBxE,sFAAsF;IACtF,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAiB/D;;;;;OAKG;IACH,eAAe,IAAI,OAAO;IAUxB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IACxC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC1C,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IACzC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAuIzB,iGAAiG;IACjG,OAAO,CAAC,cAAc;IA0BtB;;;OAGG;IACH,OAAO,CAAC,SAAS;IA2CjB,OAAO,CAAC,SAAS;IAKjB,6DAA6D;IAC7D,OAAO,CAAC,QAAQ;IAOhB,oFAAoF;IACpF,OAAO,CAAC,QAAQ;IAWhB,kGAAkG;IAClG,OAAO,CAAC,YAAY;IAepB,mEAAmE;IACnE,OAAO,CAAC,WAAW;IAKnB,iEAAiE;IACjE,OAAO,CAAC,cAAc;IAKtB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAsBtB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAIpB,mEAAmE;IACnE,OAAO,CAAE,SAAS;IA0ClB,OAAO,CAAC,WAAW;IAsCnB,0EAA0E;IAC1E,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,UAAU;IAOlB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAwCvB,OAAO,CAAC,cAAc;IAQtB,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,IAAI;IAKZ,0DAA0D;IAC1D,OAAO,CAAC,SAAS;CAKlB;AAiBD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,QAAA,MAAM,YAAY,cAAqB,CAAC;AACxC,eAAe,YAAY,CAAC"}
|
|
@@ -32,6 +32,15 @@
|
|
|
32
32
|
// track on an element the layer just changed is re-written for a few frames, because
|
|
33
33
|
// the re-render may have rebuilt what it writes to (a new material).
|
|
34
34
|
//
|
|
35
|
+
// A facing position track (Track.face) also drives its object's rotation: the runtime sees it as
|
|
36
|
+
// one more track (clipUtils expandTracks), after the clip's own, so restore, take-over and the
|
|
37
|
+
// last-wins merge treat that rotation like any other track's.
|
|
38
|
+
//
|
|
39
|
+
// "From current" keys (Keyframe.current) take the property's value as the scene shows it when
|
|
40
|
+
// a run starts (a clip played from its start edge; a sequence entry the first time it becomes
|
|
41
|
+
// active in a run), captured once per run and held for it. Each instance keeps its captures and
|
|
42
|
+
// the tracks resolved with them; reverse / yoyo / loop / scrubbing inside the run reuse them.
|
|
43
|
+
//
|
|
35
44
|
// Sequence cues switch actions (SceneActions) by time: each tick a sequence works
|
|
36
45
|
// out which of its actions should be on at its current time and applies / reverts
|
|
37
46
|
// only what changed. It reverts only what it applied itself — an action already on
|
|
@@ -41,15 +50,19 @@
|
|
|
41
50
|
//
|
|
42
51
|
import { SceneActions, expandMaterialVariant } from '@3driseai/3drise-core';
|
|
43
52
|
import { logTrigger } from '../triggers/log.js';
|
|
44
|
-
import { getAtPath, isSwitchTrack, sampleTrack } from './clipUtils.js';
|
|
53
|
+
import { expandTracks, faceSource, getAtPath, isSwitchTrack, sampleTrack, sampleTrackFacing } from './clipUtils.js';
|
|
45
54
|
import { interpolateValue } from '@3driseai/3drise-core';
|
|
46
|
-
import { applyValue, clearApplierCaches, isApplicable, isTargetMounted, releaseLive } from './appliers.js';
|
|
55
|
+
import { applyValue, clearApplierCaches, isApplicable, isTargetMounted, readSceneValue, releaseLive } from './appliers.js';
|
|
47
56
|
import { readNodeValue, restoreNodeTrack } from './nodeTracks.js';
|
|
48
57
|
import { cueStatesAt, entryLocalTime, isEntryActive, resolveSequence, cueCommand, clipCueSchedule, firedBetween, } from './sequenceUtils.js';
|
|
49
58
|
/** Longest an autoplaying sequence waits for its targets. */
|
|
50
59
|
const MAX_TARGET_WAIT_MS = 8000;
|
|
51
60
|
/** A saved playback rate: positive and finite, else 1. */
|
|
52
61
|
const rate = (s) => (typeof s === 'number' && Number.isFinite(s) && s > 0 ? s : 1);
|
|
62
|
+
/** A continuous track with at least one "from current" key. */
|
|
63
|
+
const hasCurrentKey = (t) => !isSwitchTrack(t) && t.keys.some(k => k.current);
|
|
64
|
+
/** A captured value that can stand in for the key's own (same kind, same length). */
|
|
65
|
+
const sameKind = (a, b) => typeof a === typeof b && Array.isArray(a) === Array.isArray(b) && (!Array.isArray(a) || a.length === b.length);
|
|
53
66
|
/**
|
|
54
67
|
* Blends: a property never jumps when a driver takes it over or lets it go. When a continuous
|
|
55
68
|
* track first wins a property, the runtime remembers where the property IS (the last value it
|
|
@@ -115,6 +128,8 @@ class ClipsRuntime {
|
|
|
115
128
|
clock = 0;
|
|
116
129
|
/** Blend seconds of the driver that last wrote each property (for its blend-out). */
|
|
117
130
|
blendOf = new Map();
|
|
131
|
+
/** The driver that last wrote each property (Proposal.driver). */
|
|
132
|
+
writer = new Map();
|
|
118
133
|
/** Next tick writes every winner even if unchanged (an edited clip). */
|
|
119
134
|
forceWrite = false;
|
|
120
135
|
/** Diagnostics: keys written last tick, and keys written for the FIRST time last tick. */
|
|
@@ -159,6 +174,7 @@ class ClipsRuntime {
|
|
|
159
174
|
this.dlog('setContext', ctx ? { camera: !!ctx.camera, controls: !!ctx.controls, getAction: !!ctx.getAction } : null);
|
|
160
175
|
this.ctx = ctx;
|
|
161
176
|
this.written.clear();
|
|
177
|
+
this.writer.clear();
|
|
162
178
|
this.live.clear();
|
|
163
179
|
clearApplierCaches();
|
|
164
180
|
}
|
|
@@ -217,8 +233,15 @@ class ClipsRuntime {
|
|
|
217
233
|
if (ratio > 2.5 || ratio < 0.4)
|
|
218
234
|
this.dlog('JUMP', key, { from: prev, to: value, speedWas: +last.toFixed(4), speedNow: +speed.toFixed(4), dt: +dt.toFixed(4), at: this.clock.toFixed(3) });
|
|
219
235
|
}
|
|
220
|
-
/** Where a property is right now: the last value the runtime wrote, else the live / authored value. */
|
|
236
|
+
/** Where a property is right now: the live scene where it can be read, else the last value the runtime wrote, else the live / authored value. */
|
|
221
237
|
currentValue(state, path, node) {
|
|
238
|
+
// The live scene first: what the runtime last wrote goes stale as soon as something else
|
|
239
|
+
// moves the property (the visitor orbiting a held camera, a drag, an effect).
|
|
240
|
+
if (this.ctx) {
|
|
241
|
+
const seen = readSceneValue(this.ctx, state, path, node);
|
|
242
|
+
if (seen !== undefined)
|
|
243
|
+
return seen;
|
|
244
|
+
}
|
|
222
245
|
const key = targetKey(state, node, path);
|
|
223
246
|
const out = this.blendOuts.get(key);
|
|
224
247
|
if (out) {
|
|
@@ -274,10 +297,10 @@ class ClipsRuntime {
|
|
|
274
297
|
}
|
|
275
298
|
};
|
|
276
299
|
for (const inst of this.clips.values())
|
|
277
|
-
add(inst.clip.tracks);
|
|
300
|
+
add(expandTracks(inst.clip.tracks));
|
|
278
301
|
for (const inst of this.sequences.values())
|
|
279
302
|
for (const e of inst.schedule.entries)
|
|
280
|
-
add(e.clip.tracks);
|
|
303
|
+
add(expandTracks(e.clip.tracks));
|
|
281
304
|
}
|
|
282
305
|
return this.taken.has(`${state}|${node ?? ''}|${property}`);
|
|
283
306
|
}
|
|
@@ -307,6 +330,7 @@ class ClipsRuntime {
|
|
|
307
330
|
this.blendOuts.clear();
|
|
308
331
|
this.blendOf.clear();
|
|
309
332
|
this.written.clear();
|
|
333
|
+
this.writer.clear();
|
|
310
334
|
this.laid.clear();
|
|
311
335
|
this.rewrite.clear();
|
|
312
336
|
this.clashed.clear();
|
|
@@ -324,10 +348,16 @@ class ClipsRuntime {
|
|
|
324
348
|
time = 0;
|
|
325
349
|
if (direction === -1 && time <= 0)
|
|
326
350
|
time = clip.duration;
|
|
351
|
+
// A run from the start edge reads its "from current" keys afresh; anything else (resume,
|
|
352
|
+
// the reverse leg of a toggle, play after a scrub) keeps the run's captures.
|
|
353
|
+
const fresh = !existing || (direction === 1 && time === 0);
|
|
327
354
|
this.clips.set(clip.id, {
|
|
328
355
|
clip, time, speed: opts.speed ?? 1, direction, playing: true, order: ++this.order,
|
|
329
356
|
cueState: existing?.cueState ?? new Map(), owned: existing?.owned ?? new Map(), cueTime: undefined,
|
|
357
|
+
captured: fresh || !existing ? new Map() : existing.captured,
|
|
330
358
|
});
|
|
359
|
+
if (fresh)
|
|
360
|
+
this.forgetWrites('clip:' + clip.id);
|
|
331
361
|
this.emit({ type: 'start', kind: 'clip', id: clip.id });
|
|
332
362
|
this.bumpState();
|
|
333
363
|
}
|
|
@@ -351,7 +381,7 @@ class ClipsRuntime {
|
|
|
351
381
|
if (!inst)
|
|
352
382
|
return;
|
|
353
383
|
this.clips.delete(clipId);
|
|
354
|
-
this.pendingRestore.push(...inst.clip.tracks);
|
|
384
|
+
this.pendingRestore.push(...expandTracks(inst.clip.tracks));
|
|
355
385
|
this.releaseCues(inst.owned, 'clip', clipId);
|
|
356
386
|
inst.cueState.clear();
|
|
357
387
|
this.bumpState();
|
|
@@ -361,13 +391,15 @@ class ClipsRuntime {
|
|
|
361
391
|
const inst = this.clips.get(clip.id);
|
|
362
392
|
const time = Math.min(clip.duration, Math.max(0, t));
|
|
363
393
|
if (inst) {
|
|
394
|
+
if (inst.clip !== clip)
|
|
395
|
+
inst.tracks = undefined;
|
|
364
396
|
inst.clip = clip;
|
|
365
397
|
inst.time = time;
|
|
366
398
|
inst.cueTime = undefined;
|
|
367
399
|
this.bump();
|
|
368
400
|
}
|
|
369
401
|
else {
|
|
370
|
-
this.clips.set(clip.id, { clip, time, speed: 1, direction: 1, playing: false, order: ++this.order, cueState: new Map(), owned: new Map() });
|
|
402
|
+
this.clips.set(clip.id, { clip, time, speed: 1, direction: 1, playing: false, order: ++this.order, cueState: new Map(), owned: new Map(), captured: new Map() });
|
|
371
403
|
this.bumpState();
|
|
372
404
|
}
|
|
373
405
|
}
|
|
@@ -376,10 +408,12 @@ class ClipsRuntime {
|
|
|
376
408
|
const inst = this.clips.get(clip.id);
|
|
377
409
|
if (!inst)
|
|
378
410
|
return;
|
|
379
|
-
const
|
|
411
|
+
const next = expandTracks(clip.tracks);
|
|
412
|
+
const removed = expandTracks(inst.clip.tracks).filter(t => !next.some(n => n.id === t.id));
|
|
380
413
|
if (removed.length)
|
|
381
414
|
this.pendingRestore.push(...removed);
|
|
382
415
|
inst.clip = clip;
|
|
416
|
+
inst.tracks = undefined; // re-resolved next tick (captures kept; new current keys capture then)
|
|
383
417
|
inst.time = Math.min(inst.time, clip.duration);
|
|
384
418
|
this.forceWrite = true; // values may have changed under the same time (the written marks stay: no spurious blend-ins)
|
|
385
419
|
this.bumpState();
|
|
@@ -402,7 +436,8 @@ class ClipsRuntime {
|
|
|
402
436
|
isActive(clipId) { return this.clips.has(clipId); }
|
|
403
437
|
/** Value of a track at the clip's current time (the panel's value column). */
|
|
404
438
|
sampleAt(clip, track) {
|
|
405
|
-
|
|
439
|
+
const resolved = this.clips.get(clip.id)?.tracks?.find(t => t.id === track.id);
|
|
440
|
+
return sampleTrack(resolved ?? track, this.getTime(clip.id));
|
|
406
441
|
}
|
|
407
442
|
// --- sequences ------------------------------------------------------------------
|
|
408
443
|
/**
|
|
@@ -420,7 +455,12 @@ class ClipsRuntime {
|
|
|
420
455
|
time = 0;
|
|
421
456
|
if (!driven && direction === -1 && time <= 0)
|
|
422
457
|
time = schedule.duration;
|
|
458
|
+
// A run from the sequence's own start edge reads its "from current" keys afresh (see play()).
|
|
459
|
+
const startEdge = seq.reverse ? schedule.duration : 0;
|
|
460
|
+
const fresh = !existing || (!driven && time === startEdge);
|
|
423
461
|
this.sequences.set(seq.id, {
|
|
462
|
+
captured: fresh || !existing ? new Map() : (existing.captured),
|
|
463
|
+
entryTracks: new Map(),
|
|
424
464
|
driven,
|
|
425
465
|
target: time,
|
|
426
466
|
seq,
|
|
@@ -441,6 +481,8 @@ class ClipsRuntime {
|
|
|
441
481
|
id: seq.id, driven, driver: seq.driver, time, duration: schedule.duration, entries: schedule.entries.length,
|
|
442
482
|
steps: seq.steps.length, cues: schedule.cues.length, waitForTargets: !!opts.waitForTargets, replaced: !!existing,
|
|
443
483
|
}, this.caller());
|
|
484
|
+
if (fresh)
|
|
485
|
+
this.forgetWrites('sequence:' + seq.id);
|
|
444
486
|
this.emit({ type: 'start', kind: 'sequence', id: seq.id });
|
|
445
487
|
this.bumpState();
|
|
446
488
|
}
|
|
@@ -525,7 +567,7 @@ class ClipsRuntime {
|
|
|
525
567
|
return;
|
|
526
568
|
this.dlog('stopSequence', inst.seq.name, this.caller());
|
|
527
569
|
this.sequences.delete(seqId);
|
|
528
|
-
inst.schedule.entries.forEach(e => this.pendingRestore.push(...e.clip.tracks));
|
|
570
|
+
inst.schedule.entries.forEach(e => this.pendingRestore.push(...expandTracks(e.clip.tracks)));
|
|
529
571
|
this.releaseActions(inst);
|
|
530
572
|
this.bumpState();
|
|
531
573
|
}
|
|
@@ -547,7 +589,7 @@ class ClipsRuntime {
|
|
|
547
589
|
this.sequences.set(seq.id, {
|
|
548
590
|
seq, schedule, time, target: time, driven: false,
|
|
549
591
|
speed: 1, direction: 1, baseDirection: 1, playing: false, order: ++this.order, active: new Set(),
|
|
550
|
-
cueState: new Map(), owned: new Map(),
|
|
592
|
+
cueState: new Map(), owned: new Map(), captured: new Map(), entryTracks: new Map(),
|
|
551
593
|
});
|
|
552
594
|
this.bumpState();
|
|
553
595
|
return;
|
|
@@ -561,9 +603,10 @@ class ClipsRuntime {
|
|
|
561
603
|
return;
|
|
562
604
|
this.dlog('updateSequence', seq.name, { playing: inst.playing, time: inst.time }, this.caller());
|
|
563
605
|
// Restore everything the old schedule drove; whatever is still driven re-writes this frame.
|
|
564
|
-
inst.schedule.entries.forEach(e => this.pendingRestore.push(...e.clip.tracks));
|
|
606
|
+
inst.schedule.entries.forEach(e => this.pendingRestore.push(...expandTracks(e.clip.tracks)));
|
|
565
607
|
inst.seq = seq;
|
|
566
608
|
inst.schedule = resolveSequence(seq, clips);
|
|
609
|
+
inst.entryTracks.clear();
|
|
567
610
|
inst.time = Math.min(inst.time, inst.schedule.duration);
|
|
568
611
|
inst.target = Math.min(inst.target, inst.schedule.duration);
|
|
569
612
|
// The driver can change while it runs (editing): a running sequence switches mode.
|
|
@@ -658,7 +701,7 @@ class ClipsRuntime {
|
|
|
658
701
|
continue;
|
|
659
702
|
const e = inst.schedule.entries.find(x => x.id === id);
|
|
660
703
|
if (e)
|
|
661
|
-
this.pendingRestore.push(...e.clip.tracks);
|
|
704
|
+
this.pendingRestore.push(...expandTracks(e.clip.tracks));
|
|
662
705
|
}
|
|
663
706
|
inst.active = now;
|
|
664
707
|
}
|
|
@@ -723,7 +766,8 @@ class ClipsRuntime {
|
|
|
723
766
|
continue;
|
|
724
767
|
// A driver taking the property over: start it from where the property is, not from the key.
|
|
725
768
|
let blend = this.blends.get(key);
|
|
726
|
-
|
|
769
|
+
// A take-over: nothing wrote it yet (or it was handed back), or another clip / sequence wrote it last.
|
|
770
|
+
if (!this.written.has(key) || this.writer.get(key) !== p.driver) {
|
|
727
771
|
const duration = p.blend ?? DEFAULT_BLEND;
|
|
728
772
|
const from = this.currentValue(p.state, p.path, p.node);
|
|
729
773
|
if (duration > 0 && from !== undefined && JSON.stringify(from) !== JSON.stringify(p.value)) {
|
|
@@ -747,8 +791,12 @@ class ClipsRuntime {
|
|
|
747
791
|
value = mixValues(p.path, blend.from, p.value, smooth(u));
|
|
748
792
|
}
|
|
749
793
|
const json = JSON.stringify(value);
|
|
750
|
-
|
|
794
|
+
// Unchanged: nothing to write — but the property is this driver's now (else every frame
|
|
795
|
+
// would look like a take-over, restart the blend and pin the property where it was).
|
|
796
|
+
if (!this.forceWrite && this.written.get(key) === json && !this.rewrite.has(p.state)) {
|
|
797
|
+
this.writer.set(key, p.driver);
|
|
751
798
|
continue;
|
|
799
|
+
}
|
|
752
800
|
// Recorded only when it landed: a target that is not mounted yet (a model still
|
|
753
801
|
// loading) is retried next frame instead of being skipped for good.
|
|
754
802
|
if (this.debug) {
|
|
@@ -761,6 +809,7 @@ class ClipsRuntime {
|
|
|
761
809
|
}
|
|
762
810
|
if (applyValue(ctx, p.state, p.path, value, p.node)) {
|
|
763
811
|
this.written.set(key, json);
|
|
812
|
+
this.writer.set(key, p.driver);
|
|
764
813
|
this.blendOf.set(key, p.blend ?? DEFAULT_BLEND);
|
|
765
814
|
}
|
|
766
815
|
else if (this.debug)
|
|
@@ -791,7 +840,7 @@ class ClipsRuntime {
|
|
|
791
840
|
missing.add(t.node ? `${t.state} › ${t.node}` : t.state);
|
|
792
841
|
}
|
|
793
842
|
}
|
|
794
|
-
const ENV = ['camera', 'sky', 'clouds', 'ocean', 'terrain'];
|
|
843
|
+
const ENV = ['camera', 'sky', 'clouds', 'ocean', 'terrain', 'time', 'render'];
|
|
795
844
|
const idsOf = (c) => (c?.kind === 'effect' ? c.effect?.targets ?? []
|
|
796
845
|
: c?.kind === 'effectClip' ? c.use?.targets ?? []
|
|
797
846
|
: c?.kind === 'change' ? (c.targets ?? []).map((t) => t?.state).filter((s) => s && !ENV.includes(s)) : []);
|
|
@@ -926,20 +975,87 @@ class ClipsRuntime {
|
|
|
926
975
|
this.releaseCues(inst.owned, 'sequence', inst.seq.id);
|
|
927
976
|
inst.cueState.clear();
|
|
928
977
|
}
|
|
978
|
+
/**
|
|
979
|
+
* Tracks with their "from current" keys replaced by the run's captured values. A value not
|
|
980
|
+
* captured yet is read now (the scene as it is, before this frame's writes) and kept for the
|
|
981
|
+
* run. `pending`: a target isn't mounted yet — the key's own value stands in this frame and
|
|
982
|
+
* the caller resolves again next tick.
|
|
983
|
+
*/
|
|
984
|
+
resolveCurrent(tracks, captured, prefix) {
|
|
985
|
+
if (!tracks.some(hasCurrentKey))
|
|
986
|
+
return { tracks, pending: false };
|
|
987
|
+
let pending = false;
|
|
988
|
+
const out = tracks.map((track) => {
|
|
989
|
+
if (!hasCurrentKey(track))
|
|
990
|
+
return track;
|
|
991
|
+
const id = prefix + track.id;
|
|
992
|
+
const fallback = track.keys.find(k => k.current).value;
|
|
993
|
+
let v = captured.get(id);
|
|
994
|
+
if (v === undefined) {
|
|
995
|
+
const read = this.currentValue(track.state, track.path, track.node);
|
|
996
|
+
if (read !== undefined && sameKind(read, fallback))
|
|
997
|
+
v = read;
|
|
998
|
+
else if (this.ctx && !isTargetMounted(this.ctx, track.state, track.node)) {
|
|
999
|
+
pending = true;
|
|
1000
|
+
return track;
|
|
1001
|
+
}
|
|
1002
|
+
else
|
|
1003
|
+
v = fallback; // nothing readable: the stored value, for the whole run
|
|
1004
|
+
captured.set(id, v);
|
|
1005
|
+
this.dlog('from current', track.state, track.node ?? '', track.path, v);
|
|
1006
|
+
}
|
|
1007
|
+
const value = v;
|
|
1008
|
+
return { ...track, keys: track.keys.map(k => (k.current ? { ...k, value } : k)) };
|
|
1009
|
+
});
|
|
1010
|
+
return { tracks: out, pending };
|
|
1011
|
+
}
|
|
1012
|
+
/**
|
|
1013
|
+
* A new run of a timeline that wrote before (a held clip played again): what it wrote may not
|
|
1014
|
+
* be where the properties are any more (the visitor orbited the camera since), so its first
|
|
1015
|
+
* write is a take-over again — it blends from the scene as it is.
|
|
1016
|
+
*/
|
|
1017
|
+
forgetWrites(driver) {
|
|
1018
|
+
for (const [key, d] of this.writer)
|
|
1019
|
+
if (d === driver)
|
|
1020
|
+
this.writer.delete(key);
|
|
1021
|
+
}
|
|
929
1022
|
/** Every driver's values for this frame, lowest priority first. */
|
|
930
1023
|
*proposals() {
|
|
931
1024
|
const drivers = [];
|
|
1025
|
+
const ctx = this.ctx;
|
|
1026
|
+
const authored = (state) => ctx?.getSettings(state);
|
|
932
1027
|
for (const inst of this.clips.values()) {
|
|
933
|
-
|
|
1028
|
+
let tracks = inst.tracks;
|
|
1029
|
+
if (!tracks) {
|
|
1030
|
+
const r = this.resolveCurrent(inst.clip.tracks, inst.captured, '');
|
|
1031
|
+
if (!r.pending)
|
|
1032
|
+
inst.tracks = r.tracks;
|
|
1033
|
+
tracks = r.tracks;
|
|
1034
|
+
}
|
|
1035
|
+
const clipTracks = tracks;
|
|
1036
|
+
const driver = 'clip:' + inst.clip.id;
|
|
1037
|
+
drivers.push({ order: inst.order, run: () => sampleTracks(clipTracks, inst.time, inst.clip.blend ?? DEFAULT_BLEND, authored, driver) });
|
|
934
1038
|
}
|
|
935
1039
|
for (const inst of this.sequences.values()) {
|
|
1040
|
+
const driver = 'sequence:' + inst.seq.id;
|
|
1041
|
+
const entries = [];
|
|
1042
|
+
for (const e of inst.schedule.entries) {
|
|
1043
|
+
if (!inst.active.has(e.id))
|
|
1044
|
+
continue;
|
|
1045
|
+
let tracks = inst.entryTracks.get(e.id);
|
|
1046
|
+
if (!tracks) {
|
|
1047
|
+
const r = this.resolveCurrent(e.clip.tracks, inst.captured, e.id + '|');
|
|
1048
|
+
if (!r.pending)
|
|
1049
|
+
inst.entryTracks.set(e.id, r.tracks);
|
|
1050
|
+
tracks = r.tracks;
|
|
1051
|
+
}
|
|
1052
|
+
entries.push({ e, tracks });
|
|
1053
|
+
}
|
|
936
1054
|
drivers.push({
|
|
937
1055
|
order: inst.order,
|
|
938
1056
|
run: function* () {
|
|
939
|
-
for (const e of
|
|
940
|
-
|
|
941
|
-
continue;
|
|
942
|
-
yield* sampleTracks(e.clip.tracks, entryLocalTime(e, inst.time), e.clip.blend ?? inst.seq.blend ?? DEFAULT_BLEND);
|
|
1057
|
+
for (const { e, tracks } of entries) {
|
|
1058
|
+
yield* sampleTracks(tracks, entryLocalTime(e, inst.time), e.clip.blend ?? inst.seq.blend ?? DEFAULT_BLEND, authored, driver);
|
|
943
1059
|
}
|
|
944
1060
|
},
|
|
945
1061
|
});
|
|
@@ -961,6 +1077,7 @@ class ClipsRuntime {
|
|
|
961
1077
|
done.add(key);
|
|
962
1078
|
const last = this.written.get(key);
|
|
963
1079
|
this.written.delete(key);
|
|
1080
|
+
this.writer.delete(key);
|
|
964
1081
|
this.blends.delete(key);
|
|
965
1082
|
if (track.node) {
|
|
966
1083
|
// Node tracks restore their exact pre-animation snapshot (see nodeTracks).
|
|
@@ -1134,14 +1251,16 @@ class ClipsRuntime {
|
|
|
1134
1251
|
}
|
|
1135
1252
|
const round2 = (n) => Math.round(n * 100) / 100;
|
|
1136
1253
|
const isDriven = (seq) => !!seq.driver && seq.driver !== 'time';
|
|
1137
|
-
function* sampleTracks(tracks, t, blend) {
|
|
1138
|
-
for (const track of tracks) {
|
|
1254
|
+
function* sampleTracks(tracks, t, blend, authored, driver) {
|
|
1255
|
+
for (const track of expandTracks(tracks)) {
|
|
1139
1256
|
if (track.muted || track.keys.length === 0)
|
|
1140
1257
|
continue;
|
|
1141
|
-
|
|
1258
|
+
// a facing track's rotation: from its position track's line, the authored rotation as the facing correction
|
|
1259
|
+
const source = faceSource(track);
|
|
1260
|
+
const value = source ? sampleTrackFacing(source, t, authored(track.state)?.meshSettings?.rotation) : sampleTrack(track, t);
|
|
1142
1261
|
if (value === undefined)
|
|
1143
1262
|
continue;
|
|
1144
|
-
yield { state: track.state, node: track.node, path: track.path, value, discrete: isSwitchTrack(track), blend };
|
|
1263
|
+
yield { state: track.state, node: track.node, path: track.path, value, discrete: isSwitchTrack(track), blend, driver };
|
|
1145
1264
|
}
|
|
1146
1265
|
}
|
|
1147
1266
|
const clipsRuntime = new ClipsRuntime();
|
|
@@ -26,4 +26,13 @@ export declare function applyValue(ctx: ApplyContext, state: string, path: strin
|
|
|
26
26
|
export declare function isTargetMounted(ctx: ApplyContext, state: string, node?: string): boolean;
|
|
27
27
|
/** Whether a (state, path) has an applier — used by the track picker. */
|
|
28
28
|
export declare function isApplicable(state: string, path: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* A property's value as the scene shows it right now — the camera where the visitor
|
|
31
|
+
* orbited it, an object where a clip or a drag left it — for the paths that can be read
|
|
32
|
+
* back from the live objects: camera position / fov / orbit target, an object's
|
|
33
|
+
* transform and visibility, its (first) material's numbers and colours, a model part's
|
|
34
|
+
* fields. Undefined for anything else (config handles, environment, effects): the
|
|
35
|
+
* runtime then falls back to what it last wrote, else the authored value.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readSceneValue(ctx: ApplyContext, state: string, path: string, node?: string): KeyValue | undefined;
|
|
29
38
|
//# sourceMappingURL=appliers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appliers.d.ts","sourceRoot":"","sources":["../../src/animationsV2/appliers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAgB/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"appliers.d.ts","sourceRoot":"","sources":["../../src/animationsV2/appliers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAgB/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAKrE;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,qDAAqD;IACrD,QAAQ,EAAE,GAAG,CAAC;IACd,yFAAyF;IACzF,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;CACxD;AAWD,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAsOD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED,uFAAuF;AACvF,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAIlH;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAKxF;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAMD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAiClH"}
|
|
@@ -7,9 +7,10 @@ import { createSunPosition } from '../utils/utils3d.js';
|
|
|
7
7
|
import { sunAnglesFromDirection, skySystemManager } from '@3driseai/3drise-core';
|
|
8
8
|
import { sunSystemLive, SUN_SYSTEM_LIVE_PATHS, TIME_PATHS } from './sunSystemLive.js';
|
|
9
9
|
import { publishRenderedSky, sceneOf } from '../utils/renderedSky.js';
|
|
10
|
-
import { applyNodeValue, clearNodeCaches, nodesFor } from './nodeTracks.js';
|
|
10
|
+
import { applyNodeValue, clearNodeCaches, nodesFor, readNodeValue } from './nodeTracks.js';
|
|
11
11
|
import { setObjectEffectParam } from '../operations/objectEffects.js';
|
|
12
12
|
import { setAnimationLive, transformAnimationIndex } from './animationLive.js';
|
|
13
|
+
import { applyRenderValue, RENDER_LIVE_PATHS } from '../render/renderLive.js';
|
|
13
14
|
/** `effects.<effectId>.<param>` → [effectId, param] (null for any other path). */
|
|
14
15
|
export function effectParamPath(path) {
|
|
15
16
|
if (!path.startsWith('effects.'))
|
|
@@ -256,8 +257,11 @@ const applyTime = (_ctx, _state, path, value) => {
|
|
|
256
257
|
}
|
|
257
258
|
return false;
|
|
258
259
|
};
|
|
260
|
+
/** Post-processing / exposure / HDR (renderLive). False when the effect is not mounted. */
|
|
261
|
+
const applyRender = (_ctx, _state, path, value) => applyRenderValue(path, value);
|
|
259
262
|
const APPLIERS = [
|
|
260
263
|
{ match: (s) => s === 'camera', apply: applyCamera },
|
|
264
|
+
{ match: (s, p) => s === 'render' && RENDER_LIVE_PATHS.includes(p), apply: applyRender },
|
|
261
265
|
{ match: (s, p) => s === 'time' && TIME_PATHS.includes(p), apply: applyTime },
|
|
262
266
|
// Environment before the generic path families: the ocean's `config.*` is not an object's.
|
|
263
267
|
{ match: (s) => s === 'sky', apply: applySky },
|
|
@@ -301,7 +305,7 @@ export function applyValue(ctx, state, path, value, node) {
|
|
|
301
305
|
export function isTargetMounted(ctx, state, node) {
|
|
302
306
|
if (state === 'camera')
|
|
303
307
|
return !!ctx.camera;
|
|
304
|
-
if (state === 'sky' || state === 'clouds' || state === 'ocean' || state === 'terrain' || state === 'time')
|
|
308
|
+
if (state === 'sky' || state === 'clouds' || state === 'ocean' || state === 'terrain' || state === 'time' || state === 'render')
|
|
305
309
|
return true;
|
|
306
310
|
if (node)
|
|
307
311
|
return nodesFor(state, node).length > 0;
|
|
@@ -311,3 +315,59 @@ export function isTargetMounted(ctx, state, node) {
|
|
|
311
315
|
export function isApplicable(state, path) {
|
|
312
316
|
return APPLIERS.some(a => a.match(state, path));
|
|
313
317
|
}
|
|
318
|
+
// --- reading the live scene (the inverse of the appliers, where it can be read) -------
|
|
319
|
+
const vec3 = (v) => [v.x, v.y, v.z];
|
|
320
|
+
/**
|
|
321
|
+
* A property's value as the scene shows it right now — the camera where the visitor
|
|
322
|
+
* orbited it, an object where a clip or a drag left it — for the paths that can be read
|
|
323
|
+
* back from the live objects: camera position / fov / orbit target, an object's
|
|
324
|
+
* transform and visibility, its (first) material's numbers and colours, a model part's
|
|
325
|
+
* fields. Undefined for anything else (config handles, environment, effects): the
|
|
326
|
+
* runtime then falls back to what it last wrote, else the authored value.
|
|
327
|
+
*/
|
|
328
|
+
export function readSceneValue(ctx, state, path, node) {
|
|
329
|
+
if (node)
|
|
330
|
+
return readNodeValue(state, node, path);
|
|
331
|
+
if (state === 'camera') {
|
|
332
|
+
const cam = ctx.camera;
|
|
333
|
+
if (!cam)
|
|
334
|
+
return undefined;
|
|
335
|
+
if (path === 'position')
|
|
336
|
+
return vec3(cam.position);
|
|
337
|
+
if (path === 'fov')
|
|
338
|
+
return cam.fov;
|
|
339
|
+
if (path === 'controls.target')
|
|
340
|
+
return ctx.controls?.target ? vec3(ctx.controls.target) : undefined;
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
if (path.startsWith('meshSettings.')) {
|
|
344
|
+
const obj = objectFor(state);
|
|
345
|
+
if (!obj)
|
|
346
|
+
return undefined;
|
|
347
|
+
const prop = path.slice('meshSettings.'.length);
|
|
348
|
+
if (prop === 'visible')
|
|
349
|
+
return !!obj.visible;
|
|
350
|
+
if (prop === 'position' || prop === 'rotation' || prop === 'scale')
|
|
351
|
+
return vec3(obj[prop]);
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
if (path.startsWith('materialSettings.')) {
|
|
355
|
+
const obj = objectFor(state);
|
|
356
|
+
if (!obj)
|
|
357
|
+
return undefined;
|
|
358
|
+
const key = path.slice('materialSettings.'.length);
|
|
359
|
+
let out;
|
|
360
|
+
traverseSkippingEdgesAndEffects(obj, true, (n) => {
|
|
361
|
+
if (out !== undefined || !n.material)
|
|
362
|
+
return;
|
|
363
|
+
const mat = Array.isArray(n.material) ? n.material[0] : n.material;
|
|
364
|
+
const v = mat?.[key];
|
|
365
|
+
if (typeof v === 'number')
|
|
366
|
+
out = v;
|
|
367
|
+
else if (v && v.isColor && typeof v.getHexString === 'function')
|
|
368
|
+
out = `#${v.getHexString()}`;
|
|
369
|
+
});
|
|
370
|
+
return out;
|
|
371
|
+
}
|
|
372
|
+
return undefined;
|
|
373
|
+
}
|
|
@@ -22,6 +22,32 @@ export declare const isSwitchTrack: (track: Pick<Track, "discrete" | "node" | "p
|
|
|
22
22
|
* after the last: the last key's value. Keys must be sorted by t.
|
|
23
23
|
*/
|
|
24
24
|
export declare function sampleTrack(track: Track, t: number): KeyValue | undefined;
|
|
25
|
+
/** A position track: an object's, or a model part's. The only tracks that can be curved. */
|
|
26
|
+
export declare const isPositionTrack: (track: Pick<Track, "node" | "path">) => boolean;
|
|
27
|
+
/** An object's position track that turns the object to face its travel (drives its rotation). */
|
|
28
|
+
export declare const isFacingTrack: (track: Pick<Track, "node" | "path" | "face">) => boolean;
|
|
29
|
+
/** Drawn as one line through its keys instead of straight segments. */
|
|
30
|
+
export declare const isCurvedTrack: (track: Track) => boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The rotation (Euler XYZ, radians) of an object facing its travel along the track at t: +Z along
|
|
33
|
+
* the line, pitching with the slope, no roll (core pathLineHeading — the path animation's own), with
|
|
34
|
+
* `rest` (the object's authored rotation) on top as its facing correction. Each angle is taken
|
|
35
|
+
* nearest to `rest`, so gliding in from the authored rotation never spins the long way round.
|
|
36
|
+
* Undefined when the track has no line.
|
|
37
|
+
*/
|
|
38
|
+
export declare function sampleTrackFacing(track: Track, t: number, rest?: readonly number[] | null): [number, number, number] | undefined;
|
|
39
|
+
/** The rotation a facing track drives: a track of its own for the runtime (restore, take-over, conflicts). */
|
|
40
|
+
export interface FaceTrack extends Track {
|
|
41
|
+
faceOf: Track;
|
|
42
|
+
}
|
|
43
|
+
/** The facing track a position track drives, or undefined. */
|
|
44
|
+
export declare const faceSource: (track: Track) => Track | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* A clip's tracks as the runtime drives them: each facing position track adds its object's
|
|
47
|
+
* rotation, AFTER all the clip's own tracks — so inside the clip it wins over a rotation track on
|
|
48
|
+
* the same object (later proposals win). Cached per tracks array (no allocation per frame).
|
|
49
|
+
*/
|
|
50
|
+
export declare function expandTracks(tracks: readonly Track[]): Track[];
|
|
25
51
|
export declare const sortKeys: (keys: Keyframe[]) => Keyframe[];
|
|
26
52
|
/** Add a key at t, or replace the value of a key already on that frame. */
|
|
27
53
|
export declare function upsertKey(track: Track, t: number, value: KeyValue, fps: number): Track;
|
|
@@ -35,6 +61,10 @@ export declare function moveKeys(clip: AnimationClip, selection: Set<string>, dt
|
|
|
35
61
|
export declare function copyKeys(clip: AnimationClip, selection: Set<string>, dt: number, ids: Map<string, string>): AnimationClip;
|
|
36
62
|
export declare function deleteKeys(clip: AnimationClip, selection: Set<string>): AnimationClip;
|
|
37
63
|
export declare function setKeysEase(clip: AnimationClip, selection: Set<string>, ease: EaseName): AnimationClip;
|
|
64
|
+
/** Whether a track's keys can be "from current" (Keyframe.current): eased tracks only. */
|
|
65
|
+
export declare const canKeyFromCurrent: (track: Pick<Track, "discrete" | "node" | "path">) => boolean;
|
|
66
|
+
/** Mark the selected keys "from current" (on) or back to their own value (off). Switch tracks are left alone. */
|
|
67
|
+
export declare function setKeysCurrent(clip: AnimationClip, selection: Set<string>, on: boolean): AnimationClip;
|
|
38
68
|
export declare function setKeyValue(clip: AnimationClip, keyId: string, value: KeyValue): AnimationClip;
|
|
39
69
|
export declare function findKey(clip: AnimationClip, keyId: string): {
|
|
40
70
|
track: Track;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipUtils.d.ts","sourceRoot":"","sources":["../../src/animationsV2/clipUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clipUtils.d.ts","sourceRoot":"","sources":["../../src/animationsV2/clipUtils.ts"],"names":[],"mappings":"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"}
|