@3driseai/3drise-viewer 0.1.11 → 0.1.13
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/components/EnvironmentManager.d.ts +3 -0
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/EnvironmentManager.js +8 -3
- package/dist/components/SkyController.d.ts.map +1 -1
- package/dist/components/SkyController.js +20 -7
- package/dist/components/SkySystem.d.ts +12 -0
- package/dist/components/SkySystem.d.ts.map +1 -1
- package/dist/components/SkySystem.js +45 -9
- package/dist/components/Stars.d.ts.map +1 -1
- package/dist/components/Stars.js +5 -2
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.js +10 -1
- package/dist/hooks/useEnvironmentProbe.d.ts +2 -1
- package/dist/hooks/useEnvironmentProbe.d.ts.map +1 -1
- package/dist/hooks/useSkySystem.d.ts.map +1 -1
- package/dist/hooks/useSkySystem.js +16 -9
- package/dist/types/cloudConfigs.d.ts +13 -0
- package/dist/types/cloudConfigs.d.ts.map +1 -1
- package/dist/types/cloudConfigs.js +25 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/utils/handleCloudsAnimations.d.ts +12 -1
- package/dist/utils/handleCloudsAnimations.d.ts.map +1 -1
- package/dist/utils/handleCloudsAnimations.js +13 -2
- package/package.json +2 -2
|
@@ -61,6 +61,9 @@ export interface EnvironmentManagerProps extends ObjectReadyProps {
|
|
|
61
61
|
playerPosition?: Vector3;
|
|
62
62
|
onTimeOfDayChange?: SkySystemProps['onTimeOfDayChange'];
|
|
63
63
|
onTimeUpdate?: SkySystemProps['onTimeUpdate'];
|
|
64
|
+
/** False for a secondary canvas (preview, thumbnail) that must not take over
|
|
65
|
+
* the shared time-of-day clock. See SkySystemProps.driveTime. */
|
|
66
|
+
driveTime?: boolean;
|
|
64
67
|
}
|
|
65
68
|
declare const EnvironmentManager: React.ForwardRefExoticComponent<EnvironmentManagerProps & React.RefAttributes<SkySystemRef>>;
|
|
66
69
|
export default EnvironmentManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/components/EnvironmentManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EACR,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;iFAWiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAChF,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/components/EnvironmentManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EACR,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;iFAWiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAChF,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C;sEACkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAoBD,QAAA,MAAM,kBAAkB,8FAwGtB,CAAC;AAGH,eAAe,kBAAkB,CAAC"}
|
|
@@ -23,7 +23,7 @@ const DEFAULT_HDR = {
|
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
25
|
const ORIGIN = new Vector3(0, 0, 0);
|
|
26
|
-
const EnvironmentManager = forwardRef(({ timeSettings, environment, hdrSettings, skySettings, cloudsSettings, terrainSettings, landscapeSettings, oceanSettings, fogSettings, cubeCameraResolution = 512, skyboxScale = 100000, playerPosition = ORIGIN, onTimeOfDayChange, onTimeUpdate, onObjectReady, onObjectDispose, }, ref) => {
|
|
26
|
+
const EnvironmentManager = forwardRef(({ timeSettings, environment, hdrSettings, skySettings, cloudsSettings, terrainSettings, landscapeSettings, oceanSettings, fogSettings, cubeCameraResolution = 512, skyboxScale = 100000, playerPosition = ORIGIN, onTimeOfDayChange, onTimeUpdate, driveTime = true, onObjectReady, onObjectDispose, }, ref) => {
|
|
27
27
|
const hdr = hdrSettings ?? environment?.hdr ?? DEFAULT_HDR;
|
|
28
28
|
const sky = skySettings ?? environment?.sky;
|
|
29
29
|
const clouds = cloudsSettings ?? environment?.clouds;
|
|
@@ -37,12 +37,17 @@ const EnvironmentManager = forwardRef(({ timeSettings, environment, hdrSettings,
|
|
|
37
37
|
const skyActive = !!sky?.visible || sunSystemVisible;
|
|
38
38
|
const sunIntensity = sky?.sunSystem?.intensity ?? 1;
|
|
39
39
|
useEnvironmentProbe({
|
|
40
|
+
// Real-time sync moves the sun just as much as autoAnimate does; gating
|
|
41
|
+
// the refresh on autoAnimate alone left the capture frozen at whatever
|
|
42
|
+
// the sky looked like when the probe was built, so reflections drifted
|
|
43
|
+
// out of step with the sky and popped when something else forced a
|
|
44
|
+
// capture.
|
|
45
|
+
autoAnimate: !!timeSettings.autoAnimate || !!timeSettings.syncWithRealTime,
|
|
40
46
|
hdrActive: isHdrActive(hdr),
|
|
41
47
|
skyActive,
|
|
42
|
-
autoAnimate: !!timeSettings.autoAnimate,
|
|
43
48
|
resolution: cubeCameraResolution,
|
|
44
49
|
});
|
|
45
|
-
return (_jsxs(_Fragment, { children: [_jsx(HdrEnvironment, { hdr: hdr, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(TerrainBuilder, { settings: terrain, skySettings: sky, timeSettings: timeSettings, sunIntensity: sunIntensity, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(LandscapeBuilder, { settings: landscape, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(OceanBuilder, { settings: ocean, skySettings: sky, timeSettings: timeSettings, sunIntensity: sunIntensity, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(SkySystem, { ref: ref, timeSettings: timeSettings, visible: true, sunSystemVisible: sunSystemVisible, sunSize: sky?.sunSystem?.sunSize, moonSize: sky?.sunSystem?.moonSize, skyboxScale: skyboxScale, sunIntensity: sunIntensity, castShadow: sky?.sunSystem?.castShadow, shadowMapSize: sky?.sunSystem?.shadowMapSize, playerPosition: playerPosition, cloudsSettings: clouds, skyControllerSettings: sky, fogSettings: fog, onTimeOfDayChange: onTimeOfDayChange, onTimeUpdate: onTimeUpdate, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })] }));
|
|
50
|
+
return (_jsxs(_Fragment, { children: [_jsx(HdrEnvironment, { hdr: hdr, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(TerrainBuilder, { settings: terrain, skySettings: sky, timeSettings: timeSettings, sunIntensity: sunIntensity, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(LandscapeBuilder, { settings: landscape, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(OceanBuilder, { settings: ocean, skySettings: sky, timeSettings: timeSettings, sunIntensity: sunIntensity, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(SkySystem, { ref: ref, timeSettings: timeSettings, driveTime: driveTime, visible: true, sunSystemVisible: sunSystemVisible, sunSize: sky?.sunSystem?.sunSize, moonSize: sky?.sunSystem?.moonSize, skyboxScale: skyboxScale, sunIntensity: sunIntensity, castShadow: sky?.sunSystem?.castShadow, shadowMapSize: sky?.sunSystem?.shadowMapSize, playerPosition: playerPosition, cloudsSettings: clouds, skyControllerSettings: sky, fogSettings: fog, onTimeOfDayChange: onTimeOfDayChange, onTimeUpdate: onTimeUpdate, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })] }));
|
|
46
51
|
});
|
|
47
52
|
EnvironmentManager.displayName = 'EnvironmentManager';
|
|
48
53
|
export default EnvironmentManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkyController.d.ts","sourceRoot":"","sources":["../../src/components/SkyController.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAS7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IACxD,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;CACtD;AAED,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,GAAG,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SkyController.d.ts","sourceRoot":"","sources":["../../src/components/SkyController.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAS7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IACxD,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;CACtD;AAED,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,GAAG,EAAE,kBAAkB,GAqL8H,GAAG,CACtQ;AA6BD,eAAe,aAAa,CAAC"}
|
|
@@ -74,8 +74,15 @@ function SkyController({ settings, timeSettings, scale = 1000, onSettingsChange,
|
|
|
74
74
|
azimuth: sunAzimuth,
|
|
75
75
|
...atmosphericParams,
|
|
76
76
|
};
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
// While time is advancing, the environment probe is already re-capturing
|
|
78
|
+
// the cube map on its own timer. Letting handleSettings capture as well
|
|
79
|
+
// meant six faces rendered from two independent schedulers for the same
|
|
80
|
+
// moving sun.
|
|
81
|
+
const applied = handleSettings(newSettings, state.advancing);
|
|
82
|
+
// Only on a real change, and only when time is not running: this runs
|
|
83
|
+
// every frame now, and an unconditional call would dispatch a settings
|
|
84
|
+
// write per frame in a host that supplies this callback.
|
|
85
|
+
if (applied && !state.advancing) {
|
|
79
86
|
onSettingsChange?.(newSettings);
|
|
80
87
|
}
|
|
81
88
|
}, [settings, onSettingsChange]);
|
|
@@ -132,22 +139,28 @@ function SkyController({ settings, timeSettings, scale = 1000, onSettingsChange,
|
|
|
132
139
|
isAnimatingRef.current = false;
|
|
133
140
|
cubeCameraManager.updateEnvironment();
|
|
134
141
|
};
|
|
135
|
-
|
|
142
|
+
/** Returns whether the settings were actually applied, so callers can tell a
|
|
143
|
+
* real change from a no-op. `skipEnvUpdate` leaves the cube-camera capture
|
|
144
|
+
* to whoever else is already scheduling it. */
|
|
145
|
+
const handleSettings = (newSettings, skipEnvUpdate = false) => {
|
|
136
146
|
if (!skyRef.current || isAnimatingRef.current || !newSettings)
|
|
137
|
-
return;
|
|
147
|
+
return false;
|
|
138
148
|
if (!hasActualChanges(newSettings, previousSettings.current))
|
|
139
|
-
return;
|
|
149
|
+
return false;
|
|
140
150
|
if (previousSettings.current?.visible !== newSettings.visible) {
|
|
141
151
|
toggleSky(newSettings.visible);
|
|
142
152
|
}
|
|
143
153
|
if (!skyRef.current.visible) {
|
|
144
154
|
previousSettings.current = { ...newSettings };
|
|
145
|
-
return;
|
|
155
|
+
return false;
|
|
146
156
|
}
|
|
147
157
|
updateUniforms(newSettings);
|
|
148
158
|
updateSun();
|
|
149
|
-
|
|
159
|
+
if (!skipEnvUpdate) {
|
|
160
|
+
cubeCameraManager.updateEnvironment();
|
|
161
|
+
}
|
|
150
162
|
previousSettings.current = { ...newSettings };
|
|
163
|
+
return true;
|
|
151
164
|
};
|
|
152
165
|
const handleMouseMove = (mouse) => {
|
|
153
166
|
const handlers = settings.handlers;
|
|
@@ -48,6 +48,18 @@ export interface SkySystemProps extends ObjectReadyProps {
|
|
|
48
48
|
fogSettings?: FogSettings;
|
|
49
49
|
onTimeOfDayChange?: (timeOfDay: string, elapsedTime: number) => void;
|
|
50
50
|
onTimeUpdate?: (timeOfDay: number) => void;
|
|
51
|
+
/** Whether this instance drives skySystemManager's clock.
|
|
52
|
+
*
|
|
53
|
+
* The manager is a singleton, so every mounted SkySystem shares one clock.
|
|
54
|
+
* A second one that writes to it — a market preview, a thumbnail canvas,
|
|
55
|
+
* an embed on the same page — pushes its own timeSettings in and stops
|
|
56
|
+
* whatever the first one was doing. Pass false for any secondary canvas:
|
|
57
|
+
* it then renders the scene's real time of day instead of fighting for it.
|
|
58
|
+
*
|
|
59
|
+
* Defaulting to true is safe because the manager hands the clock to the
|
|
60
|
+
* first claimant only; a forgotten `driveTime={false}` degrades to a
|
|
61
|
+
* read-only mount rather than to two components ticking the same clock. */
|
|
62
|
+
driveTime?: boolean;
|
|
51
63
|
}
|
|
52
64
|
declare const SkySystem: React.ForwardRefExoticComponent<SkySystemProps & React.RefAttributes<SkySystemRef>>;
|
|
53
65
|
export default SkySystem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkySystem.d.ts","sourceRoot":"","sources":["../../src/components/SkySystem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAOtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;yDAEqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAC/B;;;uBAGmB;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC;wDACoD;IACpD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SkySystem.d.ts","sourceRoot":"","sources":["../../src/components/SkySystem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAOtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;yDAEqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAC/B;;;uBAGmB;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC;wDACoD;IACpD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C;;;;;;;;;;gFAU4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,QAAA,MAAM,SAAS,qFAwJb,CAAC;AAGH,eAAe,SAAS,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
3
|
-
import { useEffect, useLayoutEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
|
3
|
+
import { useEffect, useLayoutEffect, useMemo, useRef, forwardRef, useImperativeHandle } from 'react';
|
|
4
4
|
import { useFrame } from '@react-three/fiber';
|
|
5
5
|
import { skySystemManager } from '@3driseai/3drise-core';
|
|
6
6
|
import Skybox from './Skybox.js';
|
|
@@ -9,10 +9,15 @@ import SunLight from './SunLight.js';
|
|
|
9
9
|
import SkyController from './SkyController.js';
|
|
10
10
|
import SceneFog from './SceneFog.js';
|
|
11
11
|
import CloudsGenerator from './CloudsGenerator.js';
|
|
12
|
-
const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible = false, sunSize = 1, moonSize = 1, skyboxScale = 100000, sunIntensity = 1, castShadow = true, shadowMapSize = 2048, playerPosition, cloudsSettings, skyControllerSettings, fogSettings, onTimeOfDayChange, onTimeUpdate, onObjectReady, onObjectDispose, }, ref) => {
|
|
12
|
+
const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible = false, sunSize = 1, moonSize = 1, skyboxScale = 100000, sunIntensity = 1, castShadow = true, shadowMapSize = 2048, playerPosition, cloudsSettings, skyControllerSettings, fogSettings, onTimeOfDayChange, onTimeUpdate, driveTime = true, onObjectReady, onObjectDispose, }, ref) => {
|
|
13
13
|
const previousTimeOfDayRef = useRef(null);
|
|
14
14
|
const rootRef = useRef(null);
|
|
15
15
|
const ready = { onObjectReady, onObjectDispose };
|
|
16
|
+
// Identity for the driver claim. A plain object rather than a boolean flag so
|
|
17
|
+
// the manager can tell instances apart and release the clock to the next one
|
|
18
|
+
// when this one unmounts.
|
|
19
|
+
const driverToken = useMemo(() => ({}), []);
|
|
20
|
+
const isDriverRef = useRef(false);
|
|
16
21
|
useObjectReady(rootRef, { timeSettings, sunSystemVisible, skyboxScale, sunIntensity, skyControllerSettings, fogSettings }, onObjectReady, onObjectDispose);
|
|
17
22
|
useImperativeHandle(ref, () => ({
|
|
18
23
|
setTime: (h, m) => skySystemManager.setTime(h, m),
|
|
@@ -20,20 +25,51 @@ const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible =
|
|
|
20
25
|
getTimeOfDay: () => skySystemManager.getTimeOfDay(),
|
|
21
26
|
getSunDirection: () => skySystemManager.getSunDirection(),
|
|
22
27
|
}));
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
28
|
+
// Claim the clock before anything reads it. useLayoutEffect for the same
|
|
29
|
+
// reason the settings push below uses one — a regular useEffect runs after
|
|
30
|
+
// paint, and the first rAF would find the manager still disabled.
|
|
26
31
|
useLayoutEffect(() => {
|
|
32
|
+
if (!driveTime) {
|
|
33
|
+
isDriverRef.current = false;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
isDriverRef.current = skySystemManager.claimDriver(driverToken);
|
|
37
|
+
return () => {
|
|
38
|
+
isDriverRef.current = false;
|
|
39
|
+
skySystemManager.releaseDriver(driverToken);
|
|
40
|
+
};
|
|
41
|
+
}, [driveTime, driverToken]);
|
|
42
|
+
// Only the driver writes. This is the push half of the loop; the manager
|
|
43
|
+
// ignores a timeOfDay that is merely its own echo coming back through the
|
|
44
|
+
// host's store, so a write-back during playback does not rewind the clock.
|
|
45
|
+
useLayoutEffect(() => {
|
|
46
|
+
if (!isDriverRef.current)
|
|
47
|
+
return;
|
|
27
48
|
skySystemManager.setTimeSettings(timeSettings);
|
|
28
|
-
}, [timeSettings]);
|
|
49
|
+
}, [timeSettings, driveTime]);
|
|
29
50
|
useEffect(() => {
|
|
30
|
-
if (!onTimeUpdate)
|
|
51
|
+
if (!onTimeUpdate || !driveTime)
|
|
31
52
|
return;
|
|
32
53
|
skySystemManager.setOnTimeSync(onTimeUpdate);
|
|
33
54
|
return () => { skySystemManager.setOnTimeSync(null); };
|
|
34
|
-
}, [onTimeUpdate]);
|
|
55
|
+
}, [onTimeUpdate, driveTime]);
|
|
56
|
+
// Ticked whenever time is enabled, not only while it animates: `elapsedTime`
|
|
57
|
+
// and `delta` come out of here, and those are what every consumer's colour
|
|
58
|
+
// smoothing and the stars' twinkle read. Gating this on autoAnimate froze
|
|
59
|
+
// both and collapsed every smoothing lerp to an instant snap, which is what
|
|
60
|
+
// made each discontinuity in the sun curve so visible.
|
|
35
61
|
useFrame((_, delta) => {
|
|
36
|
-
if (!
|
|
62
|
+
if (!isDriverRef.current) {
|
|
63
|
+
// Pick the clock up if the instance that held it has gone (a preview
|
|
64
|
+
// canvas unmounting, an embed swapping scenes). Without this a
|
|
65
|
+
// failed claim at mount time would leave the clock permanently
|
|
66
|
+
// unowned and nothing would ever tick it again.
|
|
67
|
+
if (!driveTime || !skySystemManager.claimDriver(driverToken))
|
|
68
|
+
return;
|
|
69
|
+
isDriverRef.current = true;
|
|
70
|
+
skySystemManager.setTimeSettings(timeSettings);
|
|
71
|
+
}
|
|
72
|
+
if (!timeSettings.enabled)
|
|
37
73
|
return;
|
|
38
74
|
skySystemManager.tick(delta);
|
|
39
75
|
const current = skySystemManager.getTimeOfDay();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stars.d.ts","sourceRoot":"","sources":["../../src/components/Stars.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAA4C,MAAM,OAAO,CAAC;AAQjF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAChD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAuDnE;AAYD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Stars.d.ts","sourceRoot":"","sources":["../../src/components/Stars.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAA4C,MAAM,OAAO,CAAC;AAQjF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAChD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAuDnE;AAYD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA2K/B,CAAC;AACF,eAAe,KAAK,CAAC"}
|
package/dist/components/Stars.js
CHANGED
|
@@ -165,8 +165,11 @@ const Stars = ({ settings, timeSettings, sunSystemEnabled = false, onObjectReady
|
|
|
165
165
|
},
|
|
166
166
|
});
|
|
167
167
|
const handleTimeUpdate = useCallback((state) => {
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
// Not gated on autoAnimate any more: scrubbing the time slider to
|
|
169
|
+
// midnight has to bring the stars up the same way playing into midnight
|
|
170
|
+
// does, and elapsedTime (the twinkle clock) now advances in manual mode.
|
|
171
|
+
const { normalizedTime, isDaytime, elapsedTime, delta } = state;
|
|
172
|
+
if (!sunSystemEnabled)
|
|
170
173
|
return;
|
|
171
174
|
if (!isDaytime) {
|
|
172
175
|
targetOpacityRef.current = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VolumetricCloudsPass.d.ts","sourceRoot":"","sources":["../../../src/components/volumetricClouds/VolumetricCloudsPass.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEvH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAErF;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAC/D,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAC7B;oDACgD;IAChD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAkBD,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"VolumetricCloudsPass.d.ts","sourceRoot":"","sources":["../../../src/components/volumetricClouds/VolumetricCloudsPass.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEvH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAErF;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAC/D,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAC7B;oDACgD;IAChD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAkBD,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAmW7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -108,6 +108,15 @@ const VolumetricCloudsPass = ({ id = '3drise-clouds', deck, cirrus, quality, thu
|
|
|
108
108
|
// React tree sixty times a second.
|
|
109
109
|
const override = useRef({});
|
|
110
110
|
const startValues = useRef({});
|
|
111
|
+
// When the current animation set started, in ms. calculateTimeProgress divides by
|
|
112
|
+
// duration, so it wants time *since the animation began* — not a wall clock and not
|
|
113
|
+
// seconds. Reset when the animations change so editing one restarts it from the
|
|
114
|
+
// beginning rather than dropping the user somewhere mid-cycle.
|
|
115
|
+
const animStart = useRef(0);
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
animStart.current = performance.now();
|
|
118
|
+
startValues.current = {};
|
|
119
|
+
}, [animations]);
|
|
111
120
|
// Live controller overrides. A slider drag writes here every pointer-move and the
|
|
112
121
|
// frame loop reads it on top of the config, so the deck responds without a Redux
|
|
113
122
|
// dispatch per frame. Cleared when the config identity changes, which is exactly
|
|
@@ -223,7 +232,7 @@ const VolumetricCloudsPass = ({ id = '3drise-clouds', deck, cirrus, quality, thu
|
|
|
223
232
|
// the pointer snapping back to the stored config every frame.
|
|
224
233
|
for (const k in override.current)
|
|
225
234
|
delete override.current[k];
|
|
226
|
-
applyCloudsKeyframeAnimations(animations?.clouds?.animations, startValues.current, deck, override.current,
|
|
235
|
+
applyCloudsKeyframeAnimations(animations?.clouds?.animations, startValues.current, deck, override.current, performance.now() - animStart.current);
|
|
227
236
|
if (mouseMove?.enabled && mouseMove.clouds?.enabled) {
|
|
228
237
|
applyCloudsMouseMove(mouseMove.clouds.properties, deck, override.current, pointer);
|
|
229
238
|
}
|
|
@@ -22,7 +22,8 @@ export interface UseEnvironmentProbeOptions {
|
|
|
22
22
|
hdrActive: boolean;
|
|
23
23
|
/** Analytic sky or the sun rig is visible — something worth capturing. */
|
|
24
24
|
skyActive: boolean;
|
|
25
|
-
/** Time of day is
|
|
25
|
+
/** Time of day is advancing — autoAnimate OR real-time sync — so the capture
|
|
26
|
+
* goes stale and needs refreshing. */
|
|
26
27
|
autoAnimate: boolean;
|
|
27
28
|
resolution?: number;
|
|
28
29
|
intervalMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEnvironmentProbe.d.ts","sourceRoot":"","sources":["../../src/hooks/useEnvironmentProbe.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,0BAA0B;IACvC,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB
|
|
1
|
+
{"version":3,"file":"useEnvironmentProbe.d.ts","sourceRoot":"","sources":["../../src/hooks/useEnvironmentProbe.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,0BAA0B;IACvC,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB;2CACuC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAChC,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAgB,EAChB,UAAgB,GACnB,EAAE,0BAA0B,GAAG,IAAI,CA6BnC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSkySystem.d.ts","sourceRoot":"","sources":["../../src/hooks/useSkySystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;CACxC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"useSkySystem.d.ts","sourceRoot":"","sources":["../../src/hooks/useSkySystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;CACxC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA6D7E;AACD,eAAe,YAAY,CAAC"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { useRef, useCallback, useEffect
|
|
1
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
2
2
|
import { useFrame } from '@react-three/fiber';
|
|
3
3
|
import { skySystemManager } from '@3driseai/3drise-core';
|
|
4
4
|
export function useSkySystem(options) {
|
|
5
5
|
const { timeSettings, onTimeUpdate, onTimeOfDayChange, enabled = true } = options;
|
|
6
6
|
const previousTimeOfDayRef = useRef(null);
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
// READ-ONLY, deliberately. This hook used to push timeSettings into the
|
|
8
|
+
// manager as well, which meant every leaf that used it — Skybox, SunLight,
|
|
9
|
+
// SkyController, Stars, Clouds — was a writer to a singleton clock. A
|
|
10
|
+
// preview canvas mounting its own Skybox with its own timeSettings could
|
|
11
|
+
// therefore stop the editor's day cycle and snap it to noon, and nothing
|
|
12
|
+
// put it back. SkySystem owns the write now; see its `driveTime` prop.
|
|
13
|
+
//
|
|
14
|
+
// Ordering is fine without a layout effect here: React runs child layout
|
|
15
|
+
// effects before the parent's, so SkySystem's push lands before the first
|
|
16
|
+
// rAF either way, and the manual-mode branch below computes from the passed
|
|
17
|
+
// timeOfDay rather than from manager state.
|
|
13
18
|
// Manual time mode: respond immediately when timeOfDay changes
|
|
14
19
|
useEffect(() => {
|
|
15
20
|
if (!enabled || !timeSettings.enabled || timeSettings.autoAnimate)
|
|
@@ -22,9 +27,11 @@ export function useSkySystem(options) {
|
|
|
22
27
|
previousTimeOfDayRef.current = state.timeOfDay;
|
|
23
28
|
onTimeUpdate?.(state);
|
|
24
29
|
}, [timeSettings.timeOfDay, timeSettings.enabled, timeSettings.autoAnimate, enabled, onTimeUpdate, onTimeOfDayChange]);
|
|
25
|
-
//
|
|
30
|
+
// Read manager state every frame while time is enabled. Not gated on
|
|
31
|
+
// autoAnimate: `delta` and `elapsedTime` advance in manual mode too now, and
|
|
32
|
+
// consumers use them for colour smoothing and twinkle.
|
|
26
33
|
useFrame(() => {
|
|
27
|
-
if (!enabled || !timeSettings.enabled
|
|
34
|
+
if (!enabled || !timeSettings.enabled)
|
|
28
35
|
return;
|
|
29
36
|
const state = skySystemManager.getState();
|
|
30
37
|
if (previousTimeOfDayRef.current !== null &&
|
|
@@ -293,5 +293,18 @@ export declare function normalizeCirrus(raw: unknown): CirrusLayerConfig | null;
|
|
|
293
293
|
* block is absent, because the default is `enabled: false` — nothing appears, and a
|
|
294
294
|
* scene saved before thunder existed simply has it switched off. */
|
|
295
295
|
export declare function normalizeThunder(raw: unknown): ThunderConfig;
|
|
296
|
+
/**
|
|
297
|
+
* A complete settings object from whatever was saved.
|
|
298
|
+
*
|
|
299
|
+
* Use this at the boundary where a stored blob enters the app — the Redux reducer,
|
|
300
|
+
* a project load — so that everything downstream can read `settings.thunder.enabled`
|
|
301
|
+
* without a guard. The per-block normalisers above are for the renderer, which can
|
|
302
|
+
* meaningfully treat an absent block as "draw nothing"; the settings panel cannot,
|
|
303
|
+
* because it has to render a control for it either way.
|
|
304
|
+
*
|
|
305
|
+
* A missing deck becomes a disabled one rather than null, which renders the same
|
|
306
|
+
* nothing while still giving the panel an object to bind to.
|
|
307
|
+
*/
|
|
308
|
+
export declare function normalizeVolumetricClouds(raw: unknown): VolumetricCloudsSettings;
|
|
296
309
|
export declare function normalizeCloudQuality(raw: unknown): CloudsQualityConfig;
|
|
297
310
|
//# sourceMappingURL=cloudConfigs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudConfigs.d.ts","sourceRoot":"","sources":["../../src/types/cloudConfigs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloudConfigs.d.ts","sourceRoot":"","sources":["../../src/types/cloudConfigs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC;AAEzE,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB;oFACgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB;uFACmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB;;wEAEoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB;mFAC+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;sEACkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB;iCAC6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB;qDACiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB;iDAC6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd;wDACoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd;;sDAEkD;IAClD,aAAa,EAAE,MAAM,CAAC;IAGtB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;yCACqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;oDACgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAGlB;;qDAEiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB;;oDAEgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;oEACgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IACrB;2DACuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;2CACuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB;8DAC0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;mDAC+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB;8DAC0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;iFAC6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB;6CACyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;6EACyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;yEACqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB;yFACqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB;kEAC8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB;0DACsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB;;4DAEwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAChC,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,aAAa,EAAE,MAAM,CAAC;IACtB;mEAC+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd;qDACiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB;;4BAEwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB;;;8CAG0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB;wCACoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB;sDACkD;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAC3B;iEAC6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;CACpB;AAqCD,eAAO,MAAM,oBAAoB,EAAE,eAMlC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,eA2BxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,eA4BvC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,iBAgBjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aAYlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAYlC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,CAItE,CAAC;AAMF,MAAM,MAAM,kBAAkB,GACxB,OAAO,GACP,WAAW,GACX,YAAY,GACZ,UAAU,GACV,SAAS,CAAC;AAEhB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,EA+BlD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,mBAAmB,EAc9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,mBAAmB,EAW/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAWrD,CAAC;AAMF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAErF;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAwB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf;mFAC+E;IAC/E,MAAM,EAAE,eAAe,CAAC;IACxB,8EAA8E;IAC9E,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,kFAAkF;IAClF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,gEAAgE;IAChE,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAO7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,+NAkB9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAuBnF;;+DAE+D;AAC/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAcvE;AAED;;;;4CAI4C;AAC5C,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAGtE;AAED;;qEAEqE;AACrE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAE5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,wBAAwB,CAYhF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAEvE"}
|
|
@@ -309,6 +309,31 @@ export function normalizeCirrus(raw) {
|
|
|
309
309
|
export function normalizeThunder(raw) {
|
|
310
310
|
return { ...defaultThunderConfig, ...(isRecord(raw) ? raw : {}) };
|
|
311
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* A complete settings object from whatever was saved.
|
|
314
|
+
*
|
|
315
|
+
* Use this at the boundary where a stored blob enters the app — the Redux reducer,
|
|
316
|
+
* a project load — so that everything downstream can read `settings.thunder.enabled`
|
|
317
|
+
* without a guard. The per-block normalisers above are for the renderer, which can
|
|
318
|
+
* meaningfully treat an absent block as "draw nothing"; the settings panel cannot,
|
|
319
|
+
* because it has to render a control for it either way.
|
|
320
|
+
*
|
|
321
|
+
* A missing deck becomes a disabled one rather than null, which renders the same
|
|
322
|
+
* nothing while still giving the panel an object to bind to.
|
|
323
|
+
*/
|
|
324
|
+
export function normalizeVolumetricClouds(raw) {
|
|
325
|
+
const r = (isRecord(raw) ? raw : {});
|
|
326
|
+
return {
|
|
327
|
+
id: typeof r.id === 'string' && r.id ? r.id : defaultVolumetricCloudsSettings.id,
|
|
328
|
+
type: 'clouds',
|
|
329
|
+
config: normalizeCloudDeck(r.config) ?? { ...defaultCumulusConfig, enabled: false },
|
|
330
|
+
cirrus: normalizeCirrus(r.cirrus) ?? { ...defaultCirrusConfig, enabled: false },
|
|
331
|
+
thunder: normalizeThunder(r.thunder),
|
|
332
|
+
quality: normalizeCloudQuality(r.quality),
|
|
333
|
+
animations: r.animations,
|
|
334
|
+
mouseMove: r.mouseMove,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
312
337
|
export function normalizeCloudQuality(raw) {
|
|
313
338
|
return { ...defaultCloudsQuality, ...(isRecord(raw) ? raw : {}) };
|
|
314
339
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export type { AnyGridConfig, CircuitGridConfig, ContourGridConfig, FractalGridCo
|
|
|
3
3
|
export type { CirrusLayerConfig, CloudAnimatableProperty, CloudDeckConfig, CloudDeckSurfaceConfig, CloudDeckType, CloudPropertyGroup, CloudPropertySchema, CloudsQualityConfig, ThunderConfig, VolumetricCloudsSettings, } from './cloudConfigs';
|
|
4
4
|
export type { ProceduralTerrainSettings, TerrainConfig, TerrainPropertyGroup, TerrainPropertySchema, TerrainQualityConfig, TerrainSurfaceConfig, TerrainType, } from './terrainConfigs';
|
|
5
5
|
export { TERRAIN_DEFAULTS, TERRAIN_QUALITY_SCHEMA, TERRAIN_SCHEMA, defaultCanyonConfig, defaultDunesConfig, defaultHillsConfig, defaultMountainsConfig, defaultProceduralTerrainSettings, defaultTerrainQuality, normalizeTerrain, normalizeTerrainQuality, normalizeTerrainSettings, } from './terrainConfigs';
|
|
6
|
-
export { CIRRUS_SCHEMA, CLOUD_ANIMATABLE_PROPERTIES, CLOUD_DECK_DEFAULTS, CLOUD_DECK_SCHEMA, CLOUD_QUALITY_SCHEMA, defaultCirrusConfig, defaultCloudsQuality, defaultCumulonimbusConfig, defaultCumulusConfig, defaultStratocumulusConfig, defaultThunderConfig, defaultVolumetricCloudsSettings, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder, THUNDER_SCHEMA, } from './cloudConfigs';
|
|
6
|
+
export { CIRRUS_SCHEMA, CLOUD_ANIMATABLE_PROPERTIES, CLOUD_DECK_DEFAULTS, CLOUD_DECK_SCHEMA, CLOUD_QUALITY_SCHEMA, defaultCirrusConfig, defaultCloudsQuality, defaultCumulonimbusConfig, defaultCumulusConfig, defaultStratocumulusConfig, defaultThunderConfig, defaultVolumetricCloudsSettings, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder, normalizeVolumetricClouds, THUNDER_SCHEMA, } from './cloudConfigs';
|
|
7
7
|
export type { OceanConfig, OceanMeshSettings, OceanPropertyGroup, OceanPropertySchema, OceanQualityConfig, OceanSurfaceConfig, OceanWaterSettings, ReflectionMode, TerrainInteraction, WaterHost, WaterType, WaveModel, } from './oceanConfigs';
|
|
8
8
|
export { OCEAN_DEFAULTS, OCEAN_QUALITY_SCHEMA, OCEAN_SCHEMA, OBJECT_HOST_OVERRIDES, defaultLakeConfig, defaultOceanQuality, defaultOceanWaterSettings, defaultSeaConfig, defaultShoreConfig, defaultStormConfig, normalizeOcean, normalizeOceanQuality, normalizeOceanSettings, } from './oceanConfigs';
|
|
9
9
|
export type { AutoSplatConfig, HeightEncoding, LandscapeConfig, LandscapeHost, LandscapePropertyGroup, LandscapePropertySchema, LandscapeQualityConfig, LandscapeSettings, LandscapeSurface, SplatSource, } from './landscapeConfigs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,yBAAyB,EACzB,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,yBAAyB,EACzB,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { TERRAIN_DEFAULTS, TERRAIN_QUALITY_SCHEMA, TERRAIN_SCHEMA, defaultCanyonConfig, defaultDunesConfig, defaultHillsConfig, defaultMountainsConfig, defaultProceduralTerrainSettings, defaultTerrainQuality, normalizeTerrain, normalizeTerrainQuality, normalizeTerrainSettings, } from './terrainConfigs.js';
|
|
2
|
-
export { CIRRUS_SCHEMA, CLOUD_ANIMATABLE_PROPERTIES, CLOUD_DECK_DEFAULTS, CLOUD_DECK_SCHEMA, CLOUD_QUALITY_SCHEMA, defaultCirrusConfig, defaultCloudsQuality, defaultCumulonimbusConfig, defaultCumulusConfig, defaultStratocumulusConfig, defaultThunderConfig, defaultVolumetricCloudsSettings, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder, THUNDER_SCHEMA, } from './cloudConfigs.js';
|
|
2
|
+
export { CIRRUS_SCHEMA, CLOUD_ANIMATABLE_PROPERTIES, CLOUD_DECK_DEFAULTS, CLOUD_DECK_SCHEMA, CLOUD_QUALITY_SCHEMA, defaultCirrusConfig, defaultCloudsQuality, defaultCumulonimbusConfig, defaultCumulusConfig, defaultStratocumulusConfig, defaultThunderConfig, defaultVolumetricCloudsSettings, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder, normalizeVolumetricClouds, THUNDER_SCHEMA, } from './cloudConfigs.js';
|
|
3
3
|
export { OCEAN_DEFAULTS, OCEAN_QUALITY_SCHEMA, OCEAN_SCHEMA, OBJECT_HOST_OVERRIDES, defaultLakeConfig, defaultOceanQuality, defaultOceanWaterSettings, defaultSeaConfig, defaultShoreConfig, defaultStormConfig, normalizeOcean, normalizeOceanQuality, normalizeOceanSettings, } from './oceanConfigs.js';
|
|
4
4
|
export { LANDSCAPE_AUTOSPLAT_SCHEMA, LANDSCAPE_LIVE_AUTOSPLAT_KEYS, LANDSCAPE_LIVE_CONFIG_KEYS, LANDSCAPE_LIVE_QUALITY_KEYS, LANDSCAPE_LIVE_SURFACE_KEYS, LANDSCAPE_REBUILD_KEYS, LANDSCAPE_QUALITY_SCHEMA, LANDSCAPE_SCHEMA, MAX_LANDSCAPE_SURFACES, MAX_OBJECT_SURFACES, defaultAutoSplat, defaultLandscapeConfig, defaultLandscapeQuality, defaultLandscapeSettings, defaultLandscapeSurface, normalizeLandscape, normalizeLandscapeQuality, normalizeLandscapeSettings, normalizeLandscapeSurface, } from './landscapeConfigs.js';
|
|
@@ -3,7 +3,18 @@ import type { CloudDeckConfig } from '../types/cloudConfigs';
|
|
|
3
3
|
export type CloudPropertyOverride = Partial<Record<string, number>>;
|
|
4
4
|
/** Cache of the value a property started at, so `from`-less keyframes have an origin. */
|
|
5
5
|
export type CloudStartValues = Record<string, number>;
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* @param elapsedMs Milliseconds since this animation set started — NOT `Date.now()`,
|
|
8
|
+
* and not seconds.
|
|
9
|
+
*
|
|
10
|
+
* `calculateTimeProgress` computes `currentTime / duration`, so it means time
|
|
11
|
+
* since the animation began. Passing a wall clock works by accident for loop
|
|
12
|
+
* and yoyo, where the modulo hides the huge number, but a one-shot is
|
|
13
|
+
* `min(huge, 1)` = 1 on the very first frame — the value snaps straight to its
|
|
14
|
+
* target and never moves. Passing seconds is the mirror image: with a duration
|
|
15
|
+
* in ms, progress creeps by 0.0005 a second and the animation looks frozen.
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyCloudsKeyframeAnimations(animations: AnimationOptions[] | undefined, startValues: CloudStartValues, deck: CloudDeckConfig, override: CloudPropertyOverride, elapsedMs: number): void;
|
|
7
18
|
export declare function applyCloudsMouseMove(properties: MouseMoveProperty[] | undefined, deck: CloudDeckConfig, override: CloudPropertyOverride, pointer: {
|
|
8
19
|
x: number;
|
|
9
20
|
y: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleCloudsAnimations.d.ts","sourceRoot":"","sources":["../../src/utils/handleCloudsAnimations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmB7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpE,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"handleCloudsAnimations.d.ts","sourceRoot":"","sources":["../../src/utils/handleCloudsAnimations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmB7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpE,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAiBxM;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUjL;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,GAAG,eAAe,CAOzG"}
|
|
@@ -14,7 +14,18 @@ import { CLOUD_ANIMATABLE_PROPERTIES } from '../types/cloudConfigs.js';
|
|
|
14
14
|
* move.
|
|
15
15
|
*/
|
|
16
16
|
const ANIMATABLE = new Set(CLOUD_ANIMATABLE_PROPERTIES);
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @param elapsedMs Milliseconds since this animation set started — NOT `Date.now()`,
|
|
19
|
+
* and not seconds.
|
|
20
|
+
*
|
|
21
|
+
* `calculateTimeProgress` computes `currentTime / duration`, so it means time
|
|
22
|
+
* since the animation began. Passing a wall clock works by accident for loop
|
|
23
|
+
* and yoyo, where the modulo hides the huge number, but a one-shot is
|
|
24
|
+
* `min(huge, 1)` = 1 on the very first frame — the value snaps straight to its
|
|
25
|
+
* target and never moves. Passing seconds is the mirror image: with a duration
|
|
26
|
+
* in ms, progress creeps by 0.0005 a second and the animation looks frozen.
|
|
27
|
+
*/
|
|
28
|
+
export function applyCloudsKeyframeAnimations(animations, startValues, deck, override, elapsedMs) {
|
|
18
29
|
if (!animations?.length)
|
|
19
30
|
return;
|
|
20
31
|
for (const anim of animations) {
|
|
@@ -25,7 +36,7 @@ export function applyCloudsKeyframeAnimations(animations, startValues, deck, ove
|
|
|
25
36
|
if (from === undefined) {
|
|
26
37
|
from = startValues[property] ??= deck[property];
|
|
27
38
|
}
|
|
28
|
-
let p = calculateTimeProgress(
|
|
39
|
+
let p = calculateTimeProgress(elapsedMs, duration, yoyo, loop);
|
|
29
40
|
if (ease) {
|
|
30
41
|
const fn = gsapEasingMap[ease] || ease;
|
|
31
42
|
p = applyEasing(fn, p);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3driseai/3drise-viewer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@3driseai/3drise-common": "^1.0.1",
|
|
42
|
-
"@3driseai/3drise-core": "^1.0.
|
|
42
|
+
"@3driseai/3drise-core": "^1.0.8"
|
|
43
43
|
}
|
|
44
44
|
}
|