@wave3d/core 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/model.d.ts +209 -6
- package/dist/config/model.js +85 -3
- package/dist/config/model.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/presets.js +295 -0
- package/dist/presets.js.map +1 -1
- package/dist/renderer/WaveGeometry.js +21 -0
- package/dist/renderer/WaveGeometry.js.map +1 -1
- package/dist/renderer/WaveRenderer.d.ts +62 -0
- package/dist/renderer/WaveRenderer.js +349 -10
- package/dist/renderer/WaveRenderer.js.map +1 -1
- package/dist/renderer/WaveRendererGPU.js +32 -2
- package/dist/renderer/WaveRendererGPU.js.map +1 -1
- package/dist/renderer/interaction.js +12 -0
- package/dist/renderer/interaction.js.map +1 -1
- package/dist/renderer/particleField.js +26 -2
- package/dist/renderer/particleField.js.map +1 -1
- package/dist/renderer/particleFieldGPU.js +6 -0
- package/dist/renderer/particleFieldGPU.js.map +1 -1
- package/dist/renderer/shaders.js +748 -13
- package/dist/renderer/shaders.js.map +1 -1
- package/dist/renderer/tsl/dissolve.js +56 -0
- package/dist/renderer/tsl/dissolve.js.map +1 -0
- package/dist/renderer/tsl/particleMaterial.js +46 -8
- package/dist/renderer/tsl/particleMaterial.js.map +1 -1
- package/dist/renderer/tsl/uniforms.js +40 -1
- package/dist/renderer/tsl/uniforms.js.map +1 -1
- package/dist/renderer/tsl/waveMaterial.js +275 -26
- package/dist/renderer/tsl/waveMaterial.js.map +1 -1
- package/dist/renderer/tsl/waveShape.js +31 -10
- package/dist/renderer/tsl/waveShape.js.map +1 -1
- package/dist/renderer/wavePath.js +189 -0
- package/dist/renderer/wavePath.js.map +1 -0
- package/dist/shell/createWave.d.ts +23 -3
- package/dist/shell/createWave.js +5 -4
- package/dist/shell/createWave.js.map +1 -1
- package/dist/shell/probe.d.ts +28 -0
- package/dist/shell/probe.js +58 -11
- package/dist/shell/probe.js.map +1 -1
- package/dist/standalone/wave3d.standalone.js +3401 -2108
- package/dist/standalone/wave3d.standalone.webgpu.js +7372 -5848
- package/dist/standalone.d.ts +2 -2
- package/dist/standalone.js +2 -2
- package/dist/studio/StudioWaveRenderer.d.ts +115 -8
- package/dist/studio/StudioWaveRenderer.js +588 -14
- package/dist/studio/StudioWaveRenderer.js.map +1 -1
- package/dist/studio/index.d.ts +2 -2
- package/dist/studio/index.js.map +1 -1
- package/dist/studio/randomize.js +0 -1
- package/dist/studio/randomize.js.map +1 -1
- package/package.json +1 -1
- package/skills/wave3d/SKILL.md +142 -5
package/dist/standalone.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BackgroundImageFit, BackgroundMode, BasicGradientType, BlendMode, CAMERA_FITS, CameraFit, ColorStop, DEFAULT_LIGHT_POSITION, GradientType, InteractionSource, LightConfig, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, MeshGradientPoint, NoiseBand, PARTICLE_SHAPES, PaletteSource, ParticleShape, ParticlesConfig, SceneConfig, SceneInteractionBinding, SceneInteractionConfig, SceneInteractionTarget, StudioConfig, TiltConfig, Vec2, Vec3, WaveConfig, WaveHoverConfig, WaveInteractionBinding, WaveInteractionConfig, WaveInteractionTarget, WavePressConfig, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, normalizeBackground, normalizeParticles, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves } from "./config/model.js";
|
|
1
|
+
import { BackgroundImageFit, BackgroundMode, BasicGradientType, BlendMode, CAMERA_FITS, CameraFit, ColorStop, DEFAULT_LIGHT_POSITION, DISSOLVE_AXES, DissolveAxis, DissolveConfig, GradientType, InteractionSource, LightConfig, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, MeshGradientPoint, NoiseBand, PARTICLE_SHAPES, PaletteSource, ParticleShape, ParticlesConfig, PathPoint, SceneConfig, SceneInteractionBinding, SceneInteractionConfig, SceneInteractionTarget, StudioConfig, TiltConfig, Vec2, Vec3, WaveConfig, WaveHoverConfig, WaveInteractionBinding, WaveInteractionConfig, WaveInteractionTarget, WavePressConfig, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, normalizeBackground, normalizeDissolve, normalizeParticles, normalizePath, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves } from "./config/model.js";
|
|
2
2
|
import { WaveRenderer } from "./renderer/WaveRenderer.js";
|
|
3
3
|
import { FallbackReason, SnapshotOptions, WaveHandle, WaveOptions, WaveState } from "./shell/createWave.js";
|
|
4
4
|
import { PRESETS } from "./presets.js";
|
|
@@ -15,5 +15,5 @@ declare function createWave(container: HTMLElement, config?: Partial<StudioConfi
|
|
|
15
15
|
/** The drop-in embed contract: an alias of {@link createWave}. */
|
|
16
16
|
declare const mountWave: typeof createWave;
|
|
17
17
|
//#endregion
|
|
18
|
-
export { BackgroundImageFit, BackgroundMode, BasicGradientType, BlendMode, CAMERA_FITS, CameraFit, ColorStop, DEFAULT_LIGHT_POSITION, type FallbackReason, GradientType, InteractionSource, LightConfig, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, MeshGradientPoint, NoiseBand, PARTICLE_SHAPES, PRESETS, PaletteSource, ParticleShape, ParticlesConfig, SceneConfig, SceneInteractionBinding, SceneInteractionConfig, SceneInteractionTarget, type SnapshotOptions, StudioConfig, TiltConfig, Vec2, Vec3, WaveConfig, type WaveHandle, WaveHoverConfig, WaveInteractionBinding, WaveInteractionConfig, WaveInteractionTarget, type WaveOptions, WavePressConfig, WaveRenderer, type WaveState, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, createWave, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, mountWave, normalizeBackground, normalizeParticles, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves };
|
|
18
|
+
export { BackgroundImageFit, BackgroundMode, BasicGradientType, BlendMode, CAMERA_FITS, CameraFit, ColorStop, DEFAULT_LIGHT_POSITION, DISSOLVE_AXES, DissolveAxis, DissolveConfig, type FallbackReason, GradientType, InteractionSource, LightConfig, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, MeshGradientPoint, NoiseBand, PARTICLE_SHAPES, PRESETS, PaletteSource, ParticleShape, ParticlesConfig, PathPoint, SceneConfig, SceneInteractionBinding, SceneInteractionConfig, SceneInteractionTarget, type SnapshotOptions, StudioConfig, TiltConfig, Vec2, Vec3, WaveConfig, type WaveHandle, WaveHoverConfig, WaveInteractionBinding, WaveInteractionConfig, WaveInteractionTarget, type WaveOptions, WavePressConfig, WaveRenderer, type WaveState, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, createWave, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, mountWave, normalizeBackground, normalizeDissolve, normalizeParticles, normalizePath, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves };
|
|
19
19
|
//# sourceMappingURL=standalone.d.ts.map
|
package/dist/standalone.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CAMERA_FITS, DEFAULT_LIGHT_POSITION, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, PARTICLE_SHAPES, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, normalizeBackground, normalizeParticles, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves } from "./config/model.js";
|
|
1
|
+
import { CAMERA_FITS, DEFAULT_LIGHT_POSITION, DISSOLVE_AXES, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, PARTICLE_SHAPES, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, normalizeBackground, normalizeDissolve, normalizeParticles, normalizePath, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves } from "./config/model.js";
|
|
2
2
|
import { createWaveImpl, noGpuBackend } from "./shell/createWave.js";
|
|
3
3
|
import { WaveRenderer } from "./renderer/WaveRenderer.js";
|
|
4
4
|
import { PRESETS } from "./presets.js";
|
|
@@ -19,6 +19,6 @@ function createWave(container, config = {}, options = {}) {
|
|
|
19
19
|
/** The drop-in embed contract: an alias of {@link createWave}. */
|
|
20
20
|
const mountWave = createWave;
|
|
21
21
|
//#endregion
|
|
22
|
-
export { CAMERA_FITS, DEFAULT_LIGHT_POSITION, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, PARTICLE_SHAPES, PRESETS, WaveRenderer, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, createWave, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, mountWave, normalizeBackground, normalizeParticles, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves };
|
|
22
|
+
export { CAMERA_FITS, DEFAULT_LIGHT_POSITION, DISSOLVE_AXES, MAX_COLORS, MAX_LIGHTS, MAX_MESH_POINTS, MAX_NOISE_BANDS, MAX_WAVES, PARTICLE_SHAPES, PRESETS, WaveRenderer, createDefaultConfig, createDefaultMeshPoints, createLight, createNoiseBand, createWave, ensureCamera, ensureSceneDefaults, ensureStudioConfig, makeStops, makeWave, makeWaveSpread, mountWave, normalizeBackground, normalizeDissolve, normalizeParticles, normalizePath, normalizeSceneInteraction, normalizeWave, normalizeWaveInteraction, resizeWaves };
|
|
23
23
|
|
|
24
24
|
//# sourceMappingURL=standalone.js.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { WaveRenderer } from "../renderer/WaveRenderer.js";
|
|
2
2
|
//#region src/studio/StudioWaveRenderer.d.ts
|
|
3
|
+
/** What the 3D gizmo does to the selected wave. */
|
|
4
|
+
type GizmoMode = "translate" | "rotate" | "scale";
|
|
3
5
|
declare class StudioWaveRenderer extends WaveRenderer {
|
|
4
6
|
/** Set while the panel drives the camera, so orbit's 'change' doesn't re-refresh the
|
|
5
7
|
* panel mid-drag (the panel already knows the new value). */
|
|
@@ -33,15 +35,39 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
33
35
|
/** Whether the main view orbit/zoom/pan is on (studio); off for the embed. */
|
|
34
36
|
private mainOrbitOn;
|
|
35
37
|
private lightHelpers;
|
|
36
|
-
/** Which 3D-editing gizmo is active: none, dragging lights,
|
|
38
|
+
/** Which 3D-editing gizmo is active: none, dragging lights, dragging the wave/waves, or dragging
|
|
39
|
+
* one wave's PATH — the centreline it is swept along. */
|
|
37
40
|
private editMode;
|
|
38
41
|
private selectedLight;
|
|
39
42
|
/** Wave/wave drag handles: index 0 = the whole-wave box (moves config.position); 1..N =
|
|
40
43
|
* per-wave spheres (move each layer's offset), shown only when there's >1 wave. */
|
|
41
44
|
private waveHelpers;
|
|
42
45
|
private selectedWave;
|
|
46
|
+
/** Path editing: one sphere per control point of `pathWave`'s centreline, plus the line through
|
|
47
|
+
* them. The handles live in WORLD space (that is what the drag machinery and the gizmo speak);
|
|
48
|
+
* the points they write are in the wave's local space, which is where a path is authored. */
|
|
49
|
+
private pathHelpers;
|
|
50
|
+
/** Each path dot's larger, invisible pick target (a child of the dot), so a point is comfortable
|
|
51
|
+
* to land on without the dot itself growing into a boulder. */
|
|
52
|
+
private pathPicks;
|
|
53
|
+
/** The dots' current screen-constant scale, so a hover can grow one and put it back. */
|
|
54
|
+
private pathHandleScale;
|
|
55
|
+
private hoverPathPoint;
|
|
56
|
+
private pathLine?;
|
|
57
|
+
private pathWave;
|
|
58
|
+
private selectedPathPoint;
|
|
59
|
+
/** Invisible pick surface following the CURRENT path — the wave's own mesh cannot be used, because
|
|
60
|
+
* its vertices are only deformed on the GPU, so a CPU raycast would hit the straight ribbon the
|
|
61
|
+
* geometry was born as rather than the curve on screen. */
|
|
62
|
+
private pathProxy?;
|
|
63
|
+
/** An in-flight sculpt: where on the ribbon it started (0..1 along the length), the last drag
|
|
64
|
+
* point, and how far along the ribbon the push reaches. */
|
|
65
|
+
private sculptState?;
|
|
43
66
|
/** Gizmo operation: "translate" moves the handle, "rotate" spins the whole wave. */
|
|
44
67
|
private gizmoMode;
|
|
68
|
+
/** Wave scale at the start of a scale drag, with the helper scale it started from, so the
|
|
69
|
+
* drag applies as a RATIO — the helper is also resized every frame to stay screen-constant. */
|
|
70
|
+
private scaleDragStart?;
|
|
45
71
|
/** Active free screen-plane drag of a handle (grab anywhere on the marker, camera locked). */
|
|
46
72
|
private dragState?;
|
|
47
73
|
private readonly dragPlane;
|
|
@@ -56,10 +82,25 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
56
82
|
/** Set by the panel: fired after orbit moves the camera so sliders can refresh. */
|
|
57
83
|
onCameraChanged?: () => void;
|
|
58
84
|
/** Set by the panel: fired after a wave/wave gizmo drag/selection so the position and
|
|
59
|
-
* per-wave offset sliders can refresh.
|
|
60
|
-
|
|
85
|
+
* per-wave offset sliders can refresh. Carries the selected wave's index — the panel uses it to
|
|
86
|
+
* reveal that wave's folder, the same way {@link onLightsChanged} drives the lights folder. */
|
|
87
|
+
onWaveChanged?: (selected: number) => void;
|
|
88
|
+
/** Fires when path editing starts (the wave's index) or ends (-1), so the app can put the gestures
|
|
89
|
+
* on screen — none of them are discoverable from the canvas alone. */
|
|
90
|
+
onPathEditChanged?: (waveIndex: number) => void;
|
|
91
|
+
/** Set by the panel: fired when whole-wave transform editing starts/stops (-1 = off), so the
|
|
92
|
+
* gestures can be shown and the panel's gizmo controls rebuilt. */
|
|
93
|
+
onWaveEditChanged?: (waveIndex: number) => void;
|
|
61
94
|
/** True while any drag-in-3D gizmo owns the camera (light or wave). */
|
|
62
95
|
private get editing();
|
|
96
|
+
/** Edit one wave's PATH: show a handle per control point, draggable like every other gizmo. The
|
|
97
|
+
* wave takes a straight centreline first if it has none, so entering changes nothing on screen —
|
|
98
|
+
* the ribbon only moves once a point does. Pass -1 to leave. */
|
|
99
|
+
setPathEditMode(waveIndex: number): Promise<void>;
|
|
100
|
+
/** Which wave's path is being edited, or -1. */
|
|
101
|
+
pathEditWave(): number;
|
|
102
|
+
/** Drop a wave's path — back to the straight centreline the geometry is born with. */
|
|
103
|
+
clearPath(waveIndex: number): void;
|
|
63
104
|
isLightEditMode(): boolean;
|
|
64
105
|
isWaveEditMode(): boolean;
|
|
65
106
|
/** Toggle 3D light editing: show draggable light handles; off restores the prior view. */
|
|
@@ -74,10 +115,11 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
74
115
|
* onPointerDown/Move pan the camera manually when a left-press misses every handle (so panning
|
|
75
116
|
* never fights the object drag). Right-drag still rotates the camera; scroll/middle zooms. */
|
|
76
117
|
private setOrbitForEdit;
|
|
77
|
-
/** Switch the wave-edit gizmo between moving
|
|
78
|
-
*
|
|
79
|
-
|
|
80
|
-
|
|
118
|
+
/** Switch the wave-edit gizmo between moving, rotating and resizing the whole wave. Rotate and
|
|
119
|
+
* scale target the whole-wave box (config.rotation / config.scale), so selecting one makes the
|
|
120
|
+
* intent obvious. */
|
|
121
|
+
setGizmoMode(mode: GizmoMode): void;
|
|
122
|
+
getGizmoMode(): GizmoMode;
|
|
81
123
|
/** Snapshot the live camera so leaving edit mode returns exactly here (incl. ortho zoom). */
|
|
82
124
|
private captureReturnCamera;
|
|
83
125
|
/** Restore the snapshot from captureReturnCamera (falls back to the authored hero camera). */
|
|
@@ -163,6 +205,35 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
163
205
|
private writeCameraToConfig;
|
|
164
206
|
/** Pointer position in normalized device coords (-1..1), from a canvas-relative event. */
|
|
165
207
|
private pointerNdc;
|
|
208
|
+
/**
|
|
209
|
+
* Double-click is the whole entry point to path editing: hit a ribbon and you are dragging its
|
|
210
|
+
* centreline, with no mode to find first. Inside path mode it keeps editing the path — on a point
|
|
211
|
+
* it removes that point, on the ribbon it inserts one where you clicked — so adding and removing
|
|
212
|
+
* are the same gesture as entering, and neither needs a button.
|
|
213
|
+
*/
|
|
214
|
+
private onDoubleClick;
|
|
215
|
+
/** Select a wave and show its transform gizmo — the first stop of a double-click, and what the
|
|
216
|
+
* panel's "drag waves in 3D" toggle lands on. */
|
|
217
|
+
enterWaveEdit(waveIndex: number): Promise<void>;
|
|
218
|
+
/** Leave whichever edit level is active and tell the panel about both. */
|
|
219
|
+
leaveEditing(): Promise<void>;
|
|
220
|
+
/**
|
|
221
|
+
* Which wave a click meant. An exact hit on a wave's mesh wins, but that mesh is the UNDEFORMED
|
|
222
|
+
* ribbon — every twist, displacement, helix and path lives in the vertex shader — so on a deformed
|
|
223
|
+
* wave the exact test misses everything you can actually see. The fallback is the wave's bounding
|
|
224
|
+
* sphere, inflated the way the clip fit inflates it, which answers the only question entry really
|
|
225
|
+
* asks: which ribbon did they mean.
|
|
226
|
+
*/
|
|
227
|
+
private pickWave;
|
|
228
|
+
/** Raycast one wave's ribbon. In path mode that means the proxy strip, which follows the curve
|
|
229
|
+
* you can actually see; otherwise the wave's own (undeformed) mesh, which is enough to answer
|
|
230
|
+
* "which ribbon did I double-click". */
|
|
231
|
+
private raycastWave;
|
|
232
|
+
/** Insert a control point where the ribbon was clicked, between the two points it falls between —
|
|
233
|
+
* so a double-click on a straight stretch gives you something to bend, exactly there. */
|
|
234
|
+
private insertPathPointAt;
|
|
235
|
+
/** Shared tail of every structural path edit: rebake, re-handle, tell the app. */
|
|
236
|
+
private afterPathEdit;
|
|
166
237
|
private onPointerDown;
|
|
167
238
|
private onPointerMove;
|
|
168
239
|
private onPointerUp;
|
|
@@ -170,6 +241,42 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
170
241
|
private selectWaveHandle;
|
|
171
242
|
/** Gizmo drag → route to the active mode's writer. */
|
|
172
243
|
private onGizmoMoved;
|
|
244
|
+
/** Path handle drag → write the point back in the wave's LOCAL space. The handles are dragged in
|
|
245
|
+
* world space (that is what the gizmo and the screen-plane drag speak), so each one is pushed
|
|
246
|
+
* back through the wave's own matrix — which is what keeps a path authored against the ribbon
|
|
247
|
+
* rather than against the scene, so moving or rotating the wave carries its path along. */
|
|
248
|
+
private onPathGizmoMoved;
|
|
249
|
+
/**
|
|
250
|
+
* Start pushing the ribbon around from wherever it was grabbed.
|
|
251
|
+
*
|
|
252
|
+
* The path is DENSIFIED first: a three-point path can only be bent as a whole, and a push that
|
|
253
|
+
* moves the entire ribbon is not sculpting. Resampling to evenly spaced points along the current
|
|
254
|
+
* curve keeps the shape identical (the curve is unchanged) while giving the falloff something local
|
|
255
|
+
* to act on — the difference between dragging a wire and pressing a thumb into clay.
|
|
256
|
+
*/
|
|
257
|
+
private beginSculpt;
|
|
258
|
+
/** Resample the path to `count` evenly spaced points along the curve it already describes — same
|
|
259
|
+
* shape, more to grab. Width and twist ride along so a sculpted throat survives densifying. */
|
|
260
|
+
private densifyPath;
|
|
261
|
+
/** Move the path under an in-flight sculpt: every point near the grabbed spot follows the cursor,
|
|
262
|
+
* falling off smoothly with distance ALONG the ribbon. */
|
|
263
|
+
private sculptTo;
|
|
264
|
+
/** True when the path's ends coincide — the same test the sampler uses to decide it is a ring. */
|
|
265
|
+
/** Select a path point (attach the gizmo to its handle and highlight it). */
|
|
266
|
+
/** Which path point the ray is over, through the enlarged pick targets — or -1. The raycaster
|
|
267
|
+
* must already be aimed. */
|
|
268
|
+
private pickPathHandle;
|
|
269
|
+
/** The cursor for the pointer's current spot in path mode: what a click here would do. The
|
|
270
|
+
* raycaster must already be aimed. */
|
|
271
|
+
private pathCursorAt;
|
|
272
|
+
private selectPathHandle;
|
|
273
|
+
/** Reconcile the path handles + the line through them with the wave's points. */
|
|
274
|
+
private syncPathHelpers;
|
|
275
|
+
/** Rebuild the pick surface: a strip two vertices wide per frame, carrying uv.y = position along
|
|
276
|
+
* the ribbon — which is what a sculpt drag needs to know to push the right part of the path. It
|
|
277
|
+
* belongs to no scene (nothing should draw it); raycasting only needs its world matrix. */
|
|
278
|
+
private syncPathProxy;
|
|
279
|
+
private clearPathHelpers;
|
|
173
280
|
/** Light gizmo drag → write the moved handle back into the config + uniforms. */
|
|
174
281
|
private onLightGizmoMoved;
|
|
175
282
|
/** Wave gizmo drag → the whole-wave box writes config.position (and the wave handles
|
|
@@ -205,5 +312,5 @@ declare class StudioWaveRenderer extends WaveRenderer {
|
|
|
205
312
|
dispose(): void;
|
|
206
313
|
}
|
|
207
314
|
//#endregion
|
|
208
|
-
export { StudioWaveRenderer };
|
|
315
|
+
export { GizmoMode, StudioWaveRenderer };
|
|
209
316
|
//# sourceMappingURL=StudioWaveRenderer.d.ts.map
|