@anov/3d-ability 0.0.101 → 0.0.103

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.
Files changed (68) hide show
  1. package/dist/business/Base/ObjectLayer.d.ts +1 -1
  2. package/dist/business/Base/ObjectLayer.js +3 -1
  3. package/dist/business/Base/ObjectLayer.js.map +1 -1
  4. package/dist/business/Flyline/index.js +8 -11
  5. package/dist/business/Flyline/index.js.map +1 -1
  6. package/dist/business/HeatMap/core.d.ts +2 -2
  7. package/dist/business/HeatMap/core.js +1 -1
  8. package/dist/business/HeatMap/core.js.map +1 -1
  9. package/dist/business/Mark/KeyframeAnimation.d.ts +62 -0
  10. package/dist/business/Mark/KeyframeAnimation.js +219 -0
  11. package/dist/business/Mark/KeyframeAnimation.js.map +1 -0
  12. package/dist/business/Mark/index.d.ts +15 -8
  13. package/dist/business/Mark/index.js +134 -74
  14. package/dist/business/Mark/index.js.map +1 -1
  15. package/dist/business/{Poi/shader/circle copy 2.d.ts → Mark/shader/tanhao.d.ts} +2 -5
  16. package/dist/business/Mark/shader/tanhao.js +12 -0
  17. package/dist/business/Mark/shader/tanhao.js.map +1 -0
  18. package/dist/business/Mark/type.d.ts +2 -12
  19. package/dist/business/Mark/type.js +0 -7
  20. package/dist/business/Mark/type.js.map +1 -1
  21. package/dist/business/MaterialSwitch/MaterialSwitchSystem.d.ts +72 -63
  22. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js +315 -158
  23. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
  24. package/dist/business/MaterialSwitch/inject.d.ts +46 -1
  25. package/dist/business/MaterialSwitch/inject.js +78 -8
  26. package/dist/business/MaterialSwitch/inject.js.map +1 -1
  27. package/dist/business/MaterialSwitch/shader/finalFade.d.ts +2 -0
  28. package/dist/business/MaterialSwitch/shader/finalFade.js +3 -0
  29. package/dist/business/MaterialSwitch/shader/finalFade.js.map +1 -0
  30. package/dist/business/MaterialSwitch/shader/ground.d.ts +81 -0
  31. package/dist/business/MaterialSwitch/shader/ground.js +68 -0
  32. package/dist/business/MaterialSwitch/shader/ground.js.map +1 -0
  33. package/dist/business/MaterialSwitch/{realFade.d.ts → shader/realFade.d.ts} +2 -2
  34. package/dist/business/MaterialSwitch/{realFade.js → shader/realFade.js} +2 -2
  35. package/dist/business/MaterialSwitch/shader/realFade.js.map +1 -0
  36. package/dist/business/Poi/link/Pyramid.js +1 -1
  37. package/dist/business/Poi/link/Pyramid.js.map +1 -1
  38. package/dist/business/Poi/particle/DoubleCircle.d.ts +1 -0
  39. package/dist/business/Poi/particle/DoubleCircle.js +14 -1
  40. package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
  41. package/dist/business/Poi/particle/SingleCircle.js +4 -1
  42. package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
  43. package/dist/business/Poi/particle/index.d.ts +3 -3
  44. package/dist/business/Poi/particle/index.js.map +1 -1
  45. package/dist/business/Poi/shader/doubleCircle.js +1 -1
  46. package/dist/business/Poi/shader/doubleCircle.js.map +1 -1
  47. package/dist/business/Poi/title/index.d.ts +1 -1
  48. package/dist/business/SplitBuilding/index.d.ts +86 -0
  49. package/dist/business/SplitBuilding/index.js +593 -0
  50. package/dist/business/SplitBuilding/index.js.map +1 -0
  51. package/dist/business/SplitBuilding/type.d.ts +34 -0
  52. package/dist/business/SplitBuilding/type.js +25 -0
  53. package/dist/business/SplitBuilding/type.js.map +1 -0
  54. package/dist/business/Utils/constant.d.ts +1 -1
  55. package/dist/business/Utils/constant.js +1 -1
  56. package/dist/business/Utils/constant.js.map +1 -1
  57. package/dist/business/index.d.ts +1 -0
  58. package/dist/business/index.js +1 -0
  59. package/dist/business/index.js.map +1 -1
  60. package/dist/core/Material/SurfaceMaterial/index.js +7 -7
  61. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  62. package/package.json +4 -4
  63. package/dist/business/MaterialSwitch/finalFade.d.ts +0 -2
  64. package/dist/business/MaterialSwitch/finalFade.js +0 -3
  65. package/dist/business/MaterialSwitch/finalFade.js.map +0 -1
  66. package/dist/business/MaterialSwitch/realFade.js.map +0 -1
  67. package/dist/business/Poi/shader/circle copy 2.js +0 -15
  68. package/dist/business/Poi/shader/circle copy 2.js.map +0 -1
@@ -12,241 +12,398 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
12
12
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
13
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
14
14
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
- import { Box3, Object3D, Vector3, gsap } from '@anov/3d-core';
16
- import { injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from "./inject";
15
+ import { Box3, Color, Mesh, MeshBasicMaterial, Object3D, PlaneGeometry, Vector3, gsap, use } from '@anov/3d-core';
16
+ import { injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToGround, injectToRealFade } from "./inject";
17
+ var DEFAULT_CENTER = new Vector3();
18
+ var GROUND_Y_OFFSET = -0.1;
19
+ var SIZE_SCALE_FACTOR = 1.2;
20
+ var GROUND_MATCHING = ['ground', 'floor'];
21
+
17
22
  /**
18
23
  * 材质切换系统
19
24
  */
20
25
  export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
21
26
  _inherits(MaterialSwitchSystem, _Object3D);
22
27
  var _super = _createSuper(MaterialSwitchSystem);
23
- function MaterialSwitchSystem() {
28
+ function MaterialSwitchSystem(options) {
24
29
  var _this;
25
30
  _classCallCheck(this, MaterialSwitchSystem);
26
31
  _this = _super.call(this);
27
32
  _defineProperty(_assertThisInitialized(_this), "type", 'Real');
28
33
  _defineProperty(_assertThisInitialized(_this), "originalMaterial", new Map());
34
+ _defineProperty(_assertThisInitialized(_this), "uniforms", void 0);
29
35
  _defineProperty(_assertThisInitialized(_this), "objects", new Map());
30
- _defineProperty(_assertThisInitialized(_this), "oldObjects", new Map());
31
- _defineProperty(_assertThisInitialized(_this), "RealObjects", new Map());
32
- _defineProperty(_assertThisInitialized(_this), "FrameObjects", new Map());
33
- _defineProperty(_assertThisInitialized(_this), "PureObjects", new Map());
34
- _defineProperty(_assertThisInitialized(_this), "FresnelObjects", new Map());
36
+ _defineProperty(_assertThisInitialized(_this), "objectsMap", {
37
+ Real: new Map(),
38
+ Frame: new Map(),
39
+ Pure: new Map(),
40
+ Fresnel: new Map()
41
+ });
35
42
  _defineProperty(_assertThisInitialized(_this), "frame", null);
36
- _defineProperty(_assertThisInitialized(_this), "uniforms", {
37
- progress: {
38
- value: 0.0
39
- },
40
- isFresnelFadeIn: {
41
- value: false
42
- },
43
- isRealFadeIn: {
44
- value: false
45
- },
46
- isPureFadeIn: {
47
- value: false
48
- },
49
- isFrameFadeIn: {
50
- value: false
43
+ _defineProperty(_assertThisInitialized(_this), "gsap", null);
44
+ _defineProperty(_assertThisInitialized(_this), "duration", void 0);
45
+ _defineProperty(_assertThisInitialized(_this), "center", void 0);
46
+ _defineProperty(_assertThisInitialized(_this), "isGenPlane", false);
47
+ _defineProperty(_assertThisInitialized(_this), "rules", []);
48
+ _defineProperty(_assertThisInitialized(_this), "matchingStrategy", {
49
+ matchSize: function matchSize(rule) {
50
+ return _this.handleSizeMatching(rule);
51
51
  },
52
- maxSize: {
53
- value: 0
52
+ matchName: function matchName(rule) {
53
+ return _this.handleNameMatching(rule);
54
54
  }
55
55
  });
56
- _this.generate();
56
+ var _ref = options !== null && options !== void 0 ? options : {},
57
+ duration = _ref.duration,
58
+ _ref$center = _ref.center,
59
+ center = _ref$center === void 0 ? DEFAULT_CENTER : _ref$center,
60
+ _ref$isApi = _ref.isApi,
61
+ isApi = _ref$isApi === void 0 ? false : _ref$isApi;
62
+ _this.duration = duration;
63
+ _this.center = center;
64
+ _this.uniforms = _this.initializeUniforms();
65
+ _this.uniforms.isApi.value = isApi;
66
+ use.useframe(function () {
67
+ _this.uniforms.time.value += 0.00018;
68
+ });
57
69
  return _this;
58
70
  }
59
71
  _createClass(MaterialSwitchSystem, [{
60
- key: "generate",
61
- value: function generate() {
62
- this.uniforms.progress.value = 1.0;
63
- this.uniforms.isRealFadeIn.value = true;
64
- this.uniforms.isFresnelFadeIn.value = false;
65
- this.uniforms.isPureFadeIn.value = false;
66
- this.uniforms.isFrameFadeIn.value = false;
67
- }
68
- }, {
69
- key: "allHide",
70
- value: function allHide() {
71
- this.oldObjects.forEach(function (object) {
72
- object.visible = false;
73
- });
74
- this.RealObjects.forEach(function (object) {
75
- object.visible = false;
76
- });
77
- this.FrameObjects.forEach(function (object) {
78
- object.visible = false;
79
- });
80
- this.PureObjects.forEach(function (object) {
81
- object.visible = false;
72
+ key: "initializeUniforms",
73
+ value: function initializeUniforms() {
74
+ return {
75
+ progress: {
76
+ value: 1.0
77
+ },
78
+ isFresnelFadeIn: {
79
+ value: false
80
+ },
81
+ isRealFadeIn: {
82
+ value: true
83
+ },
84
+ isPureFadeIn: {
85
+ value: false
86
+ },
87
+ isFrameFadeIn: {
88
+ value: false
89
+ },
90
+ maxSize: {
91
+ value: 0
92
+ },
93
+ center: {
94
+ value: this.center
95
+ },
96
+ time: {
97
+ value: 0
98
+ },
99
+ isApi: {
100
+ value: false
101
+ }
102
+ };
103
+ }
104
+ }, {
105
+ key: "hideAllObjects",
106
+ value: function hideAllObjects() {
107
+ Object.values(this.objectsMap).forEach(function (objectMap) {
108
+ objectMap.forEach(function (object) {
109
+ object.visible = false;
110
+ });
82
111
  });
83
- this.FresnelObjects.forEach(function (object) {
84
- object.visible = false;
112
+ }
113
+ }, {
114
+ key: "showObjectsByType",
115
+ value: function showObjectsByType(type) {
116
+ this.objectsMap[type].forEach(function (object) {
117
+ object.visible = true;
85
118
  });
86
119
  }
87
-
88
- /**
89
- * switch type
90
- * @param type
91
- */
92
120
  }, {
93
121
  key: "switchType",
94
- value: function switchType(type) {
95
- var _this$frame,
96
- _this2 = this;
122
+ value: function switchType(type, option) {
97
123
  if (this.type === type) return;
98
- (_this$frame = this.frame) === null || _this$frame === void 0 || _this$frame.kill();
99
- this.allHide();
100
- this["".concat(type, "Objects")].forEach(function (object) {
101
- object.visible = true;
102
- });
103
- this["".concat(this.type, "Objects")].forEach(function (object) {
104
- object.visible = true;
105
- });
124
+ this.handleApiOption(option);
125
+ this.handleMatch(type);
126
+ this.cleanupAnimations();
127
+ this.prepareForSwitch(type);
128
+ this.startSwitchAnimation(type);
129
+ this.type = type;
130
+ }
131
+ }, {
132
+ key: "handleApiOption",
133
+ value: function handleApiOption(option) {
134
+ var _ref2 = option !== null && option !== void 0 ? option : {},
135
+ _ref2$mode = _ref2.mode,
136
+ mode = _ref2$mode === void 0 ? 'auto' : _ref2$mode,
137
+ _ref2$duration = _ref2.duration,
138
+ duration = _ref2$duration === void 0 ? 2 : _ref2$duration,
139
+ _ref2$center = _ref2.center,
140
+ center = _ref2$center === void 0 ? [0, 0, 0] : _ref2$center,
141
+ _ref2$genPlane = _ref2.genPlane,
142
+ genPlane = _ref2$genPlane === void 0 ? true : _ref2$genPlane;
143
+ if (mode === 'auto') this.duration = undefined;else this.duration = duration;
144
+ this.uniforms.center.value = new Vector3().fromArray(center);
145
+ this.isGenPlane = genPlane;
146
+ }
147
+ }, {
148
+ key: "cleanupAnimations",
149
+ value: function cleanupAnimations() {
150
+ var _this$frame, _this$gsap;
151
+ (_this$frame = this.frame) === null || _this$frame === void 0 || _this$frame.call(this);
152
+ (_this$gsap = this.gsap) === null || _this$gsap === void 0 || _this$gsap.kill();
153
+ }
154
+ }, {
155
+ key: "prepareForSwitch",
156
+ value: function prepareForSwitch(newType) {
157
+ this.hideAllObjects();
158
+ this.showObjectsByType(newType);
159
+ this.showObjectsByType(this.type);
106
160
  this.uniforms.progress.value = 0.0;
107
161
  this.uniforms["is".concat(this.type, "FadeIn")].value = false;
108
- this.uniforms["is".concat(type, "FadeIn")].value = true;
162
+ this.uniforms["is".concat(newType, "FadeIn")].value = true;
163
+ }
164
+ }, {
165
+ key: "startSwitchAnimation",
166
+ value: function startSwitchAnimation(newType) {
167
+ var _this2 = this;
109
168
  var lastType = this.type;
110
- this.frame = gsap.to(this.uniforms.progress, {
169
+ var size = this.getMaxSize();
170
+ var totalTime = Math.pow(6 * size / size, 1 / 3);
171
+ var onComplete = function onComplete() {
172
+ _this2.objectsMap[lastType].forEach(function (object) {
173
+ object.visible = false;
174
+ });
175
+ _this2.dispatchEvent({
176
+ type: 'onStyleChanged',
177
+ style: newType
178
+ });
179
+ };
180
+ requestAnimationFrame(function () {
181
+ if (_this2.duration) _this2.animateWithGSAP(onComplete);else _this2.animateWithFrame(totalTime, onComplete);
182
+ });
183
+ }
184
+ }, {
185
+ key: "animateWithGSAP",
186
+ value: function animateWithGSAP(onComplete) {
187
+ this.gsap = gsap.to(this.uniforms.progress, {
111
188
  value: 1.0,
112
- duration: 3.0,
189
+ duration: this.duration,
113
190
  ease: 'linear',
114
- onComplete: function onComplete() {
115
- _this2["".concat(lastType, "Objects")].forEach(function (object) {
116
- object.visible = false;
117
- });
118
- _this2.dispatchEvent({
119
- type: 'onStyleChanged',
120
- style: type
121
- });
191
+ onComplete: onComplete
192
+ });
193
+ }
194
+ }, {
195
+ key: "animateWithFrame",
196
+ value: function animateWithFrame(totalTime, onComplete) {
197
+ var _this3 = this;
198
+ var duration = 0;
199
+ this.frame = use.useframe(function (delta) {
200
+ duration += delta;
201
+ var progress = Math.pow(duration / totalTime, 3);
202
+ _this3.uniforms.progress.value += progress;
203
+ if (_this3.uniforms.progress.value > 1.0) {
204
+ _this3.frame();
205
+ onComplete();
122
206
  }
123
207
  });
124
- this.type = type;
125
208
  }
126
-
127
- /**
128
- * add object
129
- * @param object
130
- */
131
209
  }, {
132
210
  key: "addObject",
133
211
  value: function addObject(object) {
134
- var _this3 = this;
135
212
  this.switchType('Real');
136
-
137
- // @ts-ignore
138
- var uuid = object.tag === 'entity' ? object.entityId : object.uuid;
213
+ var uuid = this.getObjectUuid(object);
139
214
  this.objects.set(uuid, object);
140
- var finalObject = object.clone();
141
- this.generateFinalObject(finalObject);
142
- this.FresnelObjects.set(uuid, finalObject);
143
- this.add(finalObject);
215
+ this.handleNormalObject(object, uuid);
216
+ this.updateVisibility();
217
+ }
218
+ }, {
219
+ key: "getObjectUuid",
220
+ value: function getObjectUuid(object) {
221
+ // @ts-ignore
222
+ return object.tag === 'entity' ? object.entityId : object.uuid;
223
+ }
224
+ }, {
225
+ key: "handleGroundObject",
226
+ value: function handleGroundObject(type) {
227
+ if (this.objectsMap[type].has('ground')) {
228
+ this.updateGroundMesh(type);
229
+ } else {
230
+ var groundMesh = this.createGroundMesh();
231
+ injectToGround(groundMesh, type, this.uniforms);
232
+ this.objectsMap[type].set('ground', groundMesh);
233
+ this.add(groundMesh);
234
+ }
235
+ }
236
+ }, {
237
+ key: "handleGroundMatching",
238
+ value: function handleGroundMatching(type) {
239
+ var isMatch = false;
240
+ Object.values(this.objectsMap).slice(1).forEach(function (objectMap) {
241
+ objectMap.forEach(function (object) {
242
+ if (GROUND_MATCHING.some(function (matching) {
243
+ return object.name.includes(matching);
244
+ })) {
245
+ isMatch = true;
246
+ object.removeFromParent();
247
+ objectMap.delete(object.uuid);
248
+ }
249
+ });
250
+ });
251
+ if (isMatch && type !== 'Real') this.handleGroundObject(type);
252
+ }
253
+ }, {
254
+ key: "handleNameMatching",
255
+ value: function handleNameMatching(rule) {
256
+ var keys = rule.keys,
257
+ material = rule.material;
258
+ var objects = [];
259
+ var isMatch = false;
260
+ Object.values(this.objectsMap).slice(1).forEach(function (objectMap) {
261
+ objectMap.forEach(function (object) {
262
+ if (GROUND_MATCHING.some(function (matching) {
263
+ return object.name.includes(matching);
264
+ })) {
265
+ isMatch = true;
266
+ object.removeFromParent();
267
+ objectMap.delete(object.uuid);
268
+ }
269
+ });
270
+ });
271
+ if (isMatch) {
272
+ // handle object to other material
273
+ }
274
+ }
275
+ }, {
276
+ key: "handleSizeMatching",
277
+ value: function handleSizeMatching(rule) {}
278
+ }, {
279
+ key: "handleMatch",
280
+ value: function handleMatch(type) {
281
+ var _this4 = this;
282
+ if (this.isGenPlane) this.handleGroundMatching(type);
283
+ if (this.rules.length > 0) {
284
+ this.rules.forEach(function (rule) {
285
+ _this4.matchingStrategy[rule.type](rule);
286
+ });
287
+ }
288
+ }
289
+ }, {
290
+ key: "handleNormalObject",
291
+ value: function handleNormalObject(object, uuid) {
292
+ var realObject = object;
293
+ this.generateRealObject(realObject);
294
+ this.objectsMap.Real.set(uuid, realObject);
295
+ this.add(realObject);
296
+ var fresnelObject = object.clone();
297
+ this.generateFinalObject(fresnelObject);
298
+ this.objectsMap.Fresnel.set(uuid, fresnelObject);
299
+ this.add(fresnelObject);
144
300
  var pureObject = object.clone();
145
301
  this.generatePureObject(pureObject);
146
- this.PureObjects.set(uuid, pureObject);
302
+ this.objectsMap.Pure.set(uuid, pureObject);
147
303
  this.add(pureObject);
148
304
  var frameObject = object.clone();
149
305
  this.generateFrameObject(frameObject);
150
- this.FrameObjects.set(uuid, frameObject);
306
+ this.objectsMap.Frame.set(uuid, frameObject);
151
307
  this.add(frameObject);
152
- object.traverse(function (child) {
153
- if (child.type === 'Mesh') {
154
- // only record the first material
155
- if (!_this3.originalMaterial.has(child.uuid)) _this3.originalMaterial.set(child.uuid, child.material.clone());
156
- }
157
- });
158
- var realObject = object;
159
- this.generateRealObject(realObject);
160
- this.RealObjects.set(uuid, realObject);
161
308
  this.uniforms.maxSize.value = this.getMaxSize();
162
- this.allHide();
163
- this.RealObjects.forEach(function (object) {
164
- object.visible = true;
165
- });
166
309
  }
167
-
168
- /**
169
- * remove object
170
- * @param object
171
- */
172
310
  }, {
173
311
  key: "removeObject",
174
312
  value: function removeObject(object) {
175
- // @ts-ignore
176
- var uuid = object.tag === 'entity' ? object.entityId : object.uuid;
313
+ var uuid = this.getObjectUuid(object);
177
314
  this.objects.delete(uuid);
178
- console.log('uuid', uuid);
179
- var realObject = this.RealObjects.get(uuid);
180
- var frameObject = this.FrameObjects.get(uuid);
181
- var pureObject = this.PureObjects.get(uuid);
182
- var fresnelObject = this.FresnelObjects.get(uuid);
183
- realObject.removeFromParent();
184
- frameObject.removeFromParent();
185
- pureObject.removeFromParent();
186
- fresnelObject.removeFromParent();
187
- this.RealObjects.delete(uuid);
188
- this.FrameObjects.delete(uuid);
189
- this.PureObjects.delete(uuid);
190
- this.FresnelObjects.delete(uuid);
315
+ Object.values(this.objectsMap).forEach(function (objectMap) {
316
+ var obj = objectMap.get(uuid);
317
+ if (obj) {
318
+ obj.removeFromParent();
319
+ objectMap.delete(uuid);
320
+ }
321
+ });
191
322
  this.uniforms.maxSize.value = this.getMaxSize();
192
323
  }
193
-
194
- /**
195
- * get max size
196
- * @param object
197
- * @returns
198
- */
199
324
  }, {
200
- key: "getMaxSize",
201
- value: function getMaxSize() {
325
+ key: "createGroundMesh",
326
+ value: function createGroundMesh() {
327
+ var box = this.box3;
328
+ var size = box.getSize(new Vector3());
329
+ var center = box.getCenter(new Vector3());
330
+ var plane = new PlaneGeometry(size.x, size.z);
331
+ var material = new MeshBasicMaterial({
332
+ color: new Color('#fff')
333
+ });
334
+ var mesh = new Mesh(plane, material);
335
+ mesh.rotation.x = -Math.PI / 2;
336
+ mesh.position.set(center.x, GROUND_Y_OFFSET, center.z);
337
+ return mesh;
338
+ }
339
+ }, {
340
+ key: "updateGroundMesh",
341
+ value: function updateGroundMesh(type) {
342
+ if (!this.objectsMap[type].has('ground')) return;
343
+ var box = this.box3;
344
+ var size = box.getSize(new Vector3());
345
+ var center = box.getCenter(new Vector3());
346
+ this.objectsMap[type].get('ground').geometry.dispose();
347
+ this.objectsMap[type].get('ground').geometry = new PlaneGeometry(size.x, size.z);
348
+ this.objectsMap[type].get('ground').position.set(center.x, GROUND_Y_OFFSET, center.z);
349
+ }
350
+ }, {
351
+ key: "box3",
352
+ get: function get() {
202
353
  var box3 = new Box3();
203
- this.RealObjects.forEach(function (object) {
354
+ this.objectsMap.Real.forEach(function (object) {
204
355
  box3.expandByObject(object);
205
356
  });
206
- var size = box3.getSize(new Vector3());
207
- var maxSize = Math.max(size.x, size.z);
208
- return maxSize;
357
+ return box3;
358
+ }
359
+ }, {
360
+ key: "getMaxSize",
361
+ value: function getMaxSize() {
362
+ var box3 = this.box3;
363
+ var vertices = this.getBoxVertices(box3);
364
+ var maxDistance = this.calculateMaxDistance(vertices);
365
+ return maxDistance * SIZE_SCALE_FACTOR;
366
+ }
367
+ }, {
368
+ key: "getBoxVertices",
369
+ value: function getBoxVertices(box3) {
370
+ return [new Vector3(box3.min.x, box3.min.y, box3.min.z), new Vector3(box3.min.x, box3.min.y, box3.max.z), new Vector3(box3.min.x, box3.max.y, box3.min.z), new Vector3(box3.min.x, box3.max.y, box3.max.z), new Vector3(box3.max.x, box3.min.y, box3.min.z), new Vector3(box3.max.x, box3.min.y, box3.max.z), new Vector3(box3.max.x, box3.max.y, box3.min.z), new Vector3(box3.max.x, box3.max.y, box3.max.z)];
371
+ }
372
+ }, {
373
+ key: "calculateMaxDistance",
374
+ value: function calculateMaxDistance(vertices) {
375
+ var _this5 = this;
376
+ return vertices.reduce(function (max, vertex) {
377
+ var distance = _this5.center.distanceTo(vertex);
378
+ return Math.max(max, distance);
379
+ }, 0);
209
380
  }
210
-
211
- /**
212
- * generate final object
213
- * @param object
214
- */
215
381
  }, {
216
382
  key: "generateFinalObject",
217
383
  value: function generateFinalObject(object) {
218
384
  injectToFinirMaterial(object, this.uniforms);
219
385
  }
220
-
221
- /**
222
- * generate real object
223
- * @param object
224
- */
225
386
  }, {
226
387
  key: "generateRealObject",
227
388
  value: function generateRealObject(object) {
228
389
  injectToRealFade(object, this.uniforms);
229
390
  }
230
-
231
- /**
232
- * generate pure object
233
- * @param object
234
- */
235
391
  }, {
236
392
  key: "generatePureObject",
237
393
  value: function generatePureObject(object) {
238
394
  injectToBaseWrite(object, this.uniforms);
239
395
  }
240
-
241
- /**
242
- * generate frame object
243
- * @param object
244
- */
245
396
  }, {
246
397
  key: "generateFrameObject",
247
398
  value: function generateFrameObject(object) {
248
399
  injectToFrameFade(object, this.uniforms);
249
400
  }
401
+ }, {
402
+ key: "updateVisibility",
403
+ value: function updateVisibility() {
404
+ this.hideAllObjects();
405
+ this.showObjectsByType('Real');
406
+ }
250
407
  }]);
251
408
  return MaterialSwitchSystem;
252
409
  }(Object3D);
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","Object3D","Vector3","gsap","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToRealFade","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","progress","value","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","generate","_createClass","key","uniforms","allHide","oldObjects","forEach","object","visible","RealObjects","FrameObjects","PureObjects","FresnelObjects","switchType","type","_this$frame","_this2","frame","kill","concat","lastType","to","duration","ease","onComplete","dispatchEvent","style","addObject","_this3","uuid","tag","entityId","objects","set","finalObject","clone","generateFinalObject","add","pureObject","generatePureObject","frameObject","generateFrameObject","traverse","child","originalMaterial","has","material","realObject","generateRealObject","getMaxSize","removeObject","delete","console","log","get","fresnelObject","removeFromParent","box3","expandByObject","size","getSize","Math","max","x","z"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Object3D, Vector3, gsap } from '@anov/3d-core'\nimport { injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n public originalMaterial = new Map()\n\n private objects = new Map<string, Object3D>()\n private oldObjects = new Map<string, Object3D>()\n private RealObjects = new Map<string, Object3D>()\n private FrameObjects = new Map<string, Object3D>()\n private PureObjects = new Map<string, Object3D>()\n private FresnelObjects = new Map<string, Object3D>()\n\n private frame: gsap.core.Tween | null = null\n\n public uniforms = {\n progress: { value: 0.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: false },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n }\n\n constructor() {\n super()\n\n this.generate()\n }\n\n private generate() {\n this.uniforms.progress.value = 1.0\n\n this.uniforms.isRealFadeIn.value = true\n this.uniforms.isFresnelFadeIn.value = false\n this.uniforms.isPureFadeIn.value = false\n this.uniforms.isFrameFadeIn.value = false\n }\n\n private allHide() {\n this.oldObjects.forEach((object) => {\n object.visible = false\n })\n\n this.RealObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FrameObjects.forEach((object) => {\n object.visible = false\n })\n\n this.PureObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FresnelObjects.forEach((object) => {\n object.visible = false\n })\n }\n\n /**\n * switch type\n * @param type\n */\n public switchType(type: MaterialSwitchType) {\n if (this.type === type)\n return\n\n this.frame?.kill()\n\n this.allHide()\n\n this[`${type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this[`${this.type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${type}FadeIn`].value = true\n\n const lastType = this.type\n\n this.frame = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: 3.0,\n ease: 'linear',\n onComplete: () => {\n this[`${lastType}Objects`].forEach((object) => {\n object.visible = false\n })\n\n this.dispatchEvent({\n type: 'onStyleChanged',\n style: type,\n })\n },\n })\n\n this.type = type\n }\n\n /**\n * add object\n * @param object\n */\n public addObject(object: Object3D) {\n this.switchType('Real')\n\n // @ts-ignore\n const uuid = object.tag === 'entity' ? object.entityId : object.uuid\n\n this.objects.set(uuid, object)\n\n const finalObject = object.clone()\n this.generateFinalObject(finalObject)\n this.FresnelObjects.set(uuid, finalObject)\n this.add(finalObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.PureObjects.set(uuid, pureObject)\n this.add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.FrameObjects.set(uuid, frameObject)\n this.add(frameObject)\n\n object.traverse((child: any) => {\n if (child.type === 'Mesh') {\n // only record the first material\n if (!this.originalMaterial.has(child.uuid))\n this.originalMaterial.set(child.uuid, child.material.clone())\n }\n })\n\n const realObject = object\n this.generateRealObject(realObject)\n this.RealObjects.set(uuid, realObject)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n\n this.allHide()\n this.RealObjects.forEach((object) => {\n object.visible = true\n })\n }\n\n /**\n * remove object\n * @param object\n */\n public removeObject(object: Object3D) {\n // @ts-ignore\n const uuid = object.tag === 'entity' ? object.entityId : object.uuid\n this.objects.delete(uuid)\n\n console.log('uuid', uuid)\n const realObject = this.RealObjects.get(uuid)\n const frameObject = this.FrameObjects.get(uuid)\n const pureObject = this.PureObjects.get(uuid)\n const fresnelObject = this.FresnelObjects.get(uuid)\n\n realObject.removeFromParent()\n frameObject.removeFromParent()\n pureObject.removeFromParent()\n fresnelObject.removeFromParent()\n\n this.RealObjects.delete(uuid)\n this.FrameObjects.delete(uuid)\n this.PureObjects.delete(uuid)\n this.FresnelObjects.delete(uuid)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * get max size\n * @param object\n * @returns\n */\n private getMaxSize() {\n const box3 = new Box3()\n this.RealObjects.forEach((object) => {\n box3.expandByObject(object)\n })\n\n const size = box3.getSize(new Vector3())\n const maxSize = Math.max(size.x, size.z)\n return maxSize\n }\n\n /**\n * generate final object\n * @param object\n */\n private generateFinalObject(object: Object3D) {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n /**\n * generate real object\n * @param object\n */\n private generateRealObject(object: Object3D) {\n injectToRealFade(object, this.uniforms)\n }\n\n /**\n * generate pure object\n * @param object\n */\n private generatePureObject(object: Object3D) {\n injectToBaseWrite(object, this.uniforms)\n }\n\n /**\n * generate frame object\n * @param object\n */\n private generateFrameObject(object: Object3D) {\n injectToFrameFade(object, this.uniforms)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","Color","Mesh","MeshBasicMaterial","Object3D","PlaneGeometry","Vector3","gsap","use","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToGround","injectToRealFade","DEFAULT_CENTER","GROUND_Y_OFFSET","SIZE_SCALE_FACTOR","GROUND_MATCHING","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","options","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","Real","Frame","Pure","Fresnel","matchSize","rule","handleSizeMatching","matchName","handleNameMatching","_ref","duration","_ref$center","center","_ref$isApi","isApi","uniforms","initializeUniforms","value","useframe","time","_createClass","key","progress","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","hideAllObjects","Object","values","objectsMap","forEach","objectMap","object","visible","showObjectsByType","type","switchType","option","handleApiOption","handleMatch","cleanupAnimations","prepareForSwitch","startSwitchAnimation","_ref2","_ref2$mode","mode","_ref2$duration","_ref2$center","_ref2$genPlane","genPlane","undefined","fromArray","isGenPlane","_this$frame","_this$gsap","frame","kill","newType","concat","_this2","lastType","size","getMaxSize","totalTime","Math","pow","onComplete","dispatchEvent","style","requestAnimationFrame","animateWithGSAP","animateWithFrame","to","ease","_this3","delta","addObject","uuid","getObjectUuid","objects","set","handleNormalObject","updateVisibility","tag","entityId","handleGroundObject","has","updateGroundMesh","groundMesh","createGroundMesh","add","handleGroundMatching","isMatch","slice","some","matching","name","includes","removeFromParent","delete","keys","material","_this4","rules","length","matchingStrategy","realObject","generateRealObject","fresnelObject","clone","generateFinalObject","pureObject","generatePureObject","frameObject","generateFrameObject","removeObject","obj","get","box","box3","getSize","getCenter","plane","x","z","color","mesh","rotation","PI","position","geometry","dispose","expandByObject","vertices","getBoxVertices","maxDistance","calculateMaxDistance","min","y","max","_this5","reduce","vertex","distance","distanceTo"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Color, Mesh, MeshBasicMaterial, MeshStandardMaterial, Object3D, PlaneGeometry, Vector3, gsap, use } from '@anov/3d-core'\nimport { frameMaterialCache, fresnelMaterialCache, groundMaterialCache, inject, injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToGround, injectToRealFade, pureMaterialCache, realMaterialCache } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\ninterface MaterialSwitchOption {\n duration?: number\n center?: Vector3\n isApi?: boolean\n}\n\ninterface MaterialSwitchUniforms {\n progress: { value: number }\n isFresnelFadeIn: { value: boolean }\n isRealFadeIn: { value: boolean }\n isPureFadeIn: { value: boolean }\n isFrameFadeIn: { value: boolean }\n maxSize: { value: number }\n center: { value: Vector3 }\n time: { value: number }\n isApi: { value: boolean }\n}\n\ntype RuleItem = {\n type: string\n keys: string[]\n material: string\n}\n\nconst DEFAULT_CENTER = new Vector3()\nconst GROUND_Y_OFFSET = -0.1\nconst SIZE_SCALE_FACTOR = 1.2\nconst GROUND_MATCHING = ['ground', 'floor']\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n public originalMaterial = new Map()\n public uniforms: MaterialSwitchUniforms\n\n private objects = new Map<string, Object3D>()\n private objectsMap: Record<MaterialSwitchType, Map<string, Object3D>> = {\n Real: new Map(),\n Frame: new Map(),\n Pure: new Map(),\n Fresnel: new Map(),\n }\n\n private frame: ReturnType<typeof use.useframe> | null = null\n private gsap: gsap.core.Tween | null = null\n private duration: number | undefined\n private center: Vector3\n private isGenPlane = false\n private rules: RuleItem[] = []\n\n constructor(options?: MaterialSwitchOption) {\n super()\n const { duration, center = DEFAULT_CENTER, isApi = false } = options ?? {}\n\n this.duration = duration\n this.center = center\n\n this.uniforms = this.initializeUniforms()\n this.uniforms.isApi.value = isApi\n\n use.useframe(() => {\n this.uniforms.time.value += 0.00018\n })\n }\n\n private initializeUniforms(): MaterialSwitchUniforms {\n return {\n progress: { value: 1.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: true },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n center: { value: this.center },\n time: { value: 0 },\n isApi: { value: false },\n }\n }\n\n private hideAllObjects(): void {\n Object.values(this.objectsMap).forEach((objectMap) => {\n objectMap.forEach((object) => {\n object.visible = false\n })\n })\n }\n\n private showObjectsByType(type: MaterialSwitchType): void {\n this.objectsMap[type].forEach((object) => {\n object.visible = true\n })\n }\n\n public switchType(type: MaterialSwitchType,\n option?:\n {\n mode: 'auto' | 'time'\n duration?: number\n center?: number[]\n genPlane?: boolean\n }): void {\n if (this.type === type)\n return\n\n this.handleApiOption(option)\n this.handleMatch(type)\n this.cleanupAnimations()\n this.prepareForSwitch(type)\n this.startSwitchAnimation(type)\n\n this.type = type\n }\n\n private handleApiOption(option: {\n mode: 'auto' | 'time'\n duration?: number\n center?: number[]\n genPlane?: boolean\n }): void {\n const { mode = 'auto', duration = 2, center = [0, 0, 0], genPlane = true } = option ?? {}\n if (mode === 'auto')\n this.duration = undefined\n else\n this.duration = duration\n\n this.uniforms.center.value = new Vector3().fromArray(center)\n this.isGenPlane = genPlane\n }\n\n private cleanupAnimations(): void {\n this.frame?.()\n this.gsap?.kill()\n }\n\n private prepareForSwitch(newType: MaterialSwitchType): void {\n this.hideAllObjects()\n this.showObjectsByType(newType)\n this.showObjectsByType(this.type)\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${newType}FadeIn`].value = true\n }\n\n private startSwitchAnimation(newType: MaterialSwitchType): void {\n const lastType = this.type\n const size = this.getMaxSize()\n const totalTime = ((6 * size) / size) ** (1 / 3)\n\n const onComplete = () => {\n this.objectsMap[lastType].forEach((object) => {\n object.visible = false\n })\n this.dispatchEvent({ type: 'onStyleChanged', style: newType })\n }\n\n requestAnimationFrame(() => {\n if (this.duration)\n this.animateWithGSAP(onComplete)\n else\n this.animateWithFrame(totalTime, onComplete)\n })\n }\n\n private animateWithGSAP(onComplete: () => void): void {\n this.gsap = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: this.duration,\n ease: 'linear',\n onComplete,\n })\n }\n\n private animateWithFrame(totalTime: number, onComplete: () => void): void {\n let duration = 0\n this.frame = use.useframe((delta) => {\n duration += delta\n const progress = (duration / totalTime) ** 3\n this.uniforms.progress.value += progress\n\n if (this.uniforms.progress.value > 1.0) {\n this.frame()\n onComplete()\n }\n })\n }\n\n public addObject(object: Object3D): void {\n this.switchType('Real')\n const uuid = this.getObjectUuid(object)\n this.objects.set(uuid, object)\n\n this.handleNormalObject(object, uuid)\n this.updateVisibility()\n }\n\n private getObjectUuid(object: Object3D): string {\n // @ts-ignore\n return object.tag === 'entity' ? object.entityId : object.uuid\n }\n\n private handleGroundObject(type: MaterialSwitchType): void {\n if (this.objectsMap[type].has('ground')) {\n this.updateGroundMesh(type)\n }\n else {\n const groundMesh = this.createGroundMesh()\n injectToGround(groundMesh, type, this.uniforms)\n this.objectsMap[type].set('ground', groundMesh)\n this.add(groundMesh)\n }\n }\n\n private handleGroundMatching(type: MaterialSwitchType) {\n let isMatch = false\n\n Object.values(this.objectsMap).slice(1).forEach((objectMap) => {\n objectMap.forEach((object) => {\n if (GROUND_MATCHING.some(matching => object.name.includes(matching))) {\n isMatch = true\n object.removeFromParent()\n objectMap.delete(object.uuid)\n }\n })\n })\n\n if (isMatch && type !== 'Real')\n this.handleGroundObject(type)\n }\n\n private handleNameMatching(rule: RuleItem) {\n const { keys, material } = rule\n const objects = []\n let isMatch = false\n\n Object.values(this.objectsMap).slice(1).forEach((objectMap) => {\n objectMap.forEach((object) => {\n if (GROUND_MATCHING.some(matching => object.name.includes(matching))) {\n isMatch = true\n object.removeFromParent()\n objectMap.delete(object.uuid)\n }\n })\n })\n\n if (isMatch) {\n // handle object to other material\n }\n }\n\n private handleSizeMatching(rule: RuleItem) {}\n\n private matchingStrategy = {\n matchSize: (rule: RuleItem) => this.handleSizeMatching(rule),\n matchName: (rule: RuleItem) => this.handleNameMatching(rule),\n }\n\n private handleMatch(type: MaterialSwitchType) {\n if (this.isGenPlane)\n this.handleGroundMatching(type)\n\n if (this.rules.length > 0) {\n this.rules.forEach((rule) => {\n this.matchingStrategy[rule.type](rule)\n })\n }\n }\n\n private handleNormalObject(object: Object3D, uuid: string): void {\n const realObject = object\n this.generateRealObject(realObject)\n this.objectsMap.Real.set(uuid, realObject)\n this.add(realObject)\n\n const fresnelObject = object.clone()\n this.generateFinalObject(fresnelObject)\n this.objectsMap.Fresnel.set(uuid, fresnelObject)\n this.add(fresnelObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.objectsMap.Pure.set(uuid, pureObject)\n this.add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.objectsMap.Frame.set(uuid, frameObject)\n this.add(frameObject)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n public removeObject(object: Object3D): void {\n const uuid = this.getObjectUuid(object)\n this.objects.delete(uuid)\n\n Object.values(this.objectsMap).forEach((objectMap) => {\n const obj = objectMap.get(uuid)\n if (obj) {\n obj.removeFromParent()\n objectMap.delete(uuid)\n }\n })\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n private createGroundMesh(): Mesh {\n const box = this.box3\n const size = box.getSize(new Vector3())\n const center = box.getCenter(new Vector3())\n\n const plane = new PlaneGeometry(size.x, size.z)\n const material = new MeshBasicMaterial({ color: new Color('#fff') })\n const mesh = new Mesh(plane, material)\n\n mesh.rotation.x = -Math.PI / 2\n mesh.position.set(center.x, GROUND_Y_OFFSET, center.z)\n\n return mesh\n }\n\n private updateGroundMesh(type: MaterialSwitchType): void {\n if (!this.objectsMap[type].has('ground'))\n return\n\n const box = this.box3\n const size = box.getSize(new Vector3())\n const center = box.getCenter(new Vector3());\n\n (this.objectsMap[type].get('ground') as Mesh).geometry.dispose();\n (this.objectsMap[type].get('ground') as Mesh).geometry = new PlaneGeometry(size.x, size.z);\n (this.objectsMap[type].get('ground') as Mesh).position.set(center.x, GROUND_Y_OFFSET, center.z)\n }\n\n private get box3(): Box3 {\n const box3 = new Box3()\n this.objectsMap.Real.forEach((object) => {\n box3.expandByObject(object)\n })\n return box3\n }\n\n private getMaxSize(): number {\n const box3 = this.box3\n const vertices = this.getBoxVertices(box3)\n const maxDistance = this.calculateMaxDistance(vertices)\n return maxDistance * SIZE_SCALE_FACTOR\n }\n\n private getBoxVertices(box3: Box3): Vector3[] {\n return [\n new Vector3(box3.min.x, box3.min.y, box3.min.z),\n new Vector3(box3.min.x, box3.min.y, box3.max.z),\n new Vector3(box3.min.x, box3.max.y, box3.min.z),\n new Vector3(box3.min.x, box3.max.y, box3.max.z),\n new Vector3(box3.max.x, box3.min.y, box3.min.z),\n new Vector3(box3.max.x, box3.min.y, box3.max.z),\n new Vector3(box3.max.x, box3.max.y, box3.min.z),\n new Vector3(box3.max.x, box3.max.y, box3.max.z),\n ]\n }\n\n private calculateMaxDistance(vertices: Vector3[]): number {\n return vertices.reduce((max, vertex) => {\n const distance = this.center.distanceTo(vertex)\n return Math.max(max, distance)\n }, 0)\n }\n\n private generateFinalObject(object: Object3D): void {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n private generateRealObject(object: Object3D): void {\n injectToRealFade(object, this.uniforms)\n }\n\n private generatePureObject(object: Object3D): void {\n injectToBaseWrite(object, this.uniforms)\n }\n\n private generateFrameObject(object: Object3D): void {\n injectToFrameFade(object, this.uniforms)\n }\n\n private updateVisibility(): void {\n this.hideAllObjects()\n this.showObjectsByType('Real')\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAASA,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,iBAAiB,EAAwBC,QAAQ,EAAEC,aAAa,EAAEC,OAAO,EAAEC,IAAI,EAAEC,GAAG,QAAQ,eAAe;AACvI,SAAgFC,iBAAiB,EAAEC,qBAAqB,EAAEC,iBAAiB,EAAEC,cAAc,EAAEC,gBAAgB;AA6B7K,IAAMC,cAAc,GAAG,IAAIR,OAAO,CAAC,CAAC;AACpC,IAAMS,eAAe,GAAG,CAAC,GAAG;AAC5B,IAAMC,iBAAiB,GAAG,GAAG;AAC7B,IAAMC,eAAe,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;;AAE3C;AACA;AACA;AACA,WAAaC,oBAAoB,0BAAAC,SAAA;EAAAC,SAAA,CAAAF,oBAAA,EAAAC,SAAA;EAAA,IAAAE,MAAA,GAAAC,YAAA,CAAAJ,oBAAA;EAoB/B,SAAAA,qBAAYK,OAA8B,EAAE;IAAA,IAAAC,KAAA;IAAAC,eAAA,OAAAP,oBAAA;IAC1CM,KAAA,GAAAH,MAAA,CAAAK,IAAA;IAAOC,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,WApByB,MAAM;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,uBACd,IAAIK,GAAG,CAAC,CAAC;IAAAF,eAAA,CAAAC,sBAAA,CAAAJ,KAAA;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,cAGjB,IAAIK,GAAG,CAAmB,CAAC;IAAAF,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,iBAC2B;MACtEM,IAAI,EAAE,IAAID,GAAG,CAAC,CAAC;MACfE,KAAK,EAAE,IAAIF,GAAG,CAAC,CAAC;MAChBG,IAAI,EAAE,IAAIH,GAAG,CAAC,CAAC;MACfI,OAAO,EAAE,IAAIJ,GAAG,CAAC;IACnB,CAAC;IAAAF,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,YAEuD,IAAI;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,WACrB,IAAI;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,iBAGtB,KAAK;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,YACE,EAAE;IAAAG,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,uBA4MH;MACzBU,SAAS,EAAE,SAAAA,UAACC,IAAc;QAAA,OAAKX,KAAA,CAAKY,kBAAkB,CAACD,IAAI,CAAC;MAAA;MAC5DE,SAAS,EAAE,SAAAA,UAACF,IAAc;QAAA,OAAKX,KAAA,CAAKc,kBAAkB,CAACH,IAAI,CAAC;MAAA;IAC9D,CAAC;IA3MC,IAAAI,IAAA,GAA6DhB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,CAAC,CAAC;MAAlEiB,QAAQ,GAAAD,IAAA,CAARC,QAAQ;MAAAC,WAAA,GAAAF,IAAA,CAAEG,MAAM;MAANA,MAAM,GAAAD,WAAA,cAAG3B,cAAc,GAAA2B,WAAA;MAAAE,UAAA,GAAAJ,IAAA,CAAEK,KAAK;MAALA,KAAK,GAAAD,UAAA,cAAG,KAAK,GAAAA,UAAA;IAExDnB,KAAA,CAAKgB,QAAQ,GAAGA,QAAQ;IACxBhB,KAAA,CAAKkB,MAAM,GAAGA,MAAM;IAEpBlB,KAAA,CAAKqB,QAAQ,GAAGrB,KAAA,CAAKsB,kBAAkB,CAAC,CAAC;IACzCtB,KAAA,CAAKqB,QAAQ,CAACD,KAAK,CAACG,KAAK,GAAGH,KAAK;IAEjCpC,GAAG,CAACwC,QAAQ,CAAC,YAAM;MACjBxB,KAAA,CAAKqB,QAAQ,CAACI,IAAI,CAACF,KAAK,IAAI,OAAO;IACrC,CAAC,CAAC;IAAA,OAAAvB,KAAA;EACJ;EAAC0B,YAAA,CAAAhC,oBAAA;IAAAiC,GAAA;IAAAJ,KAAA,EAED,SAAAD,mBAAA,EAAqD;MACnD,OAAO;QACLM,QAAQ,EAAE;UAAEL,KAAK,EAAE;QAAI,CAAC;QACxBM,eAAe,EAAE;UAAEN,KAAK,EAAE;QAAM,CAAC;QACjCO,YAAY,EAAE;UAAEP,KAAK,EAAE;QAAK,CAAC;QAC7BQ,YAAY,EAAE;UAAER,KAAK,EAAE;QAAM,CAAC;QAC9BS,aAAa,EAAE;UAAET,KAAK,EAAE;QAAM,CAAC;QAC/BU,OAAO,EAAE;UAAEV,KAAK,EAAE;QAAE,CAAC;QACrBL,MAAM,EAAE;UAAEK,KAAK,EAAE,IAAI,CAACL;QAAO,CAAC;QAC9BO,IAAI,EAAE;UAAEF,KAAK,EAAE;QAAE,CAAC;QAClBH,KAAK,EAAE;UAAEG,KAAK,EAAE;QAAM;MACxB,CAAC;IACH;EAAC;IAAAI,GAAA;IAAAJ,KAAA,EAED,SAAAW,eAAA,EAA+B;MAC7BC,MAAM,CAACC,MAAM,CAAC,IAAI,CAACC,UAAU,CAAC,CAACC,OAAO,CAAC,UAACC,SAAS,EAAK;QACpDA,SAAS,CAACD,OAAO,CAAC,UAACE,MAAM,EAAK;UAC5BA,MAAM,CAACC,OAAO,GAAG,KAAK;QACxB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EAAC;IAAAd,GAAA;IAAAJ,KAAA,EAED,SAAAmB,kBAA0BC,IAAwB,EAAQ;MACxD,IAAI,CAACN,UAAU,CAACM,IAAI,CAAC,CAACL,OAAO,CAAC,UAACE,MAAM,EAAK;QACxCA,MAAM,CAACC,OAAO,GAAG,IAAI;MACvB,CAAC,CAAC;IACJ;EAAC;IAAAd,GAAA;IAAAJ,KAAA,EAED,SAAAqB,WAAkBD,IAAwB,EACxCE,MAMC,EAAQ;MACT,IAAI,IAAI,CAACF,IAAI,KAAKA,IAAI,EACpB;MAEF,IAAI,CAACG,eAAe,CAACD,MAAM,CAAC;MAC5B,IAAI,CAACE,WAAW,CAACJ,IAAI,CAAC;MACtB,IAAI,CAACK,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAACC,gBAAgB,CAACN,IAAI,CAAC;MAC3B,IAAI,CAACO,oBAAoB,CAACP,IAAI,CAAC;MAE/B,IAAI,CAACA,IAAI,GAAGA,IAAI;IAClB;EAAC;IAAAhB,GAAA;IAAAJ,KAAA,EAED,SAAAuB,gBAAwBD,MAKvB,EAAQ;MACP,IAAAM,KAAA,GAA6EN,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,CAAC;QAAAO,UAAA,GAAAD,KAAA,CAAjFE,IAAI;QAAJA,IAAI,GAAAD,UAAA,cAAG,MAAM,GAAAA,UAAA;QAAAE,cAAA,GAAAH,KAAA,CAAEnC,QAAQ;QAARA,QAAQ,GAAAsC,cAAA,cAAG,CAAC,GAAAA,cAAA;QAAAC,YAAA,GAAAJ,KAAA,CAAEjC,MAAM;QAANA,MAAM,GAAAqC,YAAA,cAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAAA,YAAA;QAAAC,cAAA,GAAAL,KAAA,CAAEM,QAAQ;QAARA,QAAQ,GAAAD,cAAA,cAAG,IAAI,GAAAA,cAAA;MACxE,IAAIH,IAAI,KAAK,MAAM,EACjB,IAAI,CAACrC,QAAQ,GAAG0C,SAAS,MAEzB,IAAI,CAAC1C,QAAQ,GAAGA,QAAQ;MAE1B,IAAI,CAACK,QAAQ,CAACH,MAAM,CAACK,KAAK,GAAG,IAAIzC,OAAO,CAAC,CAAC,CAAC6E,SAAS,CAACzC,MAAM,CAAC;MAC5D,IAAI,CAAC0C,UAAU,GAAGH,QAAQ;IAC5B;EAAC;IAAA9B,GAAA;IAAAJ,KAAA,EAED,SAAAyB,kBAAA,EAAkC;MAAA,IAAAa,WAAA,EAAAC,UAAA;MAChC,CAAAD,WAAA,OAAI,CAACE,KAAK,cAAAF,WAAA,eAAVA,WAAA,CAAA3D,IAAA,KAAa,CAAC;MACd,CAAA4D,UAAA,OAAI,CAAC/E,IAAI,cAAA+E,UAAA,eAATA,UAAA,CAAWE,IAAI,CAAC,CAAC;IACnB;EAAC;IAAArC,GAAA;IAAAJ,KAAA,EAED,SAAA0B,iBAAyBgB,OAA2B,EAAQ;MAC1D,IAAI,CAAC/B,cAAc,CAAC,CAAC;MACrB,IAAI,CAACQ,iBAAiB,CAACuB,OAAO,CAAC;MAC/B,IAAI,CAACvB,iBAAiB,CAAC,IAAI,CAACC,IAAI,CAAC;MAEjC,IAAI,CAACtB,QAAQ,CAACO,QAAQ,CAACL,KAAK,GAAG,GAAG;MAClC,IAAI,CAACF,QAAQ,MAAA6C,MAAA,CAAM,IAAI,CAACvB,IAAI,YAAS,CAACpB,KAAK,GAAG,KAAK;MACnD,IAAI,CAACF,QAAQ,MAAA6C,MAAA,CAAMD,OAAO,YAAS,CAAC1C,KAAK,GAAG,IAAI;IAClD;EAAC;IAAAI,GAAA;IAAAJ,KAAA,EAED,SAAA2B,qBAA6Be,OAA2B,EAAQ;MAAA,IAAAE,MAAA;MAC9D,IAAMC,QAAQ,GAAG,IAAI,CAACzB,IAAI;MAC1B,IAAM0B,IAAI,GAAG,IAAI,CAACC,UAAU,CAAC,CAAC;MAC9B,IAAMC,SAAS,GAAAC,IAAA,CAAAC,GAAA,CAAK,CAAC,GAAGJ,IAAI,GAAIA,IAAI,EAAM,CAAC,GAAG,CAAC,CAAC;MAEhD,IAAMK,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;QACvBP,MAAI,CAAC9B,UAAU,CAAC+B,QAAQ,CAAC,CAAC9B,OAAO,CAAC,UAACE,MAAM,EAAK;UAC5CA,MAAM,CAACC,OAAO,GAAG,KAAK;QACxB,CAAC,CAAC;QACF0B,MAAI,CAACQ,aAAa,CAAC;UAAEhC,IAAI,EAAE,gBAAgB;UAAEiC,KAAK,EAAEX;QAAQ,CAAC,CAAC;MAChE,CAAC;MAEDY,qBAAqB,CAAC,YAAM;QAC1B,IAAIV,MAAI,CAACnD,QAAQ,EACfmD,MAAI,CAACW,eAAe,CAACJ,UAAU,CAAC,MAEhCP,MAAI,CAACY,gBAAgB,CAACR,SAAS,EAAEG,UAAU,CAAC;MAChD,CAAC,CAAC;IACJ;EAAC;IAAA/C,GAAA;IAAAJ,KAAA,EAED,SAAAuD,gBAAwBJ,UAAsB,EAAQ;MACpD,IAAI,CAAC3F,IAAI,GAAGA,IAAI,CAACiG,EAAE,CAAC,IAAI,CAAC3D,QAAQ,CAACO,QAAQ,EAAE;QAC1CL,KAAK,EAAE,GAAG;QACVP,QAAQ,EAAE,IAAI,CAACA,QAAQ;QACvBiE,IAAI,EAAE,QAAQ;QACdP,UAAU,EAAVA;MACF,CAAC,CAAC;IACJ;EAAC;IAAA/C,GAAA;IAAAJ,KAAA,EAED,SAAAwD,iBAAyBR,SAAiB,EAAEG,UAAsB,EAAQ;MAAA,IAAAQ,MAAA;MACxE,IAAIlE,QAAQ,GAAG,CAAC;MAChB,IAAI,CAAC+C,KAAK,GAAG/E,GAAG,CAACwC,QAAQ,CAAC,UAAC2D,KAAK,EAAK;QACnCnE,QAAQ,IAAImE,KAAK;QACjB,IAAMvD,QAAQ,GAAA4C,IAAA,CAAAC,GAAA,CAAIzD,QAAQ,GAAGuD,SAAS,EAAK,CAAC;QAC5CW,MAAI,CAAC7D,QAAQ,CAACO,QAAQ,CAACL,KAAK,IAAIK,QAAQ;QAExC,IAAIsD,MAAI,CAAC7D,QAAQ,CAACO,QAAQ,CAACL,KAAK,GAAG,GAAG,EAAE;UACtC2D,MAAI,CAACnB,KAAK,CAAC,CAAC;UACZW,UAAU,CAAC,CAAC;QACd;MACF,CAAC,CAAC;IACJ;EAAC;IAAA/C,GAAA;IAAAJ,KAAA,EAED,SAAA6D,UAAiB5C,MAAgB,EAAQ;MACvC,IAAI,CAACI,UAAU,CAAC,MAAM,CAAC;MACvB,IAAMyC,IAAI,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,CAAC;MACvC,IAAI,CAAC+C,OAAO,CAACC,GAAG,CAACH,IAAI,EAAE7C,MAAM,CAAC;MAE9B,IAAI,CAACiD,kBAAkB,CAACjD,MAAM,EAAE6C,IAAI,CAAC;MACrC,IAAI,CAACK,gBAAgB,CAAC,CAAC;IACzB;EAAC;IAAA/D,GAAA;IAAAJ,KAAA,EAED,SAAA+D,cAAsB9C,MAAgB,EAAU;MAC9C;MACA,OAAOA,MAAM,CAACmD,GAAG,KAAK,QAAQ,GAAGnD,MAAM,CAACoD,QAAQ,GAAGpD,MAAM,CAAC6C,IAAI;IAChE;EAAC;IAAA1D,GAAA;IAAAJ,KAAA,EAED,SAAAsE,mBAA2BlD,IAAwB,EAAQ;MACzD,IAAI,IAAI,CAACN,UAAU,CAACM,IAAI,CAAC,CAACmD,GAAG,CAAC,QAAQ,CAAC,EAAE;QACvC,IAAI,CAACC,gBAAgB,CAACpD,IAAI,CAAC;MAC7B,CAAC,MACI;QACH,IAAMqD,UAAU,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAC;QAC1C7G,cAAc,CAAC4G,UAAU,EAAErD,IAAI,EAAE,IAAI,CAACtB,QAAQ,CAAC;QAC/C,IAAI,CAACgB,UAAU,CAACM,IAAI,CAAC,CAAC6C,GAAG,CAAC,QAAQ,EAAEQ,UAAU,CAAC;QAC/C,IAAI,CAACE,GAAG,CAACF,UAAU,CAAC;MACtB;IACF;EAAC;IAAArE,GAAA;IAAAJ,KAAA,EAED,SAAA4E,qBAA6BxD,IAAwB,EAAE;MACrD,IAAIyD,OAAO,GAAG,KAAK;MAEnBjE,MAAM,CAACC,MAAM,CAAC,IAAI,CAACC,UAAU,CAAC,CAACgE,KAAK,CAAC,CAAC,CAAC,CAAC/D,OAAO,CAAC,UAACC,SAAS,EAAK;QAC7DA,SAAS,CAACD,OAAO,CAAC,UAACE,MAAM,EAAK;UAC5B,IAAI/C,eAAe,CAAC6G,IAAI,CAAC,UAAAC,QAAQ;YAAA,OAAI/D,MAAM,CAACgE,IAAI,CAACC,QAAQ,CAACF,QAAQ,CAAC;UAAA,EAAC,EAAE;YACpEH,OAAO,GAAG,IAAI;YACd5D,MAAM,CAACkE,gBAAgB,CAAC,CAAC;YACzBnE,SAAS,CAACoE,MAAM,CAACnE,MAAM,CAAC6C,IAAI,CAAC;UAC/B;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF,IAAIe,OAAO,IAAIzD,IAAI,KAAK,MAAM,EAC5B,IAAI,CAACkD,kBAAkB,CAAClD,IAAI,CAAC;IACjC;EAAC;IAAAhB,GAAA;IAAAJ,KAAA,EAED,SAAAT,mBAA2BH,IAAc,EAAE;MACzC,IAAQiG,IAAI,GAAejG,IAAI,CAAvBiG,IAAI;QAAEC,QAAQ,GAAKlG,IAAI,CAAjBkG,QAAQ;MACtB,IAAMtB,OAAO,GAAG,EAAE;MAClB,IAAIa,OAAO,GAAG,KAAK;MAEnBjE,MAAM,CAACC,MAAM,CAAC,IAAI,CAACC,UAAU,CAAC,CAACgE,KAAK,CAAC,CAAC,CAAC,CAAC/D,OAAO,CAAC,UAACC,SAAS,EAAK;QAC7DA,SAAS,CAACD,OAAO,CAAC,UAACE,MAAM,EAAK;UAC5B,IAAI/C,eAAe,CAAC6G,IAAI,CAAC,UAAAC,QAAQ;YAAA,OAAI/D,MAAM,CAACgE,IAAI,CAACC,QAAQ,CAACF,QAAQ,CAAC;UAAA,EAAC,EAAE;YACpEH,OAAO,GAAG,IAAI;YACd5D,MAAM,CAACkE,gBAAgB,CAAC,CAAC;YACzBnE,SAAS,CAACoE,MAAM,CAACnE,MAAM,CAAC6C,IAAI,CAAC;UAC/B;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF,IAAIe,OAAO,EAAE;QACX;MAAA;IAEJ;EAAC;IAAAzE,GAAA;IAAAJ,KAAA,EAED,SAAAX,mBAA2BD,IAAc,EAAE,CAAC;EAAC;IAAAgB,GAAA;IAAAJ,KAAA,EAO7C,SAAAwB,YAAoBJ,IAAwB,EAAE;MAAA,IAAAmE,MAAA;MAC5C,IAAI,IAAI,CAAClD,UAAU,EACjB,IAAI,CAACuC,oBAAoB,CAACxD,IAAI,CAAC;MAEjC,IAAI,IAAI,CAACoE,KAAK,CAACC,MAAM,GAAG,CAAC,EAAE;QACzB,IAAI,CAACD,KAAK,CAACzE,OAAO,CAAC,UAAC3B,IAAI,EAAK;UAC3BmG,MAAI,CAACG,gBAAgB,CAACtG,IAAI,CAACgC,IAAI,CAAC,CAAChC,IAAI,CAAC;QACxC,CAAC,CAAC;MACJ;IACF;EAAC;IAAAgB,GAAA;IAAAJ,KAAA,EAED,SAAAkE,mBAA2BjD,MAAgB,EAAE6C,IAAY,EAAQ;MAC/D,IAAM6B,UAAU,GAAG1E,MAAM;MACzB,IAAI,CAAC2E,kBAAkB,CAACD,UAAU,CAAC;MACnC,IAAI,CAAC7E,UAAU,CAAC/B,IAAI,CAACkF,GAAG,CAACH,IAAI,EAAE6B,UAAU,CAAC;MAC1C,IAAI,CAAChB,GAAG,CAACgB,UAAU,CAAC;MAEpB,IAAME,aAAa,GAAG5E,MAAM,CAAC6E,KAAK,CAAC,CAAC;MACpC,IAAI,CAACC,mBAAmB,CAACF,aAAa,CAAC;MACvC,IAAI,CAAC/E,UAAU,CAAC5B,OAAO,CAAC+E,GAAG,CAACH,IAAI,EAAE+B,aAAa,CAAC;MAChD,IAAI,CAAClB,GAAG,CAACkB,aAAa,CAAC;MAEvB,IAAMG,UAAU,GAAG/E,MAAM,CAAC6E,KAAK,CAAC,CAAC;MACjC,IAAI,CAACG,kBAAkB,CAACD,UAAU,CAAC;MACnC,IAAI,CAAClF,UAAU,CAAC7B,IAAI,CAACgF,GAAG,CAACH,IAAI,EAAEkC,UAAU,CAAC;MAC1C,IAAI,CAACrB,GAAG,CAACqB,UAAU,CAAC;MAEpB,IAAME,WAAW,GAAGjF,MAAM,CAAC6E,KAAK,CAAC,CAAC;MAClC,IAAI,CAACK,mBAAmB,CAACD,WAAW,CAAC;MACrC,IAAI,CAACpF,UAAU,CAAC9B,KAAK,CAACiF,GAAG,CAACH,IAAI,EAAEoC,WAAW,CAAC;MAC5C,IAAI,CAACvB,GAAG,CAACuB,WAAW,CAAC;MAErB,IAAI,CAACpG,QAAQ,CAACY,OAAO,CAACV,KAAK,GAAG,IAAI,CAAC+C,UAAU,CAAC,CAAC;IACjD;EAAC;IAAA3C,GAAA;IAAAJ,KAAA,EAED,SAAAoG,aAAoBnF,MAAgB,EAAQ;MAC1C,IAAM6C,IAAI,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,CAAC;MACvC,IAAI,CAAC+C,OAAO,CAACoB,MAAM,CAACtB,IAAI,CAAC;MAEzBlD,MAAM,CAACC,MAAM,CAAC,IAAI,CAACC,UAAU,CAAC,CAACC,OAAO,CAAC,UAACC,SAAS,EAAK;QACpD,IAAMqF,GAAG,GAAGrF,SAAS,CAACsF,GAAG,CAACxC,IAAI,CAAC;QAC/B,IAAIuC,GAAG,EAAE;UACPA,GAAG,CAAClB,gBAAgB,CAAC,CAAC;UACtBnE,SAAS,CAACoE,MAAM,CAACtB,IAAI,CAAC;QACxB;MACF,CAAC,CAAC;MAEF,IAAI,CAAChE,QAAQ,CAACY,OAAO,CAACV,KAAK,GAAG,IAAI,CAAC+C,UAAU,CAAC,CAAC;IACjD;EAAC;IAAA3C,GAAA;IAAAJ,KAAA,EAED,SAAA0E,iBAAA,EAAiC;MAC/B,IAAM6B,GAAG,GAAG,IAAI,CAACC,IAAI;MACrB,IAAM1D,IAAI,GAAGyD,GAAG,CAACE,OAAO,CAAC,IAAIlJ,OAAO,CAAC,CAAC,CAAC;MACvC,IAAMoC,MAAM,GAAG4G,GAAG,CAACG,SAAS,CAAC,IAAInJ,OAAO,CAAC,CAAC,CAAC;MAE3C,IAAMoJ,KAAK,GAAG,IAAIrJ,aAAa,CAACwF,IAAI,CAAC8D,CAAC,EAAE9D,IAAI,CAAC+D,CAAC,CAAC;MAC/C,IAAMvB,QAAQ,GAAG,IAAIlI,iBAAiB,CAAC;QAAE0J,KAAK,EAAE,IAAI5J,KAAK,CAAC,MAAM;MAAE,CAAC,CAAC;MACpE,IAAM6J,IAAI,GAAG,IAAI5J,IAAI,CAACwJ,KAAK,EAAErB,QAAQ,CAAC;MAEtCyB,IAAI,CAACC,QAAQ,CAACJ,CAAC,GAAG,CAAC3D,IAAI,CAACgE,EAAE,GAAG,CAAC;MAC9BF,IAAI,CAACG,QAAQ,CAACjD,GAAG,CAACtE,MAAM,CAACiH,CAAC,EAAE5I,eAAe,EAAE2B,MAAM,CAACkH,CAAC,CAAC;MAEtD,OAAOE,IAAI;IACb;EAAC;IAAA3G,GAAA;IAAAJ,KAAA,EAED,SAAAwE,iBAAyBpD,IAAwB,EAAQ;MACvD,IAAI,CAAC,IAAI,CAACN,UAAU,CAACM,IAAI,CAAC,CAACmD,GAAG,CAAC,QAAQ,CAAC,EACtC;MAEF,IAAMgC,GAAG,GAAG,IAAI,CAACC,IAAI;MACrB,IAAM1D,IAAI,GAAGyD,GAAG,CAACE,OAAO,CAAC,IAAIlJ,OAAO,CAAC,CAAC,CAAC;MACvC,IAAMoC,MAAM,GAAG4G,GAAG,CAACG,SAAS,CAAC,IAAInJ,OAAO,CAAC,CAAC,CAAC;MAE1C,IAAI,CAACuD,UAAU,CAACM,IAAI,CAAC,CAACkF,GAAG,CAAC,QAAQ,CAAC,CAAUa,QAAQ,CAACC,OAAO,CAAC,CAAC;MAC/D,IAAI,CAACtG,UAAU,CAACM,IAAI,CAAC,CAACkF,GAAG,CAAC,QAAQ,CAAC,CAAUa,QAAQ,GAAG,IAAI7J,aAAa,CAACwF,IAAI,CAAC8D,CAAC,EAAE9D,IAAI,CAAC+D,CAAC,CAAC;MACzF,IAAI,CAAC/F,UAAU,CAACM,IAAI,CAAC,CAACkF,GAAG,CAAC,QAAQ,CAAC,CAAUY,QAAQ,CAACjD,GAAG,CAACtE,MAAM,CAACiH,CAAC,EAAE5I,eAAe,EAAE2B,MAAM,CAACkH,CAAC,CAAC;IACjG;EAAC;IAAAzG,GAAA;IAAAkG,GAAA,EAED,SAAAA,IAAA,EAAyB;MACvB,IAAME,IAAI,GAAG,IAAIvJ,IAAI,CAAC,CAAC;MACvB,IAAI,CAAC6D,UAAU,CAAC/B,IAAI,CAACgC,OAAO,CAAC,UAACE,MAAM,EAAK;QACvCuF,IAAI,CAACa,cAAc,CAACpG,MAAM,CAAC;MAC7B,CAAC,CAAC;MACF,OAAOuF,IAAI;IACb;EAAC;IAAApG,GAAA;IAAAJ,KAAA,EAED,SAAA+C,WAAA,EAA6B;MAC3B,IAAMyD,IAAI,GAAG,IAAI,CAACA,IAAI;MACtB,IAAMc,QAAQ,GAAG,IAAI,CAACC,cAAc,CAACf,IAAI,CAAC;MAC1C,IAAMgB,WAAW,GAAG,IAAI,CAACC,oBAAoB,CAACH,QAAQ,CAAC;MACvD,OAAOE,WAAW,GAAGvJ,iBAAiB;IACxC;EAAC;IAAAmC,GAAA;IAAAJ,KAAA,EAED,SAAAuH,eAAuBf,IAAU,EAAa;MAC5C,OAAO,CACL,IAAIjJ,OAAO,CAACiJ,IAAI,CAACkB,GAAG,CAACd,CAAC,EAAEJ,IAAI,CAACkB,GAAG,CAACC,CAAC,EAAEnB,IAAI,CAACkB,GAAG,CAACb,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACkB,GAAG,CAACd,CAAC,EAAEJ,IAAI,CAACkB,GAAG,CAACC,CAAC,EAAEnB,IAAI,CAACoB,GAAG,CAACf,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACkB,GAAG,CAACd,CAAC,EAAEJ,IAAI,CAACoB,GAAG,CAACD,CAAC,EAAEnB,IAAI,CAACkB,GAAG,CAACb,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACkB,GAAG,CAACd,CAAC,EAAEJ,IAAI,CAACoB,GAAG,CAACD,CAAC,EAAEnB,IAAI,CAACoB,GAAG,CAACf,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACoB,GAAG,CAAChB,CAAC,EAAEJ,IAAI,CAACkB,GAAG,CAACC,CAAC,EAAEnB,IAAI,CAACkB,GAAG,CAACb,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACoB,GAAG,CAAChB,CAAC,EAAEJ,IAAI,CAACkB,GAAG,CAACC,CAAC,EAAEnB,IAAI,CAACoB,GAAG,CAACf,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACoB,GAAG,CAAChB,CAAC,EAAEJ,IAAI,CAACoB,GAAG,CAACD,CAAC,EAAEnB,IAAI,CAACkB,GAAG,CAACb,CAAC,CAAC,EAC/C,IAAItJ,OAAO,CAACiJ,IAAI,CAACoB,GAAG,CAAChB,CAAC,EAAEJ,IAAI,CAACoB,GAAG,CAACD,CAAC,EAAEnB,IAAI,CAACoB,GAAG,CAACf,CAAC,CAAC,CAChD;IACH;EAAC;IAAAzG,GAAA;IAAAJ,KAAA,EAED,SAAAyH,qBAA6BH,QAAmB,EAAU;MAAA,IAAAO,MAAA;MACxD,OAAOP,QAAQ,CAACQ,MAAM,CAAC,UAACF,GAAG,EAAEG,MAAM,EAAK;QACtC,IAAMC,QAAQ,GAAGH,MAAI,CAAClI,MAAM,CAACsI,UAAU,CAACF,MAAM,CAAC;QAC/C,OAAO9E,IAAI,CAAC2E,GAAG,CAACA,GAAG,EAAEI,QAAQ,CAAC;MAChC,CAAC,EAAE,CAAC,CAAC;IACP;EAAC;IAAA5H,GAAA;IAAAJ,KAAA,EAED,SAAA+F,oBAA4B9E,MAAgB,EAAQ;MAClDtD,qBAAqB,CAACsD,MAAM,EAAE,IAAI,CAACnB,QAAQ,CAAC;IAC9C;EAAC;IAAAM,GAAA;IAAAJ,KAAA,EAED,SAAA4F,mBAA2B3E,MAAgB,EAAQ;MACjDnD,gBAAgB,CAACmD,MAAM,EAAE,IAAI,CAACnB,QAAQ,CAAC;IACzC;EAAC;IAAAM,GAAA;IAAAJ,KAAA,EAED,SAAAiG,mBAA2BhF,MAAgB,EAAQ;MACjDvD,iBAAiB,CAACuD,MAAM,EAAE,IAAI,CAACnB,QAAQ,CAAC;IAC1C;EAAC;IAAAM,GAAA;IAAAJ,KAAA,EAED,SAAAmG,oBAA4BlF,MAAgB,EAAQ;MAClDrD,iBAAiB,CAACqD,MAAM,EAAE,IAAI,CAACnB,QAAQ,CAAC;IAC1C;EAAC;IAAAM,GAAA;IAAAJ,KAAA,EAED,SAAAmE,iBAAA,EAAiC;MAC/B,IAAI,CAACxD,cAAc,CAAC,CAAC;MACrB,IAAI,CAACQ,iBAAiB,CAAC,MAAM,CAAC;IAChC;EAAC;EAAA,OAAAhD,oBAAA;AAAA,EAvWuCd,QAAQ"}