@3driseai/3drise-viewer 0.1.33 → 0.1.34
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.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +11 -1
- package/dist/animationsV2/animationLive.d.ts +7 -0
- package/dist/animationsV2/animationLive.d.ts.map +1 -0
- package/dist/animationsV2/animationLive.js +26 -0
- package/dist/animationsV2/appliers.d.ts +8 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +61 -0
- package/dist/animationsV2/index.d.ts +1 -0
- package/dist/animationsV2/index.d.ts.map +1 -1
- package/dist/animationsV2/index.js +1 -0
- package/dist/components/AnimatedObject.d.ts.map +1 -1
- package/dist/components/AnimatedObject.js +2 -0
- package/dist/components/CreatedObject.d.ts.map +1 -1
- package/dist/components/CreatedObject.js +4 -1
- package/dist/components/GroupMaterialContext.d.ts +25 -0
- package/dist/components/GroupMaterialContext.d.ts.map +1 -0
- package/dist/components/GroupMaterialContext.js +21 -0
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +13 -2
- package/dist/hooks/useContinuousEffects.d.ts.map +1 -1
- package/dist/hooks/useContinuousEffects.js +23 -2
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
- package/dist/hooks/useMaterialApplication.js +2 -1
- package/dist/hooks/useMaterialUniforms.d.ts +2 -8
- package/dist/hooks/useMaterialUniforms.d.ts.map +1 -1
- package/dist/hooks/useMaterialUniforms.js +18 -6
- package/dist/operations/catalogue/physicalHeld.d.ts.map +1 -1
- package/dist/operations/catalogue/physicalHeld.js +6 -0
- package/dist/operations/index.d.ts +1 -1
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +1 -1
- package/dist/operations/objectEffects.d.ts +15 -1
- package/dist/operations/objectEffects.d.ts.map +1 -1
- package/dist/operations/objectEffects.js +49 -1
- package/dist/operations/types.d.ts +5 -0
- package/dist/operations/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipsRuntime.d.ts","sourceRoot":"","sources":["../../src/animationsV2/ClipsRuntime.ts"],"names":[],"mappings":"AA2CA,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;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"ClipsRuntime.d.ts","sourceRoot":"","sources":["../../src/animationsV2/ClipsRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
import { SceneActions, expandMaterialVariant } from '@3driseai/3drise-core';
|
|
43
43
|
import { logTrigger } from '../triggers/log.js';
|
|
44
44
|
import { getAtPath, sampleTrack } from './clipUtils.js';
|
|
45
|
-
import { applyValue, clearApplierCaches, isApplicable, isTargetMounted } from './appliers.js';
|
|
45
|
+
import { applyValue, clearApplierCaches, isApplicable, isTargetMounted, releaseLive } from './appliers.js';
|
|
46
46
|
import { readNodeValue, restoreNodeTrack } from './nodeTracks.js';
|
|
47
47
|
import { cueStatesAt, entryLocalTime, isEntryActive, resolveSequence, cueCommand, clipCueSchedule, firedBetween, } from './sequenceUtils.js';
|
|
48
48
|
/** Longest an autoplaying sequence waits for its targets. */
|
|
@@ -181,6 +181,12 @@ class ClipsRuntime {
|
|
|
181
181
|
*/
|
|
182
182
|
reset() {
|
|
183
183
|
this.dlog('reset', { clips: this.clips.size, sequences: [...this.sequences.values()].map(i => i.seq.name) }, this.caller());
|
|
184
|
+
// effect params a clip was driving live on the effects' controllers, not in settings: hand them back
|
|
185
|
+
const driven = [...this.clips.values()].flatMap(i => i.clip.tracks)
|
|
186
|
+
.concat([...this.sequences.values()].flatMap(i => i.schedule.entries.flatMap(e => e.clip.tracks)));
|
|
187
|
+
for (const t of driven)
|
|
188
|
+
if (!t.node)
|
|
189
|
+
releaseLive(t.state, t.path);
|
|
184
190
|
this.clips.clear();
|
|
185
191
|
this.sequences.clear();
|
|
186
192
|
this.pendingRestore = [];
|
|
@@ -780,6 +786,10 @@ class ClipsRuntime {
|
|
|
780
786
|
restoreNodeTrack(track.state, node, track.path, (path) => this.isDriven(track.state, node, path));
|
|
781
787
|
continue;
|
|
782
788
|
}
|
|
789
|
+
// Live-only values (an effect's param, an animation row's value): the object's own comes back
|
|
790
|
+
// (another driver re-writes it this frame).
|
|
791
|
+
if (releaseLive(track.state, track.path))
|
|
792
|
+
continue;
|
|
783
793
|
// Another driver may still own this property; it re-writes this frame.
|
|
784
794
|
const authored = getAtPath(ctx.getSettings(track.state), track.path);
|
|
785
795
|
if (authored !== undefined)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Vector3Array } from '@3driseai/3drise-core';
|
|
2
|
+
/** `animations.transform.animations.<n>.to` → n (null for any other path). */
|
|
3
|
+
export declare function transformAnimationIndex(path: string): number | null;
|
|
4
|
+
export declare function setAnimationLive(objectId: string, index: number, value: Vector3Array | undefined): void;
|
|
5
|
+
/** The transform runner's reader for one object (undefined = no live values on it). */
|
|
6
|
+
export declare function animationLiveReader(objectId: string | undefined): ((index: number) => Vector3Array | undefined) | undefined;
|
|
7
|
+
//# sourceMappingURL=animationLive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animationLive.d.ts","sourceRoot":"","sources":["../../src/animationsV2/animationLive.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,8EAA8E;AAC9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CASvG;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC,GAAG,SAAS,CAG3H"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const live = new Map();
|
|
2
|
+
/** `animations.transform.animations.<n>.to` → n (null for any other path). */
|
|
3
|
+
export function transformAnimationIndex(path) {
|
|
4
|
+
const m = /^animations\.transform\.animations\.(\d+)\.to$/.exec(path);
|
|
5
|
+
return m ? Number(m[1]) : null;
|
|
6
|
+
}
|
|
7
|
+
export function setAnimationLive(objectId, index, value) {
|
|
8
|
+
let rows = live.get(objectId);
|
|
9
|
+
if (value === undefined) {
|
|
10
|
+
rows?.delete(index);
|
|
11
|
+
if (rows && !rows.size)
|
|
12
|
+
live.delete(objectId);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (!rows) {
|
|
16
|
+
rows = new Map();
|
|
17
|
+
live.set(objectId, rows);
|
|
18
|
+
}
|
|
19
|
+
rows.set(index, value);
|
|
20
|
+
}
|
|
21
|
+
/** The transform runner's reader for one object (undefined = no live values on it). */
|
|
22
|
+
export function animationLiveReader(objectId) {
|
|
23
|
+
if (!objectId)
|
|
24
|
+
return undefined;
|
|
25
|
+
return (index) => live.get(objectId)?.get(index);
|
|
26
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ActionSequence } from '@3driseai/3drise-core';
|
|
2
2
|
import type { PerspectiveCamera } from 'three';
|
|
3
3
|
import type { KeyValue } from './types';
|
|
4
|
+
/** `effects.<effectId>.<param>` → [effectId, param] (null for any other path). */
|
|
5
|
+
export declare function effectParamPath(path: string): [string, string] | null;
|
|
4
6
|
export interface ApplyContext {
|
|
5
7
|
camera: PerspectiveCamera | null;
|
|
6
8
|
/** drei OrbitControls (makeDefault), when present */
|
|
@@ -11,6 +13,12 @@ export interface ApplyContext {
|
|
|
11
13
|
getAction?: (id: string) => ActionSequence | undefined;
|
|
12
14
|
}
|
|
13
15
|
export declare function clearApplierCaches(): void;
|
|
16
|
+
/**
|
|
17
|
+
* A live-only track stops (an object's effect param, an animation row's value — values laid over
|
|
18
|
+
* what the object runs, never in its settings): the object's own value comes back. False for any
|
|
19
|
+
* other path (those restore from the authored settings).
|
|
20
|
+
*/
|
|
21
|
+
export declare function releaseLive(state: string, path: string): boolean;
|
|
14
22
|
/** Write one value. Unknown paths are ignored (the track picker never offers them). */
|
|
15
23
|
/** Write one value to the live scene. False when its target is not mounted yet. */
|
|
16
24
|
export declare function applyValue(ctx: ApplyContext, state: string, path: string, value: KeyValue, node?: string): boolean;
|
|
@@ -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;AAiB/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;AAiB/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKxC,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"}
|
|
@@ -8,6 +8,16 @@ 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
10
|
import { applyNodeValue, clearNodeCaches, nodesFor } from './nodeTracks.js';
|
|
11
|
+
import { setObjectEffectParam } from '../operations/objectEffects.js';
|
|
12
|
+
import { setAnimationLive, transformAnimationIndex } from './animationLive.js';
|
|
13
|
+
/** `effects.<effectId>.<param>` → [effectId, param] (null for any other path). */
|
|
14
|
+
export function effectParamPath(path) {
|
|
15
|
+
if (!path.startsWith('effects.'))
|
|
16
|
+
return null;
|
|
17
|
+
const rest = path.slice('effects.'.length);
|
|
18
|
+
const dot = rest.lastIndexOf('.');
|
|
19
|
+
return dot > 0 ? [rest.slice(0, dot), rest.slice(dot + 1)] : null;
|
|
20
|
+
}
|
|
11
21
|
// --- live-target caches (cleared when the scene changes under us) -------------
|
|
12
22
|
const objectCache = new Map();
|
|
13
23
|
const handleCache = new Map();
|
|
@@ -193,6 +203,37 @@ const applyOcean = (ctx, _state, path, value) => {
|
|
|
193
203
|
return false;
|
|
194
204
|
handle.config(path.slice('config.'.length), value);
|
|
195
205
|
};
|
|
206
|
+
/**
|
|
207
|
+
* One of an object's effects (its Effects tab): a param of a running effect — the rotation's speed,
|
|
208
|
+
* a float's height. Only effects the object already has; the effect is not replayed.
|
|
209
|
+
*/
|
|
210
|
+
const applyEffectParam = (_ctx, state, path, value) => {
|
|
211
|
+
const at = effectParamPath(path);
|
|
212
|
+
if (!at || (typeof value !== 'number' && typeof value !== 'boolean' && typeof value !== 'string'))
|
|
213
|
+
return;
|
|
214
|
+
return setObjectEffectParam(objectFor(state), at[0], at[1], value);
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* One of an object's own animations (its Animation tab): a transform row's `to`, live over its
|
|
218
|
+
* authored value. Only rows the object has — a track whose row is gone (removed, reordered into
|
|
219
|
+
* something else) does nothing and is reported once.
|
|
220
|
+
*/
|
|
221
|
+
const warnedRows = new Set();
|
|
222
|
+
const applyAnimationTo = (ctx, state, path, value) => {
|
|
223
|
+
const i = transformAnimationIndex(path);
|
|
224
|
+
if (i === null || !Array.isArray(value) || value.length !== 3)
|
|
225
|
+
return;
|
|
226
|
+
const row = ctx.getSettings(state)?.animations?.transform?.animations?.[i];
|
|
227
|
+
if (!row || !['position', 'rotation', 'scale'].includes(row.property)) {
|
|
228
|
+
const k = `${state}|${i}`;
|
|
229
|
+
if (!warnedRows.has(k)) {
|
|
230
|
+
warnedRows.add(k);
|
|
231
|
+
console.warn(`[3drise] timeline: a track drives transform animation #${i + 1} of ${state}, which is not there any more — it does nothing.`);
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
setAnimationLive(state, i, [Number(value[0]), Number(value[1]), Number(value[2])]);
|
|
236
|
+
};
|
|
196
237
|
/** Procedural terrain: its live handle — `config.*`. */
|
|
197
238
|
const applyTerrain = (ctx, _state, path, value) => {
|
|
198
239
|
if (typeof value !== 'number' && typeof value !== 'boolean' && typeof value !== 'string')
|
|
@@ -232,7 +273,27 @@ const APPLIERS = [
|
|
|
232
273
|
{ match: (_s, p) => p.startsWith('materialSettings.'), apply: applyMaterial },
|
|
233
274
|
{ match: (_s, p) => p.startsWith('edgesSettings.materialSettings.'), apply: applyEdgesMaterial },
|
|
234
275
|
{ match: (_s, p) => p.startsWith('config.'), apply: applyConfig },
|
|
276
|
+
{ match: (_s, p) => p.startsWith('effects.'), apply: applyEffectParam },
|
|
277
|
+
{ match: (_s, p) => transformAnimationIndex(p) !== null, apply: applyAnimationTo },
|
|
235
278
|
];
|
|
279
|
+
/**
|
|
280
|
+
* A live-only track stops (an object's effect param, an animation row's value — values laid over
|
|
281
|
+
* what the object runs, never in its settings): the object's own value comes back. False for any
|
|
282
|
+
* other path (those restore from the authored settings).
|
|
283
|
+
*/
|
|
284
|
+
export function releaseLive(state, path) {
|
|
285
|
+
const at = effectParamPath(path);
|
|
286
|
+
if (at) {
|
|
287
|
+
setObjectEffectParam(objectFor(state), at[0], at[1], undefined);
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
const i = transformAnimationIndex(path);
|
|
291
|
+
if (i !== null) {
|
|
292
|
+
setAnimationLive(state, i, undefined);
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
236
297
|
/** Write one value. Unknown paths are ignored (the track picker never offers them). */
|
|
237
298
|
/** Write one value to the live scene. False when its target is not mounted yet. */
|
|
238
299
|
export function applyValue(ctx, state, path, value, node) {
|
|
@@ -13,4 +13,5 @@ export type { ElementSources } from './elementSettings';
|
|
|
13
13
|
export type { AnimationClip, Track as ClipTrack, Keyframe as ClipKeyframe, KeyValue as ClipKeyValue, EaseName as ClipEaseName, SequenceStep, StepClip, SequenceCue, TimelineCue, AnimationSequence as ClipSequence, SequenceDriver, SequenceDriverSettings, } from './types';
|
|
14
14
|
export { DEFAULT_DRIVER_SETTINGS } from './types';
|
|
15
15
|
export { DEFAULT_EASE as CLIP_DEFAULT_EASE, FPS_PRESETS as CLIP_FPS_PRESETS } from './types';
|
|
16
|
+
export { setAnimationLive, transformAnimationIndex } from './animationLive';
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animationsV2/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC9H,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACR,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,YAAY,EAC/G,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,IAAI,YAAY,EAAE,cAAc,EAAE,sBAAsB,GAC9H,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animationsV2/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC9H,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACR,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,YAAY,EAC/G,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,IAAI,YAAY,EAAE,cAAc,EAAE,sBAAsB,GAC9H,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -10,3 +10,4 @@ export { readNodeValue, NODE_TRANSFORM_PATHS, NODE_MATERIAL_KEYS } from './nodeT
|
|
|
10
10
|
export { resolveElementSettings, isEnvironmentState, ENVIRONMENT_STATES as CLIP_ENVIRONMENT_STATES } from './elementSettings.js';
|
|
11
11
|
export { DEFAULT_DRIVER_SETTINGS } from './types.js';
|
|
12
12
|
export { DEFAULT_EASE as CLIP_DEFAULT_EASE, FPS_PRESETS as CLIP_FPS_PRESETS } from './types.js';
|
|
13
|
+
export { setAnimationLive, transformAnimationIndex } from './animationLive.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyFvD,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -52,6 +52,8 @@ visible = true, children, parentRef, handleObjectClick, onPointerEnter, onPointe
|
|
|
52
52
|
if (!obj)
|
|
53
53
|
return;
|
|
54
54
|
baseRef.current = { position: [...position], scale: [...scale], rotation: [...rotation] };
|
|
55
|
+
// The object's authored transform: the rest a parent group's each / targets animation moves it from.
|
|
56
|
+
obj.userData.baseTransform = { position: [...position], scale: [...scale], rotation: [...rotation] };
|
|
55
57
|
targetRef.current = {
|
|
56
58
|
position: targetPosition ? [...targetPosition] : [...position],
|
|
57
59
|
scale: targetScale ? [...targetScale] : [...scale],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatedObject.d.ts","sourceRoot":"","sources":["../../src/components/CreatedObject.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreatedObject.d.ts","sourceRoot":"","sources":["../../src/components/CreatedObject.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAWnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,UAAU,kBAAmB,SAAQ,gBAAgB;IACjD,aAAa,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACpH;AAKD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAwG9C,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useRef, useEffect, useState, useReducer, memo, useContext } from "react";
|
|
3
3
|
import { ObjectHoverContext } from "../interactions/runner.js";
|
|
4
4
|
import { ModelMaterialPassContext } from "./ModelMaterialPassContext.js";
|
|
5
|
+
import { GroupMaterialContext, coveredBy } from "./GroupMaterialContext.js";
|
|
5
6
|
import { DEFAULT_EDGES_SETTINGS } from "@3driseai/3drise-core";
|
|
6
7
|
import { useMaterialApplication } from "../hooks/useMaterialApplication.js";
|
|
7
8
|
import { useShadowApplication } from "../hooks/useShadowApplication.js";
|
|
@@ -40,7 +41,9 @@ const CreatedObject = memo(({ createdObject, children, shouldApply3driseMaterial
|
|
|
40
41
|
// Bumped when the model-level material pass lands, so per-mesh overrides
|
|
41
42
|
// (useNodeOverrides in ModelPrimitive) re-apply on top of it.
|
|
42
43
|
const [materialPass, bumpMaterialPass] = useReducer((n) => n + 1, 0);
|
|
43
|
-
|
|
44
|
+
// Inside a group whose material is on, the group's material wins; off, the object's own comes back.
|
|
45
|
+
const groupMaterial = coveredBy(createdObject, useContext(GroupMaterialContext));
|
|
46
|
+
useMaterialApplication(meshRef, groupMaterial ?? createdObject.materialSettings, shouldApply3driseMaterial, bumpMaterialPass);
|
|
44
47
|
// An object with no explicit flags takes its type's defaults (core's
|
|
45
48
|
// resolveShadowFlags): saved objects carry none, and reading them as false
|
|
46
49
|
// switched every shadow in every project off.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CreatedObjectSettings, MaterialSettings } from '@3driseai/3drise-core';
|
|
2
|
+
/**
|
|
3
|
+
* A group's material, handed down to the objects inside it.
|
|
4
|
+
*
|
|
5
|
+
* A group has no surface: like its visual effects, its material goes to the objects inside it that
|
|
6
|
+
* take one — meshes and models, any depth (core groupMaterialTargets is the same rule). It is a
|
|
7
|
+
* layer, like the model's "Apply material": while the group's `materialSettings.apply` is on, a
|
|
8
|
+
* covered child renders with the group's material instead of its own; switched off, every child
|
|
9
|
+
* goes back to its own material (its settings were never touched).
|
|
10
|
+
*
|
|
11
|
+
* targets the group's `materialSettings.objectIds` — child object ids (any depth); a chosen
|
|
12
|
+
* nested group stands for everything inside it. None = every child.
|
|
13
|
+
* nearest an inner group whose own material is on wins inside it.
|
|
14
|
+
*/
|
|
15
|
+
export interface GroupMaterial {
|
|
16
|
+
settings: MaterialSettings;
|
|
17
|
+
/** null = every object inside. */
|
|
18
|
+
targets: ReadonlySet<string> | null;
|
|
19
|
+
}
|
|
20
|
+
export declare const GroupMaterialContext: import("react").Context<GroupMaterial>;
|
|
21
|
+
/** What a group (or a parent object) hands to the objects inside it. */
|
|
22
|
+
export declare function groupMaterialFor(obj: CreatedObjectSettings, parent: GroupMaterial | null): GroupMaterial | null;
|
|
23
|
+
/** The group material this object renders with, or null (it keeps its own). */
|
|
24
|
+
export declare function coveredBy(obj: CreatedObjectSettings, ctx: GroupMaterial | null): MaterialSettings | null;
|
|
25
|
+
//# sourceMappingURL=GroupMaterialContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupMaterialContext.d.ts","sourceRoot":"","sources":["../../src/components/GroupMaterialContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAErF;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,kCAAkC;IAClC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,oBAAoB,wCAA4C,CAAC;AAE9E,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,CAS/G;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAGxG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
import { objectTakesVisualEffects } from '@3driseai/3drise-core';
|
|
3
|
+
export const GroupMaterialContext = createContext(null);
|
|
4
|
+
/** What a group (or a parent object) hands to the objects inside it. */
|
|
5
|
+
export function groupMaterialFor(obj, parent) {
|
|
6
|
+
const own = obj.materialSettings;
|
|
7
|
+
if (obj.type === 'group' && own?.apply === true && own.materialType) {
|
|
8
|
+
const { objectIds, ...settings } = own;
|
|
9
|
+
return { settings: settings, targets: objectIds?.length ? new Set(objectIds) : null };
|
|
10
|
+
}
|
|
11
|
+
// a chosen nested group (or object) stands for everything inside it
|
|
12
|
+
if (obj.type === 'group' && parent?.targets?.has(obj.id))
|
|
13
|
+
return { settings: parent.settings, targets: null };
|
|
14
|
+
return parent;
|
|
15
|
+
}
|
|
16
|
+
/** The group material this object renders with, or null (it keeps its own). */
|
|
17
|
+
export function coveredBy(obj, ctx) {
|
|
18
|
+
if (!ctx || obj.type === 'group' || !objectTakesVisualEffects(obj))
|
|
19
|
+
return null;
|
|
20
|
+
return !ctx.targets || ctx.targets.has(obj.id) ? ctx.settings : null;
|
|
21
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAA2C,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AA4BF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8IzC,CAAC;AACF,eAAe,UAAU,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useMemo } from "react";
|
|
2
|
+
import { useCallback, useContext, useMemo } from "react";
|
|
3
|
+
import { GroupMaterialContext, groupMaterialFor } from "./GroupMaterialContext.js";
|
|
3
4
|
import CustomPrimitive from "./CustomPrimitive.js";
|
|
4
5
|
import CreatedObject from "./CreatedObject.js";
|
|
5
6
|
import PathRenderer from './PathRenderer.js';
|
|
@@ -46,7 +47,17 @@ const GroupWithChildren = ({ createdObject, children, onObjectReady, onObjectDis
|
|
|
46
47
|
// Generative particle objects own their shaders, like effects do.
|
|
47
48
|
const selfManagedMaterial = SELF_MANAGED_MATERIAL.has(createdObject.type)
|
|
48
49
|
|| (createdObject.type === 'particles' && isGenerativeParticlesConfig(createdObject.config));
|
|
49
|
-
|
|
50
|
+
// A group's material (Apply on) goes to the objects inside it — see GroupMaterialContext.
|
|
51
|
+
const parentMaterial = useContext(GroupMaterialContext);
|
|
52
|
+
const ms = createdObject.materialSettings;
|
|
53
|
+
const handed = useMemo(() => groupMaterialFor(createdObject, parentMaterial),
|
|
54
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
55
|
+
[createdObject.id, createdObject.type, ms, parentMaterial]);
|
|
56
|
+
const body = (_jsxs(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !isGroup && !selfManagedMaterial, children: [!isGroup && renderObject(createdObject, handleObjectClick), children.map(childNode => (_jsx(ObjectNode, { node: childNode, handleObjectClick: handleObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }, childNode.objectId)))] }, createdObject.id));
|
|
57
|
+
// Always the Provider (even when it hands the parent's value on): wrapping only when a material is
|
|
58
|
+
// on would change the element type here and remount the whole subtree whenever Apply is toggled —
|
|
59
|
+
// new Object3Ds for every child (the studio's live preview kept writing to the old ones).
|
|
60
|
+
return _jsx(GroupMaterialContext.Provider, { value: handed, children: body });
|
|
50
61
|
};
|
|
51
62
|
const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick }) => {
|
|
52
63
|
const { children } = node;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContinuousEffects.d.ts","sourceRoot":"","sources":["../../src/hooks/useContinuousEffects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useContinuousEffects.d.ts","sourceRoot":"","sources":["../../src/hooks/useContinuousEffects.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,MAAM,WAAW,2BAA2B;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACvC,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC9D;AAGD,eAAO,MAAM,oBAAoB,GAEjC,gBAAgB,qBAAqB,GAAG,IAAI,EAAE,UAAS,2BAAgC,EAAE,eAAe,cAAc,KAAG,0BA0IxH,CAAC;AACF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useRef, useEffect } from "react";
|
|
2
|
+
import { animationLiveReader } from "../animationsV2/animationLive.js";
|
|
2
3
|
import { useFrame } from "@react-three/fiber";
|
|
3
|
-
import { animateUniforms, cacheChildrenWithMaterials, handleEdgesAnimations, handleMaterialAnimations, handleMaterialEffects, handleTransformAnimations } from "@3driseai/3drise-core";
|
|
4
|
+
import { AnimationTargetState, animateUniforms, cacheChildrenWithMaterials, handleEdgesAnimations, handleMaterialAnimations, handleMaterialEffects, handleTransformAnimations, targetRootKind } from "@3driseai/3drise-core";
|
|
4
5
|
import usePathAnimation from "./usePathAnimation.js";
|
|
5
6
|
import { resolveObject3D } from "../utils/resolveObject3D.js";
|
|
6
7
|
export const useContinuousEffects = (
|
|
@@ -19,6 +20,9 @@ objectSettings, options = {}, objectSource) => {
|
|
|
19
20
|
const startValuesRef = useRef({});
|
|
20
21
|
// Cache start values for edges animations
|
|
21
22
|
const edgesStartValuesRef = useRef({});
|
|
23
|
+
// Groups / models: rows scoped each / targets (core animationTargets.ts) — one state per object.
|
|
24
|
+
const targetsRef = useRef(null);
|
|
25
|
+
useEffect(() => () => { targetsRef.current?.dispose(); targetsRef.current = null; }, []);
|
|
22
26
|
// Transform keyframes. Effects that move the object (float, sway, spin…) are object
|
|
23
27
|
// effects now (CreatedObject.effects, the operations catalogue) and ride on top of these.
|
|
24
28
|
const transformAnimations = objectSettings?.animations?.transform?.animations || [];
|
|
@@ -74,8 +78,15 @@ objectSettings, options = {}, objectSource) => {
|
|
|
74
78
|
}, [enabled, objectSettings?.animations?.transform?.animations, objectSource, startPathAnimation, stopPathAnimation]);
|
|
75
79
|
useFrame((state, delta) => {
|
|
76
80
|
const object = resolveObject3D(objectSource);
|
|
77
|
-
if (!enabled || !object || !objectSettings)
|
|
81
|
+
if (!enabled || !object || !objectSettings) {
|
|
82
|
+
// Off: the parts the rows moved go back to their rest.
|
|
83
|
+
if (targetsRef.current) {
|
|
84
|
+
targetsRef.current.dispose();
|
|
85
|
+
targetsRef.current = null;
|
|
86
|
+
lastObjectRef.current = null;
|
|
87
|
+
}
|
|
78
88
|
return;
|
|
89
|
+
}
|
|
79
90
|
// Cache the object's materials the first frame we actually see it, and
|
|
80
91
|
// again if the caller swaps the object underneath us.
|
|
81
92
|
if (object !== lastObjectRef.current) {
|
|
@@ -83,7 +94,11 @@ objectSettings, options = {}, objectSource) => {
|
|
|
83
94
|
childrenWithMaterialsRef.current = cacheChildrenWithMaterials(object);
|
|
84
95
|
startValuesRef.current = {};
|
|
85
96
|
edgesStartValuesRef.current = {};
|
|
97
|
+
targetsRef.current?.dispose();
|
|
98
|
+
targetsRef.current = targetRootKind(object) ? new AnimationTargetState(object) : null;
|
|
86
99
|
}
|
|
100
|
+
const targets = targetsRef.current;
|
|
101
|
+
targets?.beginFrame();
|
|
87
102
|
const time = state.clock.getElapsedTime();
|
|
88
103
|
const mouse = state.pointer;
|
|
89
104
|
const currentTime = Date.now();
|
|
@@ -97,6 +112,9 @@ objectSettings, options = {}, objectSource) => {
|
|
|
97
112
|
object,
|
|
98
113
|
meshSettings: objectSettings.meshSettings || {},
|
|
99
114
|
pathIsActive,
|
|
115
|
+
targets: targets ?? undefined,
|
|
116
|
+
// a timeline clip driving a row's value (live, while it runs)
|
|
117
|
+
liveTo: animationLiveReader(objectSettings.id),
|
|
100
118
|
}, activeTransformAnimations, currentTime, hovered, delta);
|
|
101
119
|
}
|
|
102
120
|
if (hasEdgesAnimations) {
|
|
@@ -109,6 +127,7 @@ objectSettings, options = {}, objectSource) => {
|
|
|
109
127
|
object,
|
|
110
128
|
materialSettings: objectSettings.materialSettings || {},
|
|
111
129
|
startValuesCache: startValuesRef.current,
|
|
130
|
+
targets: targets ?? undefined,
|
|
112
131
|
}, activeMaterialAnimations, currentTime, hovered);
|
|
113
132
|
}
|
|
114
133
|
// Handle material effects (color effects)
|
|
@@ -116,6 +135,8 @@ objectSettings, options = {}, objectSource) => {
|
|
|
116
135
|
handleMaterialEffects(object, enabledMaterialEffects, time, delta, effectStateRef, applyToChildren);
|
|
117
136
|
}
|
|
118
137
|
}
|
|
138
|
+
// Targets the rows stopped driving go back to their rest.
|
|
139
|
+
targets?.endFrame();
|
|
119
140
|
animateUniforms(childrenWithMaterialsRef.current, time * speed, mouse, state.camera.position);
|
|
120
141
|
});
|
|
121
142
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMaterialApplication.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialApplication.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cAAc,EAAE,kBAAkB,gBAAgB,EAAE,4BAA4B,OAAO,EAAE,YAAY,MAAM,IAAI,KAAG,
|
|
1
|
+
{"version":3,"file":"useMaterialApplication.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialApplication.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cAAc,EAAE,kBAAkB,gBAAgB,EAAE,4BAA4B,OAAO,EAAE,YAAY,MAAM,IAAI,KAAG,IAyIhK,CAAC"}
|
|
@@ -96,11 +96,12 @@ export const useMaterialApplication = (source, materialSettings, shouldApply3dri
|
|
|
96
96
|
onApplied?.();
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
|
+
// Stops at child scene objects: they apply their own material.
|
|
99
100
|
traverseSkippingEdgesAndEffects(obj, true, (child) => {
|
|
100
101
|
if (child && child.material) {
|
|
101
102
|
applyMaterialToChild(child, variant, resolvedSettings);
|
|
102
103
|
}
|
|
103
|
-
});
|
|
104
|
+
}, true);
|
|
104
105
|
}
|
|
105
106
|
// traverseSkippingEdges(originObject!, true, (child: any) => {
|
|
106
107
|
// if (child && child.material) {
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import type { Material, Object3D } from "three";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Usage pattern (like SkyControllerUi):
|
|
6
|
-
* - On slider drag → updateProperty(key, value) — instant visual feedback, no Redux
|
|
7
|
-
* - On slider end → updateProperty(key, value) + dispatch to Redux
|
|
8
|
-
* - On color change → updateColor(key, hex) + dispatch to Redux
|
|
9
|
-
* - On variant change → changeMaterial(variant, settings) + dispatch to Redux
|
|
3
|
+
* `object` may be several objects (a group's Material tab edits the children it applies to).
|
|
10
4
|
*/
|
|
11
|
-
export declare function useMaterialUniforms(object: Object3D | null | undefined): {
|
|
5
|
+
export declare function useMaterialUniforms(object: Object3D | Object3D[] | null | undefined): {
|
|
12
6
|
getMaterial: () => Material | null;
|
|
13
7
|
updateProperty: (key: string, value: any) => void;
|
|
14
8
|
updateColor: (key: string, hexValue: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMaterialUniforms.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialUniforms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useMaterialUniforms.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialUniforms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAmBhD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG;IAC/E,WAAW,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1D,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CAC5E,CAoFJ"}
|
|
@@ -9,6 +9,18 @@ import { applySingleProperty, applyColorProperty, createAndApplyMaterial, MATERI
|
|
|
9
9
|
* - On color change → updateColor(key, hex) + dispatch to Redux
|
|
10
10
|
* - On variant change → changeMaterial(variant, settings) + dispatch to Redux
|
|
11
11
|
*/
|
|
12
|
+
/** Every material-bearing node of the object(s) — never inside child scene objects (they have their own material). */
|
|
13
|
+
function eachNode(object, cb) {
|
|
14
|
+
if (!object)
|
|
15
|
+
return;
|
|
16
|
+
for (const root of Array.isArray(object) ? object : [object]) {
|
|
17
|
+
if (root)
|
|
18
|
+
traverseSkippingEdgesAndEffects(root, true, cb, true);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* `object` may be several objects (a group's Material tab edits the children it applies to).
|
|
23
|
+
*/
|
|
12
24
|
export function useMaterialUniforms(object) {
|
|
13
25
|
/**
|
|
14
26
|
* Get the material from the first non-edges child mesh that has one.
|
|
@@ -16,10 +28,10 @@ export function useMaterialUniforms(object) {
|
|
|
16
28
|
const getMaterial = useCallback(() => {
|
|
17
29
|
if (!object)
|
|
18
30
|
return null;
|
|
19
|
-
if (object.material)
|
|
31
|
+
if (!Array.isArray(object) && object.material)
|
|
20
32
|
return object.material;
|
|
21
33
|
let found = null;
|
|
22
|
-
|
|
34
|
+
eachNode(object, (child) => {
|
|
23
35
|
if (!found && child.material) {
|
|
24
36
|
found = child.material;
|
|
25
37
|
}
|
|
@@ -33,7 +45,7 @@ export function useMaterialUniforms(object) {
|
|
|
33
45
|
const updateProperty = useCallback((key, value) => {
|
|
34
46
|
if (!object)
|
|
35
47
|
return;
|
|
36
|
-
|
|
48
|
+
eachNode(object, (child) => {
|
|
37
49
|
if (child.material) {
|
|
38
50
|
applySingleProperty(child.material, key, value);
|
|
39
51
|
}
|
|
@@ -45,7 +57,7 @@ export function useMaterialUniforms(object) {
|
|
|
45
57
|
const updateColor = useCallback((key, hexValue) => {
|
|
46
58
|
if (!object)
|
|
47
59
|
return;
|
|
48
|
-
|
|
60
|
+
eachNode(object, (child) => {
|
|
49
61
|
if (child.material) {
|
|
50
62
|
applyColorProperty(child.material, key, hexValue);
|
|
51
63
|
}
|
|
@@ -58,7 +70,7 @@ export function useMaterialUniforms(object) {
|
|
|
58
70
|
const applyAllSettings = useCallback((settings) => {
|
|
59
71
|
if (!object)
|
|
60
72
|
return;
|
|
61
|
-
|
|
73
|
+
eachNode(object, (child) => {
|
|
62
74
|
if (child.material) {
|
|
63
75
|
MaterialRegistryAPI.applySettings(child.material, settings);
|
|
64
76
|
}
|
|
@@ -71,7 +83,7 @@ export function useMaterialUniforms(object) {
|
|
|
71
83
|
const changeMaterial = useCallback((variant, settings) => {
|
|
72
84
|
if (!object)
|
|
73
85
|
return;
|
|
74
|
-
|
|
86
|
+
eachNode(object, (child) => {
|
|
75
87
|
if (child.material) {
|
|
76
88
|
const oldInstance = child.userData[MATERIAL_INSTANCE_KEY];
|
|
77
89
|
if (oldInstance) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physicalHeld.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/physicalHeld.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,SAAS,CAAC,CAAC;IACxB,6CAA6C;IAC7C,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnB,gEAAgE;IAChE,CAAC,EAAE,eAAe,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,8CAA8C;IAC9C,GAAG,EAAE,CAAC,CAAC;IACP,oCAAoC;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,kFAAkF;IAClF,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3C,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,KAAK,CAAC,CAAC;IACjD,oHAAoH;IACpH,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1E,qDAAqD;IACrD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtC;AAED,gCAAgC;AAChC,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAgL,CAAC;AAEtP,gGAAgG;AAChG,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,WAAgD,CAAC;AAE9F,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"physicalHeld.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/physicalHeld.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,SAAS,CAAC,CAAC;IACxB,6CAA6C;IAC7C,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnB,gEAAgE;IAChE,CAAC,EAAE,eAAe,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,8CAA8C;IAC9C,GAAG,EAAE,CAAC,CAAC;IACP,oCAAoC;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,kFAAkF;IAClF,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3C,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,KAAK,CAAC,CAAC;IACjD,oHAAoH;IACpH,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1E,qDAAqD;IACrD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtC;AAED,gCAAgC;AAChC,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAgL,CAAC;AAEtP,gGAAgG;AAChG,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,WAAgD,CAAC;AAE9F,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAwD9E"}
|
|
@@ -62,6 +62,12 @@ export function heldPhysical(spec) {
|
|
|
62
62
|
st.out = false;
|
|
63
63
|
return run(target, st, 1, easeTime(p));
|
|
64
64
|
},
|
|
65
|
+
// a motion reads its params every frame: a new speed / height just takes over
|
|
66
|
+
live(target, p) {
|
|
67
|
+
const st = target.userData[KEY];
|
|
68
|
+
if (st)
|
|
69
|
+
st.p = { ...p, __backward: st.p.__backward };
|
|
70
|
+
},
|
|
65
71
|
revert(target, p) {
|
|
66
72
|
const st = target.userData[KEY];
|
|
67
73
|
if (!st)
|
|
@@ -5,7 +5,7 @@ export { bakeProject, collectBakeJobs, setBakeSource, type BakeSource, type Bake
|
|
|
5
5
|
export { installStallLog, stallLogEnabled } from '../utils/stallLog';
|
|
6
6
|
export { runEffect, runEffectClip, setEffectClipTemplates, getEffectClipTemplate, effectClipFromAsset, EFFECT_CLIP_ASSET, applyOperation, revertOperation, runOf, isOperationOn, resolveEffectTargets, runActionEffects, previewEffect, previewEffects, isPreviewing, prewarmEffect, areActionEffectsOn, subscribeActionEffects, registerOperationTools, } from './runtime';
|
|
7
7
|
export { useOperationsRuntime } from './useOperationsRuntime';
|
|
8
|
-
export { ObjectEffectsController, runningObjectEffects, objectEffectParams, isObjectOperation, surfaceSignature, playObjectEffect, playbackOf, clipFollowsVisibility, setObjectEffectsVisible, currentEffectStep } from './objectEffects';
|
|
8
|
+
export { ObjectEffectsController, runningObjectEffects, objectEffectParams, isObjectOperation, surfaceSignature, playObjectEffect, setObjectEffectParam, playbackOf, clipFollowsVisibility, setObjectEffectsVisible, currentEffectStep } from './objectEffects';
|
|
9
9
|
export { useObjectEffectLayers } from './useObjectEffectLayers';
|
|
10
10
|
export { usePresentedVisibility } from './usePresentedVisibility';
|
|
11
11
|
export { captureFrameImage } from './clipPreview';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EACH,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAC5L,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,GACnJ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EACH,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAC5L,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,GACnJ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChQ,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/operations/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { bakeProject, collectBakeJobs, setBakeSource } from './bake.js';
|
|
|
5
5
|
export { installStallLog, stallLogEnabled } from '../utils/stallLog.js';
|
|
6
6
|
export { runEffect, runEffectClip, setEffectClipTemplates, getEffectClipTemplate, effectClipFromAsset, EFFECT_CLIP_ASSET, applyOperation, revertOperation, runOf, isOperationOn, resolveEffectTargets, runActionEffects, previewEffect, previewEffects, isPreviewing, prewarmEffect, areActionEffectsOn, subscribeActionEffects, registerOperationTools, } from './runtime.js';
|
|
7
7
|
export { useOperationsRuntime } from './useOperationsRuntime.js';
|
|
8
|
-
export { ObjectEffectsController, runningObjectEffects, objectEffectParams, isObjectOperation, surfaceSignature, playObjectEffect, playbackOf, clipFollowsVisibility, setObjectEffectsVisible, currentEffectStep } from './objectEffects.js';
|
|
8
|
+
export { ObjectEffectsController, runningObjectEffects, objectEffectParams, isObjectOperation, surfaceSignature, playObjectEffect, setObjectEffectParam, playbackOf, clipFollowsVisibility, setObjectEffectsVisible, currentEffectStep } from './objectEffects.js';
|
|
9
9
|
export { useObjectEffectLayers } from './useObjectEffectLayers.js';
|
|
10
10
|
export { usePresentedVisibility } from './usePresentedVisibility.js';
|
|
11
11
|
export { captureFrameImage } from './clipPreview.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Object3D } from 'three';
|
|
2
|
-
import type { EffectPlayback, EffectSpread, EffectStep, EffectSteps, ObjectEffect } from '@3driseai/3drise-core';
|
|
2
|
+
import type { EffectPlayback, EffectSpread, EffectStep, EffectSteps, ObjectEffect, OperationParamValue } from '@3driseai/3drise-core';
|
|
3
3
|
import type { OperationDefinition, OperationParams } from './types';
|
|
4
4
|
/** An operation can be an object effect (one-shots too: they have no way back, and play with loop). */
|
|
5
5
|
export declare const isObjectOperation: (def: OperationDefinition | undefined) => def is OperationDefinition;
|
|
@@ -17,6 +17,12 @@ export declare const objectEffectParams: (def: OperationDefinition, effect: Pick
|
|
|
17
17
|
export declare const playbackOf: (effect: Pick<ObjectEffect, "playback">) => Required<EffectPlayback>;
|
|
18
18
|
/** An object's effects controller; `create` makes one for an object that has no effects of its own yet. */
|
|
19
19
|
export declare function objectEffectsControllerFor(root: Object3D, create?: boolean): ObjectEffectsController | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* A timeline track on one of an object's effects' params (`effects.<effectId>.<param>`): set it on
|
|
22
|
+
* the running effect (undefined = back to the effect's own). False when the object has no controller
|
|
23
|
+
* or no such effect yet (a model still loading).
|
|
24
|
+
*/
|
|
25
|
+
export declare function setObjectEffectParam(root: Object3D | null | undefined, effectId: string, key: string, value: OperationParamValue | undefined): boolean;
|
|
20
26
|
/** The step of an object's effect steps that is on now (-1: none) — for the editor. */
|
|
21
27
|
export declare function currentEffectStep(root: Object3D | null | undefined): number;
|
|
22
28
|
/** An object's own effect clip follows its visibility (`visible`) and has an effect that is on. */
|
|
@@ -76,6 +82,8 @@ export declare class ObjectEffectsController {
|
|
|
76
82
|
private spread;
|
|
77
83
|
/** Added effects that follow visibility: a group's effects on this child, when the group's follow it. */
|
|
78
84
|
private addedFollows;
|
|
85
|
+
/** Timeline-driven params (effect id → param → value), laid over the row's own while a clip drives them. */
|
|
86
|
+
private liveParams;
|
|
79
87
|
constructor(root: Object3D);
|
|
80
88
|
/** The object's targets for an effect: the object, or its named nodes. */
|
|
81
89
|
private targetsOf;
|
|
@@ -176,6 +184,12 @@ export declare class ObjectEffectsController {
|
|
|
176
184
|
/** Loop / yoyo / reverse, sequenced from apply (forward) and revert (backward). Reads r.params each pass. */
|
|
177
185
|
private cycle;
|
|
178
186
|
/** Play an effect out and leave it waiting (it stays in the list, ready to play again). */
|
|
187
|
+
/**
|
|
188
|
+
* A timeline track drives one of the effect's params: lay it over the row's own (undefined puts
|
|
189
|
+
* the row's own back). A running motion takes it at once (its `live` hook); anything else picks
|
|
190
|
+
* it up on its next pass — nothing replays.
|
|
191
|
+
*/
|
|
192
|
+
setLiveParam(effectId: string, key: string, value: OperationParamValue | undefined): boolean;
|
|
179
193
|
stop(effectId: string): boolean;
|
|
180
194
|
/** Play an effect from its start (see playObjectEffect). */
|
|
181
195
|
play(effectId: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectEffects.d.ts","sourceRoot":"","sources":["../../src/operations/objectEffects.ts"],"names":[],"mappings":"AAqGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"objectEffects.d.ts","sourceRoot":"","sources":["../../src/operations/objectEffects.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,6 +75,14 @@ registerAddedEffects({
|
|
|
75
75
|
removeClip: (root, key) => !!controllers.get(root)?.removeClip(key),
|
|
76
76
|
hasClip: (root, key) => !!controllers.get(root)?.hasClip(key),
|
|
77
77
|
});
|
|
78
|
+
/**
|
|
79
|
+
* A timeline track on one of an object's effects' params (`effects.<effectId>.<param>`): set it on
|
|
80
|
+
* the running effect (undefined = back to the effect's own). False when the object has no controller
|
|
81
|
+
* or no such effect yet (a model still loading).
|
|
82
|
+
*/
|
|
83
|
+
export function setObjectEffectParam(root, effectId, key, value) {
|
|
84
|
+
return !!root && !!controllers.get(root)?.setLiveParam(effectId, key, value);
|
|
85
|
+
}
|
|
78
86
|
/** The step of an object's effect steps that is on now (-1: none) — for the editor. */
|
|
79
87
|
export function currentEffectStep(root) {
|
|
80
88
|
return (root && controllers.get(root)?.step) ?? -1;
|
|
@@ -150,6 +158,8 @@ export class ObjectEffectsController {
|
|
|
150
158
|
spread = {};
|
|
151
159
|
/** Added effects that follow visibility: a group's effects on this child, when the group's follow it. */
|
|
152
160
|
addedFollows = new Set();
|
|
161
|
+
/** Timeline-driven params (effect id → param → value), laid over the row's own while a clip drives them. */
|
|
162
|
+
liveParams = new Map();
|
|
153
163
|
constructor(root) {
|
|
154
164
|
this.root = root;
|
|
155
165
|
controllers.set(root, this);
|
|
@@ -562,7 +572,7 @@ export class ObjectEffectsController {
|
|
|
562
572
|
for (const e of next) {
|
|
563
573
|
const def = getOperation(e.operation);
|
|
564
574
|
const [follows, inStep] = this.visOf(e.id);
|
|
565
|
-
const params = objectEffectParams(def, e, follows, inStep);
|
|
575
|
+
const params = { ...objectEffectParams(def, e, follows, inStep), ...(this.liveParams.get(e.id) ?? {}) };
|
|
566
576
|
const paramsKey = JSON.stringify(params);
|
|
567
577
|
const r = this.running.get(e.id);
|
|
568
578
|
if (r && r.paramsKey === paramsKey)
|
|
@@ -1104,6 +1114,44 @@ export class ObjectEffectsController {
|
|
|
1104
1114
|
r.cycle = undefined;
|
|
1105
1115
|
}
|
|
1106
1116
|
/** Play an effect out and leave it waiting (it stays in the list, ready to play again). */
|
|
1117
|
+
/**
|
|
1118
|
+
* A timeline track drives one of the effect's params: lay it over the row's own (undefined puts
|
|
1119
|
+
* the row's own back). A running motion takes it at once (its `live` hook); anything else picks
|
|
1120
|
+
* it up on its next pass — nothing replays.
|
|
1121
|
+
*/
|
|
1122
|
+
setLiveParam(effectId, key, value) {
|
|
1123
|
+
if (this.disposed)
|
|
1124
|
+
return false;
|
|
1125
|
+
const cur = { ...(this.liveParams.get(effectId) ?? {}) };
|
|
1126
|
+
if (value === undefined)
|
|
1127
|
+
delete cur[key];
|
|
1128
|
+
else
|
|
1129
|
+
cur[key] = value;
|
|
1130
|
+
if (Object.keys(cur).length)
|
|
1131
|
+
this.liveParams.set(effectId, cur);
|
|
1132
|
+
else
|
|
1133
|
+
this.liveParams.delete(effectId);
|
|
1134
|
+
const e = this.effects.find(x => x?.id === effectId);
|
|
1135
|
+
const r = this.running.get(effectId);
|
|
1136
|
+
if (!e)
|
|
1137
|
+
return false;
|
|
1138
|
+
if (!r)
|
|
1139
|
+
return true;
|
|
1140
|
+
const def = getOperation(r.op);
|
|
1141
|
+
if (!def)
|
|
1142
|
+
return true;
|
|
1143
|
+
const [follows, inStep] = this.visOf(effectId);
|
|
1144
|
+
const params = { ...objectEffectParams(def, e, follows, inStep), ...cur };
|
|
1145
|
+
const paramsKey = JSON.stringify(params);
|
|
1146
|
+
if (paramsKey === r.paramsKey)
|
|
1147
|
+
return true;
|
|
1148
|
+
r.params = params;
|
|
1149
|
+
r.paramsKey = paramsKey;
|
|
1150
|
+
if (r.started && def.live)
|
|
1151
|
+
for (const t of r.targets)
|
|
1152
|
+
def.live(t, { ...params, __backward: !!r.cycle?.back });
|
|
1153
|
+
return true;
|
|
1154
|
+
}
|
|
1107
1155
|
stop(effectId) {
|
|
1108
1156
|
const r = this.running.get(effectId);
|
|
1109
1157
|
const def = r && getOperation(r.op);
|
|
@@ -131,6 +131,11 @@ export interface OperationDefinition {
|
|
|
131
131
|
apply: (target: Object3D, params: OperationParams, ctx: OperationContext) => void | Promise<void>;
|
|
132
132
|
/** No revert = one-way (applies only). */
|
|
133
133
|
revert?: (target: Object3D, params: OperationParams, ctx: OperationContext) => void | Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* A parameter changed while it runs (a timeline track easing its speed): take the new params
|
|
136
|
+
* now, without replaying anything. Absent = the change is picked up on its next pass.
|
|
137
|
+
*/
|
|
138
|
+
live?: (target: Object3D, params: OperationParams) => void;
|
|
134
139
|
/**
|
|
135
140
|
* A motion that repeats for as long as the effect is on (float, sway, rotate…).
|
|
136
141
|
* Played as an object effect it follows the same playback as everything else:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/operations/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/operations/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3driseai/3drise-viewer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
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.26"
|
|
43
43
|
}
|
|
44
44
|
}
|