belowjs 1.1.0 → 1.3.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/CHANGELOG.md +13 -0
- package/README.md +4 -4
- package/dist/belowjs.js +662 -475
- package/package.json +1 -1
package/dist/belowjs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as u from "three";
|
|
2
|
-
import { Controls as
|
|
3
|
-
class
|
|
2
|
+
import { Controls as Gi, Vector3 as D, MOUSE as Ce, TOUCH as pe, Quaternion as Ue, Spherical as vt, Vector2 as H, Ray as Pi, Plane as Ni, MathUtils as It, TrianglesDrawMode as Ui, TriangleFanDrawMode as lt, TriangleStripDrawMode as oi, Loader as Et, LoaderUtils as xe, FileLoader as le, MeshPhysicalMaterial as ee, Color as re, LinearSRGBColorSpace as Y, SRGBColorSpace as se, SpotLight as Hi, PointLight as Vi, DirectionalLight as Oi, Matrix4 as Re, InstancedMesh as qi, InstancedBufferAttribute as ji, Object3D as Bt, TextureLoader as Ki, ImageBitmapLoader as zi, BufferAttribute as ve, InterleavedBuffer as Yi, InterleavedBufferAttribute as Ae, LinearMipmapLinearFilter as Ve, NearestMipmapLinearFilter as Ji, LinearMipmapNearestFilter as Wi, NearestMipmapNearestFilter as Xi, LinearFilter as he, NearestFilter as ni, RepeatWrapping as ct, MirroredRepeatWrapping as Zi, ClampToEdgeWrapping as $i, PointsMaterial as es, Material as je, LineBasicMaterial as ts, MeshStandardMaterial as ri, DoubleSide as is, MeshBasicMaterial as fe, PropertyBinding as ss, BufferGeometry as ai, SkinnedMesh as os, Mesh as Qt, LineSegments as ns, Line as rs, LineLoop as as, Points as As, Group as Ke, PerspectiveCamera as ls, OrthographicCamera as cs, Skeleton as hs, AnimationClip as ds, Bone as gs, InterpolateDiscrete as us, InterpolateLinear as Ai, Texture as Dt, VectorKeyframeTrack as Rt, NumberKeyframeTrack as Lt, QuaternionKeyframeTrack as Tt, ColorManagement as ht, FrontSide as ps, Interpolant as fs, Box3 as Oe, Sphere as wt, CompressedCubeTexture as ms, CompressedArrayTexture as bs, CompressedTexture as li, NoColorSpace as Ft, RGBA_BPTC_Format as dt, RGBA_S3TC_DXT5_Format as gt, RGBA_S3TC_DXT3_Format as kt, RGB_S3TC_DXT1_Format as _t, RGBA_S3TC_DXT1_Format as ut, RGBA_ASTC_6x6_Format as Gt, RGBA_ASTC_4x4_Format as Ge, RGBA_ETC2_EAC_Format as ci, RGB_ETC2_Format as hi, RedFormat as Se, RGFormat as Me, RGBAFormat as me, UnsignedByteType as z, HalfFloatType as be, FloatType as De, DataTexture as Cs, Data3DTexture as Is, RGB_PVRTC_4BPPV1_Format as Es, RGB_ETC1_Format as Bs, RGBA_PVRTC_4BPPV1_Format as Qs, RGB_BPTC_UNSIGNED_Format as ws, SphereGeometry as ys, InstancedBufferGeometry as Ss, Float32BufferAttribute as Pt, InstancedInterleavedBuffer as pt, WireframeGeometry as Ms, ShaderMaterial as xs, ShaderLib as Pe, UniformsUtils as di, UniformsLib as Ne, Vector4 as Le, Line3 as vs } from "three";
|
|
3
|
+
class yt {
|
|
4
4
|
/**
|
|
5
5
|
* Creates a new EventSystem instance
|
|
6
6
|
*/
|
|
@@ -143,7 +143,7 @@ class qe {
|
|
|
143
143
|
return Array.isArray(t) ? t.some((s) => i(e, s)) : i(e, t);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
|
-
class
|
|
146
|
+
class Ds {
|
|
147
147
|
constructor(e = {}) {
|
|
148
148
|
this.config = e, this.scene = new u.Scene(), this.init();
|
|
149
149
|
}
|
|
@@ -164,7 +164,7 @@ class vs {
|
|
|
164
164
|
this.scene.clear();
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
const
|
|
167
|
+
const Nt = { type: "change" }, St = { type: "start" }, gi = { type: "end" }, Te = new Pi(), Ut = new Ni(), Rs = Math.cos(70 * It.DEG2RAD), k = new D(), U = 2 * Math.PI, x = {
|
|
168
168
|
NONE: -1,
|
|
169
169
|
ROTATE: 0,
|
|
170
170
|
DOLLY: 1,
|
|
@@ -174,7 +174,7 @@ const Pt = { type: "change" }, yt = { type: "start" }, di = { type: "end" }, Le
|
|
|
174
174
|
TOUCH_DOLLY_PAN: 5,
|
|
175
175
|
TOUCH_DOLLY_ROTATE: 6
|
|
176
176
|
}, ze = 1e-6;
|
|
177
|
-
class
|
|
177
|
+
class Ls extends Gi {
|
|
178
178
|
/**
|
|
179
179
|
* Constructs a new controls instance.
|
|
180
180
|
*
|
|
@@ -182,7 +182,7 @@ class Rs extends _i {
|
|
|
182
182
|
* @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
|
|
183
183
|
*/
|
|
184
184
|
constructor(e, t = null) {
|
|
185
|
-
super(e, t), this.state = x.NONE, this.target = new D(), this.cursor = new D(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: Ce.ROTATE, MIDDLE: Ce.DOLLY, RIGHT: Ce.PAN }, this.touches = { ONE: pe.ROTATE, TWO: pe.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new D(), this._lastQuaternion = new Ue(), this._lastTargetPosition = new D(), this._quat = new Ue().setFromUnitVectors(e.up, new D(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new
|
|
185
|
+
super(e, t), this.state = x.NONE, this.target = new D(), this.cursor = new D(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: Ce.ROTATE, MIDDLE: Ce.DOLLY, RIGHT: Ce.PAN }, this.touches = { ONE: pe.ROTATE, TWO: pe.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new D(), this._lastQuaternion = new Ue(), this._lastTargetPosition = new D(), this._quat = new Ue().setFromUnitVectors(e.up, new D(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new vt(), this._sphericalDelta = new vt(), this._scale = 1, this._panOffset = new D(), this._rotateStart = new H(), this._rotateEnd = new H(), this._rotateDelta = new H(), this._panStart = new H(), this._panEnd = new H(), this._panDelta = new H(), this._dollyStart = new H(), this._dollyEnd = new H(), this._dollyDelta = new H(), this._dollyDirection = new D(), this._mouse = new H(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Fs.bind(this), this._onPointerDown = Ts.bind(this), this._onPointerUp = ks.bind(this), this._onContextMenu = Vs.bind(this), this._onMouseWheel = Ps.bind(this), this._onKeyDown = Ns.bind(this), this._onTouchStart = Us.bind(this), this._onTouchMove = Hs.bind(this), this._onMouseDown = _s.bind(this), this._onMouseMove = Gs.bind(this), this._interceptControlDown = Os.bind(this), this._interceptControlUp = qs.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
|
|
186
186
|
}
|
|
187
187
|
connect(e) {
|
|
188
188
|
super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { passive: !0, capture: !0 }), this.domElement.style.touchAction = "none";
|
|
@@ -243,7 +243,7 @@ class Rs extends _i {
|
|
|
243
243
|
* was called, or the initial state.
|
|
244
244
|
*/
|
|
245
245
|
reset() {
|
|
246
|
-
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(
|
|
246
|
+
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Nt), this.update(), this.state = x.NONE;
|
|
247
247
|
}
|
|
248
248
|
update(e = null) {
|
|
249
249
|
const t = this.object.position;
|
|
@@ -273,12 +273,12 @@ class Rs extends _i {
|
|
|
273
273
|
a.unproject(this.object), this.object.position.sub(a).add(r), this.object.updateMatrixWorld(), n = k.length();
|
|
274
274
|
} else
|
|
275
275
|
console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
|
|
276
|
-
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (
|
|
276
|
+
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (Te.origin.copy(this.object.position), Te.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(Te.direction)) < Rs ? this.object.lookAt(this.target) : (Ut.setFromNormalAndCoplanarPoint(this.object.up, this.target), Te.intersectPlane(Ut, this.target))));
|
|
277
277
|
} else if (this.object.isOrthographicCamera) {
|
|
278
278
|
const n = this.object.zoom;
|
|
279
279
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), n !== this.object.zoom && (this.object.updateProjectionMatrix(), o = !0);
|
|
280
280
|
}
|
|
281
|
-
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > ze || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > ze || this._lastTargetPosition.distanceToSquared(this.target) > ze ? (this.dispatchEvent(
|
|
281
|
+
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > ze || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > ze || this._lastTargetPosition.distanceToSquared(this.target) > ze ? (this.dispatchEvent(Nt), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
|
|
282
282
|
}
|
|
283
283
|
_getAutoRotationAngle(e) {
|
|
284
284
|
return e !== null ? U / 60 * this.autoRotateSpeed * e : U / 60 / 60 * this.autoRotateSpeed;
|
|
@@ -473,13 +473,13 @@ class Rs extends _i {
|
|
|
473
473
|
function Ts(c) {
|
|
474
474
|
this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(c.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(c) && (this._addPointer(c), c.pointerType === "touch" ? this._onTouchStart(c) : this._onMouseDown(c)));
|
|
475
475
|
}
|
|
476
|
-
function
|
|
476
|
+
function Fs(c) {
|
|
477
477
|
this.enabled !== !1 && (c.pointerType === "touch" ? this._onTouchMove(c) : this._onMouseMove(c));
|
|
478
478
|
}
|
|
479
|
-
function
|
|
479
|
+
function ks(c) {
|
|
480
480
|
switch (this._removePointer(c), this._pointers.length) {
|
|
481
481
|
case 0:
|
|
482
|
-
this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(
|
|
482
|
+
this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(gi), this.state = x.NONE;
|
|
483
483
|
break;
|
|
484
484
|
case 1:
|
|
485
485
|
const e = this._pointers[0], t = this._pointerPositions[e];
|
|
@@ -487,7 +487,7 @@ function Fs(c) {
|
|
|
487
487
|
break;
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
|
-
function
|
|
490
|
+
function _s(c) {
|
|
491
491
|
let e;
|
|
492
492
|
switch (c.button) {
|
|
493
493
|
case 0:
|
|
@@ -528,9 +528,9 @@ function ks(c) {
|
|
|
528
528
|
default:
|
|
529
529
|
this.state = x.NONE;
|
|
530
530
|
}
|
|
531
|
-
this.state !== x.NONE && this.dispatchEvent(
|
|
531
|
+
this.state !== x.NONE && this.dispatchEvent(St);
|
|
532
532
|
}
|
|
533
|
-
function
|
|
533
|
+
function Gs(c) {
|
|
534
534
|
switch (this.state) {
|
|
535
535
|
case x.ROTATE:
|
|
536
536
|
if (this.enableRotate === !1) return;
|
|
@@ -546,13 +546,13 @@ function _s(c) {
|
|
|
546
546
|
break;
|
|
547
547
|
}
|
|
548
548
|
}
|
|
549
|
-
function Gs(c) {
|
|
550
|
-
this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(yt), this._handleMouseWheel(this._customWheelEvent(c)), this.dispatchEvent(di));
|
|
551
|
-
}
|
|
552
549
|
function Ps(c) {
|
|
553
|
-
this.enabled
|
|
550
|
+
this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(St), this._handleMouseWheel(this._customWheelEvent(c)), this.dispatchEvent(gi));
|
|
554
551
|
}
|
|
555
552
|
function Ns(c) {
|
|
553
|
+
this.enabled !== !1 && this._handleKeyDown(c);
|
|
554
|
+
}
|
|
555
|
+
function Us(c) {
|
|
556
556
|
switch (this._trackPointer(c), this._pointers.length) {
|
|
557
557
|
case 1:
|
|
558
558
|
switch (this.touches.ONE) {
|
|
@@ -585,9 +585,9 @@ function Ns(c) {
|
|
|
585
585
|
default:
|
|
586
586
|
this.state = x.NONE;
|
|
587
587
|
}
|
|
588
|
-
this.state !== x.NONE && this.dispatchEvent(
|
|
588
|
+
this.state !== x.NONE && this.dispatchEvent(St);
|
|
589
589
|
}
|
|
590
|
-
function
|
|
590
|
+
function Hs(c) {
|
|
591
591
|
switch (this._trackPointer(c), this.state) {
|
|
592
592
|
case x.TOUCH_ROTATE:
|
|
593
593
|
if (this.enableRotate === !1) return;
|
|
@@ -609,16 +609,16 @@ function Us(c) {
|
|
|
609
609
|
this.state = x.NONE;
|
|
610
610
|
}
|
|
611
611
|
}
|
|
612
|
-
function
|
|
612
|
+
function Vs(c) {
|
|
613
613
|
this.enabled !== !1 && c.preventDefault();
|
|
614
614
|
}
|
|
615
|
-
function
|
|
615
|
+
function Os(c) {
|
|
616
616
|
c.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
617
617
|
}
|
|
618
|
-
function
|
|
618
|
+
function qs(c) {
|
|
619
619
|
c.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
620
620
|
}
|
|
621
|
-
class
|
|
621
|
+
class js extends yt {
|
|
622
622
|
/**
|
|
623
623
|
* Creates a new Camera instance
|
|
624
624
|
*
|
|
@@ -639,7 +639,7 @@ class qs extends wt {
|
|
|
639
639
|
}
|
|
640
640
|
initControls(e) {
|
|
641
641
|
if (!this.controls) {
|
|
642
|
-
this.controls = new
|
|
642
|
+
this.controls = new Ls(this.camera, e);
|
|
643
643
|
const t = this.config.desktop || {};
|
|
644
644
|
this.controls.enableDamping = t.enableDamping ?? !0, this.controls.dampingFactor = t.dampingFactor ?? 0.08, this.controls.maxDistance = t.maxDistance ?? 100, this.controls.minDistance = t.minDistance ?? 0.5, this.controls.addEventListener("change", () => {
|
|
645
645
|
this.emit("change");
|
|
@@ -738,10 +738,10 @@ class qs extends wt {
|
|
|
738
738
|
this.focusAnimation && (cancelAnimationFrame(this.focusAnimation), this.focusAnimation = null), this.controls && this.controls.dispose(), this.removeAllListeners();
|
|
739
739
|
}
|
|
740
740
|
}
|
|
741
|
-
function
|
|
742
|
-
if (e ===
|
|
741
|
+
function Ht(c, e) {
|
|
742
|
+
if (e === Ui)
|
|
743
743
|
return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), c;
|
|
744
|
-
if (e ===
|
|
744
|
+
if (e === lt || e === oi) {
|
|
745
745
|
let t = c.getIndex();
|
|
746
746
|
if (t === null) {
|
|
747
747
|
const n = [], r = c.getAttribute("position");
|
|
@@ -753,7 +753,7 @@ function Ut(c, e) {
|
|
|
753
753
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), c;
|
|
754
754
|
}
|
|
755
755
|
const i = t.count - 2, s = [];
|
|
756
|
-
if (e ===
|
|
756
|
+
if (e === lt)
|
|
757
757
|
for (let n = 1; n <= i; n++)
|
|
758
758
|
s.push(t.getX(0)), s.push(t.getX(n)), s.push(t.getX(n + 1));
|
|
759
759
|
else
|
|
@@ -765,7 +765,7 @@ function Ut(c, e) {
|
|
|
765
765
|
} else
|
|
766
766
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", e), c;
|
|
767
767
|
}
|
|
768
|
-
class
|
|
768
|
+
class ui extends Et {
|
|
769
769
|
/**
|
|
770
770
|
* Constructs a new glTF loader.
|
|
771
771
|
*
|
|
@@ -773,39 +773,39 @@ class gi extends It {
|
|
|
773
773
|
*/
|
|
774
774
|
constructor(e) {
|
|
775
775
|
super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(t) {
|
|
776
|
-
return new Js(t);
|
|
777
|
-
}), this.register(function(t) {
|
|
778
776
|
return new Ws(t);
|
|
779
777
|
}), this.register(function(t) {
|
|
780
|
-
return new
|
|
778
|
+
return new Xs(t);
|
|
781
779
|
}), this.register(function(t) {
|
|
782
780
|
return new ro(t);
|
|
783
781
|
}), this.register(function(t) {
|
|
784
782
|
return new ao(t);
|
|
785
783
|
}), this.register(function(t) {
|
|
786
|
-
return new
|
|
784
|
+
return new Ao(t);
|
|
787
785
|
}), this.register(function(t) {
|
|
788
786
|
return new $s(t);
|
|
789
787
|
}), this.register(function(t) {
|
|
790
788
|
return new eo(t);
|
|
791
789
|
}), this.register(function(t) {
|
|
792
790
|
return new to(t);
|
|
793
|
-
}), this.register(function(t) {
|
|
794
|
-
return new Ys(t);
|
|
795
791
|
}), this.register(function(t) {
|
|
796
792
|
return new io(t);
|
|
797
793
|
}), this.register(function(t) {
|
|
798
|
-
return new
|
|
799
|
-
}), this.register(function(t) {
|
|
800
|
-
return new oo(t);
|
|
794
|
+
return new Js(t);
|
|
801
795
|
}), this.register(function(t) {
|
|
802
796
|
return new so(t);
|
|
803
797
|
}), this.register(function(t) {
|
|
804
|
-
return new
|
|
798
|
+
return new Zs(t);
|
|
805
799
|
}), this.register(function(t) {
|
|
806
|
-
return new
|
|
800
|
+
return new no(t);
|
|
801
|
+
}), this.register(function(t) {
|
|
802
|
+
return new oo(t);
|
|
803
|
+
}), this.register(function(t) {
|
|
804
|
+
return new zs(t);
|
|
807
805
|
}), this.register(function(t) {
|
|
808
806
|
return new lo(t);
|
|
807
|
+
}), this.register(function(t) {
|
|
808
|
+
return new co(t);
|
|
809
809
|
});
|
|
810
810
|
}
|
|
811
811
|
/**
|
|
@@ -905,9 +905,9 @@ class gi extends It {
|
|
|
905
905
|
if (typeof e == "string")
|
|
906
906
|
o = JSON.parse(e);
|
|
907
907
|
else if (e instanceof ArrayBuffer)
|
|
908
|
-
if (A.decode(new Uint8Array(e, 0, 4)) ===
|
|
908
|
+
if (A.decode(new Uint8Array(e, 0, 4)) === pi) {
|
|
909
909
|
try {
|
|
910
|
-
n[S.KHR_BINARY_GLTF] = new
|
|
910
|
+
n[S.KHR_BINARY_GLTF] = new ho(e);
|
|
911
911
|
} catch (h) {
|
|
912
912
|
s && s(h);
|
|
913
913
|
return;
|
|
@@ -921,7 +921,7 @@ class gi extends It {
|
|
|
921
921
|
s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
|
|
922
922
|
return;
|
|
923
923
|
}
|
|
924
|
-
const a = new
|
|
924
|
+
const a = new yo(o, {
|
|
925
925
|
path: t || this.resourcePath || "",
|
|
926
926
|
crossOrigin: this.crossOrigin,
|
|
927
927
|
requestHeader: this.requestHeader,
|
|
@@ -939,16 +939,16 @@ class gi extends It {
|
|
|
939
939
|
const h = o.extensionsUsed[l], d = o.extensionsRequired || [];
|
|
940
940
|
switch (h) {
|
|
941
941
|
case S.KHR_MATERIALS_UNLIT:
|
|
942
|
-
n[h] = new
|
|
942
|
+
n[h] = new Ys();
|
|
943
943
|
break;
|
|
944
944
|
case S.KHR_DRACO_MESH_COMPRESSION:
|
|
945
|
-
n[h] = new
|
|
945
|
+
n[h] = new go(o, this.dracoLoader);
|
|
946
946
|
break;
|
|
947
947
|
case S.KHR_TEXTURE_TRANSFORM:
|
|
948
|
-
n[h] = new
|
|
948
|
+
n[h] = new uo();
|
|
949
949
|
break;
|
|
950
950
|
case S.KHR_MESH_QUANTIZATION:
|
|
951
|
-
n[h] = new
|
|
951
|
+
n[h] = new po();
|
|
952
952
|
break;
|
|
953
953
|
default:
|
|
954
954
|
d.indexOf(h) >= 0 && r[h] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + h + '".');
|
|
@@ -971,7 +971,7 @@ class gi extends It {
|
|
|
971
971
|
});
|
|
972
972
|
}
|
|
973
973
|
}
|
|
974
|
-
function
|
|
974
|
+
function Ks() {
|
|
975
975
|
let c = {};
|
|
976
976
|
return {
|
|
977
977
|
get: function(e) {
|
|
@@ -1012,7 +1012,7 @@ const S = {
|
|
|
1012
1012
|
EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
|
|
1013
1013
|
EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
|
|
1014
1014
|
};
|
|
1015
|
-
class
|
|
1015
|
+
class zs {
|
|
1016
1016
|
constructor(e) {
|
|
1017
1017
|
this.parser = e, this.name = S.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
|
|
1018
1018
|
}
|
|
@@ -1034,13 +1034,13 @@ class Ks {
|
|
|
1034
1034
|
const h = A.range !== void 0 ? A.range : 0;
|
|
1035
1035
|
switch (A.type) {
|
|
1036
1036
|
case "directional":
|
|
1037
|
-
a = new
|
|
1037
|
+
a = new Oi(l), a.target.position.set(0, 0, -1), a.add(a.target);
|
|
1038
1038
|
break;
|
|
1039
1039
|
case "point":
|
|
1040
|
-
a = new
|
|
1040
|
+
a = new Vi(l), a.distance = h;
|
|
1041
1041
|
break;
|
|
1042
1042
|
case "spot":
|
|
1043
|
-
a = new
|
|
1043
|
+
a = new Hi(l), a.distance = h, A.spot = A.spot || {}, A.spot.innerConeAngle = A.spot.innerConeAngle !== void 0 ? A.spot.innerConeAngle : 0, A.spot.outerConeAngle = A.spot.outerConeAngle !== void 0 ? A.spot.outerConeAngle : Math.PI / 4, a.angle = A.spot.outerConeAngle, a.penumbra = 1 - A.spot.innerConeAngle / A.spot.outerConeAngle, a.target.position.set(0, 0, -1), a.add(a.target);
|
|
1044
1044
|
break;
|
|
1045
1045
|
default:
|
|
1046
1046
|
throw new Error("THREE.GLTFLoader: Unexpected light type: " + A.type);
|
|
@@ -1058,7 +1058,7 @@ class Ks {
|
|
|
1058
1058
|
});
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|
|
1061
|
-
class
|
|
1061
|
+
class Ys {
|
|
1062
1062
|
constructor() {
|
|
1063
1063
|
this.name = S.KHR_MATERIALS_UNLIT;
|
|
1064
1064
|
}
|
|
@@ -1079,7 +1079,7 @@ class zs {
|
|
|
1079
1079
|
return Promise.all(s);
|
|
1080
1080
|
}
|
|
1081
1081
|
}
|
|
1082
|
-
class
|
|
1082
|
+
class Js {
|
|
1083
1083
|
constructor(e) {
|
|
1084
1084
|
this.parser = e, this.name = S.KHR_MATERIALS_EMISSIVE_STRENGTH;
|
|
1085
1085
|
}
|
|
@@ -1091,7 +1091,7 @@ class Ys {
|
|
|
1091
1091
|
return o !== void 0 && (t.emissiveIntensity = o), Promise.resolve();
|
|
1092
1092
|
}
|
|
1093
1093
|
}
|
|
1094
|
-
class
|
|
1094
|
+
class Ws {
|
|
1095
1095
|
constructor(e) {
|
|
1096
1096
|
this.parser = e, this.name = S.KHR_MATERIALS_CLEARCOAT;
|
|
1097
1097
|
}
|
|
@@ -1111,7 +1111,7 @@ class Js {
|
|
|
1111
1111
|
return Promise.all(o);
|
|
1112
1112
|
}
|
|
1113
1113
|
}
|
|
1114
|
-
class
|
|
1114
|
+
class Xs {
|
|
1115
1115
|
constructor(e) {
|
|
1116
1116
|
this.parser = e, this.name = S.KHR_MATERIALS_DISPERSION;
|
|
1117
1117
|
}
|
|
@@ -1127,7 +1127,7 @@ class Ws {
|
|
|
1127
1127
|
return t.dispersion = o.dispersion !== void 0 ? o.dispersion : 0, Promise.resolve();
|
|
1128
1128
|
}
|
|
1129
1129
|
}
|
|
1130
|
-
class
|
|
1130
|
+
class Zs {
|
|
1131
1131
|
constructor(e) {
|
|
1132
1132
|
this.parser = e, this.name = S.KHR_MATERIALS_IRIDESCENCE;
|
|
1133
1133
|
}
|
|
@@ -1143,7 +1143,7 @@ class Xs {
|
|
|
1143
1143
|
return n.iridescenceFactor !== void 0 && (t.iridescence = n.iridescenceFactor), n.iridescenceTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceMap", n.iridescenceTexture)), n.iridescenceIor !== void 0 && (t.iridescenceIOR = n.iridescenceIor), t.iridescenceThicknessRange === void 0 && (t.iridescenceThicknessRange = [100, 400]), n.iridescenceThicknessMinimum !== void 0 && (t.iridescenceThicknessRange[0] = n.iridescenceThicknessMinimum), n.iridescenceThicknessMaximum !== void 0 && (t.iridescenceThicknessRange[1] = n.iridescenceThicknessMaximum), n.iridescenceThicknessTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceThicknessMap", n.iridescenceThicknessTexture)), Promise.all(o);
|
|
1144
1144
|
}
|
|
1145
1145
|
}
|
|
1146
|
-
class
|
|
1146
|
+
class $s {
|
|
1147
1147
|
constructor(e) {
|
|
1148
1148
|
this.parser = e, this.name = S.KHR_MATERIALS_SHEEN;
|
|
1149
1149
|
}
|
|
@@ -1165,7 +1165,7 @@ class Zs {
|
|
|
1165
1165
|
return n.sheenRoughnessFactor !== void 0 && (t.sheenRoughness = n.sheenRoughnessFactor), n.sheenColorTexture !== void 0 && o.push(i.assignTexture(t, "sheenColorMap", n.sheenColorTexture, se)), n.sheenRoughnessTexture !== void 0 && o.push(i.assignTexture(t, "sheenRoughnessMap", n.sheenRoughnessTexture)), Promise.all(o);
|
|
1166
1166
|
}
|
|
1167
1167
|
}
|
|
1168
|
-
class
|
|
1168
|
+
class eo {
|
|
1169
1169
|
constructor(e) {
|
|
1170
1170
|
this.parser = e, this.name = S.KHR_MATERIALS_TRANSMISSION;
|
|
1171
1171
|
}
|
|
@@ -1181,7 +1181,7 @@ class $s {
|
|
|
1181
1181
|
return n.transmissionFactor !== void 0 && (t.transmission = n.transmissionFactor), n.transmissionTexture !== void 0 && o.push(i.assignTexture(t, "transmissionMap", n.transmissionTexture)), Promise.all(o);
|
|
1182
1182
|
}
|
|
1183
1183
|
}
|
|
1184
|
-
class
|
|
1184
|
+
class to {
|
|
1185
1185
|
constructor(e) {
|
|
1186
1186
|
this.parser = e, this.name = S.KHR_MATERIALS_VOLUME;
|
|
1187
1187
|
}
|
|
@@ -1199,7 +1199,7 @@ class eo {
|
|
|
1199
1199
|
return t.attenuationColor = new re().setRGB(r[0], r[1], r[2], Y), Promise.all(o);
|
|
1200
1200
|
}
|
|
1201
1201
|
}
|
|
1202
|
-
class
|
|
1202
|
+
class io {
|
|
1203
1203
|
constructor(e) {
|
|
1204
1204
|
this.parser = e, this.name = S.KHR_MATERIALS_IOR;
|
|
1205
1205
|
}
|
|
@@ -1215,7 +1215,7 @@ class to {
|
|
|
1215
1215
|
return t.ior = o.ior !== void 0 ? o.ior : 1.5, Promise.resolve();
|
|
1216
1216
|
}
|
|
1217
1217
|
}
|
|
1218
|
-
class
|
|
1218
|
+
class so {
|
|
1219
1219
|
constructor(e) {
|
|
1220
1220
|
this.parser = e, this.name = S.KHR_MATERIALS_SPECULAR;
|
|
1221
1221
|
}
|
|
@@ -1233,7 +1233,7 @@ class io {
|
|
|
1233
1233
|
return t.specularColor = new re().setRGB(r[0], r[1], r[2], Y), n.specularColorTexture !== void 0 && o.push(i.assignTexture(t, "specularColorMap", n.specularColorTexture, se)), Promise.all(o);
|
|
1234
1234
|
}
|
|
1235
1235
|
}
|
|
1236
|
-
class
|
|
1236
|
+
class oo {
|
|
1237
1237
|
constructor(e) {
|
|
1238
1238
|
this.parser = e, this.name = S.EXT_MATERIALS_BUMP;
|
|
1239
1239
|
}
|
|
@@ -1249,7 +1249,7 @@ class so {
|
|
|
1249
1249
|
return t.bumpScale = n.bumpFactor !== void 0 ? n.bumpFactor : 1, n.bumpTexture !== void 0 && o.push(i.assignTexture(t, "bumpMap", n.bumpTexture)), Promise.all(o);
|
|
1250
1250
|
}
|
|
1251
1251
|
}
|
|
1252
|
-
class
|
|
1252
|
+
class no {
|
|
1253
1253
|
constructor(e) {
|
|
1254
1254
|
this.parser = e, this.name = S.KHR_MATERIALS_ANISOTROPY;
|
|
1255
1255
|
}
|
|
@@ -1265,7 +1265,7 @@ class oo {
|
|
|
1265
1265
|
return n.anisotropyStrength !== void 0 && (t.anisotropy = n.anisotropyStrength), n.anisotropyRotation !== void 0 && (t.anisotropyRotation = n.anisotropyRotation), n.anisotropyTexture !== void 0 && o.push(i.assignTexture(t, "anisotropyMap", n.anisotropyTexture)), Promise.all(o);
|
|
1266
1266
|
}
|
|
1267
1267
|
}
|
|
1268
|
-
class
|
|
1268
|
+
class ro {
|
|
1269
1269
|
constructor(e) {
|
|
1270
1270
|
this.parser = e, this.name = S.KHR_TEXTURE_BASISU;
|
|
1271
1271
|
}
|
|
@@ -1282,7 +1282,7 @@ class no {
|
|
|
1282
1282
|
return t.loadTextureImage(e, o.source, n);
|
|
1283
1283
|
}
|
|
1284
1284
|
}
|
|
1285
|
-
class
|
|
1285
|
+
class ao {
|
|
1286
1286
|
constructor(e) {
|
|
1287
1287
|
this.parser = e, this.name = S.EXT_TEXTURE_WEBP;
|
|
1288
1288
|
}
|
|
@@ -1299,7 +1299,7 @@ class ro {
|
|
|
1299
1299
|
return i.loadTextureImage(e, n.source, A);
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
|
-
class
|
|
1302
|
+
class Ao {
|
|
1303
1303
|
constructor(e) {
|
|
1304
1304
|
this.parser = e, this.name = S.EXT_TEXTURE_AVIF;
|
|
1305
1305
|
}
|
|
@@ -1316,7 +1316,7 @@ class ao {
|
|
|
1316
1316
|
return i.loadTextureImage(e, n.source, A);
|
|
1317
1317
|
}
|
|
1318
1318
|
}
|
|
1319
|
-
class
|
|
1319
|
+
class lo {
|
|
1320
1320
|
constructor(e) {
|
|
1321
1321
|
this.name = S.EXT_MESHOPT_COMPRESSION, this.parser = e;
|
|
1322
1322
|
}
|
|
@@ -1342,7 +1342,7 @@ class Ao {
|
|
|
1342
1342
|
return null;
|
|
1343
1343
|
}
|
|
1344
1344
|
}
|
|
1345
|
-
class
|
|
1345
|
+
class co {
|
|
1346
1346
|
constructor(e) {
|
|
1347
1347
|
this.name = S.EXT_MESH_GPU_INSTANCING, this.parser = e;
|
|
1348
1348
|
}
|
|
@@ -1360,22 +1360,22 @@ class lo {
|
|
|
1360
1360
|
return r.length < 1 ? null : (r.push(this.parser.createNodeMesh(e)), Promise.all(r).then((a) => {
|
|
1361
1361
|
const l = a.pop(), h = l.isGroup ? l.children : [l], d = a[0].count, g = [];
|
|
1362
1362
|
for (const p of h) {
|
|
1363
|
-
const C = new Re(), I = new D(), f = new Ue(), m = new D(1, 1, 1), E = new
|
|
1363
|
+
const C = new Re(), I = new D(), f = new Ue(), m = new D(1, 1, 1), E = new qi(p.geometry, p.material, d);
|
|
1364
1364
|
for (let b = 0; b < d; b++)
|
|
1365
1365
|
A.TRANSLATION && I.fromBufferAttribute(A.TRANSLATION, b), A.ROTATION && f.fromBufferAttribute(A.ROTATION, b), A.SCALE && m.fromBufferAttribute(A.SCALE, b), E.setMatrixAt(b, C.compose(I, f, m));
|
|
1366
1366
|
for (const b in A)
|
|
1367
1367
|
if (b === "_COLOR_0") {
|
|
1368
1368
|
const B = A[b];
|
|
1369
|
-
E.instanceColor = new
|
|
1369
|
+
E.instanceColor = new ji(B.array, B.itemSize, B.normalized);
|
|
1370
1370
|
} else b !== "TRANSLATION" && b !== "ROTATION" && b !== "SCALE" && p.geometry.setAttribute(b, A[b]);
|
|
1371
|
-
|
|
1371
|
+
Bt.prototype.copy.call(E, p), this.parser.assignFinalMaterial(E), g.push(E);
|
|
1372
1372
|
}
|
|
1373
1373
|
return l.isGroup ? (l.clear(), l.add(...g), l) : g[0];
|
|
1374
1374
|
}));
|
|
1375
1375
|
}
|
|
1376
1376
|
}
|
|
1377
|
-
const
|
|
1378
|
-
class
|
|
1377
|
+
const pi = "glTF", we = 12, Vt = { JSON: 1313821514, BIN: 5130562 };
|
|
1378
|
+
class ho {
|
|
1379
1379
|
constructor(e) {
|
|
1380
1380
|
this.name = S.KHR_BINARY_GLTF, this.content = null, this.body = null;
|
|
1381
1381
|
const t = new DataView(e, 0, we), i = new TextDecoder();
|
|
@@ -1383,7 +1383,7 @@ class co {
|
|
|
1383
1383
|
magic: i.decode(new Uint8Array(e.slice(0, 4))),
|
|
1384
1384
|
version: t.getUint32(4, !0),
|
|
1385
1385
|
length: t.getUint32(8, !0)
|
|
1386
|
-
}, this.header.magic !==
|
|
1386
|
+
}, this.header.magic !== pi)
|
|
1387
1387
|
throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
|
|
1388
1388
|
if (this.header.version < 2)
|
|
1389
1389
|
throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
|
|
@@ -1393,10 +1393,10 @@ class co {
|
|
|
1393
1393
|
const r = o.getUint32(n, !0);
|
|
1394
1394
|
n += 4;
|
|
1395
1395
|
const A = o.getUint32(n, !0);
|
|
1396
|
-
if (n += 4, A ===
|
|
1396
|
+
if (n += 4, A === Vt.JSON) {
|
|
1397
1397
|
const a = new Uint8Array(e, we + n, r);
|
|
1398
1398
|
this.content = i.decode(a);
|
|
1399
|
-
} else if (A ===
|
|
1399
|
+
} else if (A === Vt.BIN) {
|
|
1400
1400
|
const a = we + n;
|
|
1401
1401
|
this.body = e.slice(a, a + r);
|
|
1402
1402
|
}
|
|
@@ -1406,7 +1406,7 @@ class co {
|
|
|
1406
1406
|
throw new Error("THREE.GLTFLoader: JSON content not found.");
|
|
1407
1407
|
}
|
|
1408
1408
|
}
|
|
1409
|
-
class
|
|
1409
|
+
class go {
|
|
1410
1410
|
constructor(e, t) {
|
|
1411
1411
|
if (!t)
|
|
1412
1412
|
throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
|
|
@@ -1415,11 +1415,11 @@ class ho {
|
|
|
1415
1415
|
decodePrimitive(e, t) {
|
|
1416
1416
|
const i = this.json, s = this.dracoLoader, o = e.extensions[this.name].bufferView, n = e.extensions[this.name].attributes, r = {}, A = {}, a = {};
|
|
1417
1417
|
for (const l in n) {
|
|
1418
|
-
const h =
|
|
1418
|
+
const h = ft[l] || l.toLowerCase();
|
|
1419
1419
|
r[h] = n[l];
|
|
1420
1420
|
}
|
|
1421
1421
|
for (const l in e.attributes) {
|
|
1422
|
-
const h =
|
|
1422
|
+
const h = ft[l] || l.toLowerCase();
|
|
1423
1423
|
if (n[l] !== void 0) {
|
|
1424
1424
|
const d = i.accessors[e.attributes[l]], g = Ie[d.componentType];
|
|
1425
1425
|
a[h] = g.name, A[h] = d.normalized === !0;
|
|
@@ -1438,7 +1438,7 @@ class ho {
|
|
|
1438
1438
|
});
|
|
1439
1439
|
}
|
|
1440
1440
|
}
|
|
1441
|
-
class
|
|
1441
|
+
class uo {
|
|
1442
1442
|
constructor() {
|
|
1443
1443
|
this.name = S.KHR_TEXTURE_TRANSFORM;
|
|
1444
1444
|
}
|
|
@@ -1446,12 +1446,12 @@ class go {
|
|
|
1446
1446
|
return (t.texCoord === void 0 || t.texCoord === e.channel) && t.offset === void 0 && t.rotation === void 0 && t.scale === void 0 || (e = e.clone(), t.texCoord !== void 0 && (e.channel = t.texCoord), t.offset !== void 0 && e.offset.fromArray(t.offset), t.rotation !== void 0 && (e.rotation = t.rotation), t.scale !== void 0 && e.repeat.fromArray(t.scale), e.needsUpdate = !0), e;
|
|
1447
1447
|
}
|
|
1448
1448
|
}
|
|
1449
|
-
class
|
|
1449
|
+
class po {
|
|
1450
1450
|
constructor() {
|
|
1451
1451
|
this.name = S.KHR_MESH_QUANTIZATION;
|
|
1452
1452
|
}
|
|
1453
1453
|
}
|
|
1454
|
-
class
|
|
1454
|
+
class fi extends fs {
|
|
1455
1455
|
constructor(e, t, i, s) {
|
|
1456
1456
|
super(e, t, i, s);
|
|
1457
1457
|
}
|
|
@@ -1464,17 +1464,17 @@ class pi extends ps {
|
|
|
1464
1464
|
interpolate_(e, t, i, s) {
|
|
1465
1465
|
const o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, A = r * 2, a = r * 3, l = s - t, h = (i - t) / l, d = h * h, g = d * h, p = e * a, C = p - a, I = -2 * g + 3 * d, f = g - d, m = 1 - I, E = f - d + h;
|
|
1466
1466
|
for (let b = 0; b !== r; b++) {
|
|
1467
|
-
const B = n[C + b + r], Q = n[C + b + A] * l, w = n[p + b + r],
|
|
1468
|
-
o[b] = m * B + E * Q + I * w + f *
|
|
1467
|
+
const B = n[C + b + r], Q = n[C + b + A] * l, w = n[p + b + r], T = n[p + b] * l;
|
|
1468
|
+
o[b] = m * B + E * Q + I * w + f * T;
|
|
1469
1469
|
}
|
|
1470
1470
|
return o;
|
|
1471
1471
|
}
|
|
1472
1472
|
}
|
|
1473
|
-
const
|
|
1474
|
-
class
|
|
1473
|
+
const fo = new Ue();
|
|
1474
|
+
class mo extends fi {
|
|
1475
1475
|
interpolate_(e, t, i, s) {
|
|
1476
1476
|
const o = super.interpolate_(e, t, i, s);
|
|
1477
|
-
return
|
|
1477
|
+
return fo.fromArray(o).normalize().toArray(o), o;
|
|
1478
1478
|
}
|
|
1479
1479
|
}
|
|
1480
1480
|
const j = {
|
|
@@ -1492,17 +1492,17 @@ const j = {
|
|
|
1492
1492
|
5123: Uint16Array,
|
|
1493
1493
|
5125: Uint32Array,
|
|
1494
1494
|
5126: Float32Array
|
|
1495
|
-
},
|
|
1496
|
-
9728:
|
|
1495
|
+
}, Ot = {
|
|
1496
|
+
9728: ni,
|
|
1497
1497
|
9729: he,
|
|
1498
|
-
9984:
|
|
1499
|
-
9985:
|
|
1500
|
-
9986:
|
|
1498
|
+
9984: Xi,
|
|
1499
|
+
9985: Wi,
|
|
1500
|
+
9986: Ji,
|
|
1501
1501
|
9987: Ve
|
|
1502
|
-
},
|
|
1503
|
-
33071:
|
|
1504
|
-
33648:
|
|
1505
|
-
10497:
|
|
1502
|
+
}, qt = {
|
|
1503
|
+
33071: $i,
|
|
1504
|
+
33648: Zi,
|
|
1505
|
+
10497: ct
|
|
1506
1506
|
}, Ye = {
|
|
1507
1507
|
SCALAR: 1,
|
|
1508
1508
|
VEC2: 2,
|
|
@@ -1511,7 +1511,7 @@ const j = {
|
|
|
1511
1511
|
MAT2: 4,
|
|
1512
1512
|
MAT3: 9,
|
|
1513
1513
|
MAT4: 16
|
|
1514
|
-
},
|
|
1514
|
+
}, ft = {
|
|
1515
1515
|
POSITION: "position",
|
|
1516
1516
|
NORMAL: "normal",
|
|
1517
1517
|
TANGENT: "tangent",
|
|
@@ -1527,26 +1527,26 @@ const j = {
|
|
|
1527
1527
|
translation: "position",
|
|
1528
1528
|
rotation: "quaternion",
|
|
1529
1529
|
weights: "morphTargetInfluences"
|
|
1530
|
-
},
|
|
1530
|
+
}, bo = {
|
|
1531
1531
|
CUBICSPLINE: void 0,
|
|
1532
1532
|
// We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
|
|
1533
1533
|
// keyframe track will be initialized with a default interpolation type, then modified.
|
|
1534
|
-
LINEAR:
|
|
1535
|
-
STEP:
|
|
1534
|
+
LINEAR: Ai,
|
|
1535
|
+
STEP: us
|
|
1536
1536
|
}, Je = {
|
|
1537
1537
|
OPAQUE: "OPAQUE",
|
|
1538
1538
|
MASK: "MASK",
|
|
1539
1539
|
BLEND: "BLEND"
|
|
1540
1540
|
};
|
|
1541
|
-
function
|
|
1542
|
-
return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new
|
|
1541
|
+
function Co(c) {
|
|
1542
|
+
return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new ri({
|
|
1543
1543
|
color: 16777215,
|
|
1544
1544
|
emissive: 0,
|
|
1545
1545
|
metalness: 1,
|
|
1546
1546
|
roughness: 1,
|
|
1547
1547
|
transparent: !1,
|
|
1548
1548
|
depthTest: !0,
|
|
1549
|
-
side:
|
|
1549
|
+
side: ps
|
|
1550
1550
|
})), c.DefaultMaterial;
|
|
1551
1551
|
}
|
|
1552
1552
|
function ae(c, e, t) {
|
|
@@ -1556,7 +1556,7 @@ function ae(c, e, t) {
|
|
|
1556
1556
|
function ie(c, e) {
|
|
1557
1557
|
e.extras !== void 0 && (typeof e.extras == "object" ? Object.assign(c.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras));
|
|
1558
1558
|
}
|
|
1559
|
-
function
|
|
1559
|
+
function Io(c, e, t) {
|
|
1560
1560
|
let i = !1, s = !1, o = !1;
|
|
1561
1561
|
for (let a = 0, l = e.length; a < l; a++) {
|
|
1562
1562
|
const h = e[a];
|
|
@@ -1588,7 +1588,7 @@ function Co(c, e, t) {
|
|
|
1588
1588
|
return i && (c.morphAttributes.position = l), s && (c.morphAttributes.normal = h), o && (c.morphAttributes.color = d), c.morphTargetsRelative = !0, c;
|
|
1589
1589
|
});
|
|
1590
1590
|
}
|
|
1591
|
-
function
|
|
1591
|
+
function Eo(c, e) {
|
|
1592
1592
|
if (c.updateMorphTargets(), e.weights !== void 0)
|
|
1593
1593
|
for (let t = 0, i = e.weights.length; t < i; t++)
|
|
1594
1594
|
c.morphTargetInfluences[t] = e.weights[t];
|
|
@@ -1602,7 +1602,7 @@ function Io(c, e) {
|
|
|
1602
1602
|
console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
|
|
1603
1603
|
}
|
|
1604
1604
|
}
|
|
1605
|
-
function
|
|
1605
|
+
function Bo(c) {
|
|
1606
1606
|
let e;
|
|
1607
1607
|
const t = c.extensions && c.extensions[S.KHR_DRACO_MESH_COMPRESSION];
|
|
1608
1608
|
if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" + We(t.attributes) : e = c.indices + ":" + We(c.attributes) + ":" + c.mode, c.targets !== void 0)
|
|
@@ -1617,7 +1617,7 @@ function We(c) {
|
|
|
1617
1617
|
e += t[i] + ":" + c[t[i]] + ";";
|
|
1618
1618
|
return e;
|
|
1619
1619
|
}
|
|
1620
|
-
function
|
|
1620
|
+
function mt(c) {
|
|
1621
1621
|
switch (c) {
|
|
1622
1622
|
case Int8Array:
|
|
1623
1623
|
return 1 / 127;
|
|
@@ -1631,13 +1631,13 @@ function ft(c) {
|
|
|
1631
1631
|
throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
|
|
1632
1632
|
}
|
|
1633
1633
|
}
|
|
1634
|
-
function
|
|
1634
|
+
function Qo(c) {
|
|
1635
1635
|
return c.search(/\.jpe?g($|\?)/i) > 0 || c.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : c.search(/\.webp($|\?)/i) > 0 || c.search(/^data\:image\/webp/) === 0 ? "image/webp" : c.search(/\.ktx2($|\?)/i) > 0 || c.search(/^data\:image\/ktx2/) === 0 ? "image/ktx2" : "image/png";
|
|
1636
1636
|
}
|
|
1637
|
-
const
|
|
1638
|
-
class
|
|
1637
|
+
const wo = new Re();
|
|
1638
|
+
class yo {
|
|
1639
1639
|
constructor(e = {}, t = {}) {
|
|
1640
|
-
this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new
|
|
1640
|
+
this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new Ks(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
|
|
1641
1641
|
let i = !1, s = -1, o = !1, n = -1;
|
|
1642
1642
|
if (typeof navigator < "u") {
|
|
1643
1643
|
const r = navigator.userAgent;
|
|
@@ -1645,7 +1645,7 @@ class wo {
|
|
|
1645
1645
|
const A = r.match(/Version\/(\d+)/);
|
|
1646
1646
|
s = i && A ? parseInt(A[1], 10) : -1, o = r.indexOf("Firefox") > -1, n = o ? r.match(/Firefox\/([0-9]+)\./)[1] : -1;
|
|
1647
1647
|
}
|
|
1648
|
-
typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new
|
|
1648
|
+
typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new Ki(this.options.manager) : this.textureLoader = new zi(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new le(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
|
|
1649
1649
|
}
|
|
1650
1650
|
setExtensions(e) {
|
|
1651
1651
|
this.extensions = e;
|
|
@@ -1895,13 +1895,13 @@ class wo {
|
|
|
1895
1895
|
if (g && g !== h) {
|
|
1896
1896
|
const f = Math.floor(d / g), m = "InterleavedBuffer:" + s.bufferView + ":" + s.componentType + ":" + f + ":" + s.count;
|
|
1897
1897
|
let E = t.cache.get(m);
|
|
1898
|
-
E || (C = new a(r, f * g, s.count * g / l), E = new
|
|
1898
|
+
E || (C = new a(r, f * g, s.count * g / l), E = new Yi(C, g / l), t.cache.add(m, E)), I = new Ae(E, A, d % g / l, p);
|
|
1899
1899
|
} else
|
|
1900
1900
|
r === null ? C = new a(s.count * A) : C = new a(r, d, s.count * A), I = new ve(C, A, p);
|
|
1901
1901
|
if (s.sparse !== void 0) {
|
|
1902
1902
|
const f = Ye.SCALAR, m = Ie[s.sparse.indices.componentType], E = s.sparse.indices.byteOffset || 0, b = s.sparse.values.byteOffset || 0, B = new m(n[1], E, s.sparse.count * f), Q = new a(n[2], b, s.sparse.count * A);
|
|
1903
1903
|
r !== null && (I = new ve(I.array.slice(), I.itemSize, I.normalized)), I.normalized = !1;
|
|
1904
|
-
for (let w = 0,
|
|
1904
|
+
for (let w = 0, T = B.length; w < T; w++) {
|
|
1905
1905
|
const R = B[w];
|
|
1906
1906
|
if (I.setX(R, Q[w * A]), A >= 2 && I.setY(R, Q[w * A + 1]), A >= 3 && I.setZ(R, Q[w * A + 2]), A >= 4 && I.setW(R, Q[w * A + 3]), A >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
|
|
1907
1907
|
}
|
|
@@ -1933,7 +1933,7 @@ class wo {
|
|
|
1933
1933
|
const a = this.loadImageSource(t, i).then(function(l) {
|
|
1934
1934
|
l.flipY = !1, l.name = n.name || r.name || "", l.name === "" && typeof r.uri == "string" && r.uri.startsWith("data:image/") === !1 && (l.name = r.uri);
|
|
1935
1935
|
const d = (o.samplers || {})[n.sampler] || {};
|
|
1936
|
-
return l.magFilter =
|
|
1936
|
+
return l.magFilter = Ot[d.magFilter] || he, l.minFilter = Ot[d.minFilter] || Ve, l.wrapS = qt[d.wrapS] || ct, l.wrapT = qt[d.wrapT] || ct, l.generateMipmaps = !l.isCompressedTexture && l.minFilter !== ni && l.minFilter !== he, s.associations.set(l, { textures: e }), l;
|
|
1937
1937
|
}).catch(function() {
|
|
1938
1938
|
return null;
|
|
1939
1939
|
});
|
|
@@ -1957,12 +1957,12 @@ class wo {
|
|
|
1957
1957
|
return new Promise(function(d, g) {
|
|
1958
1958
|
let p = d;
|
|
1959
1959
|
t.isImageBitmapLoader === !0 && (p = function(C) {
|
|
1960
|
-
const I = new
|
|
1960
|
+
const I = new Dt(C);
|
|
1961
1961
|
I.needsUpdate = !0, d(I);
|
|
1962
1962
|
}), t.load(xe.resolveURL(h, o.path), p, void 0, g);
|
|
1963
1963
|
});
|
|
1964
1964
|
}).then(function(h) {
|
|
1965
|
-
return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType ||
|
|
1965
|
+
return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType || Qo(n.uri), h;
|
|
1966
1966
|
}).catch(function(h) {
|
|
1967
1967
|
throw console.error("THREE.GLTFLoader: Couldn't load texture", A), h;
|
|
1968
1968
|
});
|
|
@@ -2009,11 +2009,11 @@ class wo {
|
|
|
2009
2009
|
if (e.isPoints) {
|
|
2010
2010
|
const r = "PointsMaterial:" + i.uuid;
|
|
2011
2011
|
let A = this.cache.get(r);
|
|
2012
|
-
A || (A = new
|
|
2012
|
+
A || (A = new es(), je.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, A.sizeAttenuation = !1, this.cache.add(r, A)), i = A;
|
|
2013
2013
|
} else if (e.isLine) {
|
|
2014
2014
|
const r = "LineBasicMaterial:" + i.uuid;
|
|
2015
2015
|
let A = this.cache.get(r);
|
|
2016
|
-
A || (A = new
|
|
2016
|
+
A || (A = new ts(), je.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, this.cache.add(r, A)), i = A;
|
|
2017
2017
|
}
|
|
2018
2018
|
if (s || o || n) {
|
|
2019
2019
|
let r = "ClonedMaterial:" + i.uuid + ":";
|
|
@@ -2024,7 +2024,7 @@ class wo {
|
|
|
2024
2024
|
e.material = i;
|
|
2025
2025
|
}
|
|
2026
2026
|
getMaterialType() {
|
|
2027
|
-
return
|
|
2027
|
+
return ri;
|
|
2028
2028
|
}
|
|
2029
2029
|
/**
|
|
2030
2030
|
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
|
|
@@ -2052,7 +2052,7 @@ class wo {
|
|
|
2052
2052
|
return d.extendMaterialParams && d.extendMaterialParams(e, r);
|
|
2053
2053
|
})));
|
|
2054
2054
|
}
|
|
2055
|
-
o.doubleSided === !0 && (r.side =
|
|
2055
|
+
o.doubleSided === !0 && (r.side = is);
|
|
2056
2056
|
const l = o.alphaMode || Je.OPAQUE;
|
|
2057
2057
|
if (l === Je.BLEND ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, l === Je.MASK && (r.alphaTest = o.alphaCutoff !== void 0 ? o.alphaCutoff : 0.5)), o.normalTexture !== void 0 && n !== fe && (a.push(t.assignTexture(r, "normalMap", o.normalTexture)), r.normalScale = new H(1, 1), o.normalTexture.scale !== void 0)) {
|
|
2058
2058
|
const h = o.normalTexture.scale;
|
|
@@ -2075,7 +2075,7 @@ class wo {
|
|
|
2075
2075
|
* @return {string}
|
|
2076
2076
|
*/
|
|
2077
2077
|
createUniqueName(e) {
|
|
2078
|
-
const t =
|
|
2078
|
+
const t = ss.sanitizeNodeName(e || "");
|
|
2079
2079
|
return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t);
|
|
2080
2080
|
}
|
|
2081
2081
|
/**
|
|
@@ -2091,17 +2091,17 @@ class wo {
|
|
|
2091
2091
|
const t = this, i = this.extensions, s = this.primitiveCache;
|
|
2092
2092
|
function o(r) {
|
|
2093
2093
|
return i[S.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(r, t).then(function(A) {
|
|
2094
|
-
return
|
|
2094
|
+
return jt(A, r, t);
|
|
2095
2095
|
});
|
|
2096
2096
|
}
|
|
2097
2097
|
const n = [];
|
|
2098
2098
|
for (let r = 0, A = e.length; r < A; r++) {
|
|
2099
|
-
const a = e[r], l =
|
|
2099
|
+
const a = e[r], l = Bo(a), h = s[l];
|
|
2100
2100
|
if (h)
|
|
2101
2101
|
n.push(h.promise);
|
|
2102
2102
|
else {
|
|
2103
2103
|
let d;
|
|
2104
|
-
a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d =
|
|
2104
|
+
a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d = jt(new ai(), a, t), s[l] = { primitive: a, promise: d }, n.push(d);
|
|
2105
2105
|
}
|
|
2106
2106
|
}
|
|
2107
2107
|
return Promise.all(n);
|
|
@@ -2116,7 +2116,7 @@ class wo {
|
|
|
2116
2116
|
loadMesh(e) {
|
|
2117
2117
|
const t = this, i = this.json, s = this.extensions, o = i.meshes[e], n = o.primitives, r = [];
|
|
2118
2118
|
for (let A = 0, a = n.length; A < a; A++) {
|
|
2119
|
-
const l = n[A].material === void 0 ?
|
|
2119
|
+
const l = n[A].material === void 0 ? Co(this.cache) : this.getDependency("material", n[A].material);
|
|
2120
2120
|
r.push(l);
|
|
2121
2121
|
}
|
|
2122
2122
|
return r.push(t.loadGeometries(n)), Promise.all(r).then(function(A) {
|
|
@@ -2126,18 +2126,18 @@ class wo {
|
|
|
2126
2126
|
let f;
|
|
2127
2127
|
const m = a[g];
|
|
2128
2128
|
if (I.mode === j.TRIANGLES || I.mode === j.TRIANGLE_STRIP || I.mode === j.TRIANGLE_FAN || I.mode === void 0)
|
|
2129
|
-
f = o.isSkinnedMesh === !0 ? new
|
|
2129
|
+
f = o.isSkinnedMesh === !0 ? new os(C, m) : new Qt(C, m), f.isSkinnedMesh === !0 && f.normalizeSkinWeights(), I.mode === j.TRIANGLE_STRIP ? f.geometry = Ht(f.geometry, oi) : I.mode === j.TRIANGLE_FAN && (f.geometry = Ht(f.geometry, lt));
|
|
2130
2130
|
else if (I.mode === j.LINES)
|
|
2131
|
-
f = new os(C, m);
|
|
2132
|
-
else if (I.mode === j.LINE_STRIP)
|
|
2133
2131
|
f = new ns(C, m);
|
|
2134
|
-
else if (I.mode === j.
|
|
2132
|
+
else if (I.mode === j.LINE_STRIP)
|
|
2135
2133
|
f = new rs(C, m);
|
|
2136
|
-
else if (I.mode === j.
|
|
2134
|
+
else if (I.mode === j.LINE_LOOP)
|
|
2137
2135
|
f = new as(C, m);
|
|
2136
|
+
else if (I.mode === j.POINTS)
|
|
2137
|
+
f = new As(C, m);
|
|
2138
2138
|
else
|
|
2139
2139
|
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + I.mode);
|
|
2140
|
-
Object.keys(f.geometry.morphAttributes).length > 0 &&
|
|
2140
|
+
Object.keys(f.geometry.morphAttributes).length > 0 && Eo(f, o), f.name = t.createUniqueName(o.name || "mesh_" + e), ie(f, o), I.extensions && ae(s, f, I), t.assignFinalMaterial(f), h.push(f);
|
|
2141
2141
|
}
|
|
2142
2142
|
for (let g = 0, p = h.length; g < p; g++)
|
|
2143
2143
|
t.associations.set(h[g], {
|
|
@@ -2167,7 +2167,7 @@ class wo {
|
|
|
2167
2167
|
console.warn("THREE.GLTFLoader: Missing camera parameters.");
|
|
2168
2168
|
return;
|
|
2169
2169
|
}
|
|
2170
|
-
return i.type === "perspective" ? t = new
|
|
2170
|
+
return i.type === "perspective" ? t = new ls(It.radToDeg(s.yfov), s.aspectRatio || 1, s.znear || 1, s.zfar || 2e6) : i.type === "orthographic" && (t = new cs(-s.xmag, s.xmag, s.ymag, -s.ymag, s.znear, s.zfar)), i.name && (t.name = this.createUniqueName(i.name)), ie(t, i), Promise.resolve(t);
|
|
2171
2171
|
}
|
|
2172
2172
|
/**
|
|
2173
2173
|
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
|
|
@@ -2191,7 +2191,7 @@ class wo {
|
|
|
2191
2191
|
} else
|
|
2192
2192
|
console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[a]);
|
|
2193
2193
|
}
|
|
2194
|
-
return new
|
|
2194
|
+
return new hs(r, A);
|
|
2195
2195
|
});
|
|
2196
2196
|
}
|
|
2197
2197
|
/**
|
|
@@ -2216,15 +2216,15 @@ class wo {
|
|
|
2216
2216
|
]).then(function(h) {
|
|
2217
2217
|
const d = h[0], g = h[1], p = h[2], C = h[3], I = h[4], f = [];
|
|
2218
2218
|
for (let m = 0, E = d.length; m < E; m++) {
|
|
2219
|
-
const b = d[m], B = g[m], Q = p[m], w = C[m],
|
|
2219
|
+
const b = d[m], B = g[m], Q = p[m], w = C[m], T = I[m];
|
|
2220
2220
|
if (b === void 0) continue;
|
|
2221
2221
|
b.updateMatrix && b.updateMatrix();
|
|
2222
|
-
const R = i._createAnimationTracks(b, B, Q, w,
|
|
2222
|
+
const R = i._createAnimationTracks(b, B, Q, w, T);
|
|
2223
2223
|
if (R)
|
|
2224
2224
|
for (let y = 0; y < R.length; y++)
|
|
2225
2225
|
f.push(R[y]);
|
|
2226
2226
|
}
|
|
2227
|
-
return new
|
|
2227
|
+
return new ds(o, void 0, f);
|
|
2228
2228
|
});
|
|
2229
2229
|
}
|
|
2230
2230
|
createNodeMesh(e) {
|
|
@@ -2257,7 +2257,7 @@ class wo {
|
|
|
2257
2257
|
]).then(function(a) {
|
|
2258
2258
|
const l = a[0], h = a[1], d = a[2];
|
|
2259
2259
|
d !== null && l.traverse(function(g) {
|
|
2260
|
-
g.isSkinnedMesh && g.bind(d,
|
|
2260
|
+
g.isSkinnedMesh && g.bind(d, wo);
|
|
2261
2261
|
});
|
|
2262
2262
|
for (let g = 0, p = h.length; g < p; g++)
|
|
2263
2263
|
l.add(h[g]);
|
|
@@ -2281,7 +2281,7 @@ class wo {
|
|
|
2281
2281
|
r.push(a);
|
|
2282
2282
|
}), this.nodeCache[e] = Promise.all(r).then(function(a) {
|
|
2283
2283
|
let l;
|
|
2284
|
-
if (o.isBone === !0 ? l = new
|
|
2284
|
+
if (o.isBone === !0 ? l = new gs() : a.length > 1 ? l = new Ke() : a.length === 1 ? l = a[0] : l = new Bt(), l !== a[0])
|
|
2285
2285
|
for (let h = 0, d = a.length; h < d; h++)
|
|
2286
2286
|
l.add(a[h]);
|
|
2287
2287
|
if (o.name && (l.userData.name = o.name, l.name = n), ie(l, o), o.extensions && ae(i, l, o), o.matrix !== void 0) {
|
|
@@ -2317,7 +2317,7 @@ class wo {
|
|
|
2317
2317
|
const a = (l) => {
|
|
2318
2318
|
const h = /* @__PURE__ */ new Map();
|
|
2319
2319
|
for (const [d, g] of s.associations)
|
|
2320
|
-
(d instanceof je || d instanceof
|
|
2320
|
+
(d instanceof je || d instanceof Dt) && h.set(d, g);
|
|
2321
2321
|
return l.traverse((d) => {
|
|
2322
2322
|
const g = s.associations.get(d);
|
|
2323
2323
|
g != null && h.set(d, g);
|
|
@@ -2334,29 +2334,29 @@ class wo {
|
|
|
2334
2334
|
let a;
|
|
2335
2335
|
switch (ne[o.path]) {
|
|
2336
2336
|
case ne.weights:
|
|
2337
|
-
a =
|
|
2337
|
+
a = Lt;
|
|
2338
2338
|
break;
|
|
2339
2339
|
case ne.rotation:
|
|
2340
2340
|
a = Tt;
|
|
2341
2341
|
break;
|
|
2342
2342
|
case ne.translation:
|
|
2343
2343
|
case ne.scale:
|
|
2344
|
-
a =
|
|
2344
|
+
a = Rt;
|
|
2345
2345
|
break;
|
|
2346
2346
|
default:
|
|
2347
2347
|
switch (i.itemSize) {
|
|
2348
2348
|
case 1:
|
|
2349
|
-
a =
|
|
2349
|
+
a = Lt;
|
|
2350
2350
|
break;
|
|
2351
2351
|
case 2:
|
|
2352
2352
|
case 3:
|
|
2353
2353
|
default:
|
|
2354
|
-
a =
|
|
2354
|
+
a = Rt;
|
|
2355
2355
|
break;
|
|
2356
2356
|
}
|
|
2357
2357
|
break;
|
|
2358
2358
|
}
|
|
2359
|
-
const l = s.interpolation !== void 0 ?
|
|
2359
|
+
const l = s.interpolation !== void 0 ? bo[s.interpolation] : Ai, h = this._getArrayFromAccessor(i);
|
|
2360
2360
|
for (let d = 0, g = A.length; d < g; d++) {
|
|
2361
2361
|
const p = new a(
|
|
2362
2362
|
A[d] + "." + ne[o.path],
|
|
@@ -2371,7 +2371,7 @@ class wo {
|
|
|
2371
2371
|
_getArrayFromAccessor(e) {
|
|
2372
2372
|
let t = e.array;
|
|
2373
2373
|
if (e.normalized) {
|
|
2374
|
-
const i =
|
|
2374
|
+
const i = mt(t.constructor), s = new Float32Array(t.length);
|
|
2375
2375
|
for (let o = 0, n = t.length; o < n; o++)
|
|
2376
2376
|
s[o] = t[o] * i;
|
|
2377
2377
|
t = s;
|
|
@@ -2380,12 +2380,12 @@ class wo {
|
|
|
2380
2380
|
}
|
|
2381
2381
|
_createCubicSplineTrackInterpolant(e) {
|
|
2382
2382
|
e.createInterpolant = function(i) {
|
|
2383
|
-
const s = this instanceof Tt ?
|
|
2383
|
+
const s = this instanceof Tt ? mo : fi;
|
|
2384
2384
|
return new s(this.times, this.values, this.getValueSize() / 3, i);
|
|
2385
2385
|
}, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
|
|
2386
2386
|
}
|
|
2387
2387
|
}
|
|
2388
|
-
function
|
|
2388
|
+
function So(c, e, t) {
|
|
2389
2389
|
const i = e.attributes, s = new Oe();
|
|
2390
2390
|
if (i.POSITION !== void 0) {
|
|
2391
2391
|
const r = t.json.accessors[i.POSITION], A = r.min, a = r.max;
|
|
@@ -2394,7 +2394,7 @@ function yo(c, e, t) {
|
|
|
2394
2394
|
new D(A[0], A[1], A[2]),
|
|
2395
2395
|
new D(a[0], a[1], a[2])
|
|
2396
2396
|
), r.normalized) {
|
|
2397
|
-
const l =
|
|
2397
|
+
const l = mt(Ie[r.componentType]);
|
|
2398
2398
|
s.min.multiplyScalar(l), s.max.multiplyScalar(l);
|
|
2399
2399
|
}
|
|
2400
2400
|
} else {
|
|
@@ -2412,7 +2412,7 @@ function yo(c, e, t) {
|
|
|
2412
2412
|
const d = t.json.accessors[h.POSITION], g = d.min, p = d.max;
|
|
2413
2413
|
if (g !== void 0 && p !== void 0) {
|
|
2414
2414
|
if (A.setX(Math.max(Math.abs(g[0]), Math.abs(p[0]))), A.setY(Math.max(Math.abs(g[1]), Math.abs(p[1]))), A.setZ(Math.max(Math.abs(g[2]), Math.abs(p[2]))), d.normalized) {
|
|
2415
|
-
const C =
|
|
2415
|
+
const C = mt(Ie[d.componentType]);
|
|
2416
2416
|
A.multiplyScalar(C);
|
|
2417
2417
|
}
|
|
2418
2418
|
r.max(A);
|
|
@@ -2423,10 +2423,10 @@ function yo(c, e, t) {
|
|
|
2423
2423
|
s.expandByVector(r);
|
|
2424
2424
|
}
|
|
2425
2425
|
c.boundingBox = s;
|
|
2426
|
-
const n = new
|
|
2426
|
+
const n = new wt();
|
|
2427
2427
|
s.getCenter(n.center), n.radius = s.min.distanceTo(s.max) / 2, c.boundingSphere = n;
|
|
2428
2428
|
}
|
|
2429
|
-
function
|
|
2429
|
+
function jt(c, e, t) {
|
|
2430
2430
|
const i = e.attributes, s = [];
|
|
2431
2431
|
function o(n, r) {
|
|
2432
2432
|
return t.getDependency("accessor", n).then(function(A) {
|
|
@@ -2434,7 +2434,7 @@ function qt(c, e, t) {
|
|
|
2434
2434
|
});
|
|
2435
2435
|
}
|
|
2436
2436
|
for (const n in i) {
|
|
2437
|
-
const r =
|
|
2437
|
+
const r = ft[n] || n.toLowerCase();
|
|
2438
2438
|
r in c.attributes || s.push(o(i[n], r));
|
|
2439
2439
|
}
|
|
2440
2440
|
if (e.indices !== void 0 && !c.index) {
|
|
@@ -2443,12 +2443,12 @@ function qt(c, e, t) {
|
|
|
2443
2443
|
});
|
|
2444
2444
|
s.push(n);
|
|
2445
2445
|
}
|
|
2446
|
-
return
|
|
2447
|
-
return e.targets !== void 0 ?
|
|
2446
|
+
return ht.workingColorSpace !== Y && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ht.workingColorSpace}" not supported.`), ie(c, e), So(c, e, t), Promise.all(s).then(function() {
|
|
2447
|
+
return e.targets !== void 0 ? Io(c, e.targets, t) : c;
|
|
2448
2448
|
});
|
|
2449
2449
|
}
|
|
2450
2450
|
const Xe = /* @__PURE__ */ new WeakMap();
|
|
2451
|
-
class
|
|
2451
|
+
class Mo extends Et {
|
|
2452
2452
|
/**
|
|
2453
2453
|
* Constructs a new Draco loader.
|
|
2454
2454
|
*
|
|
@@ -2555,7 +2555,7 @@ class So extends It {
|
|
|
2555
2555
|
}), r;
|
|
2556
2556
|
}
|
|
2557
2557
|
_createGeometry(e) {
|
|
2558
|
-
const t = new
|
|
2558
|
+
const t = new ai();
|
|
2559
2559
|
e.index && t.setIndex(new ve(e.index.array, 1));
|
|
2560
2560
|
for (let i = 0; i < e.attributes.length; i++) {
|
|
2561
2561
|
const s = e.attributes[i], o = s.name, n = s.array, r = s.itemSize, A = new ve(n, r);
|
|
@@ -2567,7 +2567,7 @@ class So extends It {
|
|
|
2567
2567
|
if (t !== se) return;
|
|
2568
2568
|
const i = new re();
|
|
2569
2569
|
for (let s = 0, o = e.count; s < o; s++)
|
|
2570
|
-
i.fromBufferAttribute(e, s),
|
|
2570
|
+
i.fromBufferAttribute(e, s), ht.colorSpaceToWorking(i, se), e.setXYZ(s, i.r, i.g, i.b);
|
|
2571
2571
|
}
|
|
2572
2572
|
_loadLibrary(e, t) {
|
|
2573
2573
|
const i = new le(this.manager);
|
|
@@ -2584,7 +2584,7 @@ class So extends It {
|
|
|
2584
2584
|
return e ? t.push(this._loadLibrary("draco_decoder.js", "text")) : (t.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), t.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(t).then((i) => {
|
|
2585
2585
|
const s = i[0];
|
|
2586
2586
|
e || (this.decoderConfig.wasmBinary = i[1]);
|
|
2587
|
-
const o =
|
|
2587
|
+
const o = xo.toString(), n = [
|
|
2588
2588
|
"/* draco decoder */",
|
|
2589
2589
|
s,
|
|
2590
2590
|
"",
|
|
@@ -2632,7 +2632,7 @@ class So extends It {
|
|
|
2632
2632
|
return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
|
|
2633
2633
|
}
|
|
2634
2634
|
}
|
|
2635
|
-
function
|
|
2635
|
+
function xo() {
|
|
2636
2636
|
let c, e;
|
|
2637
2637
|
onmessage = function(n) {
|
|
2638
2638
|
const r = n.data;
|
|
@@ -2722,7 +2722,7 @@ function Mo() {
|
|
|
2722
2722
|
}
|
|
2723
2723
|
}
|
|
2724
2724
|
}
|
|
2725
|
-
class
|
|
2725
|
+
class vo {
|
|
2726
2726
|
/**
|
|
2727
2727
|
* Constructs a new Worker pool.
|
|
2728
2728
|
*
|
|
@@ -2788,8 +2788,8 @@ class xo {
|
|
|
2788
2788
|
this.workers.forEach((e) => e.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
|
|
2789
2789
|
}
|
|
2790
2790
|
}
|
|
2791
|
-
const
|
|
2792
|
-
class
|
|
2791
|
+
const Do = 0, Kt = 2, Ro = 1, zt = 2, Lo = 0, To = 1, Fo = 10, ko = 0, mi = 9, bi = 15, Ci = 16, Ii = 22, Ei = 37, Bi = 43, Qi = 76, wi = 83, yi = 97, Si = 100, Mi = 103, xi = 109, _o = 131, Go = 132, Po = 133, No = 134, Uo = 137, Ho = 138, Vo = 141, Oo = 142, qo = 145, jo = 146, vi = 148, Di = 152, Ko = 157, zo = 158, Ri = 165, Li = 166, Mt = 1000066e3;
|
|
2792
|
+
class Yo {
|
|
2793
2793
|
constructor() {
|
|
2794
2794
|
this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
|
|
2795
2795
|
}
|
|
@@ -2834,13 +2834,13 @@ class ye {
|
|
|
2834
2834
|
}
|
|
2835
2835
|
}
|
|
2836
2836
|
const N = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
|
|
2837
|
-
function
|
|
2837
|
+
function Yt(c) {
|
|
2838
2838
|
return new TextDecoder().decode(c);
|
|
2839
2839
|
}
|
|
2840
|
-
function
|
|
2840
|
+
function Jo(c) {
|
|
2841
2841
|
const e = new Uint8Array(c.buffer, c.byteOffset, N.length);
|
|
2842
2842
|
if (e[0] !== N[0] || e[1] !== N[1] || e[2] !== N[2] || e[3] !== N[3] || e[4] !== N[4] || e[5] !== N[5] || e[6] !== N[6] || e[7] !== N[7] || e[8] !== N[8] || e[9] !== N[9] || e[10] !== N[10] || e[11] !== N[11]) throw new Error("Missing KTX 2.0 identifier.");
|
|
2843
|
-
const t = new
|
|
2843
|
+
const t = new Yo(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new ye(c, N.length, i, !0);
|
|
2844
2844
|
t.vkFormat = s._nextUint32(), t.typeSize = s._nextUint32(), t.pixelWidth = s._nextUint32(), t.pixelHeight = s._nextUint32(), t.pixelDepth = s._nextUint32(), t.layerCount = s._nextUint32(), t.faceCount = s._nextUint32();
|
|
2845
2845
|
const o = s._nextUint32();
|
|
2846
2846
|
t.supercompressionScheme = s._nextUint32();
|
|
@@ -2848,32 +2848,32 @@ function Yo(c) {
|
|
|
2848
2848
|
for (let F = 0; F < o; F++) t.levels.push({ levelData: new Uint8Array(c.buffer, c.byteOffset + d._nextUint64(), d._nextUint64()), uncompressedByteLength: d._nextUint64() });
|
|
2849
2849
|
const g = new ye(c, n, r, !0), p = { vendorId: g._skip(4)._nextUint16(), descriptorType: g._nextUint16(), versionNumber: g._nextUint16(), descriptorBlockSize: g._nextUint16(), colorModel: g._nextUint8(), colorPrimaries: g._nextUint8(), transferFunction: g._nextUint8(), flags: g._nextUint8(), texelBlockDimension: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], bytesPlane: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], samples: [] }, C = (p.descriptorBlockSize / 4 - 6) / 4;
|
|
2850
2850
|
for (let F = 0; F < C; F++) {
|
|
2851
|
-
const
|
|
2852
|
-
64 &
|
|
2851
|
+
const O = { bitOffset: g._nextUint16(), bitLength: g._nextUint8(), channelType: g._nextUint8(), samplePosition: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
|
|
2852
|
+
64 & O.channelType ? (O.sampleLower = g._nextInt32(), O.sampleUpper = g._nextInt32()) : (O.sampleLower = g._nextUint32(), O.sampleUpper = g._nextUint32()), p.samples[F] = O;
|
|
2853
2853
|
}
|
|
2854
2854
|
t.dataFormatDescriptor.length = 0, t.dataFormatDescriptor.push(p);
|
|
2855
2855
|
const I = new ye(c, A, a, !0);
|
|
2856
2856
|
for (; I._offset < a; ) {
|
|
2857
|
-
const F = I._nextUint32(),
|
|
2858
|
-
if (t.keyValue[oe] = I._nextUint8Array(F -
|
|
2859
|
-
const Qe =
|
|
2857
|
+
const F = I._nextUint32(), O = I._scan(F), oe = Yt(O);
|
|
2858
|
+
if (t.keyValue[oe] = I._nextUint8Array(F - O.byteLength - 1), oe.match(/^ktx/i)) {
|
|
2859
|
+
const Qe = Yt(t.keyValue[oe]);
|
|
2860
2860
|
t.keyValue[oe] = Qe.substring(0, Qe.lastIndexOf("\0"));
|
|
2861
2861
|
}
|
|
2862
2862
|
I._skip(F % 4 ? 4 - F % 4 : 0);
|
|
2863
2863
|
}
|
|
2864
2864
|
if (h <= 0) return t;
|
|
2865
|
-
const f = new ye(c, l, h, !0), m = f._nextUint16(), E = f._nextUint16(), b = f._nextUint32(), B = f._nextUint32(), Q = f._nextUint32(), w = f._nextUint32(),
|
|
2866
|
-
for (let F = 0; F < o; F++)
|
|
2865
|
+
const f = new ye(c, l, h, !0), m = f._nextUint16(), E = f._nextUint16(), b = f._nextUint32(), B = f._nextUint32(), Q = f._nextUint32(), w = f._nextUint32(), T = [];
|
|
2866
|
+
for (let F = 0; F < o; F++) T.push({ imageFlags: f._nextUint32(), rgbSliceByteOffset: f._nextUint32(), rgbSliceByteLength: f._nextUint32(), alphaSliceByteOffset: f._nextUint32(), alphaSliceByteLength: f._nextUint32() });
|
|
2867
2867
|
const R = l + f._offset, y = R + b, v = y + B, M = v + Q, J = new Uint8Array(c.buffer, c.byteOffset + R, b), W = new Uint8Array(c.buffer, c.byteOffset + y, B), Be = new Uint8Array(c.buffer, c.byteOffset + v, Q), q = new Uint8Array(c.buffer, c.byteOffset + M, w);
|
|
2868
|
-
return t.globalData = { endpointCount: m, selectorCount: E, imageDescs:
|
|
2868
|
+
return t.globalData = { endpointCount: m, selectorCount: E, imageDescs: T, endpointsData: J, selectorsData: W, tablesData: Be, extendedData: q }, t;
|
|
2869
2869
|
}
|
|
2870
|
-
let Ze, te,
|
|
2870
|
+
let Ze, te, bt;
|
|
2871
2871
|
const $e = { env: { emscripten_notify_memory_growth: function(c) {
|
|
2872
|
-
|
|
2872
|
+
bt = new Uint8Array(te.exports.memory.buffer);
|
|
2873
2873
|
} } };
|
|
2874
|
-
class
|
|
2874
|
+
class Wo {
|
|
2875
2875
|
init() {
|
|
2876
|
-
return Ze || (Ze = typeof fetch < "u" ? fetch("data:application/wasm;base64," +
|
|
2876
|
+
return Ze || (Ze = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Jt).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, $e)).then(this._init) : WebAssembly.instantiate(Buffer.from(Jt, "base64"), $e).then(this._init), Ze);
|
|
2877
2877
|
}
|
|
2878
2878
|
_init(e) {
|
|
2879
2879
|
te = e.instance, $e.env.emscripten_notify_memory_growth(0);
|
|
@@ -2881,21 +2881,21 @@ class Jo {
|
|
|
2881
2881
|
decode(e, t = 0) {
|
|
2882
2882
|
if (!te) throw new Error("ZSTDDecoder: Await .init() before decoding.");
|
|
2883
2883
|
const i = e.byteLength, s = te.exports.malloc(i);
|
|
2884
|
-
|
|
2885
|
-
const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r =
|
|
2884
|
+
bt.set(e, s), t = t || Number(te.exports.ZSTD_findDecompressedSize(s, i));
|
|
2885
|
+
const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r = bt.slice(o, o + n);
|
|
2886
2886
|
return te.exports.free(s), te.exports.free(o), r;
|
|
2887
2887
|
}
|
|
2888
2888
|
}
|
|
2889
|
-
const Yt = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", Wo = "display-p3", Xo = "display-p3-linear", et = /* @__PURE__ */ new WeakMap();
|
|
2889
|
+
const Jt = "AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ", Xo = "display-p3", Zo = "display-p3-linear", et = /* @__PURE__ */ new WeakMap();
|
|
2890
2890
|
let tt = 0, it;
|
|
2891
|
-
class K extends
|
|
2891
|
+
class K extends Et {
|
|
2892
2892
|
/**
|
|
2893
2893
|
* Constructs a new KTX2 loader.
|
|
2894
2894
|
*
|
|
2895
2895
|
* @param {LoadingManager} [manager] - The loading manager.
|
|
2896
2896
|
*/
|
|
2897
2897
|
constructor(e) {
|
|
2898
|
-
super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new
|
|
2898
|
+
super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new vo(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
|
|
2899
2899
|
'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
|
|
2900
2900
|
);
|
|
2901
2901
|
}
|
|
@@ -3033,12 +3033,12 @@ class K extends It {
|
|
|
3033
3033
|
if (i === "error") return Promise.reject(s);
|
|
3034
3034
|
let h;
|
|
3035
3035
|
if (t.faceCount === 6)
|
|
3036
|
-
h = new
|
|
3036
|
+
h = new ms(o, A, a);
|
|
3037
3037
|
else {
|
|
3038
3038
|
const d = o[0].mipmaps;
|
|
3039
|
-
h = t.layerCount > 1 ? new
|
|
3039
|
+
h = t.layerCount > 1 ? new bs(d, n, r, t.layerCount, A, a) : new li(d, n, r, A, a);
|
|
3040
3040
|
}
|
|
3041
|
-
return h.minFilter = o[0].mipmaps.length === 1 ? he : Ve, h.magFilter = he, h.generateMipmaps = !1, h.needsUpdate = !0, h.colorSpace = Ti(t), h.premultiplyAlpha = !!(l &
|
|
3041
|
+
return h.minFilter = o[0].mipmaps.length === 1 ? he : Ve, h.magFilter = he, h.generateMipmaps = !1, h.needsUpdate = !0, h.colorSpace = Ti(t), h.premultiplyAlpha = !!(l & Ro), h;
|
|
3042
3042
|
}
|
|
3043
3043
|
/**
|
|
3044
3044
|
* @private
|
|
@@ -3047,9 +3047,9 @@ class K extends It {
|
|
|
3047
3047
|
* @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
|
|
3048
3048
|
*/
|
|
3049
3049
|
async _createTexture(e, t = {}) {
|
|
3050
|
-
const i =
|
|
3051
|
-
if (!(i.vkFormat ===
|
|
3052
|
-
return
|
|
3050
|
+
const i = Jo(new Uint8Array(e)), s = i.vkFormat === Mt && i.dataFormatDescriptor[0].colorModel === 167;
|
|
3051
|
+
if (!(i.vkFormat === ko || s && !this.workerConfig.astcHDRSupported))
|
|
3052
|
+
return en(i);
|
|
3053
3053
|
const n = t, r = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: e, taskConfig: n }, [e])).then((A) => this._createTextureFrom(A.data, i));
|
|
3054
3054
|
return et.set(e, { promise: r }), r;
|
|
3055
3055
|
}
|
|
@@ -3091,15 +3091,15 @@ K.TranscoderFormat = {
|
|
|
3091
3091
|
K.EngineFormat = {
|
|
3092
3092
|
RGBAFormat: me,
|
|
3093
3093
|
RGBA_ASTC_4x4_Format: Ge,
|
|
3094
|
-
RGB_BPTC_UNSIGNED_Format:
|
|
3095
|
-
RGBA_BPTC_Format:
|
|
3096
|
-
RGBA_ETC2_EAC_Format:
|
|
3097
|
-
RGBA_PVRTC_4BPPV1_Format:
|
|
3098
|
-
RGBA_S3TC_DXT5_Format:
|
|
3099
|
-
RGB_ETC1_Format:
|
|
3100
|
-
RGB_ETC2_Format:
|
|
3101
|
-
RGB_PVRTC_4BPPV1_Format:
|
|
3102
|
-
RGBA_S3TC_DXT1_Format:
|
|
3094
|
+
RGB_BPTC_UNSIGNED_Format: ws,
|
|
3095
|
+
RGBA_BPTC_Format: dt,
|
|
3096
|
+
RGBA_ETC2_EAC_Format: ci,
|
|
3097
|
+
RGBA_PVRTC_4BPPV1_Format: Qs,
|
|
3098
|
+
RGBA_S3TC_DXT5_Format: gt,
|
|
3099
|
+
RGB_ETC1_Format: Bs,
|
|
3100
|
+
RGB_ETC2_Format: hi,
|
|
3101
|
+
RGB_PVRTC_4BPPV1_Format: Es,
|
|
3102
|
+
RGBA_S3TC_DXT1_Format: ut
|
|
3103
3103
|
};
|
|
3104
3104
|
K.EngineType = {
|
|
3105
3105
|
UnsignedByteType: z,
|
|
@@ -3150,7 +3150,7 @@ K.BasisWorker = function() {
|
|
|
3150
3150
|
f = n.UASTC_HDR;
|
|
3151
3151
|
else
|
|
3152
3152
|
throw new Error("THREE.KTX2Loader: Unknown Basis encoding");
|
|
3153
|
-
const m = C.getWidth(), E = C.getHeight(), b = C.getLayers() || 1, B = C.getLevels(), Q = C.getFaces(), w = C.getHasAlpha(),
|
|
3153
|
+
const m = C.getWidth(), E = C.getHeight(), b = C.getLayers() || 1, B = C.getLevels(), Q = C.getFaces(), w = C.getHasAlpha(), T = C.getDFDFlags(), { transcoderFormat: R, engineFormat: y, engineType: v } = h(f, m, E, w);
|
|
3154
3154
|
if (!m || !E || !B)
|
|
3155
3155
|
throw I(), new Error("THREE.KTX2Loader: Invalid texture");
|
|
3156
3156
|
if (!C.startTranscoding())
|
|
@@ -3160,22 +3160,22 @@ K.BasisWorker = function() {
|
|
|
3160
3160
|
const Be = [];
|
|
3161
3161
|
for (let q = 0; q < B; q++) {
|
|
3162
3162
|
const F = [];
|
|
3163
|
-
let
|
|
3163
|
+
let O, oe;
|
|
3164
3164
|
for (let de = 0; de < b; de++) {
|
|
3165
3165
|
const ge = C.getImageLevelInfo(q, de, W);
|
|
3166
|
-
W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (
|
|
3166
|
+
W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (O = ge.origWidth, oe = ge.origHeight) : (O = ge.width, oe = ge.height);
|
|
3167
3167
|
let ue = new Uint8Array(C.getImageTranscodedSizeInBytes(q, de, 0, R));
|
|
3168
|
-
const
|
|
3169
|
-
if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !
|
|
3168
|
+
const _i = C.transcodeImage(ue, q, de, W, R, 0, -1, -1);
|
|
3169
|
+
if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !_i)
|
|
3170
3170
|
throw I(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
|
|
3171
3171
|
F.push(ue);
|
|
3172
3172
|
}
|
|
3173
3173
|
const Qe = g(F);
|
|
3174
|
-
Be.push({ data: Qe, width:
|
|
3174
|
+
Be.push({ data: Qe, width: O, height: oe }), J.push(Qe.buffer);
|
|
3175
3175
|
}
|
|
3176
3176
|
M.push({ mipmaps: Be, width: m, height: E, format: y, type: v });
|
|
3177
3177
|
}
|
|
3178
|
-
return I(), { faces: M, buffers: J, width: m, height: E, hasAlpha: w, dfdFlags:
|
|
3178
|
+
return I(), { faces: M, buffers: J, width: m, height: E, hasAlpha: w, dfdFlags: T, format: y, type: v };
|
|
3179
3179
|
}
|
|
3180
3180
|
const a = [
|
|
3181
3181
|
{
|
|
@@ -3303,71 +3303,71 @@ K.BasisWorker = function() {
|
|
|
3303
3303
|
return I;
|
|
3304
3304
|
}
|
|
3305
3305
|
};
|
|
3306
|
-
const
|
|
3307
|
-
[
|
|
3308
|
-
[
|
|
3309
|
-
[Ii]: me,
|
|
3306
|
+
const $o = /* @__PURE__ */ new Set([me, Me, Se]), st = {
|
|
3307
|
+
[xi]: me,
|
|
3308
|
+
[yi]: me,
|
|
3310
3309
|
[Ei]: me,
|
|
3311
|
-
[
|
|
3312
|
-
[
|
|
3313
|
-
[
|
|
3310
|
+
[Bi]: me,
|
|
3311
|
+
[Mi]: Me,
|
|
3312
|
+
[wi]: Me,
|
|
3314
3313
|
[Ci]: Me,
|
|
3315
|
-
[
|
|
3316
|
-
[
|
|
3314
|
+
[Ii]: Me,
|
|
3315
|
+
[Si]: Se,
|
|
3316
|
+
[Qi]: Se,
|
|
3317
|
+
[bi]: Se,
|
|
3317
3318
|
[mi]: Se,
|
|
3318
|
-
[
|
|
3319
|
-
[
|
|
3320
|
-
[
|
|
3321
|
-
[
|
|
3319
|
+
[vi]: hi,
|
|
3320
|
+
[Di]: ci,
|
|
3321
|
+
[Mt]: Ge,
|
|
3322
|
+
[zo]: Ge,
|
|
3322
3323
|
[Ko]: Ge,
|
|
3323
|
-
[
|
|
3324
|
-
[Ri]:
|
|
3325
|
-
[
|
|
3326
|
-
[
|
|
3327
|
-
[
|
|
3328
|
-
[
|
|
3329
|
-
[
|
|
3330
|
-
[Uo]:
|
|
3331
|
-
[
|
|
3332
|
-
[Vo]:
|
|
3333
|
-
[
|
|
3334
|
-
[qo]:
|
|
3335
|
-
[Oo]: ht
|
|
3324
|
+
[Li]: Gt,
|
|
3325
|
+
[Ri]: Gt,
|
|
3326
|
+
[Po]: ut,
|
|
3327
|
+
[No]: ut,
|
|
3328
|
+
[_o]: _t,
|
|
3329
|
+
[Go]: _t,
|
|
3330
|
+
[Ho]: kt,
|
|
3331
|
+
[Uo]: kt,
|
|
3332
|
+
[Oo]: gt,
|
|
3333
|
+
[Vo]: gt,
|
|
3334
|
+
[jo]: dt,
|
|
3335
|
+
[qo]: dt
|
|
3336
3336
|
}, ot = {
|
|
3337
|
+
[xi]: De,
|
|
3338
|
+
[yi]: be,
|
|
3339
|
+
[Ei]: z,
|
|
3340
|
+
[Bi]: z,
|
|
3337
3341
|
[Mi]: De,
|
|
3338
3342
|
[wi]: be,
|
|
3343
|
+
[Ci]: z,
|
|
3339
3344
|
[Ii]: z,
|
|
3340
|
-
[Ei]: z,
|
|
3341
3345
|
[Si]: De,
|
|
3342
3346
|
[Qi]: be,
|
|
3343
3347
|
[bi]: z,
|
|
3344
|
-
[Ci]: z,
|
|
3345
|
-
[yi]: De,
|
|
3346
|
-
[Bi]: be,
|
|
3347
3348
|
[mi]: z,
|
|
3348
|
-
[fi]: z,
|
|
3349
|
-
[xi]: z,
|
|
3350
3349
|
[vi]: z,
|
|
3351
|
-
[
|
|
3352
|
-
[
|
|
3353
|
-
[
|
|
3350
|
+
[Di]: z,
|
|
3351
|
+
[Mt]: be,
|
|
3352
|
+
[Li]: z,
|
|
3353
|
+
[Ri]: z
|
|
3354
3354
|
};
|
|
3355
|
-
async function
|
|
3355
|
+
async function en(c) {
|
|
3356
3356
|
const { vkFormat: e } = c;
|
|
3357
3357
|
if (st[e] === void 0)
|
|
3358
3358
|
throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
|
|
3359
3359
|
let t;
|
|
3360
|
-
c.supercompressionScheme ===
|
|
3361
|
-
const n = new
|
|
3360
|
+
c.supercompressionScheme === Kt && (it || (it = new Promise(async (o) => {
|
|
3361
|
+
const n = new Wo();
|
|
3362
3362
|
await n.init(), o(n);
|
|
3363
3363
|
})), t = await it);
|
|
3364
3364
|
const i = [];
|
|
3365
3365
|
for (let o = 0; o < c.levels.length; o++) {
|
|
3366
3366
|
const n = Math.max(1, c.pixelWidth >> o), r = Math.max(1, c.pixelHeight >> o), A = c.pixelDepth ? Math.max(1, c.pixelDepth >> o) : 0, a = c.levels[o];
|
|
3367
3367
|
let l;
|
|
3368
|
-
if (c.supercompressionScheme ===
|
|
3368
|
+
if (c.supercompressionScheme === Do)
|
|
3369
3369
|
l = a.levelData;
|
|
3370
|
-
else if (c.supercompressionScheme ===
|
|
3370
|
+
else if (c.supercompressionScheme === Kt)
|
|
3371
3371
|
l = t.decode(a.levelData, a.uncompressedByteLength);
|
|
3372
3372
|
else
|
|
3373
3373
|
throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
|
|
@@ -3388,19 +3388,19 @@ async function $o(c) {
|
|
|
3388
3388
|
});
|
|
3389
3389
|
}
|
|
3390
3390
|
let s;
|
|
3391
|
-
if (
|
|
3392
|
-
s = c.pixelDepth === 0 ? new
|
|
3391
|
+
if ($o.has(st[e]))
|
|
3392
|
+
s = c.pixelDepth === 0 ? new Cs(i[0].data, c.pixelWidth, c.pixelHeight) : new Is(i[0].data, c.pixelWidth, c.pixelHeight, c.pixelDepth);
|
|
3393
3393
|
else {
|
|
3394
3394
|
if (c.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
|
|
3395
|
-
s = new
|
|
3395
|
+
s = new li(i, c.pixelWidth, c.pixelHeight), s.minFilter = i.length === 1 ? he : Ve, s.magFilter = he;
|
|
3396
3396
|
}
|
|
3397
3397
|
return s.mipmaps = i, s.type = ot[e], s.format = st[e], s.colorSpace = Ti(c), s.needsUpdate = !0, Promise.resolve(s);
|
|
3398
3398
|
}
|
|
3399
3399
|
function Ti(c) {
|
|
3400
3400
|
const e = c.dataFormatDescriptor[0];
|
|
3401
|
-
return e.colorPrimaries === To ? e.transferFunction ===
|
|
3401
|
+
return e.colorPrimaries === To ? e.transferFunction === zt ? se : Y : e.colorPrimaries === Fo ? e.transferFunction === zt ? Xo : Zo : e.colorPrimaries === Lo ? Ft : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), Ft);
|
|
3402
3402
|
}
|
|
3403
|
-
var
|
|
3403
|
+
var tn = function() {
|
|
3404
3404
|
var c = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb", e = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb", t = new Uint8Array([
|
|
3405
3405
|
0,
|
|
3406
3406
|
97,
|
|
@@ -3532,10 +3532,10 @@ var en = function() {
|
|
|
3532
3532
|
return m.buffer.slice(0, B);
|
|
3533
3533
|
}
|
|
3534
3534
|
function A(f, m, E, b, B, Q, w) {
|
|
3535
|
-
var
|
|
3535
|
+
var T = f.exports.sbrk, R = b + 3 & -4, y = T(R * B), v = T(Q.length), M = new Uint8Array(f.exports.memory.buffer);
|
|
3536
3536
|
M.set(Q, v);
|
|
3537
3537
|
var J = m(y, b, B, v, Q.length);
|
|
3538
|
-
if (J == 0 && w && w(y, R, B), E.set(M.subarray(y, y + b * B)),
|
|
3538
|
+
if (J == 0 && w && w(y, R, B), E.set(M.subarray(y, y + b * B)), T(y - T(0)), J != 0)
|
|
3539
3539
|
throw new Error("Malformed buffer data: " + J);
|
|
3540
3540
|
}
|
|
3541
3541
|
var a = {
|
|
@@ -3569,9 +3569,9 @@ var en = function() {
|
|
|
3569
3569
|
function C(f, m, E, b, B) {
|
|
3570
3570
|
for (var Q = h[0], w = 1; w < h.length; ++w)
|
|
3571
3571
|
h[w].pending < Q.pending && (Q = h[w]);
|
|
3572
|
-
return new Promise(function(
|
|
3572
|
+
return new Promise(function(T, R) {
|
|
3573
3573
|
var y = new Uint8Array(E), v = ++d;
|
|
3574
|
-
Q.pending += f, Q.requests[v] = { resolve:
|
|
3574
|
+
Q.pending += f, Q.requests[v] = { resolve: T, reject: R }, Q.object.postMessage({ id: v, count: f, size: m, source: y, mode: b, filter: B }, [y.buffer]);
|
|
3575
3575
|
});
|
|
3576
3576
|
}
|
|
3577
3577
|
function I(f) {
|
|
@@ -3613,98 +3613,208 @@ var en = function() {
|
|
|
3613
3613
|
}
|
|
3614
3614
|
};
|
|
3615
3615
|
}();
|
|
3616
|
-
|
|
3616
|
+
function sn(c) {
|
|
3617
|
+
if (!c) return;
|
|
3618
|
+
(Array.isArray(c) ? c : [c]).forEach((t) => {
|
|
3619
|
+
t && (Object.keys(t).forEach((i) => {
|
|
3620
|
+
const s = t[i];
|
|
3621
|
+
s && s.isTexture && s.dispose();
|
|
3622
|
+
}), typeof t.dispose == "function" && t.dispose());
|
|
3623
|
+
});
|
|
3624
|
+
}
|
|
3625
|
+
function nt(c) {
|
|
3626
|
+
!c || !c.traverse || c.traverse((e) => {
|
|
3627
|
+
e.geometry && e.geometry.dispose(), e.material && sn(e.material);
|
|
3628
|
+
});
|
|
3629
|
+
}
|
|
3630
|
+
function on() {
|
|
3631
|
+
u.Cache && typeof u.Cache.clear == "function" && u.Cache.clear();
|
|
3632
|
+
}
|
|
3633
|
+
class V {
|
|
3617
3634
|
constructor(e = null) {
|
|
3618
|
-
this.renderer = e, this.loader = new
|
|
3635
|
+
this.renderer = e, this.isIOSWebKit = V.isIOSWebKit(), this.platformKey = V.getPlatformKey(), this.loader = new ui(), this.dracoLoader = new Mo(), this.ktx2Loader = null, this.loadQueue = Promise.resolve(), this.activeIOSLoad = !1, this.dracoLoader.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"), this.isIOSWebKit && typeof this.dracoLoader.setWorkerLimit == "function" && this.dracoLoader.setWorkerLimit(1), this.loader.setDRACOLoader(this.dracoLoader), this.loader.setMeshoptDecoder(tn), this.cache = /* @__PURE__ */ new Map(), this.ktx2SetupComplete = !1, this.setupKTX2Loader();
|
|
3619
3636
|
}
|
|
3620
3637
|
setupKTX2Loader() {
|
|
3621
|
-
|
|
3622
|
-
|
|
3638
|
+
const e = this.platformKey;
|
|
3639
|
+
try {
|
|
3640
|
+
if (!V.sharedKTX2Loaders.has(e)) {
|
|
3641
|
+
const t = new K();
|
|
3642
|
+
t.setTranscoderPath("https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/libs/basis/"), this.isIOSWebKit && typeof t.setWorkerLimit == "function" && t.setWorkerLimit(1), V.sharedKTX2Loaders.set(e, t), V.sharedKTX2SetupComplete.set(e, !1);
|
|
3643
|
+
}
|
|
3644
|
+
this.ktx2Loader = V.sharedKTX2Loaders.get(e), this.loader.setKTX2Loader(this.ktx2Loader), this.ktx2SetupComplete = V.sharedKTX2SetupComplete.get(e) || !1, this.renderer && !this.ktx2SetupComplete && this.ensureKTX2Support();
|
|
3645
|
+
} catch (t) {
|
|
3646
|
+
console.warn("KTX2 loader setup failed, falling back to standard textures:", t), this.ktx2Loader = null;
|
|
3647
|
+
}
|
|
3648
|
+
}
|
|
3649
|
+
ensureKTX2Support() {
|
|
3650
|
+
if (!this.ktx2Loader || !this.renderer)
|
|
3651
|
+
return;
|
|
3652
|
+
const e = this.platformKey;
|
|
3653
|
+
if (V.sharedKTX2SetupComplete.get(e)) {
|
|
3654
|
+
this.ktx2SetupComplete = !0;
|
|
3623
3655
|
return;
|
|
3624
3656
|
}
|
|
3625
3657
|
try {
|
|
3626
|
-
|
|
3627
|
-
} catch (
|
|
3628
|
-
console.warn("
|
|
3658
|
+
this.ktx2Loader.detectSupport(this.renderer), V.sharedKTX2SetupComplete.set(e, !0), this.ktx2SetupComplete = !0;
|
|
3659
|
+
} catch (t) {
|
|
3660
|
+
console.warn("Failed to set up KTX2 loader with renderer:", t);
|
|
3629
3661
|
}
|
|
3630
3662
|
}
|
|
3631
3663
|
setRenderer(e) {
|
|
3632
|
-
|
|
3633
|
-
try {
|
|
3634
|
-
this.ktx2Loader.detectSupport(e), this.loader.setKTX2Loader(this.ktx2Loader);
|
|
3635
|
-
} catch (t) {
|
|
3636
|
-
console.warn("Failed to set up KTX2 loader with renderer:", t);
|
|
3637
|
-
}
|
|
3638
|
-
!this.ktx2Loader && e && this.setupKTX2Loader();
|
|
3664
|
+
this.renderer = e, e && (this.ktx2Loader ? this.ensureKTX2Support() : this.setupKTX2Loader());
|
|
3639
3665
|
}
|
|
3640
|
-
async load(e, t = null, i = null) {
|
|
3666
|
+
async load(e, t = null, i = null, s = null) {
|
|
3641
3667
|
if (this.cache.has(e)) {
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3668
|
+
s && s("cloning");
|
|
3669
|
+
const A = this.cache.get(e).scene.clone(!0);
|
|
3670
|
+
return this.processModel({ scene: A });
|
|
3671
|
+
}
|
|
3672
|
+
const o = () => this.performLoad(e, t, i, s);
|
|
3673
|
+
if (!this.isIOSWebKit)
|
|
3674
|
+
return o();
|
|
3675
|
+
const n = this.loadQueue.then(() => (this.activeIOSLoad && typeof s == "function" && s("freeing-resources"), o()));
|
|
3676
|
+
return this.loadQueue = n.catch(() => {
|
|
3677
|
+
}), n;
|
|
3678
|
+
}
|
|
3679
|
+
performLoad(e, t = null, i = null, s = null) {
|
|
3680
|
+
return new Promise((o, n) => {
|
|
3681
|
+
let r = null;
|
|
3682
|
+
const A = () => {
|
|
3683
|
+
i && r && (i.removeEventListener("abort", r), r = null);
|
|
3684
|
+
}, a = () => {
|
|
3685
|
+
A(), this.isIOSWebKit && (this.activeIOSLoad = !1), n(new Error("Loading cancelled"));
|
|
3686
|
+
};
|
|
3687
|
+
if (i && (r = a, i.addEventListener("abort", r), i.aborted)) {
|
|
3688
|
+
a();
|
|
3650
3689
|
return;
|
|
3651
3690
|
}
|
|
3652
|
-
this.loader.load(
|
|
3691
|
+
s && s("downloading"), this.isIOSWebKit && (this.activeIOSLoad = !0), this.loader.load(
|
|
3653
3692
|
e,
|
|
3654
|
-
(
|
|
3655
|
-
if (i && i.aborted) {
|
|
3656
|
-
|
|
3693
|
+
(l) => {
|
|
3694
|
+
if (s && s("processing"), i && i.aborted) {
|
|
3695
|
+
A();
|
|
3657
3696
|
return;
|
|
3658
3697
|
}
|
|
3659
|
-
this.cache.set(e,
|
|
3660
|
-
const
|
|
3661
|
-
s(
|
|
3698
|
+
this.cache.set(e, l);
|
|
3699
|
+
const h = this.processModel(l);
|
|
3700
|
+
s && s("finalizing"), this.releaseParserCaches(l), A(), this.isIOSWebKit && (this.activeIOSLoad = !1), o(h);
|
|
3662
3701
|
},
|
|
3663
|
-
(
|
|
3664
|
-
i && i.aborted || t && t(
|
|
3702
|
+
(l) => {
|
|
3703
|
+
i && i.aborted || t && t(l);
|
|
3665
3704
|
},
|
|
3666
|
-
(
|
|
3667
|
-
|
|
3705
|
+
(l) => {
|
|
3706
|
+
A(), this.isIOSWebKit && (this.activeIOSLoad = !1), n(l);
|
|
3668
3707
|
}
|
|
3669
3708
|
);
|
|
3670
3709
|
});
|
|
3671
3710
|
}
|
|
3672
3711
|
processModel(e) {
|
|
3673
|
-
const t = e.scene;
|
|
3674
|
-
t.traverse((
|
|
3675
|
-
if (
|
|
3676
|
-
|
|
3677
|
-
const
|
|
3678
|
-
|
|
3679
|
-
if (
|
|
3680
|
-
const
|
|
3712
|
+
const t = e.scene, i = this.getMaxAnisotropy();
|
|
3713
|
+
t.traverse((o) => {
|
|
3714
|
+
if (o.isLight && (o.visible = !1), o.isMesh && o.material) {
|
|
3715
|
+
o.castShadow = !0, o.receiveShadow = !0;
|
|
3716
|
+
const n = Array.isArray(o.material) ? o.material : [o.material];
|
|
3717
|
+
n.forEach((r, A) => {
|
|
3718
|
+
if (r.emissive && r.emissive.setHex(0), r.emissiveIntensity !== void 0 && (r.emissiveIntensity = 0), r.emissiveMap && (r.emissiveMap = null), r.lightMap && (r.lightMap = null), r.lightMapIntensity !== void 0 && (r.lightMapIntensity = 0), r.type === "MeshBasicMaterial" || r.type === "MeshPhongMaterial") {
|
|
3719
|
+
const l = new u.MeshLambertMaterial({
|
|
3681
3720
|
// Only include common, safe params; set specialized textures conditionally below
|
|
3682
|
-
color:
|
|
3683
|
-
side:
|
|
3684
|
-
wireframe:
|
|
3685
|
-
vertexColors:
|
|
3686
|
-
fog:
|
|
3721
|
+
color: r.color || new u.Color(16777215),
|
|
3722
|
+
side: r.side !== void 0 ? r.side : u.FrontSide,
|
|
3723
|
+
wireframe: r.wireframe || !1,
|
|
3724
|
+
vertexColors: r.vertexColors || !1,
|
|
3725
|
+
fog: r.fog !== void 0 ? r.fog : !0,
|
|
3687
3726
|
flatShading: !1
|
|
3688
3727
|
});
|
|
3689
|
-
|
|
3690
|
-
} else (
|
|
3691
|
-
const
|
|
3692
|
-
|
|
3693
|
-
}),
|
|
3728
|
+
r.map && (l.map = r.map), r.alphaMap && (l.alphaMap = r.alphaMap), r.aoMap && (l.aoMap = r.aoMap), typeof r.aoMapIntensity == "number" && (l.aoMapIntensity = r.aoMapIntensity), r.envMap && (l.envMap = r.envMap), typeof r.reflectivity == "number" && (l.reflectivity = r.reflectivity), typeof r.refractionRatio == "number" && (l.refractionRatio = r.refractionRatio), r.combine !== void 0 && (l.combine = r.combine), r.transparent !== void 0 && (l.transparent = r.transparent), typeof r.opacity == "number" && (l.opacity = r.opacity), r.normalMap && (l.normalMap = r.normalMap, l.normalScale = r.normalScale || new u.Vector2(1, 1)), l.map && i !== null && (l.map.anisotropy = i, l.map.needsUpdate = !0), l.normalMap && i !== null && (l.normalMap.anisotropy = i, l.normalMap.needsUpdate = !0), l.needsUpdate = !0, Array.isArray(o.material) ? o.material[A] = l : o.material = l, r !== l && typeof r?.dispose == "function" && r.dispose();
|
|
3729
|
+
} else (r.type === "MeshStandardMaterial" || r.type === "MeshPhysicalMaterial") && (r.needsUpdate = !0);
|
|
3730
|
+
const a = Array.isArray(o.material) ? o.material[A] : o.material;
|
|
3731
|
+
a && a.needsUpdate !== void 0 && (a.needsUpdate = !0);
|
|
3732
|
+
}), o.geometry && (o.geometry.computeVertexNormals(), o.geometry.normalizeNormals(), n.some((A) => A.normalMap) && o.geometry.computeTangents());
|
|
3694
3733
|
}
|
|
3695
3734
|
});
|
|
3696
|
-
const
|
|
3697
|
-
return t.userData.boundingBox =
|
|
3735
|
+
const s = new u.Box3().setFromObject(t);
|
|
3736
|
+
return t.userData.boundingBox = s, t;
|
|
3737
|
+
}
|
|
3738
|
+
getMaxAnisotropy() {
|
|
3739
|
+
if (!this.renderer || !this.renderer.capabilities || typeof this.renderer.capabilities.getMaxAnisotropy != "function")
|
|
3740
|
+
return null;
|
|
3741
|
+
const e = this.renderer.capabilities.getMaxAnisotropy();
|
|
3742
|
+
return typeof e == "number" ? e : null;
|
|
3698
3743
|
}
|
|
3699
3744
|
processMaterial(e) {
|
|
3700
3745
|
e && e.needsUpdate !== void 0 && (e.needsUpdate = !0);
|
|
3701
3746
|
}
|
|
3747
|
+
releaseFromCache(e) {
|
|
3748
|
+
if (!this.cache.has(e))
|
|
3749
|
+
return;
|
|
3750
|
+
const t = this.cache.get(e);
|
|
3751
|
+
this.disposeGLTFResources(t), this.cache.delete(e);
|
|
3752
|
+
}
|
|
3753
|
+
disposeGLTFResources(e) {
|
|
3754
|
+
if (!e) return;
|
|
3755
|
+
this.releaseParserCaches(e);
|
|
3756
|
+
const t = /* @__PURE__ */ new Set(), i = (s) => {
|
|
3757
|
+
!s || t.has(s) || (t.add(s), s.traverse((o) => {
|
|
3758
|
+
o.isMesh && (o.geometry && o.geometry.dispose(), this.disposeMaterialResources(o.material));
|
|
3759
|
+
}));
|
|
3760
|
+
};
|
|
3761
|
+
Array.isArray(e.scenes) && e.scenes.forEach(i), e.scene && i(e.scene);
|
|
3762
|
+
}
|
|
3763
|
+
disposeMaterialResources(e) {
|
|
3764
|
+
if (!e) return;
|
|
3765
|
+
const t = Array.isArray(e) ? e : [e], i = [
|
|
3766
|
+
"map",
|
|
3767
|
+
"alphaMap",
|
|
3768
|
+
"aoMap",
|
|
3769
|
+
"bumpMap",
|
|
3770
|
+
"clearcoatMap",
|
|
3771
|
+
"clearcoatNormalMap",
|
|
3772
|
+
"clearcoatRoughnessMap",
|
|
3773
|
+
"displacementMap",
|
|
3774
|
+
"emissiveMap",
|
|
3775
|
+
"envMap",
|
|
3776
|
+
"iridescenceMap",
|
|
3777
|
+
"lightMap",
|
|
3778
|
+
"metalnessMap",
|
|
3779
|
+
"normalMap",
|
|
3780
|
+
"roughnessMap",
|
|
3781
|
+
"specularMap",
|
|
3782
|
+
"specularColorMap",
|
|
3783
|
+
"specularIntensityMap",
|
|
3784
|
+
"sheenColorMap",
|
|
3785
|
+
"sheenRoughnessMap",
|
|
3786
|
+
"thicknessMap",
|
|
3787
|
+
"transmissionMap",
|
|
3788
|
+
"anisotropyMap"
|
|
3789
|
+
];
|
|
3790
|
+
t.forEach((s) => {
|
|
3791
|
+
s && (i.forEach((o) => {
|
|
3792
|
+
const n = s[o];
|
|
3793
|
+
n && typeof n.dispose == "function" && n.dispose(), n && n.source && typeof n.source.dispose == "function" && n.source.dispose(), n && n.image && typeof n.image.close == "function" && n.image.close(), n && (s[o] = null);
|
|
3794
|
+
}), typeof s.dispose == "function" && s.dispose());
|
|
3795
|
+
});
|
|
3796
|
+
}
|
|
3797
|
+
releaseParserCaches(e) {
|
|
3798
|
+
const t = e?.parser;
|
|
3799
|
+
t && (t.cache && typeof t.cache.removeAll == "function" && t.cache.removeAll(), t.associations && typeof t.associations.clear == "function" && t.associations.clear(), t.primitiveCache = {}, t.nodeCache = {}, t.meshCache = { refs: {}, uses: {} }, t.cameraCache = { refs: {}, uses: {} }, t.lightCache = { refs: {}, uses: {} }, t.sourceCache = {}, t.textureCache = {}, t.nodeNamesUsed = {}, t.json = null, t.extensions = null, t.plugins = null, t.options = null, t.textureLoader = null, e.parser = null, on());
|
|
3800
|
+
}
|
|
3702
3801
|
dispose() {
|
|
3703
|
-
this.dracoLoader && this.dracoLoader.dispose(), this.cache.
|
|
3802
|
+
this.dracoLoader && this.dracoLoader.dispose(), this.cache.forEach((e) => {
|
|
3803
|
+
this.disposeGLTFResources(e);
|
|
3804
|
+
}), this.cache.clear(), this.ktx2SetupComplete = !1;
|
|
3805
|
+
}
|
|
3806
|
+
static isIOSWebKit() {
|
|
3807
|
+
if (typeof navigator > "u")
|
|
3808
|
+
return !1;
|
|
3809
|
+
const e = navigator.userAgent || "", t = navigator.userAgentData && navigator.userAgentData.platform || navigator.platform || "";
|
|
3810
|
+
return !!(/iPhone|iPad|iPod/.test(t) || t === "MacIntel" && navigator.maxTouchPoints > 1 || /AppleWebKit/.test(e) && /Mobile/.test(e) && !/Chrome|CriOS|FxiOS/.test(e));
|
|
3811
|
+
}
|
|
3812
|
+
static getPlatformKey() {
|
|
3813
|
+
return V.isIOSWebKit() ? "ios" : "default";
|
|
3704
3814
|
}
|
|
3705
3815
|
}
|
|
3706
|
-
|
|
3707
|
-
|
|
3816
|
+
V.sharedKTX2Loaders = /* @__PURE__ */ new Map();
|
|
3817
|
+
V.sharedKTX2SetupComplete = /* @__PURE__ */ new Map();
|
|
3708
3818
|
class Ee {
|
|
3709
3819
|
/**
|
|
3710
3820
|
* Constructs a new VR button.
|
|
@@ -3782,7 +3892,7 @@ class Ee {
|
|
|
3782
3892
|
}
|
|
3783
3893
|
Ee.xrSessionIsGranted = !1;
|
|
3784
3894
|
Ee.registerSessionGrantedListener();
|
|
3785
|
-
class
|
|
3895
|
+
class nn {
|
|
3786
3896
|
constructor(e, t, i, s = null) {
|
|
3787
3897
|
this.renderer = e, this.camera = t, this.scene = i, this.container = s || document.body, this.isVRSupported = !1, this.isVRPresenting = !1, this.isQuest2 = !1, this.isQuest3 = !1, this.vrButton = null, this.onSessionStart = null, this.onSessionEnd = null;
|
|
3788
3898
|
}
|
|
@@ -3814,12 +3924,7 @@ class tn {
|
|
|
3814
3924
|
try {
|
|
3815
3925
|
this.waitForVRCSS().then(() => {
|
|
3816
3926
|
const e = {
|
|
3817
|
-
optionalFeatures:
|
|
3818
|
-
"hand-tracking",
|
|
3819
|
-
"local-floor",
|
|
3820
|
-
"bounded-floor",
|
|
3821
|
-
"layers"
|
|
3822
|
-
]
|
|
3927
|
+
optionalFeatures: this.getOptionalFeatures()
|
|
3823
3928
|
};
|
|
3824
3929
|
this.vrButton = Ee.createButton(this.renderer, e), this.vrButton.innerHTML = '<span class="vr-icon">🥽</span>ENTER VR', this.vrButton.className = "vr-button--glass vr-button-available", this.vrButton.disabled = !1, this.vrButton.style.cssText = `
|
|
3825
3930
|
position: fixed !important;
|
|
@@ -3838,6 +3943,38 @@ class tn {
|
|
|
3838
3943
|
console.error("❌ VR button creation failed:", e);
|
|
3839
3944
|
}
|
|
3840
3945
|
}
|
|
3946
|
+
getOptionalFeatures() {
|
|
3947
|
+
const e = ["hand-tracking", "local-floor"];
|
|
3948
|
+
try {
|
|
3949
|
+
this.supportsBoundedFloor() && e.push("bounded-floor");
|
|
3950
|
+
} catch (t) {
|
|
3951
|
+
console.warn("VR optional feature detection failed:", t);
|
|
3952
|
+
}
|
|
3953
|
+
return e;
|
|
3954
|
+
}
|
|
3955
|
+
supportsBoundedFloor() {
|
|
3956
|
+
if (typeof navigator > "u" || this.isPolyfilledXR())
|
|
3957
|
+
return !1;
|
|
3958
|
+
const e = navigator.xr;
|
|
3959
|
+
return e ? Array.isArray(e.supportedReferenceSpaceTypes) ? e.supportedReferenceSpaceTypes.includes("bounded-floor") : typeof window < "u" && typeof window.XRBoundedReferenceSpace < "u" : !1;
|
|
3960
|
+
}
|
|
3961
|
+
isPolyfilledXR() {
|
|
3962
|
+
if (typeof window < "u" && typeof window.WebXRPolyfill < "u")
|
|
3963
|
+
return !0;
|
|
3964
|
+
if (typeof navigator > "u" || !navigator.xr)
|
|
3965
|
+
return !1;
|
|
3966
|
+
const e = navigator.xr, t = e.constructor && e.constructor.name;
|
|
3967
|
+
if (t && t.toLowerCase().includes("polyfill"))
|
|
3968
|
+
return !0;
|
|
3969
|
+
try {
|
|
3970
|
+
const i = e.requestSession && e.requestSession.toString();
|
|
3971
|
+
if (typeof i == "string" && !i.includes("[native code]"))
|
|
3972
|
+
return !0;
|
|
3973
|
+
} catch {
|
|
3974
|
+
return !0;
|
|
3975
|
+
}
|
|
3976
|
+
return !1;
|
|
3977
|
+
}
|
|
3841
3978
|
styleVRButton() {
|
|
3842
3979
|
const e = () => {
|
|
3843
3980
|
const t = document.querySelector("button.vr-button--glass") || document.querySelector("button") || this.vrButton;
|
|
@@ -3914,7 +4051,7 @@ class tn {
|
|
|
3914
4051
|
this.vrButton && this.vrButton.parentNode && this.vrButton.parentNode.removeChild(this.vrButton), this.isQuest2 = !1, this.isQuest3 = !1, this.isVRSupported = !1, this.isVRPresenting = !1;
|
|
3915
4052
|
}
|
|
3916
4053
|
}
|
|
3917
|
-
const
|
|
4054
|
+
const L = {
|
|
3918
4055
|
ComponentState: Object.freeze({
|
|
3919
4056
|
DEFAULT: "default",
|
|
3920
4057
|
TOUCHED: "touched",
|
|
@@ -3940,23 +4077,23 @@ const T = {
|
|
|
3940
4077
|
VISIBILITY: "visibility"
|
|
3941
4078
|
})
|
|
3942
4079
|
};
|
|
3943
|
-
async function
|
|
4080
|
+
async function Fi(c) {
|
|
3944
4081
|
const e = await fetch(c);
|
|
3945
4082
|
if (e.ok)
|
|
3946
4083
|
return e.json();
|
|
3947
4084
|
throw new Error(e.statusText);
|
|
3948
4085
|
}
|
|
3949
|
-
async function
|
|
4086
|
+
async function rn(c) {
|
|
3950
4087
|
if (!c)
|
|
3951
4088
|
throw new Error("No basePath supplied");
|
|
3952
|
-
return await
|
|
4089
|
+
return await Fi(`${c}/profilesList.json`);
|
|
3953
4090
|
}
|
|
3954
|
-
async function
|
|
4091
|
+
async function an(c, e, t = null, i = !0) {
|
|
3955
4092
|
if (!c)
|
|
3956
4093
|
throw new Error("No xrInputSource supplied");
|
|
3957
4094
|
if (!e)
|
|
3958
4095
|
throw new Error("No basePath supplied");
|
|
3959
|
-
const s = await
|
|
4096
|
+
const s = await rn(e);
|
|
3960
4097
|
let o;
|
|
3961
4098
|
if (c.profiles.some((A) => {
|
|
3962
4099
|
const a = s[A];
|
|
@@ -3977,7 +4114,7 @@ async function on(c, e, t = null, i = !0) {
|
|
|
3977
4114
|
deprecated: !!A.deprecated
|
|
3978
4115
|
};
|
|
3979
4116
|
}
|
|
3980
|
-
const n = await
|
|
4117
|
+
const n = await Fi(o.profilePath);
|
|
3981
4118
|
let r;
|
|
3982
4119
|
if (i) {
|
|
3983
4120
|
let A;
|
|
@@ -3989,13 +4126,13 @@ async function on(c, e, t = null, i = !0) {
|
|
|
3989
4126
|
}
|
|
3990
4127
|
return { profile: n, assetPath: r };
|
|
3991
4128
|
}
|
|
3992
|
-
const
|
|
4129
|
+
const An = {
|
|
3993
4130
|
xAxis: 0,
|
|
3994
4131
|
yAxis: 0,
|
|
3995
4132
|
button: 0,
|
|
3996
|
-
state:
|
|
4133
|
+
state: L.ComponentState.DEFAULT
|
|
3997
4134
|
};
|
|
3998
|
-
function
|
|
4135
|
+
function ln(c = 0, e = 0) {
|
|
3999
4136
|
let t = c, i = e;
|
|
4000
4137
|
if (Math.sqrt(c * c + e * e) > 1) {
|
|
4001
4138
|
const n = Math.atan2(e, c);
|
|
@@ -4006,9 +4143,9 @@ function rn(c = 0, e = 0) {
|
|
|
4006
4143
|
normalizedYAxis: i * 0.5 + 0.5
|
|
4007
4144
|
};
|
|
4008
4145
|
}
|
|
4009
|
-
class
|
|
4146
|
+
class cn {
|
|
4010
4147
|
constructor(e) {
|
|
4011
|
-
this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty ===
|
|
4148
|
+
this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty === L.VisualResponseProperty.TRANSFORM && (this.minNodeName = e.minNodeName, this.maxNodeName = e.maxNodeName), this.value = 0, this.updateFromComponent(An);
|
|
4012
4149
|
}
|
|
4013
4150
|
/**
|
|
4014
4151
|
* Computes the visual response's interpolation weight based on component state
|
|
@@ -4024,26 +4161,26 @@ class an {
|
|
|
4024
4161
|
button: i,
|
|
4025
4162
|
state: s
|
|
4026
4163
|
}) {
|
|
4027
|
-
const { normalizedXAxis: o, normalizedYAxis: n } =
|
|
4164
|
+
const { normalizedXAxis: o, normalizedYAxis: n } = ln(e, t);
|
|
4028
4165
|
switch (this.componentProperty) {
|
|
4029
|
-
case
|
|
4166
|
+
case L.ComponentProperty.X_AXIS:
|
|
4030
4167
|
this.value = this.states.includes(s) ? o : 0.5;
|
|
4031
4168
|
break;
|
|
4032
|
-
case
|
|
4169
|
+
case L.ComponentProperty.Y_AXIS:
|
|
4033
4170
|
this.value = this.states.includes(s) ? n : 0.5;
|
|
4034
4171
|
break;
|
|
4035
|
-
case
|
|
4172
|
+
case L.ComponentProperty.BUTTON:
|
|
4036
4173
|
this.value = this.states.includes(s) ? i : 0;
|
|
4037
4174
|
break;
|
|
4038
|
-
case
|
|
4039
|
-
this.valueNodeProperty ===
|
|
4175
|
+
case L.ComponentProperty.STATE:
|
|
4176
|
+
this.valueNodeProperty === L.VisualResponseProperty.VISIBILITY ? this.value = this.states.includes(s) : this.value = this.states.includes(s) ? 1 : 0;
|
|
4040
4177
|
break;
|
|
4041
4178
|
default:
|
|
4042
4179
|
throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);
|
|
4043
4180
|
}
|
|
4044
4181
|
}
|
|
4045
4182
|
}
|
|
4046
|
-
class
|
|
4183
|
+
class hn {
|
|
4047
4184
|
/**
|
|
4048
4185
|
* @param {Object} componentId - Id of the component
|
|
4049
4186
|
* @param {Object} componentDescription - Description of the component to be created
|
|
@@ -4052,10 +4189,10 @@ class An {
|
|
|
4052
4189
|
if (!e || !t || !t.visualResponses || !t.gamepadIndices || Object.keys(t.gamepadIndices).length === 0)
|
|
4053
4190
|
throw new Error("Invalid arguments supplied");
|
|
4054
4191
|
this.id = e, this.type = t.type, this.rootNodeName = t.rootNodeName, this.touchPointNodeName = t.touchPointNodeName, this.visualResponses = {}, Object.keys(t.visualResponses).forEach((i) => {
|
|
4055
|
-
const s = new
|
|
4192
|
+
const s = new cn(t.visualResponses[i]);
|
|
4056
4193
|
this.visualResponses[i] = s;
|
|
4057
4194
|
}), this.gamepadIndices = Object.assign({}, t.gamepadIndices), this.values = {
|
|
4058
|
-
state:
|
|
4195
|
+
state: L.ComponentState.DEFAULT,
|
|
4059
4196
|
button: this.gamepadIndices.button !== void 0 ? 0 : void 0,
|
|
4060
4197
|
xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0,
|
|
4061
4198
|
yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0
|
|
@@ -4069,16 +4206,16 @@ class An {
|
|
|
4069
4206
|
* @param {Object} gamepad - The gamepad object from which the component data should be polled
|
|
4070
4207
|
*/
|
|
4071
4208
|
updateFromGamepad(e) {
|
|
4072
|
-
if (this.values.state =
|
|
4209
|
+
if (this.values.state = L.ComponentState.DEFAULT, this.gamepadIndices.button !== void 0 && e.buttons.length > this.gamepadIndices.button) {
|
|
4073
4210
|
const t = e.buttons[this.gamepadIndices.button];
|
|
4074
|
-
this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state =
|
|
4211
|
+
this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state = L.ComponentState.PRESSED : (t.touched || this.values.button > L.ButtonTouchThreshold) && (this.values.state = L.ComponentState.TOUCHED);
|
|
4075
4212
|
}
|
|
4076
|
-
this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state ===
|
|
4213
|
+
this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state === L.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > L.AxisTouchThreshold && (this.values.state = L.ComponentState.TOUCHED)), this.gamepadIndices.yAxis !== void 0 && e.axes.length > this.gamepadIndices.yAxis && (this.values.yAxis = e.axes[this.gamepadIndices.yAxis], this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis, this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis, this.values.state === L.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > L.AxisTouchThreshold && (this.values.state = L.ComponentState.TOUCHED)), Object.values(this.visualResponses).forEach((t) => {
|
|
4077
4214
|
t.updateFromComponent(this.values);
|
|
4078
4215
|
});
|
|
4079
4216
|
}
|
|
4080
4217
|
}
|
|
4081
|
-
class
|
|
4218
|
+
class dn {
|
|
4082
4219
|
/**
|
|
4083
4220
|
* @param {Object} xrInputSource - The XRInputSource to build the MotionController around
|
|
4084
4221
|
* @param {Object} profile - The best matched profile description for the supplied xrInputSource
|
|
@@ -4091,7 +4228,7 @@ class ln {
|
|
|
4091
4228
|
throw new Error("No profile supplied");
|
|
4092
4229
|
this.xrInputSource = e, this.assetUrl = i, this.id = t.profileId, this.layoutDescription = t.layouts[e.handedness], this.components = {}, Object.keys(this.layoutDescription.components).forEach((s) => {
|
|
4093
4230
|
const o = this.layoutDescription.components[s];
|
|
4094
|
-
this.components[s] = new
|
|
4231
|
+
this.components[s] = new hn(s, o);
|
|
4095
4232
|
}), this.updateFromGamepad();
|
|
4096
4233
|
}
|
|
4097
4234
|
get gripSpace() {
|
|
@@ -4118,8 +4255,8 @@ class ln {
|
|
|
4118
4255
|
});
|
|
4119
4256
|
}
|
|
4120
4257
|
}
|
|
4121
|
-
const
|
|
4122
|
-
class
|
|
4258
|
+
const gn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles", un = "generic-trigger";
|
|
4259
|
+
class pn extends Bt {
|
|
4123
4260
|
/**
|
|
4124
4261
|
* Constructs a new XR controller model.
|
|
4125
4262
|
*/
|
|
@@ -4148,7 +4285,7 @@ class dn extends Et {
|
|
|
4148
4285
|
super.updateMatrixWorld(e), this.motionController && (this.motionController.updateFromGamepad(), Object.values(this.motionController.components).forEach((t) => {
|
|
4149
4286
|
Object.values(t.visualResponses).forEach((i) => {
|
|
4150
4287
|
const { valueNode: s, minNode: o, maxNode: n, value: r, valueNodeProperty: A } = i;
|
|
4151
|
-
s && (A ===
|
|
4288
|
+
s && (A === L.VisualResponseProperty.VISIBILITY ? s.visible = r : A === L.VisualResponseProperty.TRANSFORM && (s.quaternion.slerpQuaternions(
|
|
4152
4289
|
o.quaternion,
|
|
4153
4290
|
n.quaternion,
|
|
4154
4291
|
r
|
|
@@ -4161,18 +4298,18 @@ class dn extends Et {
|
|
|
4161
4298
|
}));
|
|
4162
4299
|
}
|
|
4163
4300
|
}
|
|
4164
|
-
function
|
|
4301
|
+
function fn(c, e) {
|
|
4165
4302
|
Object.values(c.components).forEach((t) => {
|
|
4166
4303
|
const { type: i, touchPointNodeName: s, visualResponses: o } = t;
|
|
4167
|
-
if (i ===
|
|
4304
|
+
if (i === L.ComponentType.TOUCHPAD)
|
|
4168
4305
|
if (t.touchPointNode = e.getObjectByName(s), t.touchPointNode) {
|
|
4169
|
-
const n = new
|
|
4306
|
+
const n = new ys(1e-3), r = new fe({ color: 255 }), A = new Qt(n, r);
|
|
4170
4307
|
t.touchPointNode.add(A);
|
|
4171
4308
|
} else
|
|
4172
4309
|
console.warn(`Could not find touch dot, ${t.touchPointNodeName}, in touchpad component ${t.id}`);
|
|
4173
4310
|
Object.values(o).forEach((n) => {
|
|
4174
4311
|
const { valueNodeName: r, minNodeName: A, maxNodeName: a, valueNodeProperty: l } = n;
|
|
4175
|
-
if (l ===
|
|
4312
|
+
if (l === L.VisualResponseProperty.TRANSFORM) {
|
|
4176
4313
|
if (n.minNode = e.getObjectByName(A), n.maxNode = e.getObjectByName(a), !n.minNode) {
|
|
4177
4314
|
console.warn(`Could not find ${A} in the model`);
|
|
4178
4315
|
return;
|
|
@@ -4186,12 +4323,12 @@ function gn(c, e) {
|
|
|
4186
4323
|
});
|
|
4187
4324
|
});
|
|
4188
4325
|
}
|
|
4189
|
-
function
|
|
4190
|
-
|
|
4326
|
+
function Wt(c, e) {
|
|
4327
|
+
fn(c.motionController, e), c.envMap && e.traverse((t) => {
|
|
4191
4328
|
t.isMesh && (t.material.envMap = c.envMap, t.material.needsUpdate = !0);
|
|
4192
4329
|
}), c.add(e);
|
|
4193
4330
|
}
|
|
4194
|
-
class
|
|
4331
|
+
class mn {
|
|
4195
4332
|
/**
|
|
4196
4333
|
* Constructs a new XR controller model factory.
|
|
4197
4334
|
*
|
|
@@ -4199,7 +4336,7 @@ class un {
|
|
|
4199
4336
|
* @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
|
|
4200
4337
|
*/
|
|
4201
4338
|
constructor(e = null, t = null) {
|
|
4202
|
-
this.gltfLoader = e, this.path =
|
|
4339
|
+
this.gltfLoader = e, this.path = gn, this._assetCache = {}, this.onLoad = t, this.gltfLoader || (this.gltfLoader = new ui());
|
|
4203
4340
|
}
|
|
4204
4341
|
/**
|
|
4205
4342
|
* Sets the path to the model repository.
|
|
@@ -4217,26 +4354,26 @@ class un {
|
|
|
4217
4354
|
* @return {XRControllerModel} The XR controller model.
|
|
4218
4355
|
*/
|
|
4219
4356
|
createControllerModel(e) {
|
|
4220
|
-
const t = new
|
|
4357
|
+
const t = new pn();
|
|
4221
4358
|
let i = null;
|
|
4222
4359
|
return e.addEventListener("connected", (s) => {
|
|
4223
4360
|
const o = s.data;
|
|
4224
|
-
o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand ||
|
|
4225
|
-
t.motionController = new
|
|
4361
|
+
o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand || an(o, this.path, un).then(({ profile: n, assetPath: r }) => {
|
|
4362
|
+
t.motionController = new dn(
|
|
4226
4363
|
o,
|
|
4227
4364
|
n,
|
|
4228
4365
|
r
|
|
4229
4366
|
);
|
|
4230
4367
|
const A = this._assetCache[t.motionController.assetUrl];
|
|
4231
4368
|
if (A)
|
|
4232
|
-
i = A.scene.clone(),
|
|
4369
|
+
i = A.scene.clone(), Wt(t, i), this.onLoad && this.onLoad(i);
|
|
4233
4370
|
else {
|
|
4234
4371
|
if (!this.gltfLoader)
|
|
4235
4372
|
throw new Error("GLTFLoader not set.");
|
|
4236
4373
|
this.gltfLoader.setPath(""), this.gltfLoader.load(
|
|
4237
4374
|
t.motionController.assetUrl,
|
|
4238
4375
|
(a) => {
|
|
4239
|
-
this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(),
|
|
4376
|
+
this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(), Wt(t, i), this.onLoad && this.onLoad(i);
|
|
4240
4377
|
},
|
|
4241
4378
|
null,
|
|
4242
4379
|
() => {
|
|
@@ -4252,7 +4389,7 @@ class un {
|
|
|
4252
4389
|
}), t;
|
|
4253
4390
|
}
|
|
4254
4391
|
}
|
|
4255
|
-
class
|
|
4392
|
+
class bn {
|
|
4256
4393
|
constructor(e, t) {
|
|
4257
4394
|
this.renderer = e, this.camera = t, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates = /* @__PURE__ */ new Map(), this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.onSelectStart = null, this.onSelectEnd = null, this.onSqueezeStart = null, this.onSqueezeEnd = null, this.onModeToggle = null, this.onMovementStart = null, this.onMovementStop = null, this.handsActive = !1, this.handStates = {
|
|
4258
4395
|
left: { pinch: !1, fist: !1, direction: new u.Vector3() },
|
|
@@ -4310,7 +4447,7 @@ class pn {
|
|
|
4310
4447
|
}
|
|
4311
4448
|
}
|
|
4312
4449
|
initControllers() {
|
|
4313
|
-
const e = new
|
|
4450
|
+
const e = new mn();
|
|
4314
4451
|
for (let t = 0; t < 2; t++) {
|
|
4315
4452
|
const i = this.renderer.xr.getController(t), s = this.renderer.xr.getControllerGrip(t);
|
|
4316
4453
|
s.add(e.createControllerModel(s)), this.camera.parent.add(i), this.camera.parent.add(s), this.controllers.push(i), this.controllerGrips.push(s);
|
|
@@ -4407,7 +4544,7 @@ class pn {
|
|
|
4407
4544
|
}), this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates.clear();
|
|
4408
4545
|
}
|
|
4409
4546
|
}
|
|
4410
|
-
class
|
|
4547
|
+
class Cn {
|
|
4411
4548
|
constructor(e, t) {
|
|
4412
4549
|
this.scene = e, this.camera = t, this.teleportController = null, this.teleportMarker = null, this.teleportCurve = null, this.teleportFloor = null, this.validTeleportPosition = null, this.teleportThreshold = 0.7, this.teleportReleaseThreshold = 0.3, this.teleportPressed = !1, this.teleportMaxMagnitude = 0, this.teleportFloorHeight = null, this.teleportFloorMin = -10, this.teleportFloorMax = 10, this.lastSnapTurnTime = 0, this.onTeleport = null, this.onTeleportStart = null, this.onTeleportEnd = null;
|
|
4413
4550
|
}
|
|
@@ -4517,7 +4654,7 @@ class fn {
|
|
|
4517
4654
|
g *= y;
|
|
4518
4655
|
}
|
|
4519
4656
|
const C = i.x * g, I = Math.max(i.y * g, g * 0.3), f = i.z * g, m = I / Math.abs(d), E = Math.max(m * 2.2, 1.5), b = this.teleportFloorHeight;
|
|
4520
|
-
let B = null, Q = !1, w = e.y,
|
|
4657
|
+
let B = null, Q = !1, w = e.y, T = 0;
|
|
4521
4658
|
const R = 8;
|
|
4522
4659
|
for (let y = 0; y <= h; y++) {
|
|
4523
4660
|
const v = y / h * E, M = new u.Vector3(
|
|
@@ -4525,8 +4662,8 @@ class fn {
|
|
|
4525
4662
|
e.y + I * v + 0.5 * d * v * v,
|
|
4526
4663
|
e.z + f * v
|
|
4527
4664
|
);
|
|
4528
|
-
Math.abs(M.y - e.y) > R && (M.y = e.y + Math.sign(M.y - e.y) * R), !Q && M.y < w && (Q = !0,
|
|
4529
|
-
const J = Q ? v -
|
|
4665
|
+
Math.abs(M.y - e.y) > R && (M.y = e.y + Math.sign(M.y - e.y) * R), !Q && M.y < w && (Q = !0, T = v), l.push(M);
|
|
4666
|
+
const J = Q ? v - T : 0, W = Q && J > 0.1;
|
|
4530
4667
|
if (!B && W && M.y <= b) {
|
|
4531
4668
|
if (y > 0) {
|
|
4532
4669
|
const q = l[y - 1], F = (b - q.y) / (M.y - q.y);
|
|
@@ -4594,7 +4731,7 @@ class fn {
|
|
|
4594
4731
|
this.lastSnapTurnTime = 0;
|
|
4595
4732
|
}
|
|
4596
4733
|
}
|
|
4597
|
-
class
|
|
4734
|
+
class In {
|
|
4598
4735
|
constructor(e, t) {
|
|
4599
4736
|
this.camera = e, this.renderer = t, this.MOVE_SPEED = 2, this.TURN_SPEED = 1.5, this.FLY_SPEED = 1, this.currentSpeed = 0, this.targetSpeed = 0, this.currentBoostLevel = 0, this.targetBoostLevel = 0, this.SPEED_RAMP_RATE = 3, this.BOOST_RAMP_RATE = 6, this.handMoveActive = !1, this.handMoveBoost = !1, this.handMoveDirection = new u.Vector3(), this.isMoving = !1, this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.comfortSettings = {
|
|
4600
4737
|
locomotionMode: "smooth",
|
|
@@ -4781,7 +4918,7 @@ class mn {
|
|
|
4781
4918
|
};
|
|
4782
4919
|
}
|
|
4783
4920
|
}
|
|
4784
|
-
class
|
|
4921
|
+
class En {
|
|
4785
4922
|
constructor() {
|
|
4786
4923
|
this.soundEnabled = !1, this.audioContext = null, this._basePath = "./sound/", this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.baseVolumeMultiplier = 1.52, this.boostVolumeMultiplier = 1.01, this.ambienceVolume = 0.1;
|
|
4787
4924
|
}
|
|
@@ -4916,7 +5053,7 @@ class bn {
|
|
|
4916
5053
|
this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.soundEnabled = !1;
|
|
4917
5054
|
}
|
|
4918
5055
|
}
|
|
4919
|
-
class
|
|
5056
|
+
class Bn {
|
|
4920
5057
|
/**
|
|
4921
5058
|
* Creates a new VRManager instance
|
|
4922
5059
|
*
|
|
@@ -4927,7 +5064,7 @@ class Cn {
|
|
|
4927
5064
|
* @param {boolean} [enableAudio=false] - Enable VR audio system
|
|
4928
5065
|
*/
|
|
4929
5066
|
constructor(e, t, i, s = "./sound/", o = !1, n = null) {
|
|
4930
|
-
this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new
|
|
5067
|
+
this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new nn(e, t, i, n), this.vrControllers = new bn(e, t), this.vrTeleport = new Cn(i, t), this.vrLocomotion = new In(t, e), this.vrAudio = this.enableAudio ? new En() : null, this.isVRSupported = !1, this.isVRPresenting = !1, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this._preVRCameraState = {
|
|
4931
5068
|
target: null,
|
|
4932
5069
|
position: null,
|
|
4933
5070
|
zoom: null,
|
|
@@ -5151,7 +5288,7 @@ class Cn {
|
|
|
5151
5288
|
return this.vrLocomotion.normalizeAngle(e);
|
|
5152
5289
|
}
|
|
5153
5290
|
}
|
|
5154
|
-
class
|
|
5291
|
+
class Xt {
|
|
5155
5292
|
/**
|
|
5156
5293
|
* Initialize debug commands with a BelowViewer instance
|
|
5157
5294
|
*
|
|
@@ -5296,7 +5433,7 @@ class Wt {
|
|
|
5296
5433
|
typeof window > "u" || (delete window.camera, delete window.scene, delete window.models, delete window.particles, delete window.vr, delete window.debugHelp, delete window.belowViewer);
|
|
5297
5434
|
}
|
|
5298
5435
|
}
|
|
5299
|
-
class
|
|
5436
|
+
class Qn extends yt {
|
|
5300
5437
|
/**
|
|
5301
5438
|
* Creates a new BelowViewer instance
|
|
5302
5439
|
*
|
|
@@ -5362,11 +5499,11 @@ class In extends wt {
|
|
|
5362
5499
|
audioPath: { type: "string", default: "./sound/" },
|
|
5363
5500
|
enableVRAudio: { type: "boolean", default: !1 }
|
|
5364
5501
|
};
|
|
5365
|
-
this.config = new qe(i).validate(t), this.renderer = null, this.sceneManager = null, this.cameraManager = null, this.modelLoader = null, this.vrManager = null, this.isVREnabled = this.config.vr?.enabled !== !1, this.dolly = null, this.isInitialized = !1, this.loadedModels = [], this.currentAbortController = null, this.init();
|
|
5502
|
+
this.config = new qe(i).validate(t), this.renderer = null, this.sceneManager = null, this.cameraManager = null, this.modelLoader = null, this.vrManager = null, this.isVREnabled = this.config.vr?.enabled !== !1, this.dolly = null, this.isInitialized = !1, this.loadedModels = [], this.currentAbortController = null, this.skipRenderDuringLoad = !1, this.pixelRatioBeforeThrottle = 1, this.originalPixelRatio = 1, this.isConstrainedSafari = !1, this.init();
|
|
5366
5503
|
}
|
|
5367
5504
|
init() {
|
|
5368
5505
|
try {
|
|
5369
|
-
this.initRenderer(), this.sceneManager = new
|
|
5506
|
+
this.initRenderer(), this.sceneManager = new Ds(this.config.scene), this.cameraManager = new js(this.config.camera), this.modelLoader = new V(this.renderer), this.isConstrainedSafari = this.modelLoader?.isIOSWebKit || !1, this.renderer?.getPixelRatio ? this.originalPixelRatio = this.renderer.getPixelRatio() : typeof window < "u" && (this.originalPixelRatio = window.devicePixelRatio || 1), this.pixelRatioBeforeThrottle = this.originalPixelRatio, this.isVREnabled && this.initVR(), this.cameraManager.initControls(this.renderer.domElement), this.setupEventListeners(), this.startRenderLoop(), this.isInitialized = !0, typeof window < "u" && Xt.init(this), this.emit("initialized");
|
|
5370
5507
|
} catch (e) {
|
|
5371
5508
|
console.error("Failed to initialize BelowViewer:", e), this.emit("error", e);
|
|
5372
5509
|
}
|
|
@@ -5390,7 +5527,7 @@ class In extends wt {
|
|
|
5390
5527
|
initVR() {
|
|
5391
5528
|
this.dolly = new u.Group(), this.dolly.add(this.cameraManager.camera), this.sceneManager.scene.add(this.dolly);
|
|
5392
5529
|
const e = this.config.audioPath || "./sound/", t = this.config.enableVRAudio === !0;
|
|
5393
|
-
this.vrManager = new
|
|
5530
|
+
this.vrManager = new Bn(this.renderer, this.cameraManager.camera, this.sceneManager.scene, e, t, this.container), this.vrManager.setControls(this.cameraManager.controls), this.config.initialPositions && this.vrManager.setInitialPositions(this.config.initialPositions), this.vrManager.onModeToggle = () => {
|
|
5394
5531
|
this.emit("vr-mode-toggle");
|
|
5395
5532
|
}, this.vrManager.onMovementStart = () => {
|
|
5396
5533
|
this.emit("vr-movement-start");
|
|
@@ -5452,23 +5589,27 @@ class In extends wt {
|
|
|
5452
5589
|
*/
|
|
5453
5590
|
async loadModel(e, t = {}) {
|
|
5454
5591
|
this.currentAbortController && this.currentAbortController.abort(), this.currentAbortController = new AbortController();
|
|
5455
|
-
const i = this.currentAbortController.signal;
|
|
5592
|
+
const i = this.currentAbortController.signal, s = this.isConstrainedSafari;
|
|
5456
5593
|
try {
|
|
5457
|
-
this.emit("model-load-start", { url: e });
|
|
5458
|
-
const
|
|
5459
|
-
i.aborted || this.emit("model-load-progress", { url: e, progress:
|
|
5460
|
-
},
|
|
5594
|
+
this.emit("model-load-start", { url: e }), s && this.applyLoadRenderingConstraints(!0);
|
|
5595
|
+
const o = (a) => {
|
|
5596
|
+
i.aborted || this.emit("model-load-progress", { url: e, progress: a });
|
|
5597
|
+
}, n = (a) => {
|
|
5598
|
+
i.aborted || this.emit("model-load-stage", { url: e, stage: a });
|
|
5599
|
+
}, r = await this.modelLoader.load(e, o, i, n);
|
|
5461
5600
|
if (i.aborted)
|
|
5462
5601
|
return null;
|
|
5463
|
-
t.position &&
|
|
5464
|
-
const
|
|
5465
|
-
return this.sceneManager.add(
|
|
5466
|
-
} catch (
|
|
5467
|
-
if (this.currentAbortController && this.currentAbortController.signal === i && (this.currentAbortController = null), !i.aborted &&
|
|
5468
|
-
throw console.error("Failed to load model:",
|
|
5469
|
-
if (i.aborted ||
|
|
5602
|
+
t.position && r.position.fromArray(t.position), t.rotation && r.rotation.fromArray(t.rotation), t.scale && (typeof t.scale == "number" ? r.scale.setScalar(t.scale) : r.scale.fromArray(t.scale));
|
|
5603
|
+
const A = this.centerModelAndRecalculateBounds(r);
|
|
5604
|
+
return this.sceneManager.add(r), this.loadedModels.push({ model: r, url: e, options: t, originalCenter: A }), this.loadedModels.length === 1 && t.autoFrame !== !1 && this.frameModel(r), this.currentAbortController && this.currentAbortController.signal === i && (this.currentAbortController = null), n && n("completed"), this.emit("model-loaded", { model: r, url: e }), r;
|
|
5605
|
+
} catch (o) {
|
|
5606
|
+
if (this.currentAbortController && this.currentAbortController.signal === i && (this.currentAbortController = null), !i.aborted && o.message !== "Loading cancelled")
|
|
5607
|
+
throw console.error("Failed to load model:", o), this.emit("model-load-error", { url: e, error: o }), o;
|
|
5608
|
+
if (i.aborted || o.message === "Loading cancelled")
|
|
5470
5609
|
return this.emit("model-load-cancelled", { url: e }), null;
|
|
5471
|
-
throw
|
|
5610
|
+
throw o;
|
|
5611
|
+
} finally {
|
|
5612
|
+
s && this.applyLoadRenderingConstraints(!1);
|
|
5472
5613
|
}
|
|
5473
5614
|
}
|
|
5474
5615
|
frameModel(e) {
|
|
@@ -5498,10 +5639,23 @@ class In extends wt {
|
|
|
5498
5639
|
let e = 0;
|
|
5499
5640
|
const t = (i) => {
|
|
5500
5641
|
const s = Math.min((i - e) / 1e3, 0.1);
|
|
5501
|
-
e = i, this.vrManager && this.vrManager.update(s), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s)
|
|
5642
|
+
e = i, this.vrManager && this.vrManager.update(s), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s);
|
|
5643
|
+
const o = this.renderer?.xr?.isPresenting;
|
|
5644
|
+
this.renderer && this.sceneManager && this.cameraManager && (!this.skipRenderDuringLoad || o) && this.renderer.render(this.sceneManager.scene, this.cameraManager.camera);
|
|
5502
5645
|
};
|
|
5503
5646
|
this.renderer.setAnimationLoop(t);
|
|
5504
5647
|
}
|
|
5648
|
+
applyLoadRenderingConstraints(e) {
|
|
5649
|
+
if (!(!this.isConstrainedSafari || !this.renderer))
|
|
5650
|
+
if (e) {
|
|
5651
|
+
if (this.pixelRatioBeforeThrottle = this.renderer.getPixelRatio ? this.renderer.getPixelRatio() : this.originalPixelRatio, typeof this.renderer.setPixelRatio == "function") {
|
|
5652
|
+
const t = Math.min(this.pixelRatioBeforeThrottle || this.originalPixelRatio, 1.25);
|
|
5653
|
+
this.renderer.setPixelRatio(t);
|
|
5654
|
+
}
|
|
5655
|
+
this.skipRenderDuringLoad = !0;
|
|
5656
|
+
} else
|
|
5657
|
+
typeof this.renderer.setPixelRatio == "function" && this.renderer.setPixelRatio(this.pixelRatioBeforeThrottle || this.originalPixelRatio), this.skipRenderDuringLoad = !1;
|
|
5658
|
+
}
|
|
5505
5659
|
getScene() {
|
|
5506
5660
|
return this.sceneManager?.scene;
|
|
5507
5661
|
}
|
|
@@ -5577,16 +5731,18 @@ class In extends wt {
|
|
|
5577
5731
|
}
|
|
5578
5732
|
removeModel(e) {
|
|
5579
5733
|
const t = this.loadedModels.findIndex((i) => i.model === e);
|
|
5580
|
-
t >= 0
|
|
5734
|
+
if (t >= 0) {
|
|
5735
|
+
const { url: i } = this.loadedModels[t];
|
|
5736
|
+
this.sceneManager.remove(e), nt(e), this.loadedModels.splice(t, 1), this.emit("model-removed", { model: e }), !this.loadedModels.some((o) => o.url === i) && this.modelLoader && this.modelLoader.releaseFromCache(i);
|
|
5737
|
+
}
|
|
5581
5738
|
}
|
|
5582
5739
|
clearModels() {
|
|
5583
|
-
this.loadedModels.
|
|
5584
|
-
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
|
|
5588
|
-
|
|
5589
|
-
}), this.loadedModels.length = 0, this.emit("models-cleared");
|
|
5740
|
+
const e = new Set(this.loadedModels.map(({ url: t }) => t));
|
|
5741
|
+
this.loadedModels.forEach(({ model: t }) => {
|
|
5742
|
+
nt(t), this.sceneManager.remove(t);
|
|
5743
|
+
}), this.loadedModels.length = 0, e.forEach((t) => {
|
|
5744
|
+
this.modelLoader && this.modelLoader.releaseFromCache(t);
|
|
5745
|
+
}), this.emit("models-cleared");
|
|
5590
5746
|
}
|
|
5591
5747
|
/**
|
|
5592
5748
|
* Clean up and dispose of all resources
|
|
@@ -5604,11 +5760,9 @@ class In extends wt {
|
|
|
5604
5760
|
* @since 1.0.0
|
|
5605
5761
|
*/
|
|
5606
5762
|
dispose() {
|
|
5607
|
-
this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" &&
|
|
5608
|
-
e.parent && e.parent.remove(e), e
|
|
5609
|
-
|
|
5610
|
-
});
|
|
5611
|
-
}), this.loadedModels = [], this.cameraManager && (this.cameraManager.dispose(), this.cameraManager = null), this.renderer && (this.renderer.dispose(), this.renderer.domElement && this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement), this.renderer = null), window.removeEventListener("resize", this.onWindowResize.bind(this)), this.removeAllListeners(), this.isInitialized = !1;
|
|
5763
|
+
this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" && Xt.cleanup(), this.vrManager && (this.vrManager.dispose(), this.vrManager = null), this.renderer && this.renderer.setAnimationLoop(null), this.loadedModels.forEach(({ model: e }) => {
|
|
5764
|
+
e.parent && e.parent.remove(e), nt(e);
|
|
5765
|
+
}), this.loadedModels = [], this.cameraManager && (this.cameraManager.dispose(), this.cameraManager = null), this.renderer && (this.renderer.dispose(), this.renderer.domElement && this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement), this.renderer = null), this.modelLoader && (this.modelLoader.dispose(), this.modelLoader = null), window.removeEventListener("resize", this.onWindowResize.bind(this)), this.removeAllListeners(), this.isInitialized = !1;
|
|
5612
5766
|
}
|
|
5613
5767
|
applyDesktopPositions(e) {
|
|
5614
5768
|
if (!e || !this.cameraManager) return;
|
|
@@ -5693,15 +5847,15 @@ class In extends wt {
|
|
|
5693
5847
|
t && e.vr && this.vrManager ? this.vrManager.applyVRPositions(e) : !t && e.desktop && this.applyDesktopPositions(e.desktop);
|
|
5694
5848
|
}
|
|
5695
5849
|
}
|
|
5696
|
-
const
|
|
5697
|
-
class
|
|
5850
|
+
const Zt = new Oe(), Fe = new D();
|
|
5851
|
+
class ki extends Ss {
|
|
5698
5852
|
/**
|
|
5699
5853
|
* Constructs a new line segments geometry.
|
|
5700
5854
|
*/
|
|
5701
5855
|
constructor() {
|
|
5702
5856
|
super(), this.isLineSegmentsGeometry = !0, this.type = "LineSegmentsGeometry";
|
|
5703
5857
|
const e = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0], t = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2], i = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];
|
|
5704
|
-
this.setIndex(i), this.setAttribute("position", new
|
|
5858
|
+
this.setIndex(i), this.setAttribute("position", new Pt(e, 3)), this.setAttribute("uv", new Pt(t, 2));
|
|
5705
5859
|
}
|
|
5706
5860
|
/**
|
|
5707
5861
|
* Applies the given 4x4 transformation matrix to the geometry.
|
|
@@ -5723,7 +5877,7 @@ class Fi extends ys {
|
|
|
5723
5877
|
setPositions(e) {
|
|
5724
5878
|
let t;
|
|
5725
5879
|
e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
|
|
5726
|
-
const i = new
|
|
5880
|
+
const i = new pt(t, 6, 1);
|
|
5727
5881
|
return this.setAttribute("instanceStart", new Ae(i, 3, 0)), this.setAttribute("instanceEnd", new Ae(i, 3, 3)), this.instanceCount = this.attributes.instanceStart.count, this.computeBoundingBox(), this.computeBoundingSphere(), this;
|
|
5728
5882
|
}
|
|
5729
5883
|
/**
|
|
@@ -5736,7 +5890,7 @@ class Fi extends ys {
|
|
|
5736
5890
|
setColors(e) {
|
|
5737
5891
|
let t;
|
|
5738
5892
|
e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
|
|
5739
|
-
const i = new
|
|
5893
|
+
const i = new pt(t, 6, 1);
|
|
5740
5894
|
return this.setAttribute("instanceColorStart", new Ae(i, 3, 0)), this.setAttribute("instanceColorEnd", new Ae(i, 3, 3)), this;
|
|
5741
5895
|
}
|
|
5742
5896
|
/**
|
|
@@ -5764,7 +5918,7 @@ class Fi extends ys {
|
|
|
5764
5918
|
* @return {LineSegmentsGeometry} A reference to this geometry.
|
|
5765
5919
|
*/
|
|
5766
5920
|
fromMesh(e) {
|
|
5767
|
-
return this.fromWireframeGeometry(new
|
|
5921
|
+
return this.fromWireframeGeometry(new Ms(e.geometry)), this;
|
|
5768
5922
|
}
|
|
5769
5923
|
/**
|
|
5770
5924
|
* Setups this line segments geometry from the given line segments.
|
|
@@ -5780,10 +5934,10 @@ class Fi extends ys {
|
|
|
5780
5934
|
computeBoundingBox() {
|
|
5781
5935
|
this.boundingBox === null && (this.boundingBox = new Oe());
|
|
5782
5936
|
const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
|
|
5783
|
-
e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e),
|
|
5937
|
+
e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e), Zt.setFromBufferAttribute(t), this.boundingBox.union(Zt));
|
|
5784
5938
|
}
|
|
5785
5939
|
computeBoundingSphere() {
|
|
5786
|
-
this.boundingSphere === null && (this.boundingSphere = new
|
|
5940
|
+
this.boundingSphere === null && (this.boundingSphere = new wt()), this.boundingBox === null && this.computeBoundingBox();
|
|
5787
5941
|
const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
|
|
5788
5942
|
if (e !== void 0 && t !== void 0) {
|
|
5789
5943
|
const i = this.boundingSphere.center;
|
|
@@ -5808,7 +5962,7 @@ Ne.line = {
|
|
|
5808
5962
|
// todo FIX - maybe change to totalSize
|
|
5809
5963
|
};
|
|
5810
5964
|
Pe.line = {
|
|
5811
|
-
uniforms:
|
|
5965
|
+
uniforms: di.merge([
|
|
5812
5966
|
Ne.common,
|
|
5813
5967
|
Ne.fog,
|
|
5814
5968
|
Ne.line
|
|
@@ -6191,7 +6345,7 @@ Pe.line = {
|
|
|
6191
6345
|
`
|
|
6192
6346
|
)
|
|
6193
6347
|
};
|
|
6194
|
-
class He extends
|
|
6348
|
+
class He extends xs {
|
|
6195
6349
|
/**
|
|
6196
6350
|
* Constructs a new line segments geometry.
|
|
6197
6351
|
*
|
|
@@ -6204,7 +6358,7 @@ class He extends Ms {
|
|
|
6204
6358
|
constructor(e) {
|
|
6205
6359
|
super({
|
|
6206
6360
|
type: "LineMaterial",
|
|
6207
|
-
uniforms:
|
|
6361
|
+
uniforms: di.clone(Pe.line.uniforms),
|
|
6208
6362
|
vertexShader: Pe.line.vertexShader,
|
|
6209
6363
|
fragmentShader: Pe.line.fragmentShader,
|
|
6210
6364
|
clipping: !0
|
|
@@ -6346,12 +6500,12 @@ class He extends Ms {
|
|
|
6346
6500
|
this.defines && (e === !0 !== this.alphaToCoverage && (this.needsUpdate = !0), e === !0 ? this.defines.USE_ALPHA_TO_COVERAGE = "" : delete this.defines.USE_ALPHA_TO_COVERAGE);
|
|
6347
6501
|
}
|
|
6348
6502
|
}
|
|
6349
|
-
const
|
|
6503
|
+
const rt = new Le(), $t = new D(), ei = new D(), _ = new Le(), G = new Le(), X = new Le(), at = new D(), At = new Re(), P = new vs(), ti = new D(), ke = new Oe(), _e = new wt(), Z = new Le();
|
|
6350
6504
|
let $, ce;
|
|
6351
|
-
function
|
|
6505
|
+
function ii(c, e, t) {
|
|
6352
6506
|
return Z.set(0, 0, -e, 1).applyMatrix4(c.projectionMatrix), Z.multiplyScalar(1 / Z.w), Z.x = ce / t.width, Z.y = ce / t.height, Z.applyMatrix4(c.projectionMatrixInverse), Z.multiplyScalar(1 / Z.w), Math.abs(Math.max(Z.x, Z.y));
|
|
6353
6507
|
}
|
|
6354
|
-
function
|
|
6508
|
+
function wn(c, e) {
|
|
6355
6509
|
const t = c.matrixWorld, i = c.geometry, s = i.attributes.instanceStart, o = i.attributes.instanceEnd, n = Math.min(i.instanceCount, s.count);
|
|
6356
6510
|
for (let r = 0, A = n; r < A; r++) {
|
|
6357
6511
|
P.start.fromBufferAttribute(s, r), P.end.fromBufferAttribute(o, r), P.applyMatrix4(t);
|
|
@@ -6368,11 +6522,11 @@ function En(c, e) {
|
|
|
6368
6522
|
});
|
|
6369
6523
|
}
|
|
6370
6524
|
}
|
|
6371
|
-
function
|
|
6525
|
+
function yn(c, e, t) {
|
|
6372
6526
|
const i = e.projectionMatrix, o = c.material.resolution, n = c.matrixWorld, r = c.geometry, A = r.attributes.instanceStart, a = r.attributes.instanceEnd, l = Math.min(r.instanceCount, A.count), h = -e.near;
|
|
6373
|
-
$.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0,
|
|
6527
|
+
$.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0, at.copy(X), At.multiplyMatrices(e.matrixWorldInverse, n);
|
|
6374
6528
|
for (let d = 0, g = l; d < g; d++) {
|
|
6375
|
-
if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(
|
|
6529
|
+
if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(At), G.applyMatrix4(At), _.z > h && G.z > h)
|
|
6376
6530
|
continue;
|
|
6377
6531
|
if (_.z > h) {
|
|
6378
6532
|
const E = _.z - G.z, b = (_.z - h) / E;
|
|
@@ -6382,9 +6536,9 @@ function Bn(c, e, t) {
|
|
|
6382
6536
|
G.lerp(_, b);
|
|
6383
6537
|
}
|
|
6384
6538
|
_.applyMatrix4(i), G.applyMatrix4(i), _.multiplyScalar(1 / _.w), G.multiplyScalar(1 / G.w), _.x *= o.x / 2, _.y *= o.y / 2, G.x *= o.x / 2, G.y *= o.y / 2, P.start.copy(_), P.start.z = 0, P.end.copy(G), P.end.z = 0;
|
|
6385
|
-
const C = P.closestPointToPointParameter(
|
|
6386
|
-
P.at(C,
|
|
6387
|
-
const I =
|
|
6539
|
+
const C = P.closestPointToPointParameter(at, !0);
|
|
6540
|
+
P.at(C, ti);
|
|
6541
|
+
const I = It.lerp(_.z, G.z, C), f = I >= -1 && I <= 1, m = at.distanceTo(ti) < ce * 0.5;
|
|
6388
6542
|
if (f && m) {
|
|
6389
6543
|
P.start.fromBufferAttribute(A, d), P.end.fromBufferAttribute(a, d), P.start.applyMatrix4(n), P.end.applyMatrix4(n);
|
|
6390
6544
|
const E = new D(), b = new D();
|
|
@@ -6401,14 +6555,14 @@ function Bn(c, e, t) {
|
|
|
6401
6555
|
}
|
|
6402
6556
|
}
|
|
6403
6557
|
}
|
|
6404
|
-
class
|
|
6558
|
+
class Sn extends Qt {
|
|
6405
6559
|
/**
|
|
6406
6560
|
* Constructs a new wide line.
|
|
6407
6561
|
*
|
|
6408
6562
|
* @param {LineSegmentsGeometry} [geometry] - The line geometry.
|
|
6409
6563
|
* @param {LineMaterial} [material] - The line material.
|
|
6410
6564
|
*/
|
|
6411
|
-
constructor(e = new
|
|
6565
|
+
constructor(e = new ki(), t = new He({ color: Math.random() * 16777215 })) {
|
|
6412
6566
|
super(e, t), this.isLineSegments2 = !0, this.type = "LineSegments2";
|
|
6413
6567
|
}
|
|
6414
6568
|
/**
|
|
@@ -6421,8 +6575,8 @@ class Qn extends Bt {
|
|
|
6421
6575
|
computeLineDistances() {
|
|
6422
6576
|
const e = this.geometry, t = e.attributes.instanceStart, i = e.attributes.instanceEnd, s = new Float32Array(2 * t.count);
|
|
6423
6577
|
for (let n = 0, r = 0, A = t.count; n < A; n++, r += 2)
|
|
6424
|
-
|
|
6425
|
-
const o = new
|
|
6578
|
+
$t.fromBufferAttribute(t, n), ei.fromBufferAttribute(i, n), s[r] = r === 0 ? 0 : s[r - 1], s[r + 1] = s[r] + $t.distanceTo(ei);
|
|
6579
|
+
const o = new pt(s, 2, 1);
|
|
6426
6580
|
return e.setAttribute("instanceDistanceStart", new Ae(o, 1, 0)), e.setAttribute("instanceDistanceEnd", new Ae(o, 1, 1)), this;
|
|
6427
6581
|
}
|
|
6428
6582
|
/**
|
|
@@ -6443,7 +6597,7 @@ class Qn extends Bt {
|
|
|
6443
6597
|
a = ce * 0.5;
|
|
6444
6598
|
else {
|
|
6445
6599
|
const h = Math.max(s.near, _e.distanceToPoint($.origin));
|
|
6446
|
-
a =
|
|
6600
|
+
a = ii(s, h, A.resolution);
|
|
6447
6601
|
}
|
|
6448
6602
|
if (_e.radius += a, $.intersectsSphere(_e) === !1)
|
|
6449
6603
|
return;
|
|
@@ -6453,16 +6607,16 @@ class Qn extends Bt {
|
|
|
6453
6607
|
l = ce * 0.5;
|
|
6454
6608
|
else {
|
|
6455
6609
|
const h = Math.max(s.near, ke.distanceToPoint($.origin));
|
|
6456
|
-
l =
|
|
6610
|
+
l = ii(s, h, A.resolution);
|
|
6457
6611
|
}
|
|
6458
|
-
ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ?
|
|
6612
|
+
ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ? wn(this, t) : yn(this, s, t));
|
|
6459
6613
|
}
|
|
6460
6614
|
onBeforeRender(e) {
|
|
6461
6615
|
const t = this.material.uniforms;
|
|
6462
|
-
t && t.resolution && (e.getViewport(
|
|
6616
|
+
t && t.resolution && (e.getViewport(rt), this.material.uniforms.resolution.value.set(rt.z, rt.w));
|
|
6463
6617
|
}
|
|
6464
6618
|
}
|
|
6465
|
-
class
|
|
6619
|
+
class Ct extends ki {
|
|
6466
6620
|
/**
|
|
6467
6621
|
* Constructs a new line geometry.
|
|
6468
6622
|
*/
|
|
@@ -6516,18 +6670,18 @@ class bt extends Fi {
|
|
|
6516
6670
|
return this.setPositions(t.attributes.position.array), this;
|
|
6517
6671
|
}
|
|
6518
6672
|
}
|
|
6519
|
-
class
|
|
6673
|
+
class si extends Sn {
|
|
6520
6674
|
/**
|
|
6521
6675
|
* Constructs a new wide line.
|
|
6522
6676
|
*
|
|
6523
6677
|
* @param {LineGeometry} [geometry] - The line geometry.
|
|
6524
6678
|
* @param {LineMaterial} [material] - The line material.
|
|
6525
6679
|
*/
|
|
6526
|
-
constructor(e = new
|
|
6680
|
+
constructor(e = new Ct(), t = new He({ color: Math.random() * 16777215 })) {
|
|
6527
6681
|
super(e, t), this.isLine2 = !0, this.type = "Line2";
|
|
6528
6682
|
}
|
|
6529
6683
|
}
|
|
6530
|
-
class
|
|
6684
|
+
class Mn {
|
|
6531
6685
|
/**
|
|
6532
6686
|
* Set the objects to use for raycasting during measurement
|
|
6533
6687
|
*
|
|
@@ -6715,7 +6869,7 @@ class wn {
|
|
|
6715
6869
|
s.position.copy(i), this.scene.add(s), this.desktopMeasurementPoints.push(s);
|
|
6716
6870
|
}
|
|
6717
6871
|
if (this.desktopMeasurementPoints.length === 2) {
|
|
6718
|
-
const e = new
|
|
6872
|
+
const e = new Ct();
|
|
6719
6873
|
e.setPositions([
|
|
6720
6874
|
this.desktopMeasurementPoints[0].position.x,
|
|
6721
6875
|
this.desktopMeasurementPoints[0].position.y,
|
|
@@ -6723,7 +6877,7 @@ class wn {
|
|
|
6723
6877
|
this.desktopMeasurementPoints[1].position.x,
|
|
6724
6878
|
this.desktopMeasurementPoints[1].position.y,
|
|
6725
6879
|
this.desktopMeasurementPoints[1].position.z
|
|
6726
|
-
]), this.desktopMeasurementLine = new
|
|
6880
|
+
]), this.desktopMeasurementLine = new si(e, this.desktopLineMaterial), this.desktopMeasurementLine.computeLineDistances(), this.scene.add(this.desktopMeasurementLine);
|
|
6727
6881
|
const t = this.desktopMeasurementPoints[0].position.distanceTo(this.desktopMeasurementPoints[1].position);
|
|
6728
6882
|
if (this.createMeasurementDisplay(t), this.measurementSprite) {
|
|
6729
6883
|
const i = new u.Vector3();
|
|
@@ -6863,7 +7017,7 @@ class wn {
|
|
|
6863
7017
|
*/
|
|
6864
7018
|
updateUnifiedMeasurementLine() {
|
|
6865
7019
|
if (this.unifiedMeasurementLine && (this.scene.remove(this.unifiedMeasurementLine), this.unifiedMeasurementLine = null), this.unifiedMeasurementPoints.length === 2) {
|
|
6866
|
-
const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new
|
|
7020
|
+
const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new Ct();
|
|
6867
7021
|
i.setPositions([
|
|
6868
7022
|
e.x,
|
|
6869
7023
|
e.y,
|
|
@@ -6871,7 +7025,7 @@ class wn {
|
|
|
6871
7025
|
t.x,
|
|
6872
7026
|
t.y,
|
|
6873
7027
|
t.z
|
|
6874
|
-
]), this.unifiedMeasurementLine = new
|
|
7028
|
+
]), this.unifiedMeasurementLine = new si(i, this.desktopLineMaterial), this.unifiedMeasurementLine.computeLineDistances(), this.unifiedMeasurementLine.userData.isMeasurementLine = !0, this.scene.add(this.unifiedMeasurementLine);
|
|
6875
7029
|
const s = e.distanceTo(t);
|
|
6876
7030
|
if (this.createMeasurementDisplay(s), this.measurementSprite) {
|
|
6877
7031
|
const o = new u.Vector3();
|
|
@@ -7039,7 +7193,7 @@ class wn {
|
|
|
7039
7193
|
}
|
|
7040
7194
|
}
|
|
7041
7195
|
}
|
|
7042
|
-
class
|
|
7196
|
+
class xt {
|
|
7043
7197
|
constructor(e, t = {}) {
|
|
7044
7198
|
this.vrManager = e, this.isComfortMode = !1, this._iconRendered = !1, this.options = {
|
|
7045
7199
|
containerId: t.containerId || "modelSelector",
|
|
@@ -7328,10 +7482,10 @@ class Mt {
|
|
|
7328
7482
|
this.vrManager = null;
|
|
7329
7483
|
}
|
|
7330
7484
|
static create(e, t = {}) {
|
|
7331
|
-
return new
|
|
7485
|
+
return new xt(e, t);
|
|
7332
7486
|
}
|
|
7333
7487
|
}
|
|
7334
|
-
class
|
|
7488
|
+
class xn {
|
|
7335
7489
|
constructor(e) {
|
|
7336
7490
|
this.scene = e, this.particleBounds = {
|
|
7337
7491
|
min: new u.Vector3(-50, -25, -50),
|
|
@@ -7522,7 +7676,7 @@ class yn {
|
|
|
7522
7676
|
this.particles && (this.scene.remove(this.particles), this.particles.geometry && this.particles.geometry.dispose(), this.particles.material && this.particles.material.dispose(), this.particles = null);
|
|
7523
7677
|
}
|
|
7524
7678
|
}
|
|
7525
|
-
class
|
|
7679
|
+
class vn {
|
|
7526
7680
|
constructor(e) {
|
|
7527
7681
|
this.scene = e, this.controllerSpotlight = null, this.spotlightTarget = null, this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.createSpotlight();
|
|
7528
7682
|
}
|
|
@@ -7629,7 +7783,7 @@ class Sn {
|
|
|
7629
7783
|
this.controllerSpotlight && (this.scene.remove(this.controllerSpotlight), this.controllerSpotlight = null), this.spotlightTarget && (this.scene.remove(this.spotlightTarget), this.spotlightTarget = null);
|
|
7630
7784
|
}
|
|
7631
7785
|
}
|
|
7632
|
-
class
|
|
7786
|
+
class Dn {
|
|
7633
7787
|
constructor(e) {
|
|
7634
7788
|
this.scene = e, this.overheadLight = null, this.clearModeDirectionalLight = null, this.clearModeHemisphereLight = null, this.isTransitioning = !1, this.currentMode = "survey", this.pendingAnimations = /* @__PURE__ */ new Set(), this.isDisposed = !1, this.initializeLighting();
|
|
7635
7789
|
}
|
|
@@ -7719,9 +7873,9 @@ class Mn {
|
|
|
7719
7873
|
});
|
|
7720
7874
|
}
|
|
7721
7875
|
}
|
|
7722
|
-
class
|
|
7876
|
+
class Rn {
|
|
7723
7877
|
constructor(e, t, i) {
|
|
7724
|
-
this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new
|
|
7878
|
+
this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new Dn(e), this.particles = new xn(e), this.torch = new vn(e), this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.applyModeSettings();
|
|
7725
7879
|
}
|
|
7726
7880
|
/**
|
|
7727
7881
|
* Toggle between dive and survey modes
|
|
@@ -7882,7 +8036,7 @@ class xn {
|
|
|
7882
8036
|
this.lighting.dispose(), this.particles.dispose(), this.torch.dispose();
|
|
7883
8037
|
}
|
|
7884
8038
|
}
|
|
7885
|
-
class
|
|
8039
|
+
class Tn extends yt {
|
|
7886
8040
|
/**
|
|
7887
8041
|
* Creates a new ModelViewer instance
|
|
7888
8042
|
*
|
|
@@ -7919,7 +8073,7 @@ class Dn extends wt {
|
|
|
7919
8073
|
initialModel: { type: "string", default: null },
|
|
7920
8074
|
initialPositions: { type: "object", default: null }
|
|
7921
8075
|
};
|
|
7922
|
-
this.config = new qe(i).validate(t), this.options = this.config, this.currentModelKey = null, this.belowViewer = null, this.ui = {}, this.measurementSystem = null, this.comfortGlyph = null, this.diveSystem = null, this.fullscreenButton = null, this.screenshotButton = null, this.lastComfortMode = null, this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.vrUpdateLoop = null, typeof window < "u" && (window.modelViewer = this), this.init();
|
|
8076
|
+
this.config = new qe(i).validate(t), this.options = this.config, this.currentModelKey = null, this.belowViewer = null, this.ui = {}, this.measurementSystem = null, this.comfortGlyph = null, this.diveSystem = null, this.fullscreenButton = null, this.screenshotButton = null, this.lastComfortMode = null, this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.lastManualLoadingMessage = "", this.stageOverrideActive = !1, this.vrUpdateLoop = null, typeof window < "u" && (window.modelViewer = this), this.init();
|
|
7923
8077
|
}
|
|
7924
8078
|
init() {
|
|
7925
8079
|
const e = {
|
|
@@ -7928,7 +8082,7 @@ class Dn extends wt {
|
|
|
7928
8082
|
...this.config.audioPath && { audioPath: this.config.audioPath },
|
|
7929
8083
|
...typeof this.config.enableVRAudio < "u" && { enableVRAudio: this.config.enableVRAudio }
|
|
7930
8084
|
};
|
|
7931
|
-
if (this.belowViewer = new
|
|
8085
|
+
if (this.belowViewer = new Qn(this.container, e), this.setupEventForwarding(), this.belowViewer.on("initialized", () => {
|
|
7932
8086
|
this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton();
|
|
7933
8087
|
}), this.belowViewer.isInitialized && (this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton()), Object.keys(this.config.models).length > 0 && (this.createUI(), this.populateDropdown(), this.config.autoLoadFirst)) {
|
|
7934
8088
|
const t = Object.keys(this.config.models)[0];
|
|
@@ -7937,7 +8091,7 @@ class Dn extends wt {
|
|
|
7937
8091
|
}
|
|
7938
8092
|
_maybeAttachMeasurementSystem() {
|
|
7939
8093
|
if (!this.config.enableMeasurement || this.measurementSystem) return;
|
|
7940
|
-
this.measurementSystem = new
|
|
8094
|
+
this.measurementSystem = new Mn({
|
|
7941
8095
|
scene: this.belowViewer.sceneManager.scene,
|
|
7942
8096
|
camera: this.belowViewer.cameraManager.camera,
|
|
7943
8097
|
renderer: this.belowViewer.renderer,
|
|
@@ -7963,7 +8117,7 @@ class Dn extends wt {
|
|
|
7963
8117
|
}
|
|
7964
8118
|
async _maybeAttachVRComfortGlyph() {
|
|
7965
8119
|
if (!(!this.config.enableVRComfortGlyph || this.comfortGlyph) && this.belowViewer.vrManager && this.belowViewer.vrManager.vrCore && (await this.belowViewer.vrManager.vrCore.checkVRSupported(), !!this.belowViewer.vrManager.vrCore.isVRSupported)) {
|
|
7966
|
-
if (this.comfortGlyph = new
|
|
8120
|
+
if (this.comfortGlyph = new xt(this.belowViewer.vrManager, {
|
|
7967
8121
|
position: "bottom-right",
|
|
7968
8122
|
offsetX: 20,
|
|
7969
8123
|
offsetY: 70
|
|
@@ -7984,7 +8138,7 @@ class Dn extends wt {
|
|
|
7984
8138
|
}
|
|
7985
8139
|
_maybeAttachDiveSystem() {
|
|
7986
8140
|
if (!this.config.enableDiveSystem || this.diveSystem) return;
|
|
7987
|
-
this.diveSystem = new
|
|
8141
|
+
this.diveSystem = new Rn(
|
|
7988
8142
|
this.belowViewer.sceneManager.scene,
|
|
7989
8143
|
this.belowViewer.renderer,
|
|
7990
8144
|
this.belowViewer.cameraManager.camera
|
|
@@ -8075,6 +8229,8 @@ class Dn extends wt {
|
|
|
8075
8229
|
setupEventForwarding() {
|
|
8076
8230
|
this.belowViewer.on("initialized", (e) => this.emit("initialized", e)), this.belowViewer.on("model-load-start", (e) => this.emit("model-load-start", e)), this.belowViewer.on("model-load-progress", (e) => {
|
|
8077
8231
|
this.emit("model-load-progress", e), this.updateLoadingProgress(e);
|
|
8232
|
+
}), this.belowViewer.on("model-load-stage", (e) => {
|
|
8233
|
+
this.emit("model-load-stage", e), this.onModelLoadStage(e);
|
|
8078
8234
|
}), this.belowViewer.on("model-loaded", (e) => {
|
|
8079
8235
|
this.emit("model-loaded", e), this.emit("modelLoaded", e), this.onModelLoaded(e);
|
|
8080
8236
|
}), this.belowViewer.on("model-load-error", (e) => {
|
|
@@ -8315,18 +8471,18 @@ class Dn extends wt {
|
|
|
8315
8471
|
console.error("Model not found:", e);
|
|
8316
8472
|
return;
|
|
8317
8473
|
}
|
|
8318
|
-
this.currentModelKey = e, this.ui.dropdown && (this.ui.dropdown.value = e), this.showLoading("Preparing to load...", t.name || e), document.title = `BelowJS – ${t.name || e}`;
|
|
8474
|
+
this.currentModelKey = e, this.ui.dropdown && (this.ui.dropdown.value = e), this.showLoading("Preparing to load...", t.name || e), this.belowViewer?.getLoadedModels()?.length > 0 && this.setManualLoadingMessage("Cleaning up previous model..."), document.title = `BelowJS – ${t.name || e}`;
|
|
8319
8475
|
try {
|
|
8320
|
-
this.measurementSystem && (this.measurementSystem.clearUnifiedMeasurement(), this.measurementSystem.clearLegacyVRMeasurement(), this.measurementSystem.clearLegacyDesktopMeasurement()), this.belowViewer.clearModels(), this.belowViewer.vrManager && (this.belowViewer.vrManager.stopMovement(), this.belowViewer.vrManager.resetTeleportState()), await new Promise((
|
|
8321
|
-
const
|
|
8476
|
+
this.measurementSystem && (this.measurementSystem.clearUnifiedMeasurement(), this.measurementSystem.clearLegacyVRMeasurement(), this.measurementSystem.clearLegacyDesktopMeasurement()), this.belowViewer.clearModels(), this.belowViewer.vrManager && (this.belowViewer.vrManager.stopMovement(), this.belowViewer.vrManager.resetTeleportState()), await new Promise((n) => setTimeout(n, 50));
|
|
8477
|
+
const o = await this.belowViewer.loadModel(t.url, {
|
|
8322
8478
|
autoFrame: !1,
|
|
8323
8479
|
// We'll handle positioning manually
|
|
8324
8480
|
initialPositions: t.initialPositions
|
|
8325
8481
|
// Pass VR/desktop positions
|
|
8326
8482
|
});
|
|
8327
|
-
|
|
8328
|
-
} catch (
|
|
8329
|
-
|
|
8483
|
+
o && (this.applyInitialPositions(t, o), this.hideLoading(), this.updateStatus(`Loaded: ${t.name || e}`), this.measurementSystem && this.measurementSystem.setRaycastTargets(o), this.modelReady = !0, this.emit("model-switched", { modelKey: e, model: o, config: t }), this.emit("modelLoaded", { modelKey: e, model: o, config: t }));
|
|
8484
|
+
} catch (o) {
|
|
8485
|
+
o.message !== "Loading cancelled" && (console.error("Failed to load model:", o), this.hideLoading(), this.updateStatus(`Error loading ${t.name || e}`), this.measurementSystem && this.measurementSystem.setRaycastTargets([]));
|
|
8330
8486
|
}
|
|
8331
8487
|
}
|
|
8332
8488
|
applyInitialPositions(e, t) {
|
|
@@ -8360,7 +8516,7 @@ class Dn extends wt {
|
|
|
8360
8516
|
}
|
|
8361
8517
|
}
|
|
8362
8518
|
showLoading(e = "Loading...", t = null) {
|
|
8363
|
-
if (this.isLoading = !0, this.
|
|
8519
|
+
if (this.isLoading = !0, this.loadingModelName = t || "", this.loadingPercentage = 0, this.setManualLoadingMessage(e), this.lastManualLoadingMessage = e || "", this.ui.loading) {
|
|
8364
8520
|
const i = this.ui.loading.querySelector(".loading-status"), s = this.ui.loading.querySelector(".loading-model-name"), o = this.ui.loading.querySelector(".spinner-percentage");
|
|
8365
8521
|
i && (i.textContent = e), s && t && (s.textContent = t), o && (o.textContent = "0%"), this.ui.loading.style.display = "flex";
|
|
8366
8522
|
}
|
|
@@ -8382,6 +8538,26 @@ class Dn extends wt {
|
|
|
8382
8538
|
hideLoading() {
|
|
8383
8539
|
this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.ui.loading && (this.ui.loading.style.display = "none"), this.vrLoadingSprite && this.belowViewer && this.belowViewer.sceneManager && (this.belowViewer.sceneManager.scene.remove(this.vrLoadingSprite), this.vrLoadingSprite.position.set(0, 0, 0), this.vrLoadingSprite.rotation.set(0, 0, 0));
|
|
8384
8540
|
}
|
|
8541
|
+
setManualLoadingMessage(e) {
|
|
8542
|
+
this.lastManualLoadingMessage = e || "", this.stageOverrideActive = !1, this.updateLoadingText(e);
|
|
8543
|
+
}
|
|
8544
|
+
setStageLoadingMessage(e) {
|
|
8545
|
+
this.stageOverrideActive = !0, this.updateLoadingText(e);
|
|
8546
|
+
}
|
|
8547
|
+
restoreManualLoadingMessage() {
|
|
8548
|
+
if (!this.lastManualLoadingMessage) {
|
|
8549
|
+
this.stageOverrideActive = !1;
|
|
8550
|
+
return;
|
|
8551
|
+
}
|
|
8552
|
+
this.stageOverrideActive = !1, this.updateLoadingText(this.lastManualLoadingMessage);
|
|
8553
|
+
}
|
|
8554
|
+
updateLoadingText(e) {
|
|
8555
|
+
if (this.loadingMessage = e || "", this.ui.loading) {
|
|
8556
|
+
const t = this.ui.loading.querySelector(".loading-status");
|
|
8557
|
+
t && (t.textContent = this.loadingMessage);
|
|
8558
|
+
}
|
|
8559
|
+
this.updateVRLoadingIndicator();
|
|
8560
|
+
}
|
|
8385
8561
|
/**
|
|
8386
8562
|
* Position VR loading sprite in front of user's view
|
|
8387
8563
|
*/
|
|
@@ -8401,11 +8577,11 @@ class Dn extends wt {
|
|
|
8401
8577
|
updateLoadingProgress({ progress: e }) {
|
|
8402
8578
|
if (e.lengthComputable && this.currentModelKey) {
|
|
8403
8579
|
const t = Math.min(100, Math.round(e.loaded / e.total * 100));
|
|
8404
|
-
if (this.loadingPercentage = t, this.
|
|
8405
|
-
const i = this.ui.loading.querySelector(".spinner-percentage"), s = this.ui.loading.querySelector(".
|
|
8406
|
-
if (i && (i.textContent = `${t}%`), s
|
|
8407
|
-
const
|
|
8408
|
-
|
|
8580
|
+
if (this.loadingPercentage = t, this.stageOverrideActive || this.setManualLoadingMessage("Loading model"), this.ui.loading) {
|
|
8581
|
+
const i = this.ui.loading.querySelector(".spinner-percentage"), s = this.ui.loading.querySelector(".spinner-path");
|
|
8582
|
+
if (i && (i.textContent = `${t}%`), s) {
|
|
8583
|
+
const o = 2 * Math.PI * 20, n = o - t / 100 * o;
|
|
8584
|
+
s.style.strokeDashoffset = n;
|
|
8409
8585
|
}
|
|
8410
8586
|
}
|
|
8411
8587
|
this.updateVRLoadingIndicator();
|
|
@@ -8417,6 +8593,17 @@ class Dn extends wt {
|
|
|
8417
8593
|
onModelLoadError({ error: e }) {
|
|
8418
8594
|
this.hideLoading(), this.updateStatus(`Failed to load model: ${e.message}`);
|
|
8419
8595
|
}
|
|
8596
|
+
onModelLoadStage({ stage: e }) {
|
|
8597
|
+
if (!this.isLoading) return;
|
|
8598
|
+
const t = {
|
|
8599
|
+
downloading: "Downloading model...",
|
|
8600
|
+
"freeing-resources": "Freeing GPU memory...",
|
|
8601
|
+
cloning: "Fetching from cache...",
|
|
8602
|
+
processing: "Uploading textures... almost there",
|
|
8603
|
+
finalizing: "Finalizing view..."
|
|
8604
|
+
};
|
|
8605
|
+
t[e] ? this.setStageLoadingMessage(t[e]) : e === "completed" && this.restoreManualLoadingMessage();
|
|
8606
|
+
}
|
|
8420
8607
|
/**
|
|
8421
8608
|
* Get the currently loaded model object
|
|
8422
8609
|
*
|
|
@@ -8580,15 +8767,15 @@ class Dn extends wt {
|
|
|
8580
8767
|
}
|
|
8581
8768
|
}
|
|
8582
8769
|
export {
|
|
8583
|
-
|
|
8584
|
-
|
|
8770
|
+
Qn as BelowViewer,
|
|
8771
|
+
js as Camera,
|
|
8585
8772
|
qe as ConfigValidator,
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
|
|
8773
|
+
yt as EventSystem,
|
|
8774
|
+
si as Line2,
|
|
8775
|
+
Ct as LineGeometry,
|
|
8589
8776
|
He as LineMaterial,
|
|
8590
|
-
|
|
8591
|
-
|
|
8592
|
-
|
|
8593
|
-
|
|
8777
|
+
V as ModelLoader,
|
|
8778
|
+
Tn as ModelViewer,
|
|
8779
|
+
Ds as Scene,
|
|
8780
|
+
Bn as VRManager
|
|
8594
8781
|
};
|