view3d-core 1.0.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/index.cjs ADDED
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const e = require("three"), t = require("gsap"), s = require("./SerializationPlugin-Cxn2UjuS.cjs");
4
+ function i(e2) {
5
+ const t2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
6
+ if (e2) {
7
+ for (const s2 in e2) if ("default" !== s2) {
8
+ const i2 = Object.getOwnPropertyDescriptor(e2, s2);
9
+ Object.defineProperty(t2, s2, i2.get ? i2 : { enumerable: true, get: () => e2[s2] });
10
+ }
11
+ }
12
+ return t2.default = e2, Object.freeze(t2);
13
+ }
14
+ const n = i(e);
15
+ class r {
16
+ constructor() {
17
+ this.listeners = /* @__PURE__ */ new Map();
18
+ }
19
+ on(e2, t2) {
20
+ this.listeners.has(e2) || this.listeners.set(e2, /* @__PURE__ */ new Set());
21
+ const s2 = { callback: t2, once: false };
22
+ return this.listeners.get(e2).add(s2), () => {
23
+ var _a;
24
+ (_a = this.listeners.get(e2)) == null ? void 0 : _a.delete(s2);
25
+ };
26
+ }
27
+ once(e2, t2) {
28
+ this.listeners.has(e2) || this.listeners.set(e2, /* @__PURE__ */ new Set());
29
+ const s2 = { callback: t2, once: true };
30
+ return this.listeners.get(e2).add(s2), () => {
31
+ var _a;
32
+ (_a = this.listeners.get(e2)) == null ? void 0 : _a.delete(s2);
33
+ };
34
+ }
35
+ off(e2, t2) {
36
+ if (!t2) return void this.listeners.delete(e2);
37
+ const s2 = this.listeners.get(e2);
38
+ if (s2) {
39
+ for (const e3 of s2) if (e3.callback === t2) {
40
+ s2.delete(e3);
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ emit(e2, t2) {
46
+ const s2 = this.listeners.get(e2);
47
+ if (!s2) return;
48
+ const i2 = [];
49
+ for (const e3 of s2) {
50
+ try {
51
+ e3.callback(t2);
52
+ } catch (e4) {
53
+ }
54
+ e3.once && i2.push(e3);
55
+ }
56
+ for (const e3 of i2) s2.delete(e3);
57
+ }
58
+ hasListeners(e2) {
59
+ const t2 = this.listeners.get(e2);
60
+ return void 0 !== t2 && t2.size > 0;
61
+ }
62
+ listenerCount(e2) {
63
+ var _a;
64
+ return ((_a = this.listeners.get(e2)) == null ? void 0 : _a.size) ?? 0;
65
+ }
66
+ removeAllListeners() {
67
+ this.listeners.clear();
68
+ }
69
+ dispose() {
70
+ this.removeAllListeners();
71
+ }
72
+ }
73
+ class a {
74
+ constructor(e2) {
75
+ this.events = e2, this._envBackground = null, this._environmentEnabled = false, this.envMapChangeCallbacks = [], this.ssrMeshList = [], this.scene = new n.Scene(), this.scene.name = "MainScene";
76
+ }
77
+ get envBackground() {
78
+ return this._envBackground;
79
+ }
80
+ set envBackground(e2) {
81
+ this._envBackground = e2, this.updateEnvironment(), this.envMapChangeCallbacks.forEach((e3) => e3());
82
+ }
83
+ get environmentEnabled() {
84
+ return this._environmentEnabled;
85
+ }
86
+ set environmentEnabled(e2) {
87
+ this._environmentEnabled = e2, this.updateEnvironment();
88
+ }
89
+ updateEnvironment() {
90
+ this.scene.environment = this._environmentEnabled ? this._envBackground : null;
91
+ }
92
+ onEnvMapChange(e2) {
93
+ return this.envMapChangeCallbacks.push(e2), () => {
94
+ const t2 = this.envMapChangeCallbacks.indexOf(e2);
95
+ t2 > -1 && this.envMapChangeCallbacks.splice(t2, 1);
96
+ };
97
+ }
98
+ setBackground(e2) {
99
+ this.scene.background = e2, this.events.emit("scene:background:change", { background: e2 });
100
+ }
101
+ setSkybox(e2) {
102
+ return new Promise((t2, s2) => {
103
+ new n.CubeTextureLoader().load(e2, (e3) => {
104
+ this.scene.background = e3, this.events.emit("scene:background:change", { background: e3 }), t2(e3);
105
+ }, void 0, s2);
106
+ });
107
+ }
108
+ setEnvironmentMap(e2) {
109
+ return new Promise((t2, s2) => {
110
+ new n.CubeTextureLoader().load(e2, (e3) => {
111
+ this.envBackground = e3, t2(e3);
112
+ }, void 0, s2);
113
+ });
114
+ }
115
+ add(...e2) {
116
+ for (const t2 of e2) this.scene.add(t2), this.events.emit("object:added", { object: t2, parent: this.scene });
117
+ }
118
+ remove(...e2) {
119
+ for (const t2 of e2) this.scene.remove(t2), this.events.emit("object:removed", { object: t2, parent: this.scene });
120
+ }
121
+ getObjectByName(e2) {
122
+ return this.scene.getObjectByName(e2);
123
+ }
124
+ getObjectById(e2) {
125
+ return this.scene.getObjectById(e2);
126
+ }
127
+ traverse(e2) {
128
+ this.scene.traverse(e2);
129
+ }
130
+ getMeshes() {
131
+ const e2 = [];
132
+ return this.scene.traverse((t2) => {
133
+ t2 instanceof n.Mesh && e2.push(t2);
134
+ }), e2;
135
+ }
136
+ getLights() {
137
+ const e2 = [];
138
+ return this.scene.traverse((t2) => {
139
+ t2 instanceof n.Light && e2.push(t2);
140
+ }), e2;
141
+ }
142
+ clear() {
143
+ for (; this.scene.children.length > 0; ) {
144
+ const e2 = this.scene.children[0];
145
+ this.scene.remove(e2), this.events.emit("object:removed", { object: e2, parent: this.scene });
146
+ }
147
+ }
148
+ dispose() {
149
+ this.scene.traverse((e2) => {
150
+ var _a2;
151
+ e2 instanceof n.Mesh && ((_a2 = e2.geometry) == null ? void 0 : _a2.dispose(), Array.isArray(e2.material) ? e2.material.forEach((e3) => {
152
+ e3.dispose(), "map" in e3 && e3.map && e3.map.dispose();
153
+ }) : e2.material && (e2.material.dispose(), "map" in e2.material && e2.material.map && e2.material.map.dispose()));
154
+ }), this.clear(), this.envMapChangeCallbacks = [], this.ssrMeshList.length = 0;
155
+ }
156
+ }
157
+ const o = { fov: 50, near: 0.1, far: 1e5, position: { x: 10, y: 10, z: 10 } };
158
+ class c {
159
+ constructor(e2, t2, s2) {
160
+ this.container = e2, this.events = t2, this.config = { ...o, ...s2 };
161
+ const i2 = e2.clientWidth / e2.clientHeight;
162
+ this.camera = new n.PerspectiveCamera(this.config.fov, i2, this.config.near, this.config.far), this.camera.name = "MainCamera", this.camera.position.set(this.config.position.x, this.config.position.y, this.config.position.z);
163
+ }
164
+ get position() {
165
+ return this.camera.position;
166
+ }
167
+ get fov() {
168
+ return this.camera.fov;
169
+ }
170
+ set fov(e2) {
171
+ this.camera.fov = e2, this.camera.updateProjectionMatrix(), this.events.emit("camera:change", { camera: this.camera });
172
+ }
173
+ get near() {
174
+ return this.camera.near;
175
+ }
176
+ set near(e2) {
177
+ this.camera.near = e2, this.camera.updateProjectionMatrix(), this.events.emit("camera:change", { camera: this.camera });
178
+ }
179
+ get far() {
180
+ return this.camera.far;
181
+ }
182
+ set far(e2) {
183
+ this.camera.far = e2, this.camera.updateProjectionMatrix(), this.events.emit("camera:change", { camera: this.camera });
184
+ }
185
+ setPosition(e2, t2, s2) {
186
+ this.camera.position.set(e2, t2, s2), this.events.emit("camera:change", { camera: this.camera });
187
+ }
188
+ lookAt(e2) {
189
+ e2 instanceof n.Vector3 ? this.camera.lookAt(e2) : this.camera.lookAt(e2.x, e2.y, e2.z), this.events.emit("camera:change", { camera: this.camera });
190
+ }
191
+ updateAspect() {
192
+ this.camera.aspect = this.container.clientWidth / this.container.clientHeight, this.camera.updateProjectionMatrix();
193
+ }
194
+ getWorldDirection() {
195
+ const e2 = new n.Vector3();
196
+ return this.camera.getWorldDirection(e2), e2;
197
+ }
198
+ getTargetPoint(e2) {
199
+ const t2 = this.getWorldDirection();
200
+ return this.camera.position.clone().add(t2.multiplyScalar(e2));
201
+ }
202
+ getConfig() {
203
+ return { fov: this.camera.fov, near: this.camera.near, far: this.camera.far, position: { x: this.camera.position.x, y: this.camera.position.y, z: this.camera.position.z } };
204
+ }
205
+ applyConfig(e2) {
206
+ void 0 !== e2.fov && (this.camera.fov = e2.fov), void 0 !== e2.near && (this.camera.near = e2.near), void 0 !== e2.far && (this.camera.far = e2.far), e2.position && this.camera.position.set(e2.position.x, e2.position.y, e2.position.z), this.camera.updateProjectionMatrix(), this.events.emit("camera:change", { camera: this.camera });
207
+ }
208
+ dispose() {
209
+ }
210
+ }
211
+ const h = { pixelRatio: "undefined" != typeof window ? window.devicePixelRatio : 1, antialias: true, alpha: true, logarithmicDepthBuffer: true, preserveDrawingBuffer: false, powerPreference: "high-performance", toneMapping: n.NoToneMapping, toneMappingExposure: 1, outputColorSpace: n.SRGBColorSpace, shadowMapEnabled: false, shadowMapType: n.PCFSoftShadowMap };
212
+ class l {
213
+ constructor(e2, t2, s2) {
214
+ this.container = e2, this.events = t2, this.config = { ...h, ...s2 }, this.renderer = new n.WebGLRenderer({ antialias: this.config.antialias, alpha: this.config.alpha, logarithmicDepthBuffer: this.config.logarithmicDepthBuffer, preserveDrawingBuffer: this.config.preserveDrawingBuffer, powerPreference: this.config.powerPreference }), this.renderer.setSize(e2.clientWidth, e2.clientHeight), this.renderer.setPixelRatio(this.config.pixelRatio), this.renderer.toneMapping = this.config.toneMapping, this.renderer.toneMappingExposure = this.config.toneMappingExposure, this.renderer.outputColorSpace = this.config.outputColorSpace, this.renderer.shadowMap.enabled = this.config.shadowMapEnabled, this.renderer.shadowMap.type = this.config.shadowMapType, e2.appendChild(this.renderer.domElement);
215
+ }
216
+ get domElement() {
217
+ return this.renderer.domElement;
218
+ }
219
+ get pixelRatio() {
220
+ return this.renderer.getPixelRatio();
221
+ }
222
+ set pixelRatio(e2) {
223
+ this.renderer.setPixelRatio(e2), this.config.pixelRatio = e2;
224
+ }
225
+ getSize() {
226
+ const e2 = new n.Vector2();
227
+ return this.renderer.getSize(e2), { width: e2.x, height: e2.y };
228
+ }
229
+ setSize(e2, t2) {
230
+ this.renderer.setSize(e2, t2), this.events.emit("resize", { width: e2, height: t2 });
231
+ }
232
+ updateSize() {
233
+ const e2 = this.container.clientWidth, t2 = this.container.clientHeight;
234
+ this.setSize(e2, t2);
235
+ }
236
+ render(e2, t2) {
237
+ this.renderer.render(e2, t2);
238
+ }
239
+ getScreenshot(e2 = "image/png", t2 = 0.9) {
240
+ return this.renderer.domElement.toDataURL(e2, t2);
241
+ }
242
+ setShadowMapEnabled(e2) {
243
+ this.renderer.shadowMap.enabled = e2, this.config.shadowMapEnabled = e2;
244
+ }
245
+ setShadowMapType(e2) {
246
+ this.renderer.shadowMap.type = e2, this.config.shadowMapType = e2;
247
+ }
248
+ setToneMapping(e2, t2) {
249
+ this.renderer.toneMapping = e2, this.config.toneMapping = e2, void 0 !== t2 && (this.renderer.toneMappingExposure = t2, this.config.toneMappingExposure = t2);
250
+ }
251
+ getConfig() {
252
+ return { ...this.config };
253
+ }
254
+ applyConfig(e2) {
255
+ void 0 !== e2.pixelRatio && (this.pixelRatio = e2.pixelRatio), void 0 !== e2.toneMapping && (this.renderer.toneMapping = e2.toneMapping, this.config.toneMapping = e2.toneMapping), void 0 !== e2.toneMappingExposure && (this.renderer.toneMappingExposure = e2.toneMappingExposure, this.config.toneMappingExposure = e2.toneMappingExposure), void 0 !== e2.shadowMapEnabled && this.setShadowMapEnabled(e2.shadowMapEnabled), void 0 !== e2.shadowMapType && this.setShadowMapType(e2.shadowMapType);
256
+ }
257
+ getInfo() {
258
+ return this.renderer.info;
259
+ }
260
+ resetInfo() {
261
+ this.renderer.info.reset();
262
+ }
263
+ dispose() {
264
+ this.renderer.dispose(), this.renderer.forceContextLoss(), this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement);
265
+ }
266
+ }
267
+ const p = { autoResize: true, fps: null, autoStart: true };
268
+ class g {
269
+ constructor(e2) {
270
+ this.animationId = null, this._isRunning = false, this.frameCallbacks = /* @__PURE__ */ new Set(), this.fpsInterval = 0, this.lastFrameTime = 0, this.resizeHandler = null, this.animate = () => {
271
+ if (!this._isRunning) return;
272
+ this.animationId = requestAnimationFrame(this.animate);
273
+ const e3 = performance.now();
274
+ if (this.fpsInterval > 0) {
275
+ const t3 = e3 - this.lastFrameTime;
276
+ if (t3 < this.fpsInterval) return;
277
+ this.lastFrameTime = e3 - t3 % this.fpsInterval;
278
+ }
279
+ const t2 = this.clock.getDelta(), s2 = this.clock.getElapsedTime();
280
+ this.events.emit("render:before", { delta: t2, elapsed: s2 });
281
+ for (const e4 of this.frameCallbacks) try {
282
+ e4(t2, s2);
283
+ } catch (e5) {
284
+ }
285
+ this.render(), this.events.emit("render:after", { delta: t2, elapsed: s2 });
286
+ }, this.config = { ...p, ...e2 }, this.container = e2.container, this.events = new r(), this.clock = new n.Clock(false), this.sceneManager = new a(this.events), this.cameraManager = new c(this.container, this.events, e2.camera), this.sceneManager.scene.add(this.cameraManager.camera), this.rendererManager = new l(this.container, this.events, e2.renderer), void 0 !== this.config.fps && null !== this.config.fps && this.config.fps > 0 && (this.fpsInterval = 1e3 / this.config.fps), this.config.autoResize && this.setupAutoResize(), this.events.emit("engine:ready", void 0), this.config.autoStart && this.start();
287
+ }
288
+ get scene() {
289
+ return this.sceneManager.scene;
290
+ }
291
+ get camera() {
292
+ return this.cameraManager.camera;
293
+ }
294
+ get renderer() {
295
+ return this.rendererManager.renderer;
296
+ }
297
+ get domElement() {
298
+ return this.rendererManager.domElement;
299
+ }
300
+ get isRunning() {
301
+ return this._isRunning;
302
+ }
303
+ setupAutoResize() {
304
+ this.resizeHandler = () => this.resize(), window.addEventListener("resize", this.resizeHandler);
305
+ }
306
+ start() {
307
+ this._isRunning || (this._isRunning = true, this.clock.start(), this.lastFrameTime = performance.now(), this.events.emit("engine:start", void 0), this.animate());
308
+ }
309
+ stop() {
310
+ this._isRunning && (this._isRunning = false, this.clock.stop(), null !== this.animationId && (cancelAnimationFrame(this.animationId), this.animationId = null), this.events.emit("engine:stop", void 0));
311
+ }
312
+ render() {
313
+ this.rendererManager.render(this.scene, this.camera);
314
+ }
315
+ resize() {
316
+ const e2 = this.container.clientWidth, t2 = this.container.clientHeight;
317
+ this.cameraManager.updateAspect(), this.rendererManager.setSize(e2, t2), this.events.emit("resize", { width: e2, height: t2 });
318
+ }
319
+ onUpdate(e2) {
320
+ return this.frameCallbacks.add(e2), () => {
321
+ this.frameCallbacks.delete(e2);
322
+ };
323
+ }
324
+ screenshot(e2, t2) {
325
+ return this.render(), this.rendererManager.getScreenshot(e2, t2);
326
+ }
327
+ setFPS(e2) {
328
+ this.config.fps = e2, this.fpsInterval = null !== e2 && e2 > 0 ? 1e3 / e2 : 0;
329
+ }
330
+ getFPS() {
331
+ return this.fpsInterval > 0 ? 1e3 / this.fpsInterval : 0;
332
+ }
333
+ dispose() {
334
+ this.events.emit("engine:dispose", void 0), this.stop(), this.resizeHandler && (window.removeEventListener("resize", this.resizeHandler), this.resizeHandler = null), this.frameCallbacks.clear(), this.sceneManager.dispose(), this.cameraManager.dispose(), this.rendererManager.dispose(), this.events.dispose();
335
+ }
336
+ }
337
+ let d = "/draco/";
338
+ const _m = class _m {
339
+ constructor(e2) {
340
+ this.progressList = [], this.commonFrameList = [], this.mixerList = [], this.shaderList = [], this.getDistanceScalePoint = s.getDistanceScalePoint, this.getBestViewTarget = s.getBestViewTarget, this.config = e2, this.engine = new g({ container: e2.container, ...e2.engine, autoStart: false }), this.events = this.engine.events, this.plugins = new s.PluginManager({ engine: this.engine, events: this.events }), this.installCorePlugins(), this.engine.onUpdate((e3, t2) => {
341
+ this.onUpdate(e3, t2);
342
+ }), e2.sceneParams && this.restoreScene(e2.sceneParams), e2.meshListParams && e2.meshListParams.forEach((e3) => {
343
+ this.setModelFromInfo(e3.rootInfo, e3.group);
344
+ }), e2.skyParams && (this.setSky(e2.skyParams), this.setGlobalEnvBackground(e2.skyParams)), false !== e2.autoStart && this.engine.start();
345
+ }
346
+ static get dracoPath() {
347
+ return d;
348
+ }
349
+ static set dracoPath(e2) {
350
+ d = e2;
351
+ }
352
+ get THREE() {
353
+ return n;
354
+ }
355
+ get gsap() {
356
+ return t;
357
+ }
358
+ get scene() {
359
+ return this.engine.scene;
360
+ }
361
+ get camera() {
362
+ return this.engine.camera;
363
+ }
364
+ get renderer() {
365
+ return this.engine.renderer;
366
+ }
367
+ get viewer() {
368
+ const e2 = this.plugins.get("orbit-controller"), t2 = this.plugins.get("transform-controller"), s2 = this.plugins.get("composer"), i2 = this.plugins.get("css-renderer"), n2 = this.plugins.get("editor"), r2 = this.plugins.get("loader"), a2 = this.plugins.get("gui");
369
+ return { scene: this.scene, camera: this.camera, renderer: this.renderer, controls: e2 == null ? void 0 : e2.controls, transformControls: t2 == null ? void 0 : t2.controls, Composer: s2, CSS2DObject: i2 == null ? void 0 : i2.CSS2DObject, CSS3DObject: i2 == null ? void 0 : i2.CSS3DObject, MixerList: this.mixerList, ShaderList: this.shaderList, CommonFrameList: this.commonFrameList, handler: n2, modelControls: r2, currentInfo: n2 == null ? void 0 : n2.currentInfo, GUI: a2 == null ? void 0 : a2.gui, renderSceneResize: () => this.engine.resize(), destroySceneRender: () => this.dispose(), saveSceneEditor: () => this.saveSceneEditor() };
370
+ }
371
+ installCorePlugins() {
372
+ this.plugins.use(new s.OrbitControllerPlugin()), this.plugins.use(new s.TransformControllerPlugin());
373
+ const e2 = new s.LoaderPlugin({ dracoPath: _m.dracoPath });
374
+ this.plugins.use(e2), this.plugins.use(new s.ComposerPlugin()), this.plugins.use(new s.CSSRendererPlugin()), this.plugins.use(new s.EditorPlugin()), this.plugins.use(new s.GizmoPlugin({ grid: { enabled: true, size: 100, divisions: 100, colorCenterLine: 4473924, colorGrid: 8947848 }, axes: { enabled: true, size: 5 }, stats: { enabled: false, mode: 0 }, viewHelper: { enabled: false, size: 128, position: "bottom-right" }, box3Helper: { enabled: false, color: 16776960 } }));
375
+ const t2 = this.config.gui;
376
+ true !== (t2 == null ? void 0 : t2.useProxy) && this.plugins.use(new s.GUIPlugin({ autoPlace: (t2 == null ? void 0 : t2.autoPlace) ?? true, width: (t2 == null ? void 0 : t2.width) ?? 300, useProxy: (t2 == null ? void 0 : t2.useProxy) ?? false }));
377
+ }
378
+ onUpdate(e2, t2) {
379
+ this.mixerList.forEach((e3) => {
380
+ var _a;
381
+ (_a = e3.mixerRender) == null ? void 0 : _a.call(e3);
382
+ }), this.shaderList.forEach((e3) => {
383
+ var _a;
384
+ (_a = e3.ShaderAnimateRender) == null ? void 0 : _a.call(e3);
385
+ }), this.commonFrameList.forEach((e3) => {
386
+ var _a;
387
+ (_a = e3.frameAnimationRender) == null ? void 0 : _a.call(e3);
388
+ });
389
+ const s2 = this.plugins.get("composer");
390
+ s2 && s2.render();
391
+ }
392
+ use(e2) {
393
+ return this.plugins.use(e2), this;
394
+ }
395
+ setModelFromInfo(e2, t2 = null) {
396
+ const s2 = this.plugins.get("loader");
397
+ if (!s2) throw new Error("Loader plugin not installed");
398
+ const i2 = s2.loadModel(e2), n2 = i2.complete;
399
+ i2.complete = (t3) => {
400
+ t3.rootInfo = e2, this.scene.add(t3), n2(t3);
401
+ };
402
+ const r2 = { loaderService: i2, rootInfo: e2, params: t2 };
403
+ return this.progressList.push(r2), r2;
404
+ }
405
+ setSky(e2) {
406
+ this.engine.sceneManager.setSkybox(e2);
407
+ }
408
+ setGlobalEnvBackground(e2) {
409
+ this.engine.sceneManager.setEnvironmentMap(e2).then(() => {
410
+ this.engine.sceneManager.environmentEnabled = true;
411
+ });
412
+ }
413
+ setCss2dDOM(e2, t2) {
414
+ const s2 = this.plugins.get("css-renderer");
415
+ if (!s2) throw new Error("CSS Renderer plugin not installed");
416
+ e2.style.pointerEvents = "auto";
417
+ return s2.addCSS2D(e2, t2);
418
+ }
419
+ setCss3dDOM(e2, t2) {
420
+ const s2 = this.plugins.get("css-renderer");
421
+ if (!s2) throw new Error("CSS Renderer plugin not installed");
422
+ return s2.addCSS3D(e2, t2);
423
+ }
424
+ getSceneEvent(e2, t2) {
425
+ const s2 = this.plugins.get("editor");
426
+ if (!s2) return;
427
+ const i2 = s2.handleClick(e2);
428
+ i2 && t2(i2);
429
+ }
430
+ getRawSceneEvent() {
431
+ const e2 = new n.Raycaster(), t2 = new n.Vector2();
432
+ return { raycaster: e2, getIntersects: (s2, i2) => {
433
+ const n2 = this.renderer.domElement.getBoundingClientRect();
434
+ return t2.x = (s2.clientX - n2.left) / n2.width * 2 - 1, t2.y = -(s2.clientY - n2.top) / n2.height * 2 + 1, e2.setFromCamera(t2, this.camera), e2.intersectObjects(i2, true);
435
+ } };
436
+ }
437
+ setGsapAnimation(e2, s2, i2 = {}) {
438
+ return t.to(e2, { ...s2, duration: 2, ease: "none", repeat: 0, yoyo: false, yoyoEase: true, ...i2 });
439
+ }
440
+ setModelAnimationPlay(e2) {
441
+ if (!e2.animationPlayParams || !e2.animations) return null;
442
+ const { speed: t2, actionIndexs: s2, startTime: i2, loop: r2 } = e2.animationPlayParams, a2 = new n.Clock(), o2 = new n.AnimationMixer(e2), c2 = e2.animations.filter((e3, t3) => s2[t3]).map((e3) => {
443
+ const s3 = o2.clipAction(e3);
444
+ return s3.loop = r2 ? n.LoopRepeat : n.LoopOnce, s3.time = i2, s3.timeScale = t2, s3.clampWhenFinished = true, s3.play(), s3;
445
+ });
446
+ return e2.mixerRender = () => {
447
+ o2.update(a2.getDelta());
448
+ }, this.mixerList.push(o2), { mixer: o2, actions: c2 };
449
+ }
450
+ removeModelAnimation(e2) {
451
+ const t2 = this.mixerList.findIndex((t3) => t3 === e2 || t3.mixerRender === e2.mixerRender);
452
+ t2 > -1 && this.mixerList.splice(t2, 1);
453
+ }
454
+ setCurveAnimation(e2, t2 = 1) {
455
+ const s2 = this.commonFrameList, i2 = { id: Date.now(), curve: e2, time: 0, pause: false, speed: t2, frameCallback: null, frameEndCallback: null, start: function() {
456
+ s2.includes(this) || s2.push(this), this.pause = false;
457
+ }, destroy: function() {
458
+ const e3 = s2.indexOf(this);
459
+ e3 > -1 && s2.splice(e3, 1);
460
+ }, frameAnimationRender: () => {
461
+ var _a, _b;
462
+ if (i2.pause) return;
463
+ if (i2.time += i2.speed / 1e3, i2.time > 1 || i2.time < 0) return i2.time = i2.time > 1 ? 1 : 0, i2.pause = true, void ((_a = i2.frameEndCallback) == null ? void 0 : _a.call(i2));
464
+ const t3 = e2.getPointAt(i2.time);
465
+ (_b = i2.frameCallback) == null ? void 0 : _b.call(i2, t3);
466
+ } };
467
+ return i2;
468
+ }
469
+ setOutlinePass(e2 = []) {
470
+ const t2 = this.plugins.get("composer");
471
+ t2 && t2.setOutlineObjects(e2);
472
+ }
473
+ setSceneControlMode(e2) {
474
+ const t2 = this.plugins.get("editor");
475
+ t2 && t2.setMode(e2);
476
+ }
477
+ setTransformControlsProperty(e2, t2) {
478
+ const s2 = this.plugins.get("transform-controller");
479
+ s2 && s2.controls.hasOwnProperty(e2) && (s2.controls[e2] = t2);
480
+ }
481
+ getObjectViews(e2, t2) {
482
+ return s.getObjectViews(e2, t2 ?? this.camera.fov);
483
+ }
484
+ getSceneCurveList() {
485
+ return this.scene.children.filter((e2) => e2.isCurveMesh).map((e2) => {
486
+ var _a, _b;
487
+ return { path: e2.curvePath || ((_b = (_a = e2.geometry) == null ? void 0 : _a.parameters) == null ? void 0 : _b.path), mesh: e2 };
488
+ });
489
+ }
490
+ saveSceneEditor() {
491
+ if (this.config.saveCallback) {
492
+ const e2 = {}, t2 = [];
493
+ this.config.saveCallback(e2, t2);
494
+ }
495
+ }
496
+ restoreScene(e2) {
497
+ }
498
+ getSceneEditorImage(e2) {
499
+ return Array.isArray(e2) ? this.engine.screenshot(e2[0], e2[1]) : this.engine.screenshot(e2 == null ? void 0 : e2.type, e2 == null ? void 0 : e2.quality);
500
+ }
501
+ refreshGUI() {
502
+ const e2 = this.plugins.get("gui");
503
+ e2 && e2.updateDisplay();
504
+ }
505
+ setGUIDomPosition(e2) {
506
+ const t2 = this.plugins.get("gui");
507
+ if (!t2 || !t2.domElement) return null;
508
+ const s2 = t2.domElement;
509
+ return e2.appendChild(s2), { GUIDom: s2, remove: () => {
510
+ s2.parentElement === e2 && e2.removeChild(s2);
511
+ } };
512
+ }
513
+ setOperateOption(e2, t2) {
514
+ const s2 = this.plugins.get("editor"), i2 = this.plugins.get("gizmo");
515
+ switch (e2) {
516
+ case "stats":
517
+ i2 && i2.setStatsVisible(t2);
518
+ break;
519
+ case "axes":
520
+ i2 && i2.setAxesVisible(t2);
521
+ break;
522
+ case "grid":
523
+ i2 && i2.setGridVisible(t2);
524
+ break;
525
+ case "openKey":
526
+ s2 && (s2.config.enableKeyboard = t2);
527
+ }
528
+ }
529
+ setSceneFromClassify(e2) {
530
+ this.scene.children.forEach((e3) => {
531
+ e3.rootInfo;
532
+ });
533
+ }
534
+ pointSyncTransform(e2, t2) {
535
+ const s2 = e2.clone();
536
+ return s2.applyMatrix4(t2.matrixWorld), s2;
537
+ }
538
+ meshGroupCloneMaterial(e2) {
539
+ e2.traverse((e3) => {
540
+ if (e3.isMesh) {
541
+ const t2 = e3, s2 = t2;
542
+ s2.isCloneMaterial || (s2.originMaterial = t2.material, t2.material = Array.isArray(t2.material) ? t2.material.map((e4) => e4.clone()) : t2.material.clone(), s2.isCloneMaterial = true);
543
+ }
544
+ });
545
+ }
546
+ changeMeshMaterial(e2, t2) {
547
+ e2.traverse((e3) => {
548
+ if (e3.isMesh) {
549
+ const s2 = e3;
550
+ (Array.isArray(s2.material) ? s2.material : [s2.material]).forEach((e4) => {
551
+ Object.entries(t2).forEach(([t3, s3]) => {
552
+ t3 in e4 && ("color" === t3 || "emissive" === t3 ? e4[t3].set(s3) : e4[t3] = s3);
553
+ }), e4.needsUpdate = true;
554
+ });
555
+ }
556
+ });
557
+ }
558
+ changeMeshTransform(e2, t2) {
559
+ const s2 = e2;
560
+ if (!s2.meshRevertTransform) {
561
+ const t3 = e2.position.clone(), i2 = e2.rotation.clone(), n2 = e2.scale.clone();
562
+ s2.meshRevertTransform = () => {
563
+ e2.position.copy(t3), e2.rotation.copy(i2), e2.scale.copy(n2);
564
+ };
565
+ }
566
+ t2.position && e2.position.set(t2.position.x ?? e2.position.x, t2.position.y ?? e2.position.y, t2.position.z ?? e2.position.z), t2.rotation && e2.rotation.set(t2.rotation.x ?? e2.rotation.x, t2.rotation.y ?? e2.rotation.y, t2.rotation.z ?? e2.rotation.z), t2.scale && e2.scale.set(t2.scale.x ?? e2.scale.x, t2.scale.y ?? e2.scale.y, t2.scale.z ?? e2.scale.z);
567
+ }
568
+ setGsapMeshAction(e2, s2, i2, n2) {
569
+ const { query: r2 } = n2;
570
+ s2.position && i2.position && (e2.position.set(s2.position.x, s2.position.y, s2.position.z), t.to(e2.position, { x: i2.position.x, y: i2.position.y, z: i2.position.z, ...r2 })), s2.rotation && i2.rotation && (e2.rotation.set(s2.rotation.x, s2.rotation.y, s2.rotation.z), t.to(e2.rotation, { x: i2.rotation.x, y: i2.rotation.y, z: i2.rotation.z, ...r2 })), s2.scale && i2.scale && (e2.scale.set(s2.scale.x, s2.scale.y, s2.scale.z), t.to(e2.scale, { x: i2.scale.x, y: i2.scale.y, z: i2.scale.z, ...r2 }));
571
+ }
572
+ start() {
573
+ this.engine.start();
574
+ }
575
+ stop() {
576
+ this.engine.stop();
577
+ }
578
+ dispose() {
579
+ this.plugins.dispose(), this.engine.dispose(), this.progressList = [], this.mixerList = [], this.shaderList = [], this.commonFrameList = [];
580
+ }
581
+ };
582
+ _m.THREE = n;
583
+ _m.gsap = t;
584
+ let m = _m;
585
+ function u(e2) {
586
+ var _a;
587
+ (_a = e2.geometry) == null ? void 0 : _a.dispose(), Array.isArray(e2.material) ? e2.material.forEach(f) : e2.material && f(e2.material);
588
+ }
589
+ function f(e2) {
590
+ e2.dispose();
591
+ const t2 = e2;
592
+ t2.map && t2.map.dispose(), t2.lightMap && t2.lightMap.dispose(), t2.bumpMap && t2.bumpMap.dispose(), t2.normalMap && t2.normalMap.dispose(), t2.specularMap && t2.specularMap.dispose(), t2.envMap && t2.envMap.dispose(), t2.alphaMap && t2.alphaMap.dispose(), t2.aoMap && t2.aoMap.dispose(), t2.displacementMap && t2.displacementMap.dispose(), t2.emissiveMap && t2.emissiveMap.dispose(), t2.gradientMap && t2.gradientMap.dispose(), t2.metalnessMap && t2.metalnessMap.dispose(), t2.roughnessMap && t2.roughnessMap.dispose();
593
+ }
594
+ exports.AnimationPlugin = s.AnimationPlugin, exports.CSSRendererPlugin = s.CSSRendererPlugin, exports.ComposerPlugin = s.ComposerPlugin, exports.DrawingPlugin = s.DrawingPlugin, exports.EditorPlugin = s.EditorPlugin, exports.EnvironmentPlugin = s.EnvironmentPlugin, exports.GUIPlugin = s.GUIPlugin, exports.GeoMapPlugin = s.GeoMapPlugin, exports.GeometryPlugin = s.GeometryPlugin, exports.GizmoPlugin = s.GizmoPlugin, exports.LoaderPlugin = s.LoaderPlugin, exports.MaterialPlugin = s.MaterialPlugin, exports.OrbitControllerPlugin = s.OrbitControllerPlugin, exports.ParticlePlugin = s.ParticlePlugin, exports.PhysicsPlugin = s.PhysicsPlugin, exports.Plugin = s.Plugin, exports.PluginManager = s.PluginManager, exports.SerializationPlugin = s.SerializationPlugin, exports.ShaderPlugin = s.ShaderPlugin, exports.TextPlugin = s.TextPlugin, exports.TransformControllerPlugin = s.TransformControllerPlugin, exports.clamp = s.clamp, exports.createBox3Helper = s.createBox3Helper, exports.createRaycaster = s.createRaycaster, exports.degToRad = s.degToRad, exports.getBestViewTarget = s.getBestViewTarget, exports.getDistanceScalePoint = s.getDistanceScalePoint, exports.getObjectBox3 = s.getObjectBox3, exports.getObjectViews = s.getObjectViews, exports.getPointAtDistance = s.getPointAtDistance, exports.getRootModel = s.getRootModel, exports.getWebGLMouse = s.getWebGLMouse, exports.getWebGLMouseFromContainer = s.getWebGLMouseFromContainer, exports.lerp = s.lerp, exports.radToDeg = s.radToDeg, exports.raycastObjects = s.raycastObjects, exports.smoothstep = s.smoothstep, exports.CameraManager = c, exports.Engine = g, exports.EventEmitter = r, exports.RendererManager = l, exports.SceneManager = a, exports.ThreeEditor = m, exports.disposeMaterial = f, exports.disposeMesh = u, exports.disposeObject = function(e2) {
595
+ e2.traverse((e3) => {
596
+ e3.isMesh && u(e3);
597
+ });
598
+ }, exports.disposeScene = function(e2) {
599
+ for (e2.traverse((e3) => {
600
+ e3.isMesh && u(e3);
601
+ }); e2.children.length > 0; ) e2.remove(e2.children[0]);
602
+ e2.background instanceof n.Texture && e2.background.dispose(), e2.environment && e2.environment.dispose();
603
+ };
604
+ //# sourceMappingURL=index.cjs.map