@objectifthunes/three-book 0.7.0 → 0.8.1
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/demo-kit/dist/index.d.ts +1 -1
- package/dist/Book.d.ts +1 -1
- package/dist/Book.d.ts.map +1 -1
- package/dist/GluedBinding.d.ts +5 -2
- package/dist/GluedBinding.d.ts.map +1 -1
- package/dist/index.js +1043 -1002
- package/package.json +8 -9
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
class
|
|
1
|
+
import * as l from "three";
|
|
2
|
+
class Dt {
|
|
3
3
|
constructor() {
|
|
4
|
-
this.m_PositionX = 0, this.m_PositionZ = 0, this.m_DirectionX = 0, this.m_DirectionZ = 0, this.m_EulerY = 0, this.m_Radius = 0, this._positionOut = new
|
|
4
|
+
this.m_PositionX = 0, this.m_PositionZ = 0, this.m_DirectionX = 0, this.m_DirectionZ = 0, this.m_EulerY = 0, this.m_Radius = 0, this._positionOut = new l.Vector3(), this._scratchRP1 = new l.Vector3(), this._scratchRP2 = new l.Vector3(), this._scratchRollClosest = new l.Vector3(), this._scratchRollEuler = new l.Vector3(), this._scratchOffsetRoll = new l.Vector3();
|
|
5
5
|
}
|
|
6
6
|
// ── Properties ────────────────────────────────────────────────────────
|
|
7
7
|
/** Returns internal vector — do NOT mutate. Copy if you need to store it. */
|
|
@@ -33,8 +33,8 @@ class bt {
|
|
|
33
33
|
* Writes result into `out` and returns it.
|
|
34
34
|
*/
|
|
35
35
|
eulerRotateVector(t, e, s, i) {
|
|
36
|
-
const n = s * Math.PI / 180, r = e * Math.PI / 180, o = Math.cos(n),
|
|
37
|
-
return i.set(m,
|
|
36
|
+
const n = s * Math.PI / 180, r = e * Math.PI / 180, o = Math.cos(n), h = Math.sin(n), u = t * o, c = t * h, d = 0, f = Math.cos(r), g = Math.sin(r), m = u * f + d * g, _ = c, p = -u * g + d * f;
|
|
37
|
+
return i.set(m, _, p);
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Rolls `point` in place around the cylinder. Mutates and returns `point`.
|
|
@@ -78,145 +78,145 @@ class bt {
|
|
|
78
78
|
}
|
|
79
79
|
// ── Value-type clone ──────────────────────────────────────────────────
|
|
80
80
|
clone() {
|
|
81
|
-
const t = new
|
|
81
|
+
const t = new Dt();
|
|
82
82
|
return t.m_PositionX = this.m_PositionX, t.m_PositionZ = this.m_PositionZ, t.m_DirectionX = this.m_DirectionX, t.m_DirectionZ = this.m_DirectionZ, t.m_EulerY = this.m_EulerY, t.m_Radius = this.m_Radius, t;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
function
|
|
85
|
+
function Tt(a, t, e, s, i = 1 / 0, n = 1 / 60) {
|
|
86
86
|
s = Math.max(s, 1e-4);
|
|
87
|
-
const r = 2 / s, o = r * n,
|
|
88
|
-
let
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
e = (e - r *
|
|
93
|
-
let
|
|
94
|
-
return
|
|
95
|
-
}
|
|
96
|
-
function
|
|
97
|
-
const r =
|
|
98
|
-
|
|
87
|
+
const r = 2 / s, o = r * n, h = 1 / (1 + o + 0.48 * o * o + 0.235 * o * o * o);
|
|
88
|
+
let u = a - t;
|
|
89
|
+
const c = t, d = i * s;
|
|
90
|
+
u = l.MathUtils.clamp(u, -d, d), t = a - u;
|
|
91
|
+
const f = (e + r * u) * n;
|
|
92
|
+
e = (e - r * f) * h;
|
|
93
|
+
let g = t + (u + f) * h;
|
|
94
|
+
return c - a > 0 == g > c && (g = c, e = (g - c) / n), { value: g, velocity: e };
|
|
95
|
+
}
|
|
96
|
+
function we(a, t, e, s, i = 1 / 0, n = 1 / 60) {
|
|
97
|
+
const r = Tt(
|
|
98
|
+
a.x,
|
|
99
99
|
t.x,
|
|
100
100
|
e.x,
|
|
101
101
|
s.x,
|
|
102
102
|
i,
|
|
103
103
|
n
|
|
104
|
-
), o =
|
|
105
|
-
|
|
104
|
+
), o = Tt(
|
|
105
|
+
a.y,
|
|
106
106
|
t.y,
|
|
107
107
|
e.y,
|
|
108
108
|
s.y,
|
|
109
109
|
i,
|
|
110
110
|
n
|
|
111
|
-
),
|
|
112
|
-
|
|
111
|
+
), h = Tt(
|
|
112
|
+
a.z,
|
|
113
113
|
t.z,
|
|
114
114
|
e.z,
|
|
115
115
|
s.z,
|
|
116
116
|
i,
|
|
117
117
|
n
|
|
118
118
|
);
|
|
119
|
-
return e.set(r.velocity, o.velocity,
|
|
119
|
+
return e.set(r.velocity, o.velocity, h.velocity), a.set(r.value, o.value, h.value);
|
|
120
120
|
}
|
|
121
|
-
function
|
|
122
|
-
const s = t * t - 4 *
|
|
121
|
+
function Ot(a, t, e) {
|
|
122
|
+
const s = t * t - 4 * a * e;
|
|
123
123
|
if (s < 0)
|
|
124
124
|
return { rootCount: 0, root0: 0, root1: 0 };
|
|
125
125
|
if (s === 0)
|
|
126
|
-
return { rootCount: 1, root0: -t / (2 *
|
|
126
|
+
return { rootCount: 1, root0: -t / (2 * a), root1: 0 };
|
|
127
127
|
{
|
|
128
128
|
const i = Math.sqrt(s);
|
|
129
129
|
return {
|
|
130
130
|
rootCount: 2,
|
|
131
|
-
root0: (-t + i) / (2 *
|
|
132
|
-
root1: (-t - i) / (2 *
|
|
131
|
+
root0: (-t + i) / (2 * a),
|
|
132
|
+
root1: (-t - i) / (2 * a)
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
const
|
|
137
|
-
function
|
|
138
|
-
return
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
const Zt = new l.Vector2();
|
|
137
|
+
function Xt(a, t, e, s) {
|
|
138
|
+
return Pe(a, t, e) ? s.copy(a) : (Zt.set(a.x, t.y), Se(
|
|
139
|
+
Zt,
|
|
140
|
+
a,
|
|
141
141
|
t,
|
|
142
142
|
e,
|
|
143
143
|
s
|
|
144
144
|
));
|
|
145
145
|
}
|
|
146
|
-
function
|
|
147
|
-
const s =
|
|
148
|
-
let i =
|
|
146
|
+
function Pe(a, t, e) {
|
|
147
|
+
const s = a.x - t.x;
|
|
148
|
+
let i = a.y - t.y;
|
|
149
149
|
return i *= e.x / e.y, Math.sqrt(s * s + i * i) < e.x;
|
|
150
150
|
}
|
|
151
|
-
function
|
|
152
|
-
const n = e.x, r = e.y, o =
|
|
153
|
-
if (Math.abs(o -
|
|
151
|
+
function Se(a, t, e, s, i) {
|
|
152
|
+
const n = e.x, r = e.y, o = a.x, h = a.y, u = t.x, c = t.y, d = s.x, f = s.y, g = 1 / (d * d), m = 1 / (f * f);
|
|
153
|
+
if (Math.abs(o - u) < 1e-5) {
|
|
154
154
|
if (o >= n - d && o <= n + d) {
|
|
155
|
-
const
|
|
155
|
+
const _ = Ot(
|
|
156
156
|
m,
|
|
157
157
|
-2 * m * r,
|
|
158
|
-
|
|
158
|
+
g * (o * o - 2 * n * o + n * n) + m * r * r - 1
|
|
159
159
|
);
|
|
160
|
-
if (
|
|
161
|
-
return i.set(o,
|
|
162
|
-
if (
|
|
163
|
-
let
|
|
164
|
-
return
|
|
160
|
+
if (_.rootCount === 1)
|
|
161
|
+
return i.set(o, _.root0);
|
|
162
|
+
if (_.rootCount === 2) {
|
|
163
|
+
let p = _.root0, M = _.root1;
|
|
164
|
+
return h < c && ([p, M] = [M, p]), i.set(o, M);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
} else {
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
2 * M *
|
|
171
|
-
n * n *
|
|
168
|
+
const _ = (c - h) / (u - o), p = h - _ * o, M = p - r, w = Ot(
|
|
169
|
+
g + m * _ * _,
|
|
170
|
+
2 * M * _ * m - 2 * n * g,
|
|
171
|
+
n * n * g + M * M * m - 1
|
|
172
172
|
);
|
|
173
|
-
if (
|
|
174
|
-
return i.set(
|
|
175
|
-
if (
|
|
176
|
-
let C =
|
|
177
|
-
return o <
|
|
173
|
+
if (w.rootCount === 1)
|
|
174
|
+
return i.set(w.root0, _ * w.root0 + p);
|
|
175
|
+
if (w.rootCount === 2) {
|
|
176
|
+
let C = w.root0, P = w.root1;
|
|
177
|
+
return o < u && ([C, P] = [P, C]), i.set(P, _ * P + p);
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
return i.copy(
|
|
180
|
+
return i.copy(a);
|
|
181
181
|
}
|
|
182
|
-
const
|
|
183
|
-
function
|
|
184
|
-
return
|
|
182
|
+
const vt = new l.Vector3(), Lt = new l.Vector3(), Nt = new l.Ray();
|
|
183
|
+
function Ut(a, t) {
|
|
184
|
+
return vt.copy(a.origin).applyMatrix4(t), Lt.copy(a.origin).add(a.direction).applyMatrix4(t), Nt.set(vt, Lt.sub(vt).normalize()), Nt;
|
|
185
185
|
}
|
|
186
|
-
function
|
|
187
|
-
const t =
|
|
188
|
-
|
|
186
|
+
function Te(a) {
|
|
187
|
+
const t = a.x;
|
|
188
|
+
a.set(-t, a.y, a.z + t, a.w);
|
|
189
189
|
}
|
|
190
|
-
function
|
|
191
|
-
const t =
|
|
192
|
-
|
|
190
|
+
function ve(a) {
|
|
191
|
+
const t = a.y;
|
|
192
|
+
a.set(a.x, -t, a.z, a.w + t);
|
|
193
193
|
}
|
|
194
|
-
var
|
|
195
|
-
const
|
|
196
|
-
function
|
|
197
|
-
return
|
|
194
|
+
var ut = /* @__PURE__ */ ((a) => (a[a.LeftToRight = 0] = "LeftToRight", a[a.RightToLeft = 1] = "RightToLeft", a[a.UpToDown = 2] = "UpToDown", a[a.DownToUp = 3] = "DownToUp", a))(ut || {});
|
|
195
|
+
const nt = Math.PI / 180, lt = 180 / Math.PI;
|
|
196
|
+
function q(a, t, e) {
|
|
197
|
+
return a < t ? t : a > e ? e : a;
|
|
198
198
|
}
|
|
199
|
-
function
|
|
200
|
-
return
|
|
199
|
+
function ot(a) {
|
|
200
|
+
return a < 0 ? 0 : a > 1 ? 1 : a;
|
|
201
201
|
}
|
|
202
|
-
function
|
|
203
|
-
return e =
|
|
202
|
+
function G(a, t, e) {
|
|
203
|
+
return e = ot(e), a + (t - a) * e;
|
|
204
204
|
}
|
|
205
|
-
function
|
|
206
|
-
return
|
|
205
|
+
function Et(a, t, e) {
|
|
206
|
+
return a + (t - a) * e;
|
|
207
207
|
}
|
|
208
|
-
function
|
|
209
|
-
return
|
|
208
|
+
function at(a, t, e) {
|
|
209
|
+
return a !== t ? ot((e - a) / (t - a)) : 0;
|
|
210
210
|
}
|
|
211
|
-
var
|
|
212
|
-
const
|
|
213
|
-
function
|
|
214
|
-
return e =
|
|
211
|
+
var Ct = /* @__PURE__ */ ((a) => (a[a.Surface = 0] = "Surface", a[a.Edge = 1] = "Edge", a))(Ct || {});
|
|
212
|
+
const ke = 1192093e-13;
|
|
213
|
+
function Wt(a, t, e) {
|
|
214
|
+
return e = ot((e - a) / (t - a)), e * e * (3 - 2 * e);
|
|
215
215
|
}
|
|
216
|
-
class
|
|
216
|
+
class be {
|
|
217
217
|
// ---- Constructor ----
|
|
218
218
|
constructor(t, e, s, i) {
|
|
219
|
-
this.m_UseBackContentForSides = !1, this.m_Prev = null, this.m_Next = null, this.m_NoHole = !1, this.m_Size = new
|
|
219
|
+
this.m_UseBackContentForSides = !1, this.m_Prev = null, this.m_Next = null, this.m_NoHole = !1, this.m_Size = new l.Vector2(), this.m_Thickness = 0, this.m_Stiffness = 0, this.m_Rigid = !1, this.m_Margin = 0, this.m_MeshDataType = 1, this.m_Cylinder = new Dt(), this.m_IsRolling = !1, this.m_IsAutoTurning = !1, this.m_WorldPlane = new l.Plane(), this.m_StartHandle = new l.Vector3(), this.m_CurrentHandle = new l.Vector3(), this.m_EndHandle = new l.Vector3(), this.m_PrevHandle = new l.Vector3(), this.m_HandleOffset = new l.Vector3(), this.m_HandleVelocity = new l.Vector3(), this.m_HandleVelocities = [], this.m_SubMeshCount = -1, this.m_MinTurningRadius = 0, this.m_TurningRadius = 0, this.m_FallDuration = 0, this.m_FallTime = 0.2, this.m_XTime = 0, this.m_ZTime = 0, this.m_IsTurning = !1, this.m_IsFalling = !1, this.m_IsFallingLeft = !1, this.m_isMeshChanged = !1, this.sizeXOffset = 0, this._ucStartHandle = new l.Vector3(), this._ucCurrentHandle = new l.Vector3(), this._ucHandleDir = new l.Vector3(), this._ucA = new l.Vector3(), this._ucB = new l.Vector3(), this._ucMid = new l.Vector3(), this._ucRollResult = new l.Vector3(), this._ucCylDir = new l.Vector3(), this._utV1 = new l.Vector3(), this._utV2 = new l.Vector3(), this._utV3 = new l.Vector3(), this._utV4 = new l.Vector3(), this._chP = new l.Vector3(), this._chA = new l.Vector3(), this._chC = new l.Vector3(), this._chEllipseCenter1 = new l.Vector2(), this._chEllipseCenter2 = new l.Vector2(), this._chEllipseSize1 = new l.Vector2(), this._chEllipseSize2 = new l.Vector2(), this._chP2 = new l.Vector2(), this._dirResult = new l.Vector3(), this._gdA = new l.Vector3(), this._gdB = new l.Vector3(), this._rlMatrix = new l.Matrix4(), this._rlPlane = new l.Plane(new l.Vector3(0, 1, 0), 0), this._rlTarget = new l.Vector3(), this._rlNormal = new l.Vector3(), this._utTarget = new l.Vector3(), this._ufSmoothTime = new l.Vector3(), this._umFrontST = new l.Vector4(), this._umBackST = new l.Vector4(), this._h2uResult = new l.Vector2(), this.m_IsCover = t, this.m_Book = s, this.m_Index = e, this.m_Renderer = i, this.m_Transform = i.transform;
|
|
220
220
|
}
|
|
221
221
|
// ---- Properties (mirrors C#) ----
|
|
222
222
|
get isMeshChanged() {
|
|
@@ -256,7 +256,7 @@ class ye {
|
|
|
256
256
|
return this.m_IsFalling || this.m_IsTurning ? this.m_Transform.scale.x === -1 ? 1 - this.m_ZTime : this.m_ZTime : this.m_Transform.scale.x === -1 ? 1 : 0;
|
|
257
257
|
}
|
|
258
258
|
get direction() {
|
|
259
|
-
const e = this.zTime * 180 *
|
|
259
|
+
const e = this.zTime * 180 * nt, s = Math.cos(e), i = Math.sin(e);
|
|
260
260
|
return this._dirResult.set(-s, -i, 0);
|
|
261
261
|
}
|
|
262
262
|
get isTurning() {
|
|
@@ -333,8 +333,8 @@ class ye {
|
|
|
333
333
|
this.m_TurningRadius = Math.max(this.m_Size.x * 50, this.m_MinTurningRadius);
|
|
334
334
|
return;
|
|
335
335
|
}
|
|
336
|
-
let e = Math.max(this.m_Stiffness, 1 -
|
|
337
|
-
e <= 0.5 ? this.m_TurningRadius =
|
|
336
|
+
let e = Math.max(this.m_Stiffness, 1 - ot(t));
|
|
337
|
+
e <= 0.5 ? this.m_TurningRadius = at(0, 0.5, e) * this.m_Size.x / Math.PI : this.m_TurningRadius = this.m_Size.x / (Math.max(180 * (1 - at(0.5, 1, e)), 5) * nt), this.m_TurningRadius = Math.max(
|
|
338
338
|
this.m_TurningRadius,
|
|
339
339
|
this.m_MinTurningRadius
|
|
340
340
|
);
|
|
@@ -342,7 +342,7 @@ class ye {
|
|
|
342
342
|
startTurning(t) {
|
|
343
343
|
var i, n;
|
|
344
344
|
const e = t.clone();
|
|
345
|
-
t =
|
|
345
|
+
t = Ut(
|
|
346
346
|
t,
|
|
347
347
|
this._rlMatrix.copy(this.m_Transform.matrixWorld).invert()
|
|
348
348
|
), this.m_WorldPlane.setFromNormalAndCoplanarPoint(
|
|
@@ -368,10 +368,10 @@ class ye {
|
|
|
368
368
|
}
|
|
369
369
|
stopTurning() {
|
|
370
370
|
this.clampHandle(), this.m_IsTurning = !1, this.m_IsFalling = !0;
|
|
371
|
-
const t = new
|
|
371
|
+
const t = new l.Vector3(0, 0, 0);
|
|
372
372
|
for (const e of this.m_HandleVelocities)
|
|
373
373
|
t.add(e);
|
|
374
|
-
t.divideScalar(this.m_HandleVelocities.length), t.length() > 0.1 ? this.m_IsFallingLeft = t.x < 0 : this.m_IsFallingLeft = this.m_XTime > 0.5 && this.m_ZTime > 0.1, this.m_IsFallingLeft ? this.m_FallTime = 1 - this.m_XTime : this.m_FallTime = this.m_XTime, this.m_FallTime =
|
|
374
|
+
t.divideScalar(this.m_HandleVelocities.length), t.length() > 0.1 ? this.m_IsFallingLeft = t.x < 0 : this.m_IsFallingLeft = this.m_XTime > 0.5 && this.m_ZTime > 0.1, this.m_IsFallingLeft ? this.m_FallTime = 1 - this.m_XTime : this.m_FallTime = this.m_XTime, this.m_FallTime = G(0.1, 0.2, this.m_FallTime), this.m_EndHandle.copy(this.m_StartHandle), this.m_IsFallingLeft && (this.m_EndHandle.x = -this.m_Size.x);
|
|
375
375
|
}
|
|
376
376
|
/**
|
|
377
377
|
* Called each frame while the user is dragging.
|
|
@@ -395,14 +395,14 @@ class ye {
|
|
|
395
395
|
var s, i;
|
|
396
396
|
let e = !1;
|
|
397
397
|
if (this.m_IsAutoTurning) {
|
|
398
|
-
let n =
|
|
399
|
-
n =
|
|
398
|
+
let n = ot(this.m_FallTime / this.m_FallDuration);
|
|
399
|
+
n = Wt(0, 1, n), n = Wt(0, 1, n), this.m_CurrentHandle.lerpVectors(
|
|
400
400
|
this.m_StartHandle,
|
|
401
401
|
this.m_EndHandle,
|
|
402
402
|
this.m_IsFallingLeft ? n : 1 - n
|
|
403
|
-
), this.m_FallTime += t, e = Math.abs(n - 1) <
|
|
403
|
+
), this.m_FallTime += t, e = Math.abs(n - 1) < ke;
|
|
404
404
|
} else
|
|
405
|
-
this._ufSmoothTime.set(this.m_FallTime, 0, this.m_FallTime * 0.75),
|
|
405
|
+
this._ufSmoothTime.set(this.m_FallTime, 0, this.m_FallTime * 0.75), we(
|
|
406
406
|
this.m_CurrentHandle,
|
|
407
407
|
this.m_EndHandle,
|
|
408
408
|
this.m_HandleVelocity,
|
|
@@ -429,12 +429,12 @@ class ye {
|
|
|
429
429
|
}
|
|
430
430
|
getTextureCoordinate(t) {
|
|
431
431
|
const e = this.raycastLocal(t, !0);
|
|
432
|
-
return e !== null ? this.hit2UV(e) : new
|
|
432
|
+
return e !== null ? this.hit2UV(e) : new l.Vector2(0, 0);
|
|
433
433
|
}
|
|
434
434
|
raycast(t) {
|
|
435
435
|
const e = {
|
|
436
|
-
point: new
|
|
437
|
-
textureCoordinate: new
|
|
436
|
+
point: new l.Vector3(),
|
|
437
|
+
textureCoordinate: new l.Vector2(),
|
|
438
438
|
pageContent: null,
|
|
439
439
|
paperIndex: 0,
|
|
440
440
|
pageIndex: 0
|
|
@@ -448,12 +448,12 @@ class ye {
|
|
|
448
448
|
}
|
|
449
449
|
hit2UV(t) {
|
|
450
450
|
const e = this._h2uResult.set(
|
|
451
|
-
|
|
451
|
+
at(-this.sizeXOffset, this.m_Size.x, t.x),
|
|
452
452
|
t.z / this.m_Size.y
|
|
453
453
|
);
|
|
454
454
|
this.m_UVMargin.fixUV(e);
|
|
455
455
|
const s = this.m_Book.direction;
|
|
456
|
-
if (s ===
|
|
456
|
+
if (s === ut.UpToDown || s === ut.DownToUp) {
|
|
457
457
|
const i = e.x;
|
|
458
458
|
e.x = e.y, e.y = i, this.isOnRightStack && (e.y = 1 - e.y);
|
|
459
459
|
} else
|
|
@@ -465,7 +465,7 @@ class ye {
|
|
|
465
465
|
* Returns the local-space hit point, or null if no hit / out of bounds.
|
|
466
466
|
*/
|
|
467
467
|
raycastLocal(t, e = !1) {
|
|
468
|
-
t =
|
|
468
|
+
t = Ut(
|
|
469
469
|
t,
|
|
470
470
|
this._rlMatrix.copy(this.m_Transform.matrixWorld).invert()
|
|
471
471
|
), this._rlPlane.set(this._rlPlane.normal.set(0, 1, 0), 0);
|
|
@@ -503,7 +503,7 @@ class ye {
|
|
|
503
503
|
t === 1 ? this.m_MaterialData.materials1 : this.m_MaterialData.materials3
|
|
504
504
|
), this.m_SubMeshCount = t);
|
|
505
505
|
const e = this._umFrontST.copy(this.m_FrontContent.textureST), s = this._umBackST.copy(this.m_BackContent.textureST);
|
|
506
|
-
this.m_Book.direction > 1 ?
|
|
506
|
+
this.m_Book.direction > 1 ? ve(s) : Te(s);
|
|
507
507
|
const i = this.m_FrontContent.texture, n = this.m_BackContent.texture;
|
|
508
508
|
if (t === 3) {
|
|
509
509
|
let r = 0, o = 1;
|
|
@@ -546,7 +546,7 @@ class ye {
|
|
|
546
546
|
const t = this.findTime(this._utV1);
|
|
547
547
|
this._utV2.set(this.m_Size.x, 0, this.m_Size.y);
|
|
548
548
|
const e = this.findTime(this._utV2);
|
|
549
|
-
this.m_XTime =
|
|
549
|
+
this.m_XTime = G(
|
|
550
550
|
Math.min(t, e),
|
|
551
551
|
Math.max(t, e),
|
|
552
552
|
0.9
|
|
@@ -559,26 +559,26 @@ class ye {
|
|
|
559
559
|
this._utV3.set(s[1], 0, i[i.length - 1]);
|
|
560
560
|
const o = this.rollPoint(this._utV3);
|
|
561
561
|
this._utV4.set(s[2], 0, i[i.length - 1]);
|
|
562
|
-
const
|
|
562
|
+
const h = this.rollPoint(this._utV4), u = r.x - n.x, c = r.y - n.y, d = h.x - o.x, f = h.y - o.y, g = Math.sqrt(u * u + c * c) || 1, m = Math.sqrt(d * d + f * f) || 1, _ = lt * Math.atan2(c / g, u / g), p = lt * Math.atan2(f / m, d / m), M = (_ + p) / 2;
|
|
563
563
|
this.m_ZTime = M / 180;
|
|
564
564
|
} else
|
|
565
565
|
this.m_XTime = 0, this.m_ZTime = 0;
|
|
566
566
|
}
|
|
567
567
|
findTime(t) {
|
|
568
|
-
return t = this.rollPoint(t),
|
|
568
|
+
return t = this.rollPoint(t), at(this.m_Size.x, -this.m_Size.x, t.x);
|
|
569
569
|
}
|
|
570
570
|
clampHandle() {
|
|
571
571
|
this.m_StartHandle.y = 0, this.m_CurrentHandle.y = 0;
|
|
572
|
-
const t = this._chP.copy(this.m_CurrentHandle), e = this._chA.set(0, 0, 0), s = this._chC.set(0, 0, this.m_Size.y), i = e.distanceTo(this.m_StartHandle), n = s.distanceTo(this.m_StartHandle), r = Math.max(i - this.m_TurningRadius, 0.01), o = Math.max(n - this.m_TurningRadius, 0.01),
|
|
572
|
+
const t = this._chP.copy(this.m_CurrentHandle), e = this._chA.set(0, 0, 0), s = this._chC.set(0, 0, this.m_Size.y), i = e.distanceTo(this.m_StartHandle), n = s.distanceTo(this.m_StartHandle), r = Math.max(i - this.m_TurningRadius, 0.01), o = Math.max(n - this.m_TurningRadius, 0.01), h = this.m_StartHandle.z, u = this._chEllipseCenter1.set(
|
|
573
573
|
0,
|
|
574
|
-
|
|
575
|
-
),
|
|
574
|
+
h + (e.z - h) * (r / i)
|
|
575
|
+
), c = this._chEllipseCenter2.set(
|
|
576
576
|
0,
|
|
577
|
-
|
|
578
|
-
), d = this._chEllipseSize1.set(i, r),
|
|
579
|
-
t.x =
|
|
580
|
-
const
|
|
581
|
-
|
|
577
|
+
h + (s.z - h) * (o / n)
|
|
578
|
+
), d = this._chEllipseSize1.set(i, r), f = this._chEllipseSize2.set(n, o);
|
|
579
|
+
t.x = q(t.x, -this.m_Size.x, this.m_Size.x);
|
|
580
|
+
const g = this._chP2.set(t.x, t.z);
|
|
581
|
+
Xt(g, u, d, g), Xt(g, c, f, g), this.m_CurrentHandle.set(g.x, 0, g.y);
|
|
582
582
|
}
|
|
583
583
|
updateCylinder() {
|
|
584
584
|
const t = this._ucStartHandle.copy(this.m_StartHandle), e = this._ucCurrentHandle.copy(this.m_CurrentHandle), s = this._ucHandleDir.copy(t).sub(e).normalize();
|
|
@@ -589,35 +589,35 @@ class ye {
|
|
|
589
589
|
this.m_Cylinder.radius = this.m_TurningRadius, this._ucCylDir.set(-s.z, 0, s.x), this.m_Cylinder.direction = this._ucCylDir;
|
|
590
590
|
for (let o = 0; o < 100; o++) {
|
|
591
591
|
this._ucMid.copy(n).add(r).multiplyScalar(0.5), this.m_Cylinder.position = this._ucMid, this.m_Book.bound.updatePaperPosition(this), this._ucRollResult.copy(t);
|
|
592
|
-
const
|
|
593
|
-
if (Math.abs(e.x -
|
|
594
|
-
|
|
592
|
+
const h = this.m_Cylinder.rollPoint(this._ucRollResult);
|
|
593
|
+
if (Math.abs(e.x - h.x) < 1e-4) break;
|
|
594
|
+
h.x > e.x ? r.copy(this.m_Cylinder.position) : n.copy(this.m_Cylinder.position);
|
|
595
595
|
}
|
|
596
596
|
}
|
|
597
597
|
rollPoint(t) {
|
|
598
598
|
return this.m_IsRolling ? this.m_Cylinder.rollPoint(t) : t;
|
|
599
599
|
}
|
|
600
600
|
startAutoTurning(t, e, s, i) {
|
|
601
|
-
var
|
|
602
|
-
if (this.updateTurningRadius(s), this.m_PrevHandle.copy(this.m_CurrentHandle), this.m_IsRolling = !0, this.m_HandleOffset.set(0, 0, 0), t ===
|
|
601
|
+
var u, c;
|
|
602
|
+
if (this.updateTurningRadius(s), this.m_PrevHandle.copy(this.m_CurrentHandle), this.m_IsRolling = !0, this.m_HandleOffset.set(0, 0, 0), t === Ct.Surface) {
|
|
603
603
|
const d = this.m_Transform.scale;
|
|
604
604
|
d.x *= -1;
|
|
605
605
|
}
|
|
606
606
|
this.switchMeshData(
|
|
607
607
|
0
|
|
608
608
|
/* Highpoly */
|
|
609
|
-
), (
|
|
609
|
+
), (u = this.m_Prev) == null || u.trySwitchMeshData(1), (c = this.m_Next) == null || c.trySwitchMeshData(1), this.m_IsFallingLeft = t === Ct.Edge, this.m_IsTurning = !1, this.m_IsFalling = !0, this.m_FallTime = 0, this.m_FallDuration = i;
|
|
610
610
|
const n = this.m_Size.x, r = this.m_Size.y;
|
|
611
|
-
e =
|
|
612
|
-
const o =
|
|
613
|
-
this.m_StartHandle.set(n, 0, r * o), this.m_EndHandle.set(-n, 0, r *
|
|
611
|
+
e = q(e, -0.99, 0.99);
|
|
612
|
+
const o = Et(0.5, 1, e), h = Et(0.5, 0, e);
|
|
613
|
+
this.m_StartHandle.set(n, 0, r * o), this.m_EndHandle.set(-n, 0, r * h), this.m_IsAutoTurning = !0;
|
|
614
614
|
}
|
|
615
615
|
// ---- Public getter for the cylinder (used by BookBound etc.) ----
|
|
616
616
|
get cylinder() {
|
|
617
617
|
return this.m_Cylinder;
|
|
618
618
|
}
|
|
619
619
|
}
|
|
620
|
-
const
|
|
620
|
+
const mt = class mt {
|
|
621
621
|
constructor() {
|
|
622
622
|
this.m_Left = 0, this.m_Right = 0, this.m_Down = 0, this.m_Up = 0;
|
|
623
623
|
}
|
|
@@ -648,7 +648,7 @@ const rt = class rt {
|
|
|
648
648
|
}
|
|
649
649
|
// ── Helpers ───────────────────────────────────────────────────────────
|
|
650
650
|
clamp(t) {
|
|
651
|
-
return Math.max(
|
|
651
|
+
return Math.max(mt.kMin, Math.min(t, mt.kMax));
|
|
652
652
|
}
|
|
653
653
|
// ── Transform ─────────────────────────────────────────────────────────
|
|
654
654
|
/**
|
|
@@ -656,18 +656,18 @@ const rt = class rt {
|
|
|
656
656
|
* book direction.
|
|
657
657
|
*/
|
|
658
658
|
transform(t) {
|
|
659
|
-
const e = new
|
|
659
|
+
const e = new mt();
|
|
660
660
|
switch (t) {
|
|
661
|
-
case
|
|
661
|
+
case ut.LeftToRight:
|
|
662
662
|
e.m_Left = this.m_Left, e.m_Right = this.m_Right, e.m_Down = this.m_Down, e.m_Up = this.m_Up;
|
|
663
663
|
break;
|
|
664
|
-
case
|
|
664
|
+
case ut.RightToLeft:
|
|
665
665
|
e.m_Left = this.m_Right, e.m_Right = this.m_Left, e.m_Down = this.m_Down, e.m_Up = this.m_Up;
|
|
666
666
|
break;
|
|
667
|
-
case
|
|
667
|
+
case ut.UpToDown:
|
|
668
668
|
e.m_Left = this.m_Up, e.m_Right = this.m_Down, e.m_Down = this.m_Left, e.m_Up = this.m_Right;
|
|
669
669
|
break;
|
|
670
|
-
case
|
|
670
|
+
case ut.DownToUp:
|
|
671
671
|
default:
|
|
672
672
|
e.m_Left = this.m_Down, e.m_Right = this.m_Up, e.m_Down = this.m_Left, e.m_Up = this.m_Right;
|
|
673
673
|
break;
|
|
@@ -682,7 +682,7 @@ const rt = class rt {
|
|
|
682
682
|
* Unity's `Mathf.InverseLerp(a, b, v)` = `(v - a) / (b - a)` clamped to [0,1].
|
|
683
683
|
*/
|
|
684
684
|
fixUV(t) {
|
|
685
|
-
return t.x =
|
|
685
|
+
return t.x = mt.inverseLerp(this.m_Left, 1 - this.m_Right, t.x), t.y = mt.inverseLerp(this.m_Down, 1 - this.m_Up, t.y), t;
|
|
686
686
|
}
|
|
687
687
|
static inverseLerp(t, e, s) {
|
|
688
688
|
if (t === e) return 0;
|
|
@@ -691,15 +691,15 @@ const rt = class rt {
|
|
|
691
691
|
}
|
|
692
692
|
// ── Value-type clone ──────────────────────────────────────────────────
|
|
693
693
|
clone() {
|
|
694
|
-
const t = new
|
|
694
|
+
const t = new mt();
|
|
695
695
|
return t.m_Left = this.m_Left, t.m_Right = this.m_Right, t.m_Down = this.m_Down, t.m_Up = this.m_Up, t;
|
|
696
696
|
}
|
|
697
697
|
};
|
|
698
|
-
|
|
699
|
-
let
|
|
700
|
-
const
|
|
698
|
+
mt.kMin = 0, mt.kMax = 0.25;
|
|
699
|
+
let kt = mt;
|
|
700
|
+
const ht = class ht {
|
|
701
701
|
constructor(t) {
|
|
702
|
-
this.m_Material = null, this.m_Color = new
|
|
702
|
+
this.m_Material = null, this.m_Color = new l.Color(1, 1, 1), this.m_Width = 0, this.m_Height = 0, this.m_Thickness = 0, this.m_Stiffness = 0, this.m_Rigid = !1, this.m_Quality = 0, this.m_UVMargin = new kt(), this.margin = 0, this.bookDirection = ut.LeftToRight, this.color = (t == null ? void 0 : t.color) ?? new l.Color(1, 1, 1), this.width = (t == null ? void 0 : t.width) ?? ht.kMinSize * 2, this.height = (t == null ? void 0 : t.height) ?? ht.kMinSize * 2, this.thickness = (t == null ? void 0 : t.thickness) ?? ht.kMinThickness * 2, this.stiffness = (t == null ? void 0 : t.stiffness) ?? 0.1, this.rigid = (t == null ? void 0 : t.rigid) ?? !1, this.quality = (t == null ? void 0 : t.quality) ?? 3, (t == null ? void 0 : t.material) !== void 0 && (this.m_Material = t.material);
|
|
703
703
|
}
|
|
704
704
|
// ── Properties ────────────────────────────────────────────────────────
|
|
705
705
|
get material() {
|
|
@@ -718,19 +718,19 @@ const $ = class $ {
|
|
|
718
718
|
return this.bookDirection > 1 ? this.m_Height : this.m_Width;
|
|
719
719
|
}
|
|
720
720
|
set width(t) {
|
|
721
|
-
this.m_Width = Math.max(t,
|
|
721
|
+
this.m_Width = Math.max(t, ht.kMinSize);
|
|
722
722
|
}
|
|
723
723
|
get height() {
|
|
724
724
|
return this.bookDirection > 1 ? this.m_Width : this.m_Height;
|
|
725
725
|
}
|
|
726
726
|
set height(t) {
|
|
727
|
-
this.m_Height = Math.max(t,
|
|
727
|
+
this.m_Height = Math.max(t, ht.kMinSize);
|
|
728
728
|
}
|
|
729
729
|
get thickness() {
|
|
730
730
|
return this.m_Thickness;
|
|
731
731
|
}
|
|
732
732
|
set thickness(t) {
|
|
733
|
-
this.m_Thickness = Math.max(t,
|
|
733
|
+
this.m_Thickness = Math.max(t, ht.kMinThickness);
|
|
734
734
|
}
|
|
735
735
|
get stiffness() {
|
|
736
736
|
return this.m_Stiffness;
|
|
@@ -749,8 +749,8 @@ const $ = class $ {
|
|
|
749
749
|
}
|
|
750
750
|
set quality(t) {
|
|
751
751
|
this.m_Quality = Math.max(
|
|
752
|
-
|
|
753
|
-
Math.min(t,
|
|
752
|
+
ht.kMinQuality,
|
|
753
|
+
Math.min(t, ht.kMaxQuality)
|
|
754
754
|
);
|
|
755
755
|
}
|
|
756
756
|
get uvMargin() {
|
|
@@ -760,15 +760,15 @@ const $ = class $ {
|
|
|
760
760
|
this.m_UVMargin = t;
|
|
761
761
|
}
|
|
762
762
|
get size() {
|
|
763
|
-
return new
|
|
763
|
+
return new l.Vector2(this.width, this.height);
|
|
764
764
|
}
|
|
765
765
|
};
|
|
766
|
-
|
|
767
|
-
let
|
|
768
|
-
class
|
|
766
|
+
ht.kMinSize = 1, ht.kMinThickness = 1e-4, ht.kMinQuality = 1, ht.kMaxQuality = 5;
|
|
767
|
+
let _t = ht;
|
|
768
|
+
class Gt {
|
|
769
769
|
constructor(t) {
|
|
770
|
-
this.m_Texture = null, this.m_TextureST = new
|
|
771
|
-
const e = t.material ?? new
|
|
770
|
+
this.m_Texture = null, this.m_TextureST = new l.Vector4(1, 1, 0, 0), this._cachedPropertyBlock = null, this._propertyBlockDirty = !0;
|
|
771
|
+
const e = t.material ?? new l.MeshStandardMaterial();
|
|
772
772
|
this.m_Materials1 = [e.clone()], this.m_Materials3 = [e.clone(), e.clone(), e.clone()], this.m_Color = t.color.clone();
|
|
773
773
|
}
|
|
774
774
|
get materials1() {
|
|
@@ -803,15 +803,15 @@ class Xt {
|
|
|
803
803
|
this.m_Texture = t, this.m_TextureST.copy(e), this._propertyBlockDirty = !0;
|
|
804
804
|
}
|
|
805
805
|
}
|
|
806
|
-
function
|
|
807
|
-
let i = t.x -
|
|
806
|
+
function qt(a, t, e, s = new l.Vector3()) {
|
|
807
|
+
let i = t.x - a.x, n = t.y - a.y, r = t.z - a.z, o = 1 / Math.sqrt(i * i + n * n + r * r);
|
|
808
808
|
i *= o, n *= o, r *= o;
|
|
809
|
-
let
|
|
810
|
-
o = 1 / Math.sqrt(
|
|
811
|
-
const d = n *
|
|
812
|
-
return o = 1 / Math.sqrt(d * d +
|
|
809
|
+
let h = e.x - a.x, u = e.y - a.y, c = e.z - a.z;
|
|
810
|
+
o = 1 / Math.sqrt(h * h + u * u + c * c), h *= o, u *= o, c *= o;
|
|
811
|
+
const d = n * c - r * u, f = r * h - i * c, g = i * u - n * h;
|
|
812
|
+
return o = 1 / Math.sqrt(d * d + f * f + g * g), s.set(d * o, f * o, g * o);
|
|
813
813
|
}
|
|
814
|
-
class
|
|
814
|
+
class dt {
|
|
815
815
|
constructor(t, e = !1, s = !1) {
|
|
816
816
|
this.prev = null, this.next = null, this.index = 0, this.value = t, this.hole = e, this.seam = s;
|
|
817
817
|
}
|
|
@@ -830,7 +830,7 @@ class ot {
|
|
|
830
830
|
}
|
|
831
831
|
// ── Factory helpers ───────────────────────────────────────────────────
|
|
832
832
|
createNext(t, e = !1, s = !1) {
|
|
833
|
-
const i = new
|
|
833
|
+
const i = new dt(t, e, s);
|
|
834
834
|
return i.prev = this, this.next = i, i;
|
|
835
835
|
}
|
|
836
836
|
// ── Insertion (sorted linked-list insert) ─────────────────────────────
|
|
@@ -862,21 +862,21 @@ class ot {
|
|
|
862
862
|
t.push(this.hole), this.next !== null && this.next._getHolesRecursive(t);
|
|
863
863
|
}
|
|
864
864
|
}
|
|
865
|
-
class
|
|
865
|
+
class It {
|
|
866
866
|
constructor(t, e, s, i) {
|
|
867
867
|
this.active = !0, this.prevIndex = t, this.index = e, this.nextIndex = s, this.time = i;
|
|
868
868
|
}
|
|
869
869
|
clone() {
|
|
870
|
-
const t = new
|
|
870
|
+
const t = new It(this.prevIndex, this.index, this.nextIndex, this.time);
|
|
871
871
|
return t.active = this.active, t;
|
|
872
872
|
}
|
|
873
873
|
}
|
|
874
|
-
class
|
|
874
|
+
class St {
|
|
875
875
|
constructor(t, e, s, i, n, r = !0) {
|
|
876
876
|
this.startX = t, this.startZ = e, this.endX = s, this.endZ = i, this.flip = n, this.left = r;
|
|
877
877
|
}
|
|
878
878
|
clone() {
|
|
879
|
-
return new
|
|
879
|
+
return new St(
|
|
880
880
|
this.startX,
|
|
881
881
|
this.startZ,
|
|
882
882
|
this.endX,
|
|
@@ -886,157 +886,157 @@ class Mt {
|
|
|
886
886
|
);
|
|
887
887
|
}
|
|
888
888
|
}
|
|
889
|
-
class
|
|
889
|
+
class he {
|
|
890
890
|
constructor(t, e, s) {
|
|
891
891
|
const i = t.size;
|
|
892
|
-
this.leftNode = new
|
|
892
|
+
this.leftNode = new dt(e.left * i.x, s, !0), this.rightNode = new dt((1 - e.right) * i.x, s, !0), this.downNode = new dt(e.down * i.y, s, !0), this.upNode = new dt((1 - e.up) * i.y, s, !0);
|
|
893
893
|
}
|
|
894
894
|
insert(t, e, s, i) {
|
|
895
895
|
t.insert(this.leftNode) && s.push(this.leftNode), t.insert(this.rightNode) && s.push(this.rightNode), e.insert(this.downNode) && i.push(this.downNode), e.insert(this.upNode) && i.push(this.upNode);
|
|
896
896
|
}
|
|
897
897
|
}
|
|
898
|
-
function
|
|
899
|
-
for (const e of
|
|
900
|
-
const s = e.prevNoneSeam, i = e.nextNoneSeam, n =
|
|
898
|
+
function xt(a, t) {
|
|
899
|
+
for (const e of a) {
|
|
900
|
+
const s = e.prevNoneSeam, i = e.nextNoneSeam, n = at(s.value, i.value, e.value), r = new It(s.index, e.index, i.index, n);
|
|
901
901
|
t.push(r);
|
|
902
902
|
}
|
|
903
903
|
}
|
|
904
|
-
function
|
|
905
|
-
for (const n of
|
|
904
|
+
function bt(a, t, e, s, i) {
|
|
905
|
+
for (const n of a)
|
|
906
906
|
if (n.active)
|
|
907
907
|
for (let r = 0; r < s; r++) {
|
|
908
|
-
const o = n.prevIndex,
|
|
909
|
-
i ?
|
|
908
|
+
const o = n.prevIndex, h = n.nextIndex, u = t[r * e + o], c = t[r * e + h], d = t[r * e + n.index];
|
|
909
|
+
i ? ce(u, c, n.time, d) : d.copy(u).lerp(c, n.time);
|
|
910
910
|
}
|
|
911
911
|
}
|
|
912
|
-
function
|
|
913
|
-
for (const n of
|
|
912
|
+
function Bt(a, t, e, s, i) {
|
|
913
|
+
for (const n of a)
|
|
914
914
|
if (n.active)
|
|
915
915
|
for (let r = 0; r < e; r++) {
|
|
916
|
-
const o = n.prevIndex,
|
|
917
|
-
i ?
|
|
916
|
+
const o = n.prevIndex, h = n.nextIndex, u = t[o * e + r], c = t[h * e + r], d = t[n.index * e + r];
|
|
917
|
+
i ? ce(u, c, n.time, d) : d.copy(u).lerp(c, n.time);
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
|
-
function
|
|
921
|
-
const i = Math.sqrt(
|
|
920
|
+
function ce(a, t, e, s = new l.Vector3()) {
|
|
921
|
+
const i = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z), n = Math.sqrt(t.x * t.x + t.y * t.y + t.z * t.z);
|
|
922
922
|
if (i === 0 || n === 0)
|
|
923
|
-
return s.copy(
|
|
924
|
-
const r =
|
|
925
|
-
let
|
|
926
|
-
|
|
927
|
-
const
|
|
928
|
-
if (
|
|
929
|
-
return s.copy(
|
|
930
|
-
const m = Math.sin(
|
|
923
|
+
return s.copy(a).lerp(t, e);
|
|
924
|
+
const r = a.x / i, o = a.y / i, h = a.z / i, u = t.x / n, c = t.y / n, d = t.z / n;
|
|
925
|
+
let f = r * u + o * c + h * d;
|
|
926
|
+
f = Math.max(-1, Math.min(1, f));
|
|
927
|
+
const g = Math.acos(f);
|
|
928
|
+
if (g < 1e-6)
|
|
929
|
+
return s.copy(a).lerp(t, e);
|
|
930
|
+
const m = Math.sin(g), _ = Math.sin((1 - e) * g) / m, p = Math.sin(e * g) / m, M = i + (n - i) * e;
|
|
931
931
|
return s.set(
|
|
932
|
-
(r *
|
|
933
|
-
(o *
|
|
934
|
-
(
|
|
932
|
+
(r * _ + u * p) * M,
|
|
933
|
+
(o * _ + c * p) * M,
|
|
934
|
+
(h * _ + d * p) * M
|
|
935
935
|
);
|
|
936
936
|
}
|
|
937
|
-
function
|
|
938
|
-
for (const n of
|
|
939
|
-
const r = (n.endX - n.startX + 1) * 2, o = (n.endZ - n.startZ + 1) * 2,
|
|
940
|
-
for (let
|
|
941
|
-
const
|
|
942
|
-
n.flip ?
|
|
937
|
+
function At(a, t, e, s, i) {
|
|
938
|
+
for (const n of a) {
|
|
939
|
+
const r = (n.endX - n.startX + 1) * 2, o = (n.endZ - n.startZ + 1) * 2, h = e.length;
|
|
940
|
+
for (let c = 0, d = n.endX - n.startX; c < d; c++) {
|
|
941
|
+
const f = h + c * 2 + 0, g = h + c * 2 + 1, m = h + c * 2 + 2, _ = h + c * 2 + 3;
|
|
942
|
+
n.flip ? Yt(t, f, g, m, _, r) : jt(t, f, g, m, _, r);
|
|
943
943
|
}
|
|
944
944
|
if (n.left)
|
|
945
|
-
for (let
|
|
946
|
-
const
|
|
947
|
-
n.flip ?
|
|
945
|
+
for (let c = 0, d = n.endZ - n.startZ; c < d; c++) {
|
|
946
|
+
const f = h + c * 2 + 0 + r * 2, g = h + c * 2 + 1 + r * 2, m = h + c * 2 + 2 + r * 2, _ = h + c * 2 + 3 + r * 2;
|
|
947
|
+
n.flip ? Yt(t, f, g, m, _, o) : jt(t, f, g, m, _, o);
|
|
948
948
|
}
|
|
949
949
|
else
|
|
950
|
-
for (let
|
|
951
|
-
const
|
|
952
|
-
n.flip ?
|
|
950
|
+
for (let c = 0, d = n.endZ - n.startZ; c < d; c++) {
|
|
951
|
+
const f = h + c * 2 + 0 + r * 2 + o, g = h + c * 2 + 1 + r * 2 + o, m = h + c * 2 + 2 + r * 2 + o, _ = h + c * 2 + 3 + r * 2 + o;
|
|
952
|
+
n.flip ? Pt(t, f, g, m, _) : wt(t, f, g, m, _);
|
|
953
953
|
}
|
|
954
|
-
const
|
|
955
|
-
for (let
|
|
956
|
-
const d = n.startZ * s +
|
|
957
|
-
e.push(e[d].clone()), e.push(e[d +
|
|
954
|
+
const u = s * i;
|
|
955
|
+
for (let c = n.startX; c <= n.endX; c++) {
|
|
956
|
+
const d = n.startZ * s + c;
|
|
957
|
+
e.push(e[d].clone()), e.push(e[d + u].clone());
|
|
958
958
|
}
|
|
959
|
-
for (let
|
|
960
|
-
const d =
|
|
961
|
-
e.push(e[d +
|
|
959
|
+
for (let c = n.startX; c <= n.endX; c++) {
|
|
960
|
+
const d = c + n.endZ * s;
|
|
961
|
+
e.push(e[d + u].clone()), e.push(e[d].clone());
|
|
962
962
|
}
|
|
963
|
-
for (let
|
|
964
|
-
const d = n.startX +
|
|
965
|
-
e.push(e[d +
|
|
963
|
+
for (let c = n.startZ; c <= n.endZ; c++) {
|
|
964
|
+
const d = n.startX + c * s;
|
|
965
|
+
e.push(e[d + u].clone()), e.push(e[d].clone());
|
|
966
966
|
}
|
|
967
|
-
for (let
|
|
968
|
-
const d =
|
|
969
|
-
e.push(e[d].clone()), e.push(e[d +
|
|
967
|
+
for (let c = n.startZ; c <= n.endZ; c++) {
|
|
968
|
+
const d = c * s + n.endX;
|
|
969
|
+
e.push(e[d].clone()), e.push(e[d + u].clone());
|
|
970
970
|
}
|
|
971
971
|
}
|
|
972
972
|
}
|
|
973
|
-
function
|
|
973
|
+
function le(a, t, e, s, i) {
|
|
974
974
|
const n = s * i;
|
|
975
975
|
let r = n * 2;
|
|
976
|
-
const o = new
|
|
977
|
-
for (const
|
|
978
|
-
for (let
|
|
979
|
-
const
|
|
980
|
-
o.subVectors(d,
|
|
976
|
+
const o = new l.Vector3();
|
|
977
|
+
for (const h of a) {
|
|
978
|
+
for (let u = h.startX; u <= h.endX; u++) {
|
|
979
|
+
const c = u + h.startZ * s, d = t[c], f = t[c + s];
|
|
980
|
+
o.subVectors(d, f).normalize(), h.flip && o.multiplyScalar(-1), e[r].copy(o), t[r++].copy(d), e[r].copy(o), t[r++].copy(t[c + n]);
|
|
981
981
|
}
|
|
982
|
-
for (let
|
|
983
|
-
const
|
|
984
|
-
o.subVectors(d,
|
|
982
|
+
for (let u = h.startX; u <= h.endX; u++) {
|
|
983
|
+
const c = u + h.endZ * s, d = t[c + n], f = t[c + n - s];
|
|
984
|
+
o.subVectors(d, f).normalize(), h.flip && o.multiplyScalar(-1), e[r].copy(o), t[r++].copy(d), e[r].copy(o), t[r++].copy(t[c]);
|
|
985
985
|
}
|
|
986
|
-
for (let
|
|
987
|
-
const
|
|
988
|
-
o.subVectors(d,
|
|
986
|
+
for (let u = h.startZ; u <= h.endZ; u++) {
|
|
987
|
+
const c = u * s + h.startX, d = t[c + n], f = t[c + n + 1];
|
|
988
|
+
o.subVectors(d, f).normalize(), h.flip && o.multiplyScalar(-1), e[r].copy(o), t[r++].copy(d), e[r].copy(o), t[r++].copy(t[c]);
|
|
989
989
|
}
|
|
990
|
-
for (let
|
|
991
|
-
const
|
|
992
|
-
o.subVectors(d,
|
|
990
|
+
for (let u = h.startZ; u <= h.endZ; u++) {
|
|
991
|
+
const c = u * s + h.endX, d = t[c], f = t[c - 1];
|
|
992
|
+
o.subVectors(d, f).normalize(), h.flip && o.multiplyScalar(-1), e[r].copy(o), t[r++].copy(d), e[r].copy(o), t[r++].copy(t[c + n]);
|
|
993
993
|
}
|
|
994
994
|
}
|
|
995
995
|
}
|
|
996
|
-
function
|
|
997
|
-
|
|
996
|
+
function jt(a, t, e, s, i, n) {
|
|
997
|
+
wt(a, t, e, s, i), t += n, e += n, s += n, i += n, wt(a, t, e, s, i);
|
|
998
998
|
}
|
|
999
|
-
function
|
|
1000
|
-
|
|
999
|
+
function Yt(a, t, e, s, i, n) {
|
|
1000
|
+
Pt(a, t, e, s, i), t += n, e += n, s += n, i += n, Pt(a, t, e, s, i);
|
|
1001
1001
|
}
|
|
1002
|
-
function
|
|
1003
|
-
|
|
1002
|
+
function Ht(a, t, e, s, i, n, r) {
|
|
1003
|
+
wt(a, e, s, i, n), e += r, s += r, i += r, n += r, Pt(t, e, s, i, n);
|
|
1004
1004
|
}
|
|
1005
|
-
function
|
|
1006
|
-
const r = i.left * s.x, o = (1 - i.right) * s.x,
|
|
1005
|
+
function Ft(a, t, e, s, i, n) {
|
|
1006
|
+
const r = i.left * s.x, o = (1 - i.right) * s.x, h = i.down * s.y, u = (1 - i.up) * s.y, c = t.length, d = e.length;
|
|
1007
1007
|
if (n > 1)
|
|
1008
|
-
for (let
|
|
1009
|
-
for (let m = 0; m <
|
|
1010
|
-
const
|
|
1011
|
-
|
|
1008
|
+
for (let g = 0; g < d; g++)
|
|
1009
|
+
for (let m = 0; m < c; m++) {
|
|
1010
|
+
const _ = at(o, r, t[m]), p = at(u, h, e[g]);
|
|
1011
|
+
a.push(new l.Vector2(p, _));
|
|
1012
1012
|
}
|
|
1013
1013
|
else
|
|
1014
|
-
for (let
|
|
1015
|
-
for (let m = 0; m <
|
|
1016
|
-
const
|
|
1017
|
-
|
|
1014
|
+
for (let g = 0; g < d; g++)
|
|
1015
|
+
for (let m = 0; m < c; m++) {
|
|
1016
|
+
const _ = at(r, o, t[m]), p = at(u, h, e[g]);
|
|
1017
|
+
a.push(new l.Vector2(_, p));
|
|
1018
1018
|
}
|
|
1019
|
-
const
|
|
1020
|
-
for (let
|
|
1021
|
-
|
|
1019
|
+
const f = a.length;
|
|
1020
|
+
for (let g = 0; g < f; g++)
|
|
1021
|
+
a.push(a[g].clone());
|
|
1022
1022
|
}
|
|
1023
|
-
function
|
|
1024
|
-
|
|
1023
|
+
function wt(a, t, e, s, i) {
|
|
1024
|
+
a.push(t), a.push(s), a.push(e), a.push(e), a.push(s), a.push(i);
|
|
1025
1025
|
}
|
|
1026
|
-
function
|
|
1027
|
-
|
|
1026
|
+
function Pt(a, t, e, s, i) {
|
|
1027
|
+
a.push(t), a.push(e), a.push(s), a.push(e), a.push(i), a.push(s);
|
|
1028
1028
|
}
|
|
1029
|
-
const
|
|
1029
|
+
const cs = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1030
1030
|
__proto__: null,
|
|
1031
|
-
addBorders:
|
|
1032
|
-
addFrontAndBackFaces:
|
|
1033
|
-
addFrontAndBackTexcoords:
|
|
1034
|
-
seamNodesToSeams:
|
|
1035
|
-
updateBorders:
|
|
1036
|
-
updateXSeams:
|
|
1037
|
-
updateZSeams:
|
|
1031
|
+
addBorders: At,
|
|
1032
|
+
addFrontAndBackFaces: Ht,
|
|
1033
|
+
addFrontAndBackTexcoords: Ft,
|
|
1034
|
+
seamNodesToSeams: xt,
|
|
1035
|
+
updateBorders: le,
|
|
1036
|
+
updateXSeams: bt,
|
|
1037
|
+
updateZSeams: Bt
|
|
1038
1038
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
1039
|
-
class
|
|
1039
|
+
class Qt {
|
|
1040
1040
|
get geometry() {
|
|
1041
1041
|
return this.m_Geometry;
|
|
1042
1042
|
}
|
|
@@ -1049,33 +1049,33 @@ class Wt {
|
|
|
1049
1049
|
constructor(t, e) {
|
|
1050
1050
|
this.m_Pattern = e, this.m_BaseVertices = new Array(e.baseVertexCount);
|
|
1051
1051
|
for (let r = 0; r < e.baseVertexCount; r++)
|
|
1052
|
-
this.m_BaseVertices[r] = new
|
|
1052
|
+
this.m_BaseVertices[r] = new l.Vector3();
|
|
1053
1053
|
this.m_Vertices = new Array(e.vertexCount);
|
|
1054
1054
|
for (let r = 0; r < e.vertexCount; r++)
|
|
1055
|
-
this.m_Vertices[r] = new
|
|
1055
|
+
this.m_Vertices[r] = new l.Vector3();
|
|
1056
1056
|
this.m_Normals = new Array(e.vertexCount);
|
|
1057
1057
|
for (let r = 0; r < e.vertexCount; r++)
|
|
1058
|
-
this.m_Normals[r] = new
|
|
1058
|
+
this.m_Normals[r] = new l.Vector3();
|
|
1059
1059
|
if (this.m_Geometry = t, this.m_Pattern.subMeshCount === 1) {
|
|
1060
1060
|
const r = new Uint32Array(e.triangles);
|
|
1061
|
-
this.m_Geometry.setIndex(new
|
|
1061
|
+
this.m_Geometry.setIndex(new l.BufferAttribute(r, 1)), this.m_Geometry.addGroup(0, e.triangles.length, 0);
|
|
1062
1062
|
} else {
|
|
1063
1063
|
const r = e.frontTriangles.length + e.backTriangles.length + e.borderTriangles.length, o = new Uint32Array(r);
|
|
1064
|
-
let
|
|
1065
|
-
o.set(e.frontTriangles,
|
|
1064
|
+
let h = 0;
|
|
1065
|
+
o.set(e.frontTriangles, h), this.m_Geometry.addGroup(h, e.frontTriangles.length, 0), h += e.frontTriangles.length, o.set(e.backTriangles, h), this.m_Geometry.addGroup(h, e.backTriangles.length, 1), h += e.backTriangles.length, o.set(e.borderTriangles, h), this.m_Geometry.addGroup(h, e.borderTriangles.length, 2), this.m_Geometry.setIndex(new l.BufferAttribute(o, 1));
|
|
1066
1066
|
}
|
|
1067
1067
|
const s = new Float32Array(e.vertexCount * 3), i = new Float32Array(e.vertexCount * 3), n = new Float32Array(e.vertexCount * 2);
|
|
1068
1068
|
for (let r = 0; r < e.texcoords.length; r++)
|
|
1069
1069
|
n[r * 2] = e.texcoords[r].x, n[r * 2 + 1] = e.texcoords[r].y;
|
|
1070
1070
|
this.m_Geometry.setAttribute(
|
|
1071
1071
|
"position",
|
|
1072
|
-
new
|
|
1072
|
+
new l.BufferAttribute(s, 3)
|
|
1073
1073
|
), this.m_Geometry.setAttribute(
|
|
1074
1074
|
"normal",
|
|
1075
|
-
new
|
|
1075
|
+
new l.BufferAttribute(i, 3)
|
|
1076
1076
|
), this.m_Geometry.setAttribute(
|
|
1077
1077
|
"uv",
|
|
1078
|
-
new
|
|
1078
|
+
new l.BufferAttribute(n, 2)
|
|
1079
1079
|
), this.updateBaseVertices();
|
|
1080
1080
|
}
|
|
1081
1081
|
// ── UpdateBaseVertices ──────────────────────────────────────────────────
|
|
@@ -1088,9 +1088,9 @@ class Wt {
|
|
|
1088
1088
|
updateBaseVertices() {
|
|
1089
1089
|
const t = this.m_BaseVertices, e = this.m_Pattern.baseXArray, s = this.m_Pattern.baseZArray, i = this.m_Pattern.baseXOffset, n = e.length, r = s.length;
|
|
1090
1090
|
let o = 0;
|
|
1091
|
-
for (let
|
|
1092
|
-
for (let
|
|
1093
|
-
t[o++].set(e[
|
|
1091
|
+
for (let h = 0; h < r; h++)
|
|
1092
|
+
for (let u = 0; u < n; u++)
|
|
1093
|
+
t[o++].set(e[u] + i, 0, s[h]);
|
|
1094
1094
|
}
|
|
1095
1095
|
// ── UpdateMesh ─────────────────────────────────────────────────────────
|
|
1096
1096
|
/**
|
|
@@ -1109,49 +1109,49 @@ class Wt {
|
|
|
1109
1109
|
* Ported from lines ~2185-2255.
|
|
1110
1110
|
*/
|
|
1111
1111
|
updateMesh() {
|
|
1112
|
-
const t = this.m_BaseVertices, e = this.m_Vertices, s = this.m_Normals, i = this.m_Pattern.weights, n = this.m_Pattern.baseXArray.length, r = this.m_Pattern.baseZArray.length, o = this.m_Pattern.baseVertexCount,
|
|
1112
|
+
const t = this.m_BaseVertices, e = this.m_Vertices, s = this.m_Normals, i = this.m_Pattern.weights, n = this.m_Pattern.baseXArray.length, r = this.m_Pattern.baseZArray.length, o = this.m_Pattern.baseVertexCount, h = new l.Vector3(), u = new l.Vector3(), c = new l.Vector3();
|
|
1113
1113
|
for (let m = 0; m < o; m++)
|
|
1114
1114
|
s[m].set(0, 0, 0);
|
|
1115
|
-
|
|
1115
|
+
bt(this.m_Pattern.xSeams, t, n, r, !1), Bt(this.m_Pattern.zSeams, t, n, r, !1);
|
|
1116
1116
|
for (let m = 0; m < r - 1; m++) {
|
|
1117
|
-
const
|
|
1118
|
-
for (let
|
|
1119
|
-
const M =
|
|
1120
|
-
|
|
1117
|
+
const _ = m + 1;
|
|
1118
|
+
for (let p = 0; p < n - 1; p++) {
|
|
1119
|
+
const M = p + 1, w = m * n + p, C = m * n + M, P = _ * n + p, b = _ * n + M, A = t[w], Z = t[C], D = t[P], U = t[b];
|
|
1120
|
+
qt(A, D, Z, h), qt(U, Z, D, u), c.addVectors(h, u), s[w].add(c), s[C].add(c), s[P].add(c), s[b].add(c);
|
|
1121
1121
|
}
|
|
1122
1122
|
}
|
|
1123
1123
|
for (let m = 0; m < o; m++)
|
|
1124
1124
|
s[m].divideScalar(i[m]).normalize();
|
|
1125
|
-
|
|
1125
|
+
bt(this.m_Pattern.xSeams, s, n, r, !0), Bt(this.m_Pattern.zSeams, s, n, r, !0);
|
|
1126
1126
|
const d = this.m_Pattern.thickness / 2;
|
|
1127
1127
|
for (let m = 0; m < o; m++) {
|
|
1128
|
-
const
|
|
1129
|
-
s[m + o].copy(
|
|
1130
|
-
const
|
|
1131
|
-
e[m].copy(
|
|
1128
|
+
const _ = s[m];
|
|
1129
|
+
s[m + o].copy(_).negate();
|
|
1130
|
+
const p = t[m];
|
|
1131
|
+
e[m].copy(p).addScaledVector(_, d), e[m + o].copy(p).addScaledVector(_, -d);
|
|
1132
1132
|
}
|
|
1133
|
-
|
|
1134
|
-
const
|
|
1133
|
+
le(this.m_Pattern.borders, e, s, n, r);
|
|
1134
|
+
const f = this.m_Geometry.getAttribute(
|
|
1135
1135
|
"position"
|
|
1136
|
-
),
|
|
1136
|
+
), g = this.m_Geometry.getAttribute(
|
|
1137
1137
|
"normal"
|
|
1138
1138
|
);
|
|
1139
1139
|
for (let m = 0; m < e.length; m++) {
|
|
1140
|
-
const
|
|
1141
|
-
|
|
1142
|
-
const
|
|
1143
|
-
|
|
1140
|
+
const _ = e[m];
|
|
1141
|
+
f.setXYZ(m, _.x, _.y, _.z);
|
|
1142
|
+
const p = s[m];
|
|
1143
|
+
g.setXYZ(m, p.x, p.y, p.z);
|
|
1144
1144
|
}
|
|
1145
|
-
|
|
1145
|
+
f.needsUpdate = !0, g.needsUpdate = !0, this.m_Geometry.computeBoundingBox(), this.m_Geometry.computeBoundingSphere();
|
|
1146
1146
|
}
|
|
1147
1147
|
}
|
|
1148
|
-
class
|
|
1148
|
+
class Be {
|
|
1149
1149
|
constructor() {
|
|
1150
1150
|
this.m_UsedMeshs = [], this.m_FreeMeshs = [], this.m_Meshs = /* @__PURE__ */ new Set();
|
|
1151
1151
|
}
|
|
1152
1152
|
get() {
|
|
1153
1153
|
let t;
|
|
1154
|
-
return this.m_FreeMeshs.length > 0 ? t = this.m_FreeMeshs.pop() : (t = new
|
|
1154
|
+
return this.m_FreeMeshs.length > 0 ? t = this.m_FreeMeshs.pop() : (t = new l.BufferGeometry(), this.m_Meshs.add(t)), this.m_UsedMeshs.push(t), t;
|
|
1155
1155
|
}
|
|
1156
1156
|
recycle() {
|
|
1157
1157
|
for (const t of this.m_UsedMeshs)
|
|
@@ -1164,7 +1164,7 @@ class Ce {
|
|
|
1164
1164
|
this.m_Meshs.clear();
|
|
1165
1165
|
}
|
|
1166
1166
|
}
|
|
1167
|
-
class
|
|
1167
|
+
class Re {
|
|
1168
1168
|
constructor(t) {
|
|
1169
1169
|
this.m_UsedRenderers = [], this.m_FreeRenderers = [], this.m_Renderers = /* @__PURE__ */ new Set(), this.m_Ids = [], this.m_Root = t;
|
|
1170
1170
|
}
|
|
@@ -1173,7 +1173,7 @@ class we {
|
|
|
1173
1173
|
}
|
|
1174
1174
|
get(t) {
|
|
1175
1175
|
let e;
|
|
1176
|
-
return this.m_FreeRenderers.length > 0 ? (e = this.m_FreeRenderers.pop(), e.reset(t)) : (e = new
|
|
1176
|
+
return this.m_FreeRenderers.length > 0 ? (e = this.m_FreeRenderers.pop(), e.reset(t)) : (e = new ze(this.m_Root, t), this.m_Renderers.add(e)), this.m_UsedRenderers.push(e), this.m_Ids.push(e.id), e;
|
|
1177
1177
|
}
|
|
1178
1178
|
recycle() {
|
|
1179
1179
|
for (const t of this.m_UsedRenderers)
|
|
@@ -1186,23 +1186,23 @@ class we {
|
|
|
1186
1186
|
this.m_Renderers.clear();
|
|
1187
1187
|
}
|
|
1188
1188
|
getBounds() {
|
|
1189
|
-
const t = new
|
|
1189
|
+
const t = new l.Box3();
|
|
1190
1190
|
let e = !0;
|
|
1191
1191
|
for (const s of this.m_UsedRenderers)
|
|
1192
1192
|
e ? (t.copy(s.bounds), e = !1) : t.union(s.bounds);
|
|
1193
1193
|
return t;
|
|
1194
1194
|
}
|
|
1195
1195
|
}
|
|
1196
|
-
let
|
|
1197
|
-
class
|
|
1196
|
+
let Ve = 1;
|
|
1197
|
+
class ze {
|
|
1198
1198
|
constructor(t, e) {
|
|
1199
|
-
this.m_Visibility = !0, this.m_PropertyBlocks = /* @__PURE__ */ new Map(), this.m_MaterialTextures = /* @__PURE__ */ new Map(), this.m_Id =
|
|
1200
|
-
new
|
|
1201
|
-
new
|
|
1199
|
+
this.m_Visibility = !0, this.m_PropertyBlocks = /* @__PURE__ */ new Map(), this.m_MaterialTextures = /* @__PURE__ */ new Map(), this.m_Id = Ve++, this.m_Object3D = new l.Object3D(), this.m_Object3D.name = e, this.m_Mesh = new l.Mesh(
|
|
1200
|
+
new l.BufferGeometry(),
|
|
1201
|
+
new l.MeshStandardMaterial()
|
|
1202
1202
|
), this.m_Object3D.add(this.m_Mesh), t.add(this.m_Object3D);
|
|
1203
1203
|
}
|
|
1204
1204
|
get bounds() {
|
|
1205
|
-
const t = new
|
|
1205
|
+
const t = new l.Box3();
|
|
1206
1206
|
return this.m_Mesh.geometry && (this.m_Mesh.geometry.computeBoundingBox(), this.m_Mesh.geometry.boundingBox && (t.copy(this.m_Mesh.geometry.boundingBox), t.applyMatrix4(this.m_Mesh.matrixWorld))), t;
|
|
1207
1207
|
}
|
|
1208
1208
|
get id() {
|
|
@@ -1230,12 +1230,12 @@ class Se {
|
|
|
1230
1230
|
return this.m_Mesh;
|
|
1231
1231
|
}
|
|
1232
1232
|
setMaterials(t) {
|
|
1233
|
-
this.disposeManagedTextures(), this.disposeCurrentMaterials(), Array.isArray(t) ? t.length === 0 ? this.m_Mesh.material = new
|
|
1233
|
+
this.disposeManagedTextures(), this.disposeCurrentMaterials(), Array.isArray(t) ? t.length === 0 ? this.m_Mesh.material = new l.MeshStandardMaterial() : t.length === 1 ? this.m_Mesh.material = t[0].clone() : this.m_Mesh.material = t.map((e) => e.clone()) : this.m_Mesh.material = t.clone(), this.m_PropertyBlocks.clear();
|
|
1234
1234
|
}
|
|
1235
1235
|
setPropertyBlock(t, e) {
|
|
1236
1236
|
this.m_PropertyBlocks.set(e, t);
|
|
1237
1237
|
const s = this.getMaterial(e);
|
|
1238
|
-
s && (this.isMapCapable(s) && (t.map instanceof
|
|
1238
|
+
s && (this.isMapCapable(s) && (t.map instanceof l.Texture ? this.applyTextureProperty(
|
|
1239
1239
|
s,
|
|
1240
1240
|
e,
|
|
1241
1241
|
t.map,
|
|
@@ -1243,10 +1243,10 @@ class Se {
|
|
|
1243
1243
|
) : this.clearMaterialTexture(e, s)), this.isColorCapable(s) && s.color.copy(t.color));
|
|
1244
1244
|
}
|
|
1245
1245
|
reset(t) {
|
|
1246
|
-
this.m_Object3D.name = t, this.setVisibility(!0), this.m_Mesh.geometry.dispose(), this.m_Mesh.geometry = new
|
|
1246
|
+
this.m_Object3D.name = t, this.setVisibility(!0), this.m_Mesh.geometry.dispose(), this.m_Mesh.geometry = new l.BufferGeometry(), this.setMaterials([]);
|
|
1247
1247
|
}
|
|
1248
1248
|
clear() {
|
|
1249
|
-
this.m_Object3D.name = "", this.m_Mesh.geometry.dispose(), this.m_Mesh.geometry = new
|
|
1249
|
+
this.m_Object3D.name = "", this.m_Mesh.geometry.dispose(), this.m_Mesh.geometry = new l.BufferGeometry(), this.m_PropertyBlocks.clear(), this.setVisibility(!1), this.m_Object3D.position.set(0, 0, 0), this.m_Object3D.rotation.set(0, 0, 0), this.m_Object3D.scale.set(1, 1, 1);
|
|
1250
1250
|
}
|
|
1251
1251
|
destroy() {
|
|
1252
1252
|
this.disposeManagedTextures(), this.disposeCurrentMaterials(), this.m_Mesh.geometry && this.m_Mesh.geometry.dispose(), this.m_Object3D.parent && this.m_Object3D.parent.remove(this.m_Object3D);
|
|
@@ -1261,7 +1261,7 @@ class Se {
|
|
|
1261
1261
|
return "map" in t;
|
|
1262
1262
|
}
|
|
1263
1263
|
isColorCapable(t) {
|
|
1264
|
-
return "color" in t && t.color instanceof
|
|
1264
|
+
return "color" in t && t.color instanceof l.Color;
|
|
1265
1265
|
}
|
|
1266
1266
|
getSTKey(t) {
|
|
1267
1267
|
return t ? `${t.x.toFixed(6)},${t.y.toFixed(6)},${t.z.toFixed(6)},${t.w.toFixed(6)}` : "1,1,0,0";
|
|
@@ -1274,7 +1274,7 @@ class Se {
|
|
|
1274
1274
|
}
|
|
1275
1275
|
this.clearManagedTexture(e);
|
|
1276
1276
|
const o = s.clone();
|
|
1277
|
-
o.needsUpdate = !0, i && (o.repeat.set(i.x, i.y), o.offset.set(i.z, i.w), o.wrapS =
|
|
1277
|
+
o.needsUpdate = !0, i && (o.repeat.set(i.x, i.y), o.offset.set(i.z, i.w), o.wrapS = l.RepeatWrapping, o.wrapT = l.RepeatWrapping), t.map = o, t.needsUpdate = !0, this.m_MaterialTextures.set(e, {
|
|
1278
1278
|
source: s,
|
|
1279
1279
|
texture: o,
|
|
1280
1280
|
stKey: n
|
|
@@ -1298,20 +1298,20 @@ class Se {
|
|
|
1298
1298
|
e.dispose();
|
|
1299
1299
|
}
|
|
1300
1300
|
}
|
|
1301
|
-
class
|
|
1301
|
+
class De {
|
|
1302
1302
|
constructor(t, e, s = !1) {
|
|
1303
|
-
this.m_Stack = [], this.m_SharedData = null, this.m_MeshFactory = t, this.m_Pattern = e, (this.m_UseSharedData = s) && (this.m_SharedData = new
|
|
1303
|
+
this.m_Stack = [], this.m_SharedData = null, this.m_MeshFactory = t, this.m_Pattern = e, (this.m_UseSharedData = s) && (this.m_SharedData = new Qt(this.m_MeshFactory.get(), this.m_Pattern), this.m_SharedData.updateMesh());
|
|
1304
1304
|
}
|
|
1305
1305
|
get() {
|
|
1306
|
-
return this.m_UseSharedData ? this.m_SharedData : this.m_Stack.length > 0 ? this.m_Stack.pop() : new
|
|
1306
|
+
return this.m_UseSharedData ? this.m_SharedData : this.m_Stack.length > 0 ? this.m_Stack.pop() : new Qt(this.m_MeshFactory.get(), this.m_Pattern);
|
|
1307
1307
|
}
|
|
1308
1308
|
free(t) {
|
|
1309
1309
|
if (this.m_UseSharedData) throw new Error("Not implemented");
|
|
1310
1310
|
this.m_Stack.push(t);
|
|
1311
1311
|
}
|
|
1312
1312
|
}
|
|
1313
|
-
var
|
|
1314
|
-
class
|
|
1313
|
+
var Rt = /* @__PURE__ */ ((a) => (a[a.Next = 0] = "Next", a[a.Back = 1] = "Back", a))(Rt || {}), Ie = /* @__PURE__ */ ((a) => (a[a.Constant = 0] = "Constant", a[a.RandomBetweenTwoConstants = 1] = "RandomBetweenTwoConstants", a[a.Curve = 2] = "Curve", a[a.RandomBetweenTwoCurves = 3] = "RandomBetweenTwoCurves", a))(Ie || {}), Ae = /* @__PURE__ */ ((a) => (a[a.PaperIndexTime = 0] = "PaperIndexTime", a[a.TurnIndexTime = 1] = "TurnIndexTime", a))(Ae || {});
|
|
1314
|
+
class He {
|
|
1315
1315
|
constructor(t) {
|
|
1316
1316
|
this.keys = t ? t.map((e) => ({ time: e.time, value: e.value })) : [];
|
|
1317
1317
|
}
|
|
@@ -1333,10 +1333,10 @@ class be {
|
|
|
1333
1333
|
return e[s - 1].value;
|
|
1334
1334
|
}
|
|
1335
1335
|
}
|
|
1336
|
-
function
|
|
1337
|
-
return
|
|
1336
|
+
function $t(a, t) {
|
|
1337
|
+
return a + Math.random() * (t - a);
|
|
1338
1338
|
}
|
|
1339
|
-
class
|
|
1339
|
+
class ft {
|
|
1340
1340
|
constructor(t, e) {
|
|
1341
1341
|
this.m_Mode = 0, this.m_Constant = 0, this.m_ConstantMin = 0, this.m_ConstantMax = 0, this.m_Curve = null, this.m_CurveMin = null, this.m_CurveMax = null, this.m_CurveTimeMode = 0, t !== void 0 && (e === void 0 ? (this.m_Constant = t, this.m_ConstantMin = t, this.m_ConstantMax = t, this.m_Curve = null, this.m_CurveMin = null, this.m_CurveMax = null, this.m_Mode = 0, this.m_CurveTimeMode = 0) : (this.m_Constant = 0, this.m_ConstantMin = t, this.m_ConstantMax = e, this.m_Curve = null, this.m_CurveMin = null, this.m_CurveMax = null, this.m_Mode = 1, this.m_CurveTimeMode = 0));
|
|
1342
1342
|
}
|
|
@@ -1391,12 +1391,12 @@ class lt {
|
|
|
1391
1391
|
}
|
|
1392
1392
|
/** A value based on a curve. */
|
|
1393
1393
|
static fromCurve(t, e) {
|
|
1394
|
-
const s = new
|
|
1394
|
+
const s = new ft();
|
|
1395
1395
|
return s.m_Constant = 0, s.m_ConstantMin = 0, s.m_ConstantMax = 0, s.m_Curve = t, s.m_CurveMin = null, s.m_CurveMax = null, s.m_Mode = 2, s.m_CurveTimeMode = e, s;
|
|
1396
1396
|
}
|
|
1397
1397
|
/** A random value generated between two curves. */
|
|
1398
1398
|
static fromCurveRange(t, e, s) {
|
|
1399
|
-
const i = new
|
|
1399
|
+
const i = new ft();
|
|
1400
1400
|
return i.m_Constant = 0, i.m_ConstantMin = 0, i.m_ConstantMax = 0, i.m_Curve = null, i.m_CurveMin = t, i.m_CurveMax = e, i.m_Mode = 3, i.m_CurveTimeMode = s, i;
|
|
1401
1401
|
}
|
|
1402
1402
|
// ── Internal API ────────────────────────────────────────────────────────
|
|
@@ -1404,12 +1404,12 @@ class lt {
|
|
|
1404
1404
|
getValue(t, e) {
|
|
1405
1405
|
if (this.m_Mode === 0) return this.m_Constant;
|
|
1406
1406
|
if (this.m_Mode === 1)
|
|
1407
|
-
return
|
|
1407
|
+
return $t(this.m_ConstantMin, this.m_ConstantMax);
|
|
1408
1408
|
const s = this.m_CurveTimeMode === 0 ? t : e;
|
|
1409
1409
|
if (this.m_Mode === 2)
|
|
1410
1410
|
return this.m_Curve.evaluate(s);
|
|
1411
1411
|
if (this.m_Mode === 3)
|
|
1412
|
-
return
|
|
1412
|
+
return $t(
|
|
1413
1413
|
this.m_CurveMin.evaluate(s),
|
|
1414
1414
|
this.m_CurveMax.evaluate(s)
|
|
1415
1415
|
);
|
|
@@ -1417,31 +1417,31 @@ class lt {
|
|
|
1417
1417
|
}
|
|
1418
1418
|
/** @internal */
|
|
1419
1419
|
clampValues(t, e) {
|
|
1420
|
-
return this.m_Constant =
|
|
1420
|
+
return this.m_Constant = q(this.m_Constant, t, e), this.m_ConstantMin = q(this.m_ConstantMin, t, e), this.m_ConstantMax = q(this.m_ConstantMax, t, e), this.m_Curve = this.clampCurve(this.m_Curve, t, e), this.m_CurveMin = this.clampCurve(this.m_CurveMin, t, e), this.m_CurveMax = this.clampCurve(this.m_CurveMax, t, e), this;
|
|
1421
1421
|
}
|
|
1422
1422
|
clampCurve(t, e, s) {
|
|
1423
1423
|
if (this.m_Curve === null || t === null) return null;
|
|
1424
|
-
const i = t.keys.map((
|
|
1424
|
+
const i = t.keys.map((h) => ({ time: h.time, value: h.value })), n = i.length;
|
|
1425
1425
|
let r = 1 / 0, o = -1 / 0;
|
|
1426
|
-
for (let
|
|
1427
|
-
const
|
|
1428
|
-
r = Math.min(r,
|
|
1426
|
+
for (let h = 0; h < n; h++) {
|
|
1427
|
+
const u = i[h].time;
|
|
1428
|
+
r = Math.min(r, u), o = Math.max(o, u);
|
|
1429
1429
|
}
|
|
1430
|
-
for (let
|
|
1431
|
-
let
|
|
1432
|
-
|
|
1430
|
+
for (let h = 0; h < n; h++) {
|
|
1431
|
+
let u = i[h].time, c = i[h].value;
|
|
1432
|
+
u = at(r, o, u), c = q(c, e, s), i[h].time = u, i[h].value = c;
|
|
1433
1433
|
}
|
|
1434
|
-
return new
|
|
1434
|
+
return new He(i);
|
|
1435
1435
|
}
|
|
1436
1436
|
// ── Value-type clone ────────────────────────────────────────────────────
|
|
1437
1437
|
clone() {
|
|
1438
|
-
const t = new
|
|
1438
|
+
const t = new ft();
|
|
1439
1439
|
return t.m_Mode = this.m_Mode, t.m_Constant = this.m_Constant, t.m_ConstantMin = this.m_ConstantMin, t.m_ConstantMax = this.m_ConstantMax, t.m_Curve = this.m_Curve, t.m_CurveMin = this.m_CurveMin, t.m_CurveMax = this.m_CurveMax, t.m_CurveTimeMode = this.m_CurveTimeMode, t;
|
|
1440
1440
|
}
|
|
1441
1441
|
}
|
|
1442
|
-
const
|
|
1442
|
+
const et = class et {
|
|
1443
1443
|
constructor() {
|
|
1444
|
-
this.m_Mode =
|
|
1444
|
+
this.m_Mode = Ct.Surface, this.m_Twist = new ft(), this.m_Bend = new ft(1), this.m_Duration = new ft(0.5);
|
|
1445
1445
|
}
|
|
1446
1446
|
// ── Properties ──────────────────────────────────────────────────────────
|
|
1447
1447
|
get mode() {
|
|
@@ -1455,8 +1455,8 @@ const j = class j {
|
|
|
1455
1455
|
}
|
|
1456
1456
|
set twist(t) {
|
|
1457
1457
|
this.m_Twist = t.clampValues(
|
|
1458
|
-
|
|
1459
|
-
|
|
1458
|
+
et.kMinTwist,
|
|
1459
|
+
et.kMaxTwist
|
|
1460
1460
|
);
|
|
1461
1461
|
}
|
|
1462
1462
|
get bend() {
|
|
@@ -1464,8 +1464,8 @@ const j = class j {
|
|
|
1464
1464
|
}
|
|
1465
1465
|
set bend(t) {
|
|
1466
1466
|
this.m_Bend = t.clampValues(
|
|
1467
|
-
|
|
1468
|
-
|
|
1467
|
+
et.kMinBend,
|
|
1468
|
+
et.kMaxBend
|
|
1469
1469
|
);
|
|
1470
1470
|
}
|
|
1471
1471
|
get duration() {
|
|
@@ -1473,8 +1473,8 @@ const j = class j {
|
|
|
1473
1473
|
}
|
|
1474
1474
|
set duration(t) {
|
|
1475
1475
|
this.m_Duration = t.clampValues(
|
|
1476
|
-
|
|
1477
|
-
|
|
1476
|
+
et.kMinDuration,
|
|
1477
|
+
et.kMaxDuration
|
|
1478
1478
|
);
|
|
1479
1479
|
}
|
|
1480
1480
|
// ── Internal API ────────────────────────────────────────────────────────
|
|
@@ -1484,73 +1484,73 @@ const j = class j {
|
|
|
1484
1484
|
}
|
|
1485
1485
|
/** @internal */
|
|
1486
1486
|
getBendValue(t, e) {
|
|
1487
|
-
return
|
|
1487
|
+
return q(
|
|
1488
1488
|
this.m_Bend.getValue(t, e),
|
|
1489
|
-
|
|
1490
|
-
|
|
1489
|
+
et.kMinBend,
|
|
1490
|
+
et.kMaxBend
|
|
1491
1491
|
);
|
|
1492
1492
|
}
|
|
1493
1493
|
/** @internal */
|
|
1494
1494
|
getDurationValue(t, e) {
|
|
1495
|
-
return
|
|
1495
|
+
return q(
|
|
1496
1496
|
this.m_Duration.getValue(t, e),
|
|
1497
|
-
|
|
1498
|
-
|
|
1497
|
+
et.kMinDuration,
|
|
1498
|
+
et.kMaxDuration
|
|
1499
1499
|
);
|
|
1500
1500
|
}
|
|
1501
1501
|
/** @internal */
|
|
1502
1502
|
getTwistValue(t, e) {
|
|
1503
|
-
return
|
|
1503
|
+
return q(
|
|
1504
1504
|
this.m_Twist.getValue(t, e),
|
|
1505
|
-
|
|
1506
|
-
|
|
1505
|
+
et.kMinTwist,
|
|
1506
|
+
et.kMaxTwist
|
|
1507
1507
|
);
|
|
1508
1508
|
}
|
|
1509
1509
|
};
|
|
1510
|
-
|
|
1511
|
-
let
|
|
1512
|
-
class
|
|
1510
|
+
et.kMinTwist = -1, et.kMaxTwist = 1, et.kMinBend = 0, et.kMaxBend = 1, et.kMinDuration = 0, et.kMaxDuration = 5;
|
|
1511
|
+
let Kt = et;
|
|
1512
|
+
class ue extends Error {
|
|
1513
1513
|
constructor() {
|
|
1514
1514
|
super(
|
|
1515
1515
|
"The book's height exceeds the maximum limit. Please consider using thinner paper, increasing the width of the paper, or reducing the number of pages."
|
|
1516
1516
|
);
|
|
1517
1517
|
}
|
|
1518
1518
|
}
|
|
1519
|
-
const
|
|
1519
|
+
const ct = class ct extends l.Group {
|
|
1520
1520
|
// ── Constructor ────────────────────────────────────────────────────────
|
|
1521
1521
|
constructor(t) {
|
|
1522
|
-
super(), this.m_Content = null, this.m_Binding = null, this.m_InitialOpenProgress = 0, this.m_BuildOnAwake = !0, this.m_CastShadows = !0, this.m_AlignToGround = !1, this.m_HideBinder = !1, this.m_ReduceShadows = !1, this.m_ReduceSubMeshes = !1, this.m_ReduceOverdraw = !1, this.m_CoverPaperSetup = new
|
|
1523
|
-
color: new
|
|
1522
|
+
super(), this.m_Content = null, this.m_Binding = null, this.m_InitialOpenProgress = 0, this.m_BuildOnAwake = !0, this.m_CastShadows = !0, this.m_AlignToGround = !1, this.m_HideBinder = !1, this.m_ReduceShadows = !1, this.m_ReduceSubMeshes = !1, this.m_ReduceOverdraw = !1, this.m_CoverPaperSetup = new _t({
|
|
1523
|
+
color: new l.Color(1, 0, 0),
|
|
1524
1524
|
width: 2.1,
|
|
1525
1525
|
height: 3.1,
|
|
1526
1526
|
thickness: 0.04,
|
|
1527
1527
|
stiffness: 0.5
|
|
1528
|
-
}), this.m_PagePaperSetup = new
|
|
1529
|
-
color: new
|
|
1528
|
+
}), this.m_PagePaperSetup = new _t({
|
|
1529
|
+
color: new l.Color(1, 1, 1),
|
|
1530
1530
|
width: 2,
|
|
1531
1531
|
height: 3,
|
|
1532
1532
|
thickness: 0.02,
|
|
1533
1533
|
stiffness: 0.2
|
|
1534
|
-
}), this.m_Root = null, this.m_IsBuilt = !1, this.m_HasCover = !1, this.m_RendererFactory = null, this.m_MeshFactory = null, this.m_Bound = null, this.m_Papers = [], this.m_SelectedPaper = null, this.m_Direction =
|
|
1535
|
-
color: t.coverPaperSetup.color ?? new
|
|
1534
|
+
}), this.m_Root = null, this.m_IsBuilt = !1, this.m_HasCover = !1, this.m_RendererFactory = null, this.m_MeshFactory = null, this.m_Bound = null, this.m_Papers = [], this.m_SelectedPaper = null, this.m_Direction = ut.LeftToRight, this.m_AutoTurnQueue = [], this.m_AutoTurnTimer = 0, this.m_AutoTurningEndTime = -1, this.m_CurrentTime = 0, this.m_CoverPaperCount = 0, this.m_PagePaperCount = 0, this.m_TotalThickness = 0, this.m_MinPaperWidth = 0, this.m_MinPaperHeight = 0, this.m_MinPaperThickness = 0, this.m_MaxPaperThickness = 0, this.m_RendererIds = [], this.m_WasIdle = !1, this.m_ContentDirty = !1, this.m_StructuralDirty = !1, this.m_AppliedDirection = void 0, this._frontPapersCache = null, t && (t.content && (this.m_Content = t.content), t.binding && (this.m_Binding = t.binding), t.initialOpenProgress !== void 0 && (this.m_InitialOpenProgress = l.MathUtils.clamp(t.initialOpenProgress, 0, 1)), t.buildOnAwake !== void 0 && (this.m_BuildOnAwake = t.buildOnAwake), t.castShadows !== void 0 && (this.m_CastShadows = t.castShadows), t.alignToGround !== void 0 && (this.m_AlignToGround = t.alignToGround), t.hideBinder !== void 0 && (this.m_HideBinder = t.hideBinder), t.reduceShadows !== void 0 && (this.m_ReduceShadows = t.reduceShadows), t.reduceSubMeshes !== void 0 && (this.m_ReduceSubMeshes = t.reduceSubMeshes), t.reduceOverdraw !== void 0 && (this.m_ReduceOverdraw = t.reduceOverdraw), t.coverPaperSetup && (this.m_CoverPaperSetup = new _t({
|
|
1535
|
+
color: t.coverPaperSetup.color ?? new l.Color(1, 0, 0),
|
|
1536
1536
|
width: t.coverPaperSetup.width ?? 2.1,
|
|
1537
1537
|
height: t.coverPaperSetup.height ?? 3.1,
|
|
1538
1538
|
thickness: t.coverPaperSetup.thickness ?? 0.04,
|
|
1539
1539
|
stiffness: t.coverPaperSetup.stiffness ?? 0.5,
|
|
1540
1540
|
rigid: t.coverPaperSetup.rigid ?? !1,
|
|
1541
1541
|
material: t.coverPaperSetup.material ?? null
|
|
1542
|
-
})), t.pagePaperSetup && (this.m_PagePaperSetup = new
|
|
1543
|
-
color: t.pagePaperSetup.color ?? new
|
|
1542
|
+
})), t.pagePaperSetup && (this.m_PagePaperSetup = new _t({
|
|
1543
|
+
color: t.pagePaperSetup.color ?? new l.Color(1, 1, 1),
|
|
1544
1544
|
width: t.pagePaperSetup.width ?? 2,
|
|
1545
1545
|
height: t.pagePaperSetup.height ?? 3,
|
|
1546
1546
|
thickness: t.pagePaperSetup.thickness ?? 0.02,
|
|
1547
1547
|
stiffness: t.pagePaperSetup.stiffness ?? 0.2,
|
|
1548
1548
|
rigid: t.pagePaperSetup.rigid ?? !1,
|
|
1549
1549
|
material: t.pagePaperSetup.material ?? null
|
|
1550
|
-
}))),
|
|
1550
|
+
}))), ct.s_Instances.add(this), ct.s_InstancesArray = null;
|
|
1551
1551
|
}
|
|
1552
1552
|
static get instances() {
|
|
1553
|
-
return
|
|
1553
|
+
return ct.s_InstancesArray === null && (ct.s_InstancesArray = [...ct.s_Instances]), ct.s_InstancesArray;
|
|
1554
1554
|
}
|
|
1555
1555
|
// ── Internal accessors ─────────────────────────────────────────────────
|
|
1556
1556
|
get minPaperWidth() {
|
|
@@ -1616,7 +1616,7 @@ const K = class K extends u.Group {
|
|
|
1616
1616
|
}
|
|
1617
1617
|
set coverPaperSetup(t) {
|
|
1618
1618
|
const e = this.m_CoverPaperSetup, s = t.width ?? e.width, i = t.height ?? e.height, n = t.thickness ?? e.thickness, r = t.stiffness ?? e.stiffness, o = t.rigid ?? e.rigid;
|
|
1619
|
-
e.width === s && e.height === i && e.thickness === n && e.stiffness === r && e.rigid === o || (this.m_CoverPaperSetup = new
|
|
1619
|
+
e.width === s && e.height === i && e.thickness === n && e.stiffness === r && e.rigid === o || (this.m_CoverPaperSetup = new _t({
|
|
1620
1620
|
color: t.color ?? e.color,
|
|
1621
1621
|
width: s,
|
|
1622
1622
|
height: i,
|
|
@@ -1631,7 +1631,7 @@ const K = class K extends u.Group {
|
|
|
1631
1631
|
}
|
|
1632
1632
|
set pagePaperSetup(t) {
|
|
1633
1633
|
const e = this.m_PagePaperSetup, s = t.width ?? e.width, i = t.height ?? e.height, n = t.thickness ?? e.thickness, r = t.stiffness ?? e.stiffness, o = t.rigid ?? e.rigid;
|
|
1634
|
-
e.width === s && e.height === i && e.thickness === n && e.stiffness === r && e.rigid === o || (this.m_PagePaperSetup = new
|
|
1634
|
+
e.width === s && e.height === i && e.thickness === n && e.stiffness === r && e.rigid === o || (this.m_PagePaperSetup = new _t({
|
|
1635
1635
|
color: t.color ?? e.color,
|
|
1636
1636
|
width: s,
|
|
1637
1637
|
height: i,
|
|
@@ -1670,7 +1670,7 @@ const K = class K extends u.Group {
|
|
|
1670
1670
|
return this.m_InitialOpenProgress;
|
|
1671
1671
|
}
|
|
1672
1672
|
set initialOpenProgress(t) {
|
|
1673
|
-
this.m_InitialOpenProgress =
|
|
1673
|
+
this.m_InitialOpenProgress = l.MathUtils.clamp(t, 0, 1);
|
|
1674
1674
|
}
|
|
1675
1675
|
get isBuilt() {
|
|
1676
1676
|
return this.m_IsBuilt;
|
|
@@ -1730,7 +1730,7 @@ const K = class K extends u.Group {
|
|
|
1730
1730
|
}
|
|
1731
1731
|
getActivePaperSideIndices(t) {
|
|
1732
1732
|
if (t.clear(), !this.m_IsBuilt) return;
|
|
1733
|
-
const e = this.m_Content.direction ===
|
|
1733
|
+
const e = this.m_Content.direction === ut.RightToLeft, s = this.m_Papers.length, i = (n, r) => {
|
|
1734
1734
|
let o = n * 2;
|
|
1735
1735
|
r && o++, e && (o = s * 2 - o - 1), t.add(o);
|
|
1736
1736
|
};
|
|
@@ -1752,7 +1752,7 @@ const K = class K extends u.Group {
|
|
|
1752
1752
|
*/
|
|
1753
1753
|
setOpenProgress(t) {
|
|
1754
1754
|
this.cancelPendingAutoTurns(), this.m_Content.direction % 2 !== 0 && (t = 1 - t);
|
|
1755
|
-
const e = this.m_Papers.length, s = Math.round(
|
|
1755
|
+
const e = this.m_Papers.length, s = Math.round(l.MathUtils.lerp(0, e, t));
|
|
1756
1756
|
for (let i = 0; i < e; i++) {
|
|
1757
1757
|
const n = i >= s;
|
|
1758
1758
|
this.m_Papers[i].restState(n);
|
|
@@ -1777,11 +1777,11 @@ const K = class K extends u.Group {
|
|
|
1777
1777
|
startAutoTurning(t, e, s = 1, i = 0) {
|
|
1778
1778
|
if (!this.m_IsBuilt) return !1;
|
|
1779
1779
|
this.cancelPendingAutoTurns();
|
|
1780
|
-
const n = typeof i == "number" ? new
|
|
1780
|
+
const n = typeof i == "number" ? new ft(i) : i;
|
|
1781
1781
|
if (s = Math.min(s, this.getMaxAutoTurnCount(t)), s === 0) return !1;
|
|
1782
1782
|
for (let r = 0; r < s && this.canAutoTurn(t); r++) {
|
|
1783
|
-
const o = r / (s - 1 || 1),
|
|
1784
|
-
this.m_AutoTurnQueue.push({ direction: t, mode:
|
|
1783
|
+
const o = r / (s - 1 || 1), h = this.getAutoTurnPaperIndexTime(t), u = r > 0 ? n.getValue(h, o) : 0, c = e.getModeValue(), d = e.getTwistValue(h, o), f = e.getBendValue(h, o), g = e.getDurationValue(h, o);
|
|
1784
|
+
this.m_AutoTurnQueue.push({ direction: t, mode: c, twist: d, bend: f, duration: g, delay: u });
|
|
1785
1785
|
}
|
|
1786
1786
|
return this.m_AutoTurnTimer = 0, this._frontPapersCache = null, !0;
|
|
1787
1787
|
}
|
|
@@ -1809,7 +1809,7 @@ const K = class K extends u.Group {
|
|
|
1809
1809
|
if (this.isTurning) return null;
|
|
1810
1810
|
const e = this.getFrontPapers();
|
|
1811
1811
|
if (e.length > 0) {
|
|
1812
|
-
const s = t ===
|
|
1812
|
+
const s = t === Rt.Next, i = e[s ? e.length - 1 : 0];
|
|
1813
1813
|
if (!i.isTurning && !i.isFalling && s === i.isOnRightStack)
|
|
1814
1814
|
return i;
|
|
1815
1815
|
}
|
|
@@ -1819,7 +1819,7 @@ const K = class K extends u.Group {
|
|
|
1819
1819
|
const e = this.getAutoTurnPaper(t);
|
|
1820
1820
|
if (e === null) return 0;
|
|
1821
1821
|
let s = 1;
|
|
1822
|
-
return t ===
|
|
1822
|
+
return t === Rt.Next ? s += this.m_Papers.length - e.index - 1 : s += e.index, s;
|
|
1823
1823
|
}
|
|
1824
1824
|
canAutoTurn(t) {
|
|
1825
1825
|
return this.getAutoTurnPaper(t) !== null;
|
|
@@ -1835,7 +1835,7 @@ const K = class K extends u.Group {
|
|
|
1835
1835
|
*/
|
|
1836
1836
|
init() {
|
|
1837
1837
|
var t;
|
|
1838
|
-
|
|
1838
|
+
ct.s_Instances.add(this), ct.s_InstancesArray = null, this.hardClear(), this.m_BuildOnAwake && (this.build(), this.m_ContentDirty = !1, this.m_StructuralDirty = !1, this.m_AppliedDirection = (t = this.m_Content) == null ? void 0 : t.direction);
|
|
1839
1839
|
}
|
|
1840
1840
|
/**
|
|
1841
1841
|
* Call every frame with delta time in seconds.
|
|
@@ -1872,52 +1872,52 @@ const K = class K extends u.Group {
|
|
|
1872
1872
|
* it will never be garbage collected.
|
|
1873
1873
|
*/
|
|
1874
1874
|
dispose() {
|
|
1875
|
-
|
|
1875
|
+
ct.s_Instances.delete(this), ct.s_InstancesArray = null, this.hardClear();
|
|
1876
1876
|
}
|
|
1877
1877
|
// ── Build ─────────────────────────────────────────────────────────────
|
|
1878
1878
|
build() {
|
|
1879
|
-
var
|
|
1879
|
+
var F;
|
|
1880
1880
|
if (this.clear(), this.m_Content === null || this.m_Content.isEmpty || this.m_Binding === null) return;
|
|
1881
|
-
if (this.m_MeshFactory === null && (this.m_MeshFactory = new
|
|
1882
|
-
const
|
|
1883
|
-
|
|
1881
|
+
if (this.m_MeshFactory === null && (this.m_MeshFactory = new Be()), this.m_RendererFactory === null) {
|
|
1882
|
+
const k = new l.Object3D();
|
|
1883
|
+
k.name = "Root", this.add(k), this.m_Root = k, this.m_RendererFactory = new Re(this.m_Root);
|
|
1884
1884
|
}
|
|
1885
1885
|
this.m_Direction = this.m_Content.direction;
|
|
1886
1886
|
const t = this.m_Direction > 1 ? Math.PI / 2 : 0;
|
|
1887
1887
|
this.m_Root.rotation.set(0, t, 0), this.m_CoverPaperSetup.bookDirection = this.m_Content.direction, this.m_PagePaperSetup.bookDirection = this.m_Content.direction, this.m_PagePaperSetup.height < this.m_CoverPaperSetup.height ? (this.m_CoverPaperSetup.margin = 0, this.m_PagePaperSetup.margin = (this.m_CoverPaperSetup.height - this.m_PagePaperSetup.height) / 2) : (this.m_CoverPaperSetup.margin = (this.m_PagePaperSetup.height - this.m_CoverPaperSetup.height) / 2, this.m_PagePaperSetup.margin = 0);
|
|
1888
|
-
const e = new
|
|
1888
|
+
const e = new Gt(this.m_CoverPaperSetup), s = new Gt(this.m_PagePaperSetup);
|
|
1889
1889
|
this.m_Content.init(this);
|
|
1890
1890
|
let i = this.m_Content.coverContents, n = this.m_Content.pageContents, r = this.m_InitialOpenProgress;
|
|
1891
1891
|
this.m_Content.direction % 2 !== 0 && (i = [...i].reverse(), n = [...n].reverse(), r = 1 - r), this.m_HasCover = i.length > 0, this.m_CoverPaperCount = Math.floor(i.length / 2), this.m_PagePaperCount = Math.floor(n.length / 2);
|
|
1892
|
-
const o = this.m_CoverPaperCount + this.m_PagePaperCount,
|
|
1893
|
-
let
|
|
1892
|
+
const o = this.m_CoverPaperCount + this.m_PagePaperCount, h = Math.floor(i.length / 4);
|
|
1893
|
+
let u = 0, c = 0, d = 0;
|
|
1894
1894
|
this.m_Papers = new Array(o);
|
|
1895
|
-
for (let
|
|
1896
|
-
const
|
|
1897
|
-
|
|
1895
|
+
for (let k = 0; k < o; k++) {
|
|
1896
|
+
const B = this.m_HasCover && (k < h || k >= o - h), Y = this.m_RendererFactory.get("Paper"), X = this.m_Papers[k] = new be(B, k, this, Y);
|
|
1897
|
+
X.renderer.castShadows = this.m_CastShadows, k < Math.round(l.MathUtils.lerp(0, o, r)) && (X.transform.scale.set(-1, 1, 1), X.setTime(1)), B ? (X.setContentData(i[c++], i[c++], k > h), X.setMaterialData(e), X.setPaperSetup(this.m_CoverPaperSetup)) : (X.setContentData(n[u++], n[u++]), X.setMaterialData(s), X.setPaperSetup(this.m_PagePaperSetup)), d += X.thickness;
|
|
1898
1898
|
}
|
|
1899
1899
|
this.m_TotalThickness = d;
|
|
1900
|
-
const
|
|
1901
|
-
this.m_MinPaperThickness = Math.min(
|
|
1902
|
-
const m = this.m_Papers[0].size.x,
|
|
1903
|
-
this.m_MinPaperWidth = Math.min(m,
|
|
1904
|
-
const
|
|
1905
|
-
this.m_MinPaperHeight = Math.min(
|
|
1900
|
+
const f = this.m_Papers[0].thickness, g = this.m_Papers[Math.floor(o / 2)].thickness;
|
|
1901
|
+
this.m_MinPaperThickness = Math.min(f, g), this.m_MaxPaperThickness = Math.max(f, g);
|
|
1902
|
+
const m = this.m_Papers[0].size.x, _ = this.m_Papers[Math.floor(o / 2)].size.x;
|
|
1903
|
+
this.m_MinPaperWidth = Math.min(m, _);
|
|
1904
|
+
const p = this.m_Papers[0].size.y, M = this.m_Papers[Math.floor(o / 2)].size.y;
|
|
1905
|
+
this.m_MinPaperHeight = Math.min(p, M), this.m_Bound = this.m_Binding.createBound(
|
|
1906
1906
|
this,
|
|
1907
1907
|
this.m_Root,
|
|
1908
1908
|
this.m_RendererFactory,
|
|
1909
1909
|
this.m_MeshFactory
|
|
1910
1910
|
), this.m_Bound.binderRenderer.setVisibility(!this.m_HideBinder);
|
|
1911
|
-
const
|
|
1912
|
-
for (let
|
|
1913
|
-
const
|
|
1914
|
-
|
|
1915
|
-
|
|
1911
|
+
const w = this.m_ReduceOverdraw && n.length > 0, C = this.m_ReduceSubMeshes, P = this.createPaperMeshDataPool(this.m_PagePaperSetup, !0, C), b = w ? this.createPaperMeshDataPool(this.m_PagePaperSetup, !0, C, !0) : null, A = this.createPaperMeshDataPool(this.m_PagePaperSetup, !1), Z = this.createPaperMeshDataPool(this.m_CoverPaperSetup, !0), D = this.createPaperMeshDataPool(this.m_CoverPaperSetup, !1), U = Math.floor(o / 2) - 1, E = U + 1, N = ((F = this.m_Bound) == null ? void 0 : F.bindingType) === "staple";
|
|
1912
|
+
for (let k = 0; k < o; k++) {
|
|
1913
|
+
const B = this.m_Papers[k];
|
|
1914
|
+
k !== 0 && (B.prev = this.m_Papers[k - 1]), k !== o - 1 && (B.next = this.m_Papers[k + 1]), B.noHole = N && (k === U || k === E), B.isCover ? B.setMeshData(Z.get(), null, D) : B.setMeshData(
|
|
1915
|
+
P.get(),
|
|
1916
1916
|
(b == null ? void 0 : b.get()) ?? null,
|
|
1917
|
-
|
|
1917
|
+
A
|
|
1918
1918
|
);
|
|
1919
1919
|
}
|
|
1920
|
-
this.m_IsBuilt = !0, this.m_RendererIds = this.m_RendererFactory.ids, this._frontPapersCache = null, this.update(0), this.m_CoverPaperSetup.bookDirection =
|
|
1920
|
+
this.m_IsBuilt = !0, this.m_RendererIds = this.m_RendererFactory.ids, this._frontPapersCache = null, this.update(0), this.m_CoverPaperSetup.bookDirection = ut.LeftToRight, this.m_PagePaperSetup.bookDirection = ut.LeftToRight;
|
|
1921
1921
|
}
|
|
1922
1922
|
/**
|
|
1923
1923
|
* Clears the built state of the book.
|
|
@@ -1942,7 +1942,7 @@ const K = class K extends u.Group {
|
|
|
1942
1942
|
i,
|
|
1943
1943
|
s
|
|
1944
1944
|
);
|
|
1945
|
-
return new
|
|
1945
|
+
return new De(
|
|
1946
1946
|
this.m_MeshFactory,
|
|
1947
1947
|
r,
|
|
1948
1948
|
e && this.m_Bound.useSharedMeshDataForLowpoly
|
|
@@ -1994,14 +1994,14 @@ const K = class K extends u.Group {
|
|
|
1994
1994
|
return !1;
|
|
1995
1995
|
this.m_Content.direction % 2 !== 0 && (t = [...t].reverse(), e = [...e].reverse());
|
|
1996
1996
|
const n = this.m_Papers.length, r = Math.floor(t.length / 4);
|
|
1997
|
-
let o = 0,
|
|
1998
|
-
for (let
|
|
1999
|
-
const
|
|
2000
|
-
this.m_HasCover && (
|
|
2001
|
-
t[
|
|
2002
|
-
t[
|
|
2003
|
-
|
|
2004
|
-
) :
|
|
1997
|
+
let o = 0, h = 0;
|
|
1998
|
+
for (let u = 0; u < n; u++) {
|
|
1999
|
+
const c = this.m_Papers[u];
|
|
2000
|
+
this.m_HasCover && (u < r || u >= n - r) ? c.setContentData(
|
|
2001
|
+
t[h++],
|
|
2002
|
+
t[h++],
|
|
2003
|
+
u > r
|
|
2004
|
+
) : c.setContentData(e[o++], e[o++]), c.updateMaterials();
|
|
2005
2005
|
}
|
|
2006
2006
|
return this.m_WasIdle = !1, !0;
|
|
2007
2007
|
}
|
|
@@ -2031,15 +2031,15 @@ const K = class K extends u.Group {
|
|
|
2031
2031
|
s.frontContent.setActive(t.has(s.frontContent)), s.backContent.setActive(t.has(s.backContent));
|
|
2032
2032
|
}
|
|
2033
2033
|
};
|
|
2034
|
-
|
|
2035
|
-
let
|
|
2036
|
-
class
|
|
2034
|
+
ct.s_Instances = /* @__PURE__ */ new Set(), ct.s_InstancesArray = null;
|
|
2035
|
+
let Vt = ct;
|
|
2036
|
+
class me {
|
|
2037
2037
|
constructor() {
|
|
2038
|
-
this.baseXArray = [], this.baseZArray = [], this.baseXOffset = 0, this.baseVertexCount = 0, this.xSeams = [], this.zSeams = [], this.xNoneSeamIndexes = [], this.borders = [], this.texcoords = [], this.weights = [], this.triangles = [], this.frontTriangles = [], this.backTriangles = [], this.borderTriangles = [], this.vertexCount = 0, this.subMeshCount = 0, this.size = new
|
|
2038
|
+
this.baseXArray = [], this.baseZArray = [], this.baseXOffset = 0, this.baseVertexCount = 0, this.xSeams = [], this.zSeams = [], this.xNoneSeamIndexes = [], this.borders = [], this.texcoords = [], this.weights = [], this.triangles = [], this.frontTriangles = [], this.backTriangles = [], this.borderTriangles = [], this.vertexCount = 0, this.subMeshCount = 0, this.size = new l.Vector2(), this.thickness = 0;
|
|
2039
2039
|
}
|
|
2040
2040
|
}
|
|
2041
|
-
const
|
|
2042
|
-
class
|
|
2041
|
+
const de = Object.freeze(new l.Vector4(1, 1, 0, 0));
|
|
2042
|
+
class ls {
|
|
2043
2043
|
constructor() {
|
|
2044
2044
|
this.m_BookContent = null, this.m_IsActive = !1, this.onActiveChangedCallback = null;
|
|
2045
2045
|
}
|
|
@@ -2050,7 +2050,7 @@ class ss {
|
|
|
2050
2050
|
return this.m_IsActive;
|
|
2051
2051
|
}
|
|
2052
2052
|
get textureST() {
|
|
2053
|
-
return
|
|
2053
|
+
return de;
|
|
2054
2054
|
}
|
|
2055
2055
|
get isShareable() {
|
|
2056
2056
|
return !0;
|
|
@@ -2074,15 +2074,15 @@ class ss {
|
|
|
2074
2074
|
this.m_IsActive !== t && (this.m_IsActive = t, this.onActiveChanged(), (e = this.onActiveChangedCallback) == null || e.call(this));
|
|
2075
2075
|
}
|
|
2076
2076
|
}
|
|
2077
|
-
class
|
|
2077
|
+
class Jt {
|
|
2078
2078
|
constructor(t, e) {
|
|
2079
|
-
this.m_Texture = t, this.m_TextureST = e ?? new
|
|
2079
|
+
this.m_Texture = t, this.m_TextureST = e ?? new l.Vector4(1, 1, 0, 0);
|
|
2080
2080
|
}
|
|
2081
2081
|
get texture() {
|
|
2082
2082
|
return this.m_Texture;
|
|
2083
2083
|
}
|
|
2084
2084
|
get textureST() {
|
|
2085
|
-
return this.m_Texture ? this.m_TextureST :
|
|
2085
|
+
return this.m_Texture ? this.m_TextureST : de;
|
|
2086
2086
|
}
|
|
2087
2087
|
isPointOverUI(t) {
|
|
2088
2088
|
return !1;
|
|
@@ -2092,9 +2092,9 @@ class jt {
|
|
|
2092
2092
|
setActive(t) {
|
|
2093
2093
|
}
|
|
2094
2094
|
}
|
|
2095
|
-
class
|
|
2095
|
+
class us {
|
|
2096
2096
|
constructor() {
|
|
2097
|
-
this.m_Direction =
|
|
2097
|
+
this.m_Direction = ut.LeftToRight, this.m_Covers = [null, null, null, null], this.m_Pages = [null, null, null, null, null, null, null, null], this.m_Book = null, this._cachedCovers = null, this._cachedPages = null;
|
|
2098
2098
|
}
|
|
2099
2099
|
get coverCount4() {
|
|
2100
2100
|
return this.nextMultipleOf4(this.m_Covers.length);
|
|
@@ -2146,12 +2146,12 @@ class is {
|
|
|
2146
2146
|
}
|
|
2147
2147
|
getContent(t) {
|
|
2148
2148
|
if (t !== null) {
|
|
2149
|
-
if (t instanceof
|
|
2150
|
-
return new
|
|
2149
|
+
if (t instanceof l.Texture)
|
|
2150
|
+
return new Jt(t);
|
|
2151
2151
|
if (typeof t.init == "function")
|
|
2152
2152
|
return t;
|
|
2153
2153
|
}
|
|
2154
|
-
return new
|
|
2154
|
+
return new Jt(null);
|
|
2155
2155
|
}
|
|
2156
2156
|
init(t) {
|
|
2157
2157
|
this.m_Book = t, this._cachedCovers = null, this._cachedPages = null;
|
|
@@ -2199,14 +2199,14 @@ class is {
|
|
|
2199
2199
|
return !this.isCoverPaperSideIndex(t);
|
|
2200
2200
|
}
|
|
2201
2201
|
}
|
|
2202
|
-
class
|
|
2202
|
+
class ms {
|
|
2203
2203
|
constructor(t, e) {
|
|
2204
|
-
this.enabled = !0, this.m_Raycaster = new
|
|
2204
|
+
this.enabled = !0, this.m_Raycaster = new l.Raycaster(), this.m_Mouse = new l.Vector2(), this.m_SelectedBook = null, this.m_IsPointerDown = !1, this.m_OnPointerDown = (s) => {
|
|
2205
2205
|
var n;
|
|
2206
2206
|
if (!this.enabled || s.button !== 0) return;
|
|
2207
2207
|
this.m_IsPointerDown = !0;
|
|
2208
2208
|
const i = this.m_GetRay(s);
|
|
2209
|
-
for (const r of
|
|
2209
|
+
for (const r of Vt.instances)
|
|
2210
2210
|
if (r.startTurning(i)) {
|
|
2211
2211
|
this.m_SelectedBook = r, (n = this.onTurnStart) == null || n.call(this, r);
|
|
2212
2212
|
break;
|
|
@@ -2226,9 +2226,9 @@ class ns {
|
|
|
2226
2226
|
return this.m_Mouse.x = (t.clientX - e.left) / e.width * 2 - 1, this.m_Mouse.y = -((t.clientY - e.top) / e.height) * 2 + 1, this.m_Raycaster.setFromCamera(this.m_Mouse, this.m_Camera), this.m_Raycaster.ray;
|
|
2227
2227
|
}
|
|
2228
2228
|
}
|
|
2229
|
-
class
|
|
2229
|
+
class _e {
|
|
2230
2230
|
}
|
|
2231
|
-
class
|
|
2231
|
+
class fe {
|
|
2232
2232
|
constructor(t, e) {
|
|
2233
2233
|
this.bindingType = "", this.m_Book = t, this.m_Root = e;
|
|
2234
2234
|
}
|
|
@@ -2236,36 +2236,36 @@ class le {
|
|
|
2236
2236
|
dispose() {
|
|
2237
2237
|
}
|
|
2238
2238
|
}
|
|
2239
|
-
function
|
|
2239
|
+
function zt(a, t, e, s) {
|
|
2240
2240
|
const i = 1 - s;
|
|
2241
|
-
return new
|
|
2242
|
-
i * i *
|
|
2243
|
-
i * i *
|
|
2244
|
-
i * i *
|
|
2241
|
+
return new l.Vector3(
|
|
2242
|
+
i * i * a.x + 2 * i * s * t.x + s * s * e.x,
|
|
2243
|
+
i * i * a.y + 2 * i * s * t.y + s * s * e.y,
|
|
2244
|
+
i * i * a.z + 2 * i * s * t.z + s * s * e.z
|
|
2245
2245
|
);
|
|
2246
2246
|
}
|
|
2247
|
-
function
|
|
2248
|
-
return
|
|
2247
|
+
function te(a, t) {
|
|
2248
|
+
return a++, a === t ? 0 : a;
|
|
2249
2249
|
}
|
|
2250
|
-
function
|
|
2251
|
-
return
|
|
2250
|
+
function Fe(a, t) {
|
|
2251
|
+
return a === 0 ? t - 1 : a - 1;
|
|
2252
2252
|
}
|
|
2253
|
-
const
|
|
2254
|
-
function
|
|
2255
|
-
const e =
|
|
2256
|
-
if (e.lengthSq() === 0) return new
|
|
2257
|
-
let s = new
|
|
2253
|
+
const Oe = 0.01, Ze = 0.1, Xe = 0.04, Le = 0.4, Ne = 2, Ue = 10, Ee = 0, We = 5;
|
|
2254
|
+
function Ge(a, t) {
|
|
2255
|
+
const e = a.clone().normalize();
|
|
2256
|
+
if (e.lengthSq() === 0) return new l.Quaternion();
|
|
2257
|
+
let s = new l.Vector3().crossVectors(t, e);
|
|
2258
2258
|
if (s.lengthSq() === 0) {
|
|
2259
|
-
const r = Math.abs(e.y) < 0.999 ? new
|
|
2260
|
-
s = new
|
|
2259
|
+
const r = Math.abs(e.y) < 0.999 ? new l.Vector3(0, 1, 0) : new l.Vector3(1, 0, 0);
|
|
2260
|
+
s = new l.Vector3().crossVectors(r, e);
|
|
2261
2261
|
}
|
|
2262
2262
|
s.normalize();
|
|
2263
|
-
const i = new
|
|
2264
|
-
return new
|
|
2263
|
+
const i = new l.Vector3().crossVectors(e, s).normalize(), n = new l.Matrix4().makeBasis(s, i, e);
|
|
2264
|
+
return new l.Quaternion().setFromRotationMatrix(n);
|
|
2265
2265
|
}
|
|
2266
|
-
class
|
|
2266
|
+
class qe {
|
|
2267
2267
|
constructor() {
|
|
2268
|
-
this._material = null, this._color = new
|
|
2268
|
+
this._material = null, this._color = new l.Color(1, 1, 1), this._thickness = 0.05, this._crown = 0.2, this._margin = 0.1, this._count = 4, this._quality = 3;
|
|
2269
2269
|
}
|
|
2270
2270
|
get material() {
|
|
2271
2271
|
return this._material;
|
|
@@ -2283,240 +2283,240 @@ class Ze {
|
|
|
2283
2283
|
return this._thickness;
|
|
2284
2284
|
}
|
|
2285
2285
|
set thickness(t) {
|
|
2286
|
-
this._thickness =
|
|
2286
|
+
this._thickness = q(t, Oe, Ze);
|
|
2287
2287
|
}
|
|
2288
2288
|
get margin() {
|
|
2289
2289
|
return this._margin;
|
|
2290
2290
|
}
|
|
2291
2291
|
set margin(t) {
|
|
2292
|
-
this._margin =
|
|
2292
|
+
this._margin = ot(t);
|
|
2293
2293
|
}
|
|
2294
2294
|
get crown() {
|
|
2295
2295
|
return this._crown;
|
|
2296
2296
|
}
|
|
2297
2297
|
set crown(t) {
|
|
2298
|
-
this._crown =
|
|
2298
|
+
this._crown = q(t, Xe, Le);
|
|
2299
2299
|
}
|
|
2300
2300
|
get count() {
|
|
2301
2301
|
return this._count;
|
|
2302
2302
|
}
|
|
2303
2303
|
set count(t) {
|
|
2304
|
-
this._count =
|
|
2304
|
+
this._count = q(t, Ne, Ue);
|
|
2305
2305
|
}
|
|
2306
2306
|
get quality() {
|
|
2307
2307
|
return this._quality;
|
|
2308
2308
|
}
|
|
2309
2309
|
set quality(t) {
|
|
2310
|
-
this._quality =
|
|
2310
|
+
this._quality = q(t, Ee, We);
|
|
2311
2311
|
}
|
|
2312
2312
|
}
|
|
2313
|
-
class
|
|
2313
|
+
class je extends fe {
|
|
2314
2314
|
// ── Constructor ────────────────────────────────────────────────────────
|
|
2315
2315
|
constructor(t, e, s, i, n) {
|
|
2316
2316
|
if (super(s, i), this.bindingType = "staple", this.m_StapleMargin = 0, this.m_StapleThickness = 0, this.m_BindingRadius = 0, this.m_BindingMidSpace = 0, this.m_StackHeight = 0, this.m_BindingVertexCount = 0, this.useSharedMeshDataForLowpoly = !1, this._binderRendererAdapter = null, this.m_Quality = t, s.totalThickness * 1.25 > s.minPaperWidth)
|
|
2317
|
-
throw new
|
|
2318
|
-
const r = this.m_Book.coverPaperSetup, o = this.m_Book.pagePaperSetup,
|
|
2319
|
-
this.updateStapleMesh(e,
|
|
2320
|
-
const
|
|
2317
|
+
throw new ue();
|
|
2318
|
+
const r = this.m_Book.coverPaperSetup, o = this.m_Book.pagePaperSetup, h = new l.BufferGeometry();
|
|
2319
|
+
this.updateStapleMesh(e, h);
|
|
2320
|
+
const u = n ?? new l.MeshStandardMaterial({
|
|
2321
2321
|
color: e.color,
|
|
2322
2322
|
metalness: 0.9,
|
|
2323
2323
|
roughness: 0.3
|
|
2324
2324
|
});
|
|
2325
|
-
this.stapleMesh = new
|
|
2325
|
+
this.stapleMesh = new l.Mesh(h, u), this.stapleMesh.name = "Staple", this.stapleMesh.castShadow = this.m_Book.castShadows, i.add(this.stapleMesh), this.stapleMesh.position.set(
|
|
2326
2326
|
0,
|
|
2327
2327
|
0,
|
|
2328
2328
|
this.m_StapleMargin + o.margin + r.margin
|
|
2329
2329
|
);
|
|
2330
|
-
let
|
|
2331
|
-
|
|
2330
|
+
let c = r.thickness;
|
|
2331
|
+
c = Math.max(this.m_BindingRadius, c);
|
|
2332
2332
|
for (const d of this.m_Book.papers) {
|
|
2333
|
-
const
|
|
2334
|
-
|
|
2333
|
+
const f = d.size.clone();
|
|
2334
|
+
f.x -= this.m_BindingRadius, d.sizeXOffset = this.m_BindingRadius, d.size = f, d.setMinTurningRadius(c), d.updateTurningRadius(), this.updatePaperPosition(d);
|
|
2335
2335
|
}
|
|
2336
2336
|
this.updateRootPosition();
|
|
2337
2337
|
}
|
|
2338
2338
|
get binderRenderer() {
|
|
2339
|
-
return this._binderRendererAdapter || (this._binderRendererAdapter = new
|
|
2339
|
+
return this._binderRendererAdapter || (this._binderRendererAdapter = new Ye(this.stapleMesh)), this._binderRendererAdapter;
|
|
2340
2340
|
}
|
|
2341
2341
|
// ── updateStapleMesh ──────────────────────────────────────────────────
|
|
2342
2342
|
updateStapleMesh(t, e) {
|
|
2343
|
-
this.m_StapleThickness = t.thickness, this.m_StackHeight = this.m_Book.totalThickness, this.m_BindingMidSpace = this.m_StapleThickness * 1.75, this.m_BindingRadius = (this.m_StackHeight + this.m_BindingMidSpace) / 2 / Math.sin(45 *
|
|
2343
|
+
this.m_StapleThickness = t.thickness, this.m_StackHeight = this.m_Book.totalThickness, this.m_BindingMidSpace = this.m_StapleThickness * 1.75, this.m_BindingRadius = (this.m_StackHeight + this.m_BindingMidSpace) / 2 / Math.sin(45 * nt), this.m_StackHeight += this.m_BindingMidSpace;
|
|
2344
2344
|
let s = t.crown;
|
|
2345
2345
|
s = Math.max(s, this.m_StapleThickness * 4);
|
|
2346
2346
|
const i = this.m_StapleThickness * 0.5, n = Math.max(
|
|
2347
2347
|
this.m_Book.minPaperHeight / 2 - s - i,
|
|
2348
2348
|
i
|
|
2349
2349
|
);
|
|
2350
|
-
this.m_StapleMargin =
|
|
2350
|
+
this.m_StapleMargin = G(i, n, t.margin);
|
|
2351
2351
|
const r = this.m_Book.minPaperHeight - this.m_StapleMargin * 2;
|
|
2352
|
-
let o = t.count,
|
|
2353
|
-
for (
|
|
2354
|
-
o--,
|
|
2355
|
-
const
|
|
2356
|
-
let M = s / 2 *
|
|
2357
|
-
M = Math.max(M,
|
|
2358
|
-
let
|
|
2359
|
-
|
|
2360
|
-
const C = -(this.m_Book.papers[0].thickness / 2 +
|
|
2352
|
+
let o = t.count, h = (r - s * o) / (o - 1);
|
|
2353
|
+
for (h = Math.max(h, 0); h < this.m_StapleThickness * 2 && o > 2; )
|
|
2354
|
+
o--, h = (r - s * o) / (o - 1), h = Math.max(h, 0);
|
|
2355
|
+
const u = t.quality / 5, c = Math.floor(G(4, 20, u)), d = Math.floor(G(4, 10, u)), f = Math.floor(G(3, 10, u)), g = this.m_StapleThickness / 2, m = g * 2.5, _ = 0.9, p = g * 1;
|
|
2356
|
+
let M = s / 2 * _;
|
|
2357
|
+
M = Math.max(M, p * 2);
|
|
2358
|
+
let w = 0;
|
|
2359
|
+
w += this.m_Book.totalThickness / 2, w += g;
|
|
2360
|
+
const C = -(this.m_Book.papers[0].thickness / 2 + g), P = [];
|
|
2361
2361
|
{
|
|
2362
|
-
for (let
|
|
2363
|
-
const
|
|
2364
|
-
|
|
2362
|
+
for (let S = 0; S < d; S++) {
|
|
2363
|
+
const R = S / (d - 1), W = G(-90, -180, R) * nt, y = new l.Vector3(
|
|
2364
|
+
p * Math.sin(W),
|
|
2365
2365
|
0,
|
|
2366
|
-
|
|
2366
|
+
p * Math.cos(W)
|
|
2367
2367
|
);
|
|
2368
|
-
|
|
2368
|
+
y.x += p, y.z += p, y.x += C, P.push(y);
|
|
2369
2369
|
}
|
|
2370
|
-
const
|
|
2371
|
-
for (let
|
|
2372
|
-
const
|
|
2373
|
-
|
|
2370
|
+
const x = new l.Vector3(w, 0, 0), j = new l.Vector3(w + m * 0.75, 0, 0), V = new l.Vector3(w - g * 0.5, 0, M);
|
|
2371
|
+
for (let S = 0; S < f; S++) {
|
|
2372
|
+
const R = S / (f - 1), O = zt(x, j, V, R);
|
|
2373
|
+
O.x += C, P.push(O);
|
|
2374
2374
|
}
|
|
2375
|
-
|
|
2375
|
+
P.reverse();
|
|
2376
2376
|
}
|
|
2377
|
-
const b = new Array(
|
|
2378
|
-
for (let
|
|
2379
|
-
const
|
|
2380
|
-
b[
|
|
2377
|
+
const b = new Array(c);
|
|
2378
|
+
for (let x = 0; x < c; x++) {
|
|
2379
|
+
const V = (90 - x * (360 / c)) * nt;
|
|
2380
|
+
b[x] = new l.Vector3(Math.cos(V), Math.sin(V), 0), b[x].x *= 0.75;
|
|
2381
2381
|
}
|
|
2382
|
-
const
|
|
2383
|
-
(
|
|
2382
|
+
const A = P.length, Z = A * c, D = new Array(Z * 2), U = new Array(Z * 2), E = new Array(
|
|
2383
|
+
(Z * 2 - 1) * c * 2 * 3
|
|
2384
2384
|
);
|
|
2385
|
-
for (let
|
|
2386
|
-
|
|
2387
|
-
let
|
|
2388
|
-
for (let
|
|
2389
|
-
const
|
|
2390
|
-
let
|
|
2391
|
-
if (
|
|
2392
|
-
|
|
2393
|
-
else if (
|
|
2394
|
-
|
|
2385
|
+
for (let x = 0; x < Z * 2; x++)
|
|
2386
|
+
D[x] = new l.Vector3(), U[x] = new l.Vector3();
|
|
2387
|
+
let N = 0;
|
|
2388
|
+
for (let x = 0; x < A; x++) {
|
|
2389
|
+
const j = P[Fe(x, A)], V = P[x], S = P[te(x, A)];
|
|
2390
|
+
let R;
|
|
2391
|
+
if (x === 0)
|
|
2392
|
+
R = new l.Vector3(1, 0, -2).normalize();
|
|
2393
|
+
else if (x === A - 1)
|
|
2394
|
+
R = new l.Vector3(0, 0, 1);
|
|
2395
2395
|
else {
|
|
2396
|
-
const
|
|
2397
|
-
|
|
2396
|
+
const T = V.clone().sub(j).normalize(), I = S.clone().sub(V).normalize();
|
|
2397
|
+
R = T.add(I).multiplyScalar(0.5);
|
|
2398
2398
|
}
|
|
2399
|
-
const
|
|
2400
|
-
let
|
|
2401
|
-
|
|
2402
|
-
for (let
|
|
2403
|
-
const
|
|
2404
|
-
N
|
|
2405
|
-
const
|
|
2406
|
-
|
|
2407
|
-
const
|
|
2408
|
-
|
|
2399
|
+
const O = new l.Vector3(0, 1, 0), W = Ge(R, O), y = N;
|
|
2400
|
+
let L = at(0, f / 4, x);
|
|
2401
|
+
L = G(0.1, 1, L), L = Math.sqrt(L);
|
|
2402
|
+
for (let T = 0; T < c; T++) {
|
|
2403
|
+
const I = b[T].clone().applyQuaternion(W).multiplyScalar(L), tt = V.clone().add(I.clone().multiplyScalar(g));
|
|
2404
|
+
D[N] = tt, U[N] = I.clone();
|
|
2405
|
+
const K = V.clone().add(I.clone().multiplyScalar(g));
|
|
2406
|
+
K.z = s - K.z;
|
|
2407
|
+
const rt = y + c - T - 1, v = Z * 2 - rt - 1;
|
|
2408
|
+
D[v] = K, U[v] = I.clone(), N++;
|
|
2409
2409
|
}
|
|
2410
2410
|
}
|
|
2411
|
-
let
|
|
2412
|
-
const
|
|
2413
|
-
for (let
|
|
2414
|
-
const
|
|
2415
|
-
for (let
|
|
2416
|
-
const
|
|
2417
|
-
|
|
2411
|
+
let F = 0;
|
|
2412
|
+
const k = P.length * 2;
|
|
2413
|
+
for (let x = 0; x < k - 1; x++) {
|
|
2414
|
+
const j = x * c, V = (x + 1) * c;
|
|
2415
|
+
for (let S = 0; S < c; S++) {
|
|
2416
|
+
const R = te(S, c), O = j + S, W = j + R, y = V + R, L = V + S;
|
|
2417
|
+
E[F++] = O, E[F++] = L, E[F++] = W, E[F++] = W, E[F++] = L, E[F++] = y;
|
|
2418
2418
|
}
|
|
2419
2419
|
}
|
|
2420
|
-
const
|
|
2421
|
-
for (let
|
|
2422
|
-
const
|
|
2423
|
-
for (let
|
|
2424
|
-
|
|
2425
|
-
for (let
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
}
|
|
2429
|
-
const
|
|
2430
|
-
for (let
|
|
2431
|
-
|
|
2420
|
+
const B = [...D], Y = [...U], X = [...E], J = D.map((x) => x.clone()), $ = [...E];
|
|
2421
|
+
for (let x = 0; x < o - 1; x++) {
|
|
2422
|
+
const j = J.length;
|
|
2423
|
+
for (let V = 0; V < $.length; V++)
|
|
2424
|
+
$[V] += j;
|
|
2425
|
+
for (let V = 0; V < J.length; V++)
|
|
2426
|
+
J[V].z += h + s;
|
|
2427
|
+
B.push(...J.map((V) => V.clone())), Y.push(...U.map((V) => V.clone())), X.push(...$);
|
|
2428
|
+
}
|
|
2429
|
+
const H = new Float32Array(B.length * 3), z = new Float32Array(Y.length * 3);
|
|
2430
|
+
for (let x = 0; x < B.length; x++)
|
|
2431
|
+
H[x * 3] = B[x].x, H[x * 3 + 1] = B[x].y, H[x * 3 + 2] = B[x].z, z[x * 3] = Y[x].x, z[x * 3 + 1] = Y[x].y, z[x * 3 + 2] = Y[x].z;
|
|
2432
2432
|
e.setAttribute(
|
|
2433
2433
|
"position",
|
|
2434
|
-
new
|
|
2434
|
+
new l.BufferAttribute(H, 3)
|
|
2435
2435
|
), e.setAttribute(
|
|
2436
2436
|
"normal",
|
|
2437
|
-
new
|
|
2438
|
-
), e.setIndex(
|
|
2437
|
+
new l.BufferAttribute(z, 3)
|
|
2438
|
+
), e.setIndex(X);
|
|
2439
2439
|
}
|
|
2440
2440
|
// ── createPaperPattern ────────────────────────────────────────────────
|
|
2441
2441
|
createPaperPattern(t, e, s, i, n, r) {
|
|
2442
|
-
const o = new
|
|
2442
|
+
const o = new me();
|
|
2443
2443
|
o.size = e, o.thickness = s;
|
|
2444
|
-
const
|
|
2445
|
-
o.baseXOffset = -
|
|
2446
|
-
const
|
|
2447
|
-
this.m_BindingVertexCount =
|
|
2448
|
-
const
|
|
2449
|
-
|
|
2450
|
-
),
|
|
2451
|
-
let m = 2 +
|
|
2452
|
-
const
|
|
2453
|
-
let M =
|
|
2454
|
-
const
|
|
2444
|
+
const h = this.m_BindingRadius;
|
|
2445
|
+
o.baseXOffset = -h;
|
|
2446
|
+
const u = this.m_Quality + 1;
|
|
2447
|
+
this.m_BindingVertexCount = u;
|
|
2448
|
+
const c = t / 5, d = Math.min(e.x, e.y) / 60, f = Math.floor(
|
|
2449
|
+
G(0, (e.x - h) / d, c)
|
|
2450
|
+
), g = Math.floor(G(0, e.y / d, c));
|
|
2451
|
+
let m = 2 + f + 1 + u, _ = 2 + g;
|
|
2452
|
+
const p = new dt(0);
|
|
2453
|
+
let M = p;
|
|
2454
|
+
const w = h / u;
|
|
2455
2455
|
let C = 0;
|
|
2456
|
-
for (let
|
|
2456
|
+
for (let y = 1; y < u + 1; y++)
|
|
2457
|
+
M = M.createNext(C), C += w;
|
|
2458
|
+
const P = (e.x - h) / (f + 1);
|
|
2459
|
+
for (let y = u + 1; y < m; y++)
|
|
2457
2460
|
M = M.createNext(C), C += P;
|
|
2458
|
-
const
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
let
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
for (let v = 0; v < f - 1; v++)
|
|
2466
|
-
N += A, D = D.createNext(N);
|
|
2467
|
-
const F = [], H = [], k = i.clone();
|
|
2461
|
+
const b = new dt(0);
|
|
2462
|
+
let A = b;
|
|
2463
|
+
const Z = e.y / (_ - 1);
|
|
2464
|
+
let D = 0;
|
|
2465
|
+
for (let y = 0; y < _ - 1; y++)
|
|
2466
|
+
D += Z, A = A.createNext(D);
|
|
2467
|
+
const U = [], E = [], N = i.clone();
|
|
2468
2468
|
if (n) {
|
|
2469
|
-
let
|
|
2470
|
-
this.m_Book.hasCover && (
|
|
2471
|
-
const
|
|
2472
|
-
|
|
2473
|
-
}
|
|
2474
|
-
const
|
|
2475
|
-
|
|
2476
|
-
const
|
|
2477
|
-
o.xNoneSeamIndexes =
|
|
2478
|
-
for (let
|
|
2479
|
-
|
|
2469
|
+
let y = 0;
|
|
2470
|
+
this.m_Book.hasCover && (y = Math.floor(this.m_Book.coverPaperCount / 2));
|
|
2471
|
+
const L = Math.max(0.01, s);
|
|
2472
|
+
N.left = 0, N.right = (this.getPX(y + 1, s) - this.getPX(y, s) + L) / e.x, N.down = L / e.y, N.up = L / e.y;
|
|
2473
|
+
}
|
|
2474
|
+
const F = new he(o, N, !1);
|
|
2475
|
+
F.insert(p, b, U, E), p.updateIndex(0), b.updateIndex(0), xt(U, o.xSeams), xt(E, o.zSeams);
|
|
2476
|
+
const k = this.m_BindingVertexCount + 2, B = new Array(k);
|
|
2477
|
+
o.xNoneSeamIndexes = B, M = p;
|
|
2478
|
+
for (let y = 0; y < k; y++) {
|
|
2479
|
+
B[y] = M.index;
|
|
2480
2480
|
do
|
|
2481
2481
|
M = M.next;
|
|
2482
2482
|
while (M.seam);
|
|
2483
2483
|
}
|
|
2484
|
-
const
|
|
2485
|
-
m =
|
|
2486
|
-
const
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2484
|
+
const Y = p.getValues(), X = b.getValues();
|
|
2485
|
+
m = Y.length, _ = X.length;
|
|
2486
|
+
const J = m * _, $ = [], H = new Array(J).fill(0), z = [], x = [], j = [], V = [];
|
|
2487
|
+
Ft(
|
|
2488
|
+
$,
|
|
2489
|
+
Y,
|
|
2490
|
+
X,
|
|
2491
2491
|
e,
|
|
2492
2492
|
i,
|
|
2493
2493
|
this.m_Book.direction
|
|
2494
2494
|
);
|
|
2495
|
-
const
|
|
2496
|
-
let
|
|
2497
|
-
|
|
2498
|
-
for (let
|
|
2499
|
-
for (let
|
|
2500
|
-
if (n &&
|
|
2495
|
+
const S = F.leftNode.index, R = F.downNode.index;
|
|
2496
|
+
let O = F.rightNode.index, W = F.upNode.index;
|
|
2497
|
+
O === 0 && (O = m - 1), W === 0 && (W = _ - 1);
|
|
2498
|
+
for (let y = 0; y < _ - 1; y++)
|
|
2499
|
+
for (let L = 0; L < m - 1; L++) {
|
|
2500
|
+
if (n && y >= R && y < W && L >= S && L < O)
|
|
2501
2501
|
continue;
|
|
2502
|
-
const
|
|
2503
|
-
|
|
2502
|
+
const T = y * m + L, I = y * m + (L + 1), tt = (y + 1) * m + L, K = (y + 1) * m + (L + 1);
|
|
2503
|
+
H[T] += 2, H[I] += 2, H[tt] += 2, H[K] += 2, Ht(
|
|
2504
|
+
z,
|
|
2505
|
+
x,
|
|
2506
|
+
T,
|
|
2504
2507
|
I,
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
ut,
|
|
2509
|
-
ht,
|
|
2510
|
-
U
|
|
2508
|
+
tt,
|
|
2509
|
+
K,
|
|
2510
|
+
J
|
|
2511
2511
|
);
|
|
2512
2512
|
}
|
|
2513
|
-
if (
|
|
2513
|
+
if (V.push(new St(0, 0, m - 1, _ - 1, !1, !1)), At(V, j, $, m, _), o.baseXArray = Y, o.baseZArray = X, o.baseVertexCount = J, o.vertexCount = $.length, o.texcoords = $, o.weights = H, r) {
|
|
2514
2514
|
o.subMeshCount = 1;
|
|
2515
|
-
const
|
|
2516
|
-
|
|
2515
|
+
const y = [];
|
|
2516
|
+
y.push(...z), y.push(...j), y.push(...x), o.triangles = y;
|
|
2517
2517
|
} else
|
|
2518
|
-
o.subMeshCount = 3, o.frontTriangles =
|
|
2519
|
-
return o.borders =
|
|
2518
|
+
o.subMeshCount = 3, o.frontTriangles = z, o.backTriangles = x, o.borderTriangles = j;
|
|
2519
|
+
return o.borders = V, o;
|
|
2520
2520
|
}
|
|
2521
2521
|
// ── updateRootPosition ────────────────────────────────────────────────
|
|
2522
2522
|
updateRootPosition() {
|
|
@@ -2530,45 +2530,45 @@ class Le extends le {
|
|
|
2530
2530
|
let i = 0;
|
|
2531
2531
|
const n = e.length / 2 - 1, r = e.length / 2;
|
|
2532
2532
|
for (let C = 0; C < s; C++) {
|
|
2533
|
-
const
|
|
2534
|
-
|
|
2535
|
-
const b =
|
|
2536
|
-
i += b *
|
|
2533
|
+
const P = e[C];
|
|
2534
|
+
P.updateTime();
|
|
2535
|
+
const b = P.zTime, A = P.thickness;
|
|
2536
|
+
i += b * A, C === n && (i += b * this.m_BindingMidSpace / 2), C === r && (i += b * this.m_BindingMidSpace / 2);
|
|
2537
2537
|
}
|
|
2538
2538
|
let o = this.getStackHeight(t.index) - t.thickness / 2;
|
|
2539
|
-
const
|
|
2540
|
-
let
|
|
2541
|
-
const
|
|
2542
|
-
Math.cos(
|
|
2543
|
-
Math.sin(
|
|
2539
|
+
const h = this.getStackZ(o), u = 180 + h;
|
|
2540
|
+
let c = t.isFlipped ? 1 : 0, d = G(h, u, c);
|
|
2541
|
+
const f = d * nt, g = new l.Vector3(
|
|
2542
|
+
Math.cos(f) * this.m_BindingRadius,
|
|
2543
|
+
Math.sin(f) * this.m_BindingRadius,
|
|
2544
2544
|
0
|
|
2545
2545
|
);
|
|
2546
|
-
|
|
2547
|
-
let m = e[Math.floor(s / 2)].size.x,
|
|
2546
|
+
g.z = t.margin;
|
|
2547
|
+
let m = e[Math.floor(s / 2)].size.x, _ = this.m_BindingMidSpace, p = Math.sqrt(m * m - _ * _), M = Math.asin(p / m) * lt - 90;
|
|
2548
2548
|
if (t.index < Math.floor(s / 2)) {
|
|
2549
2549
|
let C = 0;
|
|
2550
2550
|
if (this.m_Book.alignToGround) {
|
|
2551
2551
|
m = e[0].size.x;
|
|
2552
|
-
const
|
|
2553
|
-
|
|
2552
|
+
const P = this.m_StackHeight / 2;
|
|
2553
|
+
_ = q(i, 0, P) - P, p = Math.sqrt(m * m - _ * _), C = (Math.asin(p / m) * lt - 90) * 2;
|
|
2554
2554
|
}
|
|
2555
|
-
d =
|
|
2555
|
+
d = G(M, -C, c);
|
|
2556
2556
|
} else {
|
|
2557
2557
|
let C = 0;
|
|
2558
2558
|
if (this.m_Book.alignToGround) {
|
|
2559
2559
|
m = e[0].size.x;
|
|
2560
|
-
const
|
|
2561
|
-
|
|
2560
|
+
const P = this.m_StackHeight / 2;
|
|
2561
|
+
_ = P - q(i, P, P * 2), p = Math.sqrt(m * m - _ * _), C = (Math.asin(p / m) * lt - 90) * 2;
|
|
2562
2562
|
}
|
|
2563
|
-
d =
|
|
2563
|
+
d = G(C, -M, c);
|
|
2564
2564
|
}
|
|
2565
|
-
t.transform.position.copy(
|
|
2566
|
-
new
|
|
2565
|
+
t.transform.position.copy(g), t.transform.quaternion.setFromEuler(
|
|
2566
|
+
new l.Euler(0, 0, d * nt)
|
|
2567
2567
|
);
|
|
2568
2568
|
}
|
|
2569
2569
|
// ── getPX (private helper) ───────────────────────────────────────────
|
|
2570
2570
|
getPX(t, e) {
|
|
2571
|
-
const s = this.getStackHeight(t) - e / 2, n = this.getStackZ(s) *
|
|
2571
|
+
const s = this.getStackHeight(t) - e / 2, n = this.getStackZ(s) * nt;
|
|
2572
2572
|
return Math.cos(n) * this.m_BindingRadius;
|
|
2573
2573
|
}
|
|
2574
2574
|
// ── updatePaperPosition ───────────────────────────────────────────────
|
|
@@ -2577,33 +2577,33 @@ class Le extends le {
|
|
|
2577
2577
|
}
|
|
2578
2578
|
updatePaperPositionWithTh(t, e) {
|
|
2579
2579
|
const s = this.m_Book.papers, i = s.length, n = this.getStackHeight(t.index) - t.thickness / 2, r = this.getStackZ(n + e), o = 180 + this.getStackZ(n + e - this.m_StackHeight);
|
|
2580
|
-
let
|
|
2581
|
-
const
|
|
2582
|
-
Math.cos(
|
|
2583
|
-
Math.sin(
|
|
2580
|
+
let h = t.zTime, u = G(r, o, h);
|
|
2581
|
+
const c = u * nt, d = new l.Vector3(
|
|
2582
|
+
Math.cos(c) * this.m_BindingRadius,
|
|
2583
|
+
Math.sin(c) * this.m_BindingRadius,
|
|
2584
2584
|
0
|
|
2585
2585
|
);
|
|
2586
2586
|
d.z = t.margin;
|
|
2587
|
-
let
|
|
2587
|
+
let f = s[Math.floor(i / 2)].size.x, g = this.m_BindingMidSpace, m = Math.sqrt(f * f - g * g), _ = Math.asin(m / f) * lt - 90;
|
|
2588
2588
|
if (t.index < Math.floor(i / 2)) {
|
|
2589
2589
|
let M = 0;
|
|
2590
2590
|
if (this.m_Book.alignToGround) {
|
|
2591
|
-
|
|
2592
|
-
const
|
|
2593
|
-
|
|
2591
|
+
f = s[0].size.x;
|
|
2592
|
+
const w = this.m_StackHeight / 2;
|
|
2593
|
+
g = q(e, 0, w) - w, m = Math.sqrt(f * f - g * g), M = (Math.asin(m / f) * lt - 90) * 2;
|
|
2594
2594
|
}
|
|
2595
|
-
|
|
2595
|
+
u = G(_, -M, h);
|
|
2596
2596
|
} else {
|
|
2597
2597
|
let M = 0;
|
|
2598
2598
|
if (this.m_Book.alignToGround) {
|
|
2599
|
-
|
|
2600
|
-
const
|
|
2601
|
-
|
|
2599
|
+
f = s[0].size.x;
|
|
2600
|
+
const w = this.m_StackHeight / 2;
|
|
2601
|
+
g = w - q(e, w, w * 2), m = Math.sqrt(f * f - g * g), M = (Math.asin(m / f) * lt - 90) * 2;
|
|
2602
2602
|
}
|
|
2603
|
-
|
|
2603
|
+
u = G(M, -_, h);
|
|
2604
2604
|
}
|
|
2605
2605
|
t.transform.position.copy(d), t.transform.quaternion.setFromEuler(
|
|
2606
|
-
new
|
|
2606
|
+
new l.Euler(0, 0, u * nt)
|
|
2607
2607
|
);
|
|
2608
2608
|
}
|
|
2609
2609
|
// ── getStackHeight ────────────────────────────────────────────────────
|
|
@@ -2617,9 +2617,9 @@ class Le extends le {
|
|
|
2617
2617
|
}
|
|
2618
2618
|
// ── getStackZ ─────────────────────────────────────────────────────────
|
|
2619
2619
|
getStackZ(t) {
|
|
2620
|
-
t =
|
|
2620
|
+
t = q(t, 0, this.m_StackHeight);
|
|
2621
2621
|
const e = t - this.m_StackHeight * 0.5;
|
|
2622
|
-
return Math.asin(e / this.m_BindingRadius) *
|
|
2622
|
+
return Math.asin(e / this.m_BindingRadius) * lt;
|
|
2623
2623
|
}
|
|
2624
2624
|
// ── onLateUpdate ──────────────────────────────────────────────────────
|
|
2625
2625
|
/** Precompute cumulative th once instead of per-paper (O(n) instead of O(n²)). */
|
|
@@ -2646,42 +2646,42 @@ class Le extends le {
|
|
|
2646
2646
|
// ── updateBindingVertices ─────────────────────────────────────────────
|
|
2647
2647
|
updateBindingVertices() {
|
|
2648
2648
|
const t = this.m_Book.papers;
|
|
2649
|
-
let e = new
|
|
2650
|
-
const n = this.m_StapleThickness * 0.5, r = t[0].thickness, o = this.m_Root.matrixWorld.clone(),
|
|
2651
|
-
for (let
|
|
2652
|
-
const
|
|
2653
|
-
let
|
|
2654
|
-
|
|
2655
|
-
const
|
|
2656
|
-
i = this.m_BindingRadius *
|
|
2657
|
-
for (let
|
|
2658
|
-
const
|
|
2659
|
-
|
|
2660
|
-
const
|
|
2661
|
-
if (
|
|
2662
|
-
const
|
|
2663
|
-
|
|
2664
|
-
const
|
|
2665
|
-
s =
|
|
2649
|
+
let e = new l.Vector3(0, 0, 0), s = new l.Vector3(0, 0, 0), i = this.m_BindingRadius * 0.6;
|
|
2650
|
+
const n = this.m_StapleThickness * 0.5, r = t[0].thickness, o = this.m_Root.matrixWorld.clone(), h = t.length;
|
|
2651
|
+
for (let u = 0; u < h; u++) {
|
|
2652
|
+
const c = t[u], d = c.transform, f = c.meshData.pattern, g = c.meshData.baseVertices, m = f.baseXArray, _ = f.baseZArray, p = m.length, M = _.length, w = this.m_BindingVertexCount + 1, C = c.thickness, P = f.xNoneSeamIndexes, b = d.position.clone();
|
|
2653
|
+
let A = u, Z = n;
|
|
2654
|
+
u >= Math.floor(h / 2) && (A = h - u - 1, Z *= -1);
|
|
2655
|
+
const D = (r + C) * 0.5 + C * (A - 1), U = d.matrixWorld.clone().invert().multiply(o), E = A / (h / 2);
|
|
2656
|
+
i = this.m_BindingRadius * G(0.45, 0.65, 1 - E);
|
|
2657
|
+
for (let N = 0; N < M; N++) {
|
|
2658
|
+
const F = _[N], k = new l.Vector3(0, 0, b.z + F), B = b.clone();
|
|
2659
|
+
B.z += F;
|
|
2660
|
+
const Y = c.getDirection(F).multiplyScalar(i).add(B.clone());
|
|
2661
|
+
if (u === 0 && N === 0) {
|
|
2662
|
+
const z = t[h - 1], j = z.transform.position.clone().clone();
|
|
2663
|
+
j.z += F;
|
|
2664
|
+
const V = z.getDirection(F).multiplyScalar(i).add(j);
|
|
2665
|
+
s = Y.clone().sub(V).normalize(), e = new l.Vector3(
|
|
2666
2666
|
-s.y,
|
|
2667
2667
|
s.x,
|
|
2668
2668
|
0
|
|
2669
2669
|
).normalize().negate();
|
|
2670
|
-
const
|
|
2671
|
-
this.stapleMesh.rotation.set(0, 0,
|
|
2670
|
+
const S = Math.atan2(e.y, e.x) * lt;
|
|
2671
|
+
this.stapleMesh.rotation.set(0, 0, S * nt);
|
|
2672
2672
|
}
|
|
2673
|
-
|
|
2674
|
-
const
|
|
2675
|
-
|
|
2676
|
-
const
|
|
2677
|
-
|
|
2678
|
-
for (let
|
|
2679
|
-
const
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2673
|
+
A > 0 && k.add(e.clone().multiplyScalar(D));
|
|
2674
|
+
const X = N * p;
|
|
2675
|
+
g[X] = k.clone().applyMatrix4(U), k.add(s.clone().multiplyScalar(Z));
|
|
2676
|
+
const J = k.clone().applyMatrix4(U), $ = Y.clone().applyMatrix4(U), H = B.clone().applyMatrix4(U);
|
|
2677
|
+
g[X + P[1]] = J;
|
|
2678
|
+
for (let z = 2; z < w; z++) {
|
|
2679
|
+
const x = at(1, w, z);
|
|
2680
|
+
g[X + P[z]] = zt(
|
|
2681
|
+
J,
|
|
2682
|
+
$,
|
|
2683
|
+
H,
|
|
2684
|
+
x
|
|
2685
2685
|
);
|
|
2686
2686
|
}
|
|
2687
2687
|
}
|
|
@@ -2711,10 +2711,10 @@ class Le extends le {
|
|
|
2711
2711
|
}
|
|
2712
2712
|
/** Releases GPU resources held by the staple mesh. */
|
|
2713
2713
|
dispose() {
|
|
2714
|
-
this.stapleMesh.geometry.dispose(), this.stapleMesh.material instanceof
|
|
2714
|
+
this.stapleMesh.geometry.dispose(), this.stapleMesh.material instanceof l.Material && this.stapleMesh.material.dispose(), this.stapleMesh.parent && this.stapleMesh.parent.remove(this.stapleMesh);
|
|
2715
2715
|
}
|
|
2716
2716
|
}
|
|
2717
|
-
class
|
|
2717
|
+
class Ye {
|
|
2718
2718
|
constructor(t) {
|
|
2719
2719
|
this.mesh = t;
|
|
2720
2720
|
}
|
|
@@ -2728,7 +2728,7 @@ class Xe {
|
|
|
2728
2728
|
this.mesh.castShadow = t;
|
|
2729
2729
|
}
|
|
2730
2730
|
get bounds() {
|
|
2731
|
-
const t = new
|
|
2731
|
+
const t = new l.Box3();
|
|
2732
2732
|
return this.mesh.geometry && (this.mesh.geometry.computeBoundingBox(), this.mesh.geometry.boundingBox && (t.copy(this.mesh.geometry.boundingBox), t.applyMatrix4(this.mesh.matrixWorld))), t;
|
|
2733
2733
|
}
|
|
2734
2734
|
get transform() {
|
|
@@ -2738,12 +2738,12 @@ class Xe {
|
|
|
2738
2738
|
return this.mesh;
|
|
2739
2739
|
}
|
|
2740
2740
|
}
|
|
2741
|
-
class
|
|
2741
|
+
class ds extends _e {
|
|
2742
2742
|
constructor() {
|
|
2743
|
-
super(...arguments), this.quality = 3, this.stapleSetup = new
|
|
2743
|
+
super(...arguments), this.quality = 3, this.stapleSetup = new qe();
|
|
2744
2744
|
}
|
|
2745
2745
|
createBound(t, e, s, i) {
|
|
2746
|
-
return new
|
|
2746
|
+
return new je(
|
|
2747
2747
|
this.quality,
|
|
2748
2748
|
this.stapleSetup,
|
|
2749
2749
|
t,
|
|
@@ -2751,24 +2751,24 @@ class rs extends ce {
|
|
|
2751
2751
|
);
|
|
2752
2752
|
}
|
|
2753
2753
|
}
|
|
2754
|
-
const
|
|
2755
|
-
class
|
|
2754
|
+
const Qe = 5e-3, $e = 0.2, Ke = 0.02, Je = 0.5, ts = 0, es = 5;
|
|
2755
|
+
class ss {
|
|
2756
2756
|
constructor() {
|
|
2757
|
-
this._hingeGap = 0.03, this._glueFlexWidth = 0.12, this._spineColor = new
|
|
2757
|
+
this._hingeGap = 0.03, this._glueFlexWidth = 0.12, this._spineColor = new l.Color(0.55, 0.15, 0.15), this._spineTexture = null, this._spineMaterial = null, this._quality = 3;
|
|
2758
2758
|
}
|
|
2759
2759
|
/** Cloth-joint groove between a board and the spine edge (world units). */
|
|
2760
2760
|
get hingeGap() {
|
|
2761
2761
|
return this._hingeGap;
|
|
2762
2762
|
}
|
|
2763
2763
|
set hingeGap(t) {
|
|
2764
|
-
this._hingeGap =
|
|
2764
|
+
this._hingeGap = q(t, Qe, $e);
|
|
2765
2765
|
}
|
|
2766
2766
|
/** Width of the page gutter flex zone — glued pages never open flat. */
|
|
2767
2767
|
get glueFlexWidth() {
|
|
2768
2768
|
return this._glueFlexWidth;
|
|
2769
2769
|
}
|
|
2770
2770
|
set glueFlexWidth(t) {
|
|
2771
|
-
this._glueFlexWidth =
|
|
2771
|
+
this._glueFlexWidth = q(t, Ke, Je);
|
|
2772
2772
|
}
|
|
2773
2773
|
get spineColor() {
|
|
2774
2774
|
return this._spineColor;
|
|
@@ -2799,50 +2799,50 @@ class je {
|
|
|
2799
2799
|
return this._quality;
|
|
2800
2800
|
}
|
|
2801
2801
|
set quality(t) {
|
|
2802
|
-
this._quality =
|
|
2802
|
+
this._quality = q(t, ts, es);
|
|
2803
2803
|
}
|
|
2804
2804
|
}
|
|
2805
|
-
const
|
|
2806
|
-
class
|
|
2805
|
+
const is = 30, ee = 6, se = 0, ie = 1, ne = 2, re = 3, yt = 4, pt = 5;
|
|
2806
|
+
class ns extends fe {
|
|
2807
2807
|
constructor(t, e, s, i) {
|
|
2808
|
-
if (super(s, i), this.bindingType = "glued", this.m_StackHeight = 0, this.m_RadiusY = 0, this.m_GlueY = [], this.m_BindingVertexCount = 0, this.useSharedMeshDataForLowpoly = !1, this._binderRendererAdapter = null, this.m_CaseSlabSegments = 8, this.m_CaseLoopCount = 0, this.m_CaseMinY = 0, this.m_CaseMaterials = [], this.m_ClothMaterial = null, this.m_OwnsClothMaterial = !1, this.m_CaseZones = [], this.m_Quality = t, this.m_Setup = e, s.totalThickness * 1.25 > s.minPaperWidth)
|
|
2809
|
-
throw new
|
|
2808
|
+
if (super(s, i), this.bindingType = "glued", this.m_StackHeight = 0, this.m_RadiusY = 0, this.m_GlueY = [], this.m_BindingVertexCount = 0, this.useSharedMeshDataForLowpoly = !1, this._binderRendererAdapter = null, this.m_CaseSlabSegments = 8, this.m_CaseLoopCount = 0, this.m_CaseRowCount = 0, this.m_CasePathCount = 0, this.m_CaseBoardColumnCount = 0, this.m_CaseMinY = 0, this.m_CaseMaterials = [], this.m_ClothMaterial = null, this.m_OwnsClothMaterial = !1, this.m_CaseZones = [], this.m_Quality = t, this.m_Setup = e, s.totalThickness * 1.25 > s.minPaperWidth)
|
|
2809
|
+
throw new ue();
|
|
2810
2810
|
const n = this.m_Book.coverPaperSetup;
|
|
2811
|
-
this.m_StackHeight = this.m_Book.totalThickness, this.m_RadiusY = this.m_StackHeight / 2 / Math.sin(
|
|
2811
|
+
this.m_StackHeight = this.m_Book.totalThickness, this.m_RadiusY = this.m_StackHeight / 2 / Math.sin(is * nt);
|
|
2812
2812
|
const r = this.m_Book.papers;
|
|
2813
2813
|
this.m_GlueY = new Array(r.length);
|
|
2814
|
-
for (let
|
|
2815
|
-
const d = this.getStackHeight(
|
|
2816
|
-
this.m_GlueY[
|
|
2814
|
+
for (let c = 0; c < r.length; c++) {
|
|
2815
|
+
const d = this.getStackHeight(c);
|
|
2816
|
+
this.m_GlueY[c] = d - r[c].thickness / 2 - this.m_StackHeight / 2;
|
|
2817
2817
|
}
|
|
2818
|
-
const o =
|
|
2819
|
-
this.m_OwnsClothMaterial = e.spineMaterial === null, this.m_ClothMaterial = e.spineMaterial ?? new
|
|
2818
|
+
const o = new l.BufferGeometry();
|
|
2819
|
+
this.m_OwnsClothMaterial = e.spineMaterial === null, this.m_ClothMaterial = e.spineMaterial ?? new l.MeshStandardMaterial({
|
|
2820
2820
|
color: e.spineColor,
|
|
2821
2821
|
roughness: 0.75,
|
|
2822
2822
|
metalness: 0,
|
|
2823
|
-
side:
|
|
2823
|
+
side: l.DoubleSide
|
|
2824
2824
|
}), this.m_CaseMaterials = [];
|
|
2825
|
-
for (let
|
|
2825
|
+
for (let c = 0; c < 5; c++)
|
|
2826
2826
|
this.m_CaseMaterials.push(
|
|
2827
|
-
new
|
|
2828
|
-
color:
|
|
2827
|
+
new l.MeshStandardMaterial({
|
|
2828
|
+
color: c === yt ? e.spineColor : n.color,
|
|
2829
2829
|
roughness: 0.8,
|
|
2830
2830
|
metalness: 0,
|
|
2831
|
-
side:
|
|
2831
|
+
side: l.DoubleSide
|
|
2832
2832
|
})
|
|
2833
2833
|
);
|
|
2834
|
-
const
|
|
2835
|
-
this.spineMesh = new
|
|
2836
|
-
let
|
|
2837
|
-
|
|
2838
|
-
for (const
|
|
2839
|
-
const d = this.bindingWidthFor(
|
|
2840
|
-
|
|
2834
|
+
const h = [...this.m_CaseMaterials, this.m_ClothMaterial];
|
|
2835
|
+
this.spineMesh = new l.Mesh(o, h), this.spineMesh.name = "Case", this.spineMesh.castShadow = this.m_Book.castShadows, i.add(this.spineMesh), this.spineMesh.position.set(0, 0, n.margin);
|
|
2836
|
+
let u = n.thickness;
|
|
2837
|
+
u = Math.max(e.glueFlexWidth, u);
|
|
2838
|
+
for (const c of this.m_Book.papers) {
|
|
2839
|
+
const d = this.bindingWidthFor(c.isCover), f = c.size.clone();
|
|
2840
|
+
f.x -= d, c.sizeXOffset = d, c.size = f, c.setMinTurningRadius(u), c.updateTurningRadius(), this.updatePaperPosition(c);
|
|
2841
2841
|
}
|
|
2842
2842
|
this.m_Book.hasCover && (r[0].renderer.transform.visible = !1, r[r.length - 1].renderer.transform.visible = !1), this.m_Root.updateMatrixWorld(!0), this.refreshCaseMaterials(), this.updateCaseMesh(this.spineAngle()), this.updateRootPosition();
|
|
2843
2843
|
}
|
|
2844
2844
|
get binderRenderer() {
|
|
2845
|
-
return this._binderRendererAdapter || (this._binderRendererAdapter = new
|
|
2845
|
+
return this._binderRendererAdapter || (this._binderRendererAdapter = new rs(this.spineMesh)), this._binderRendererAdapter;
|
|
2846
2846
|
}
|
|
2847
2847
|
bindingWidthFor(t) {
|
|
2848
2848
|
return t ? this.m_Setup.hingeGap + this.m_Book.coverPaperSetup.thickness : this.m_Setup.glueFlexWidth;
|
|
@@ -2856,19 +2856,29 @@ class Qe extends le {
|
|
|
2856
2856
|
return this.m_StackHeight / 2 + this.m_Setup.hingeGap * 0.5;
|
|
2857
2857
|
}
|
|
2858
2858
|
createCaseGeometry() {
|
|
2859
|
+
var P, b, A, Z;
|
|
2859
2860
|
this.m_CaseSlabSegments = Math.max(6, (this.m_Setup.quality + 1) * 4);
|
|
2860
|
-
const t = this.m_CaseSlabSegments, e =
|
|
2861
|
-
|
|
2862
|
-
const
|
|
2863
|
-
|
|
2861
|
+
const t = this.m_CaseSlabSegments, e = ee, s = this.m_Book.papers, i = (b = (P = s[0]) == null ? void 0 : P.meshData) == null ? void 0 : b.pattern, n = (Z = (A = s[s.length - 1]) == null ? void 0 : A.meshData) == null ? void 0 : Z.pattern;
|
|
2862
|
+
if (!i || !n) return new l.BufferGeometry();
|
|
2863
|
+
const r = i.xNoneSeamIndexes[this.m_BindingVertexCount + 1], o = n.xNoneSeamIndexes[this.m_BindingVertexCount + 1], h = Math.max(
|
|
2864
|
+
i.baseXArray.length - r,
|
|
2865
|
+
n.baseXArray.length - o
|
|
2866
|
+
), u = Math.max(i.baseZArray.length, n.baseZArray.length), c = t + 2 * e + 1, d = h * 2 + c, f = 2 * d;
|
|
2867
|
+
this.m_CaseLoopCount = f, this.m_CaseRowCount = u, this.m_CasePathCount = d, this.m_CaseBoardColumnCount = h;
|
|
2868
|
+
const g = [], m = (D, U) => {
|
|
2869
|
+
for (let E = 0; E < U; E++) g.push(D);
|
|
2864
2870
|
};
|
|
2865
|
-
|
|
2866
|
-
const
|
|
2867
|
-
|
|
2868
|
-
let
|
|
2869
|
-
for (let
|
|
2870
|
-
(
|
|
2871
|
-
|
|
2871
|
+
m(ie, h - 1), m(pt, c + 1), m(ne, h - 1), m(pt, 1), m(re, h - 1), m(pt, e + 1), m(yt, t), m(pt, e + 1), m(se, h - 1), m(pt, 1), this.m_CaseZones = g;
|
|
2872
|
+
const _ = new l.BufferGeometry(), p = f * (u - 1), M = p * 6, w = p * 4 + f * 2;
|
|
2873
|
+
_.setAttribute("position", new l.BufferAttribute(new Float32Array(w * 3), 3)), _.setAttribute("uv", new l.BufferAttribute(new Float32Array(w * 2), 2)), _.setIndex(new l.BufferAttribute(new Uint32Array(M + (f - 2) * 6), 1));
|
|
2874
|
+
let C = 0;
|
|
2875
|
+
for (let D = 1; D <= f; D++)
|
|
2876
|
+
(D === f || g[D] !== g[C]) && (_.addGroup(
|
|
2877
|
+
C * (u - 1) * 6,
|
|
2878
|
+
(D - C) * (u - 1) * 6,
|
|
2879
|
+
g[C]
|
|
2880
|
+
), C = D);
|
|
2881
|
+
return _.addGroup(M, (f - 2) * 6, pt), _;
|
|
2872
2882
|
}
|
|
2873
2883
|
/**
|
|
2874
2884
|
* The case spine curve, manga-cover model: the two flat boards are joined
|
|
@@ -2881,163 +2891,194 @@ class Qe extends le {
|
|
|
2881
2891
|
*/
|
|
2882
2892
|
caseCurve() {
|
|
2883
2893
|
const t = this.m_Book.papers, s = this.m_Book.coverPaperSetup.thickness / 2, i = (m) => {
|
|
2884
|
-
const
|
|
2885
|
-
|
|
2886
|
-
const M = new
|
|
2887
|
-
return { d:
|
|
2888
|
-
}, n = i(t[0]), r = i(t[t.length - 1]), o = (this.bindingWidthFor(!0) + s + 4e-3) / 0.75,
|
|
2894
|
+
const _ = m.getDirection(m.size.y / 2), p = new l.Vector2(_.x, _.y);
|
|
2895
|
+
p.lengthSq() < 1e-8 && p.set(-1, 0), p.normalize();
|
|
2896
|
+
const M = new l.Vector2(m.transform.position.x, m.transform.position.y), w = m.size.x, C = this.bindingWidthFor(!0);
|
|
2897
|
+
return { d: p, pivot: M, w, uOf: (b) => ot((b.clone().sub(M).dot(p) * -1 + C) / (w + C)) };
|
|
2898
|
+
}, n = i(t[0]), r = i(t[t.length - 1]), o = (this.bindingWidthFor(!0) + s + 4e-3) / 0.75, h = n.pivot, u = n.pivot.clone().addScaledVector(n.d, o), c = r.pivot.clone().addScaledVector(r.d, o), d = r.pivot;
|
|
2889
2899
|
return { F: n, B: r, half: s, cubic: (m) => {
|
|
2890
|
-
const
|
|
2891
|
-
return new
|
|
2892
|
-
|
|
2893
|
-
|
|
2900
|
+
const _ = 1 - m;
|
|
2901
|
+
return new l.Vector2(
|
|
2902
|
+
_ * _ * _ * h.x + 3 * _ * _ * m * u.x + 3 * _ * m * m * c.x + m * m * m * d.x,
|
|
2903
|
+
_ * _ * _ * h.y + 3 * _ * _ * m * u.y + 3 * _ * m * m * c.y + m * m * m * d.y
|
|
2894
2904
|
);
|
|
2895
2905
|
}, normalAt: (m) => {
|
|
2896
|
-
const
|
|
2897
|
-
return
|
|
2906
|
+
const _ = 1 - m, p = 3 * _ * _ * (u.x - h.x) + 6 * _ * m * (c.x - u.x) + 3 * m * m * (d.x - c.x), M = 3 * _ * _ * (u.y - h.y) + 6 * _ * m * (c.y - u.y) + 3 * m * m * (d.y - c.y), w = new l.Vector2(M, -p);
|
|
2907
|
+
return w.lengthSq() < 1e-10 ? new l.Vector2(-1, 0) : w.normalize();
|
|
2898
2908
|
} };
|
|
2899
2909
|
}
|
|
2900
2910
|
updateCaseMesh(t) {
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
const
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
}
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2911
|
+
var j, V;
|
|
2912
|
+
const e = this.m_Book.papers, s = e[0], i = e[e.length - 1], n = (j = s == null ? void 0 : s.meshData) == null ? void 0 : j.pattern, r = (V = i == null ? void 0 : i.meshData) == null ? void 0 : V.pattern;
|
|
2913
|
+
if (!n || !r) return;
|
|
2914
|
+
const o = n.xNoneSeamIndexes[this.m_BindingVertexCount + 1], h = r.xNoneSeamIndexes[this.m_BindingVertexCount + 1], u = Math.max(
|
|
2915
|
+
n.baseXArray.length - o,
|
|
2916
|
+
r.baseXArray.length - h
|
|
2917
|
+
), c = Math.max(n.baseZArray.length, r.baseZArray.length);
|
|
2918
|
+
if (this.m_CaseRowCount !== c || this.m_CaseBoardColumnCount !== u) {
|
|
2919
|
+
this.m_CaseRowCount = 0;
|
|
2920
|
+
const S = this.createCaseGeometry();
|
|
2921
|
+
if (this.m_CaseRowCount === 0) return;
|
|
2922
|
+
this.spineMesh.geometry.dispose(), this.spineMesh.geometry = S;
|
|
2923
|
+
}
|
|
2924
|
+
const d = ee, f = this.m_CaseSlabSegments, { F: g, B: m, half: _, cubic: p } = this.caseCurve(), M = f + 2 * d + 1, w = this.m_CaseRowCount, C = this.m_CasePathCount, P = this.m_CaseLoopCount, b = this.m_CaseBoardColumnCount, A = this.spineMesh.geometry, Z = A.getAttribute("position"), D = A.getAttribute("uv"), U = this.m_CaseZones, E = this.spineMesh.matrixWorld.clone().invert().multiply(s.transform.matrixWorld), N = this.spineMesh.matrixWorld.clone().invert().multiply(i.transform.matrixWorld), F = (d + 1) / (M + 1), k = (d + f + 1) / (M + 1), B = new Array(w), Y = new Array(w), X = new l.Vector2(), J = (S, R, O, W, y, L) => {
|
|
2925
|
+
const T = R.baseXArray, I = R.baseZArray, tt = T.length, K = G(T[O], T[tt - 1], W), rt = G(I[0], I[I.length - 1], y);
|
|
2926
|
+
let v = O;
|
|
2927
|
+
for (; v < tt - 1 && T[v] < K; ) v++;
|
|
2928
|
+
const st = Math.max(O, v - 1), Q = T[v] === T[st] ? 0 : at(T[st], T[v], K);
|
|
2929
|
+
let it = 0;
|
|
2930
|
+
for (; it < I.length - 1 && I[it] < rt; ) it++;
|
|
2931
|
+
const gt = Math.max(0, it - 1), Me = I[it] === I[gt] ? 0 : at(I[gt], I[it], rt), Mt = S.meshData.baseVertices, ye = Mt[gt * tt + st].clone().lerp(Mt[gt * tt + v], Q), Ce = Mt[it * tt + st].clone().lerp(Mt[it * tt + v], Q);
|
|
2932
|
+
return ye.lerp(Ce, Me).applyMatrix4(L);
|
|
2933
|
+
};
|
|
2934
|
+
let $ = 0;
|
|
2935
|
+
for (let S = 0; S < w; S++) {
|
|
2936
|
+
const R = [], O = [], W = S / Math.max(w - 1, 1);
|
|
2937
|
+
for (let v = b - 1; v >= 0; v--) {
|
|
2938
|
+
const st = v / Math.max(b - 1, 1);
|
|
2939
|
+
R.push(J(s, n, o, st, W, E)), O.push(st);
|
|
2940
|
+
}
|
|
2941
|
+
const y = R[R.length - 1], L = J(i, r, h, 0, W, N), T = (y.z + L.z) * 0.5;
|
|
2942
|
+
for (let v = 1; v <= M; v++) {
|
|
2943
|
+
const st = v / (M + 1), Q = p(st);
|
|
2944
|
+
R.push(new l.Vector3(Q.x, Q.y, T)), O.push(1 - ot((st - F) / (k - F)));
|
|
2945
|
+
}
|
|
2946
|
+
for (let v = 0; v < b; v++) {
|
|
2947
|
+
const st = v / Math.max(b - 1, 1);
|
|
2948
|
+
R.push(J(i, r, h, st, W, N)), O.push(st);
|
|
2949
|
+
}
|
|
2950
|
+
const I = new Array(C), tt = new Array(C);
|
|
2951
|
+
for (let v = 0; v < C; v++) {
|
|
2952
|
+
const st = R[Math.max(v - 1, 0)], Q = R[Math.min(v + 1, C - 1)];
|
|
2953
|
+
X.set(Q.x - st.x, Q.y - st.y), X.lengthSq() < 1e-10 && X.set(-1, 0), X.normalize();
|
|
2954
|
+
const it = X.y, gt = -X.x;
|
|
2955
|
+
I[v] = R[v].clone().add(new l.Vector3(it * _, gt * _, 0)), tt[v] = R[v].clone().add(new l.Vector3(-it * _, -gt * _, 0));
|
|
2956
|
+
}
|
|
2957
|
+
const K = [], rt = [];
|
|
2958
|
+
for (let v = 0; v < C; v++)
|
|
2959
|
+
K.push(tt[v]), rt.push(v < b ? 1 - O[v] : O[v]);
|
|
2960
|
+
for (let v = C - 1; v >= 0; v--)
|
|
2961
|
+
K.push(I[v]), rt.push(v >= C - b ? 1 - O[v] : O[v]);
|
|
2962
|
+
B[S] = K, Y[S] = rt;
|
|
2963
|
+
for (const v of K) $ = Math.min($, v.y);
|
|
2964
|
+
}
|
|
2965
|
+
this.m_CaseMinY = $;
|
|
2966
|
+
let H = 0;
|
|
2967
|
+
for (let S = 0; S < P; S++) {
|
|
2968
|
+
const R = (S + 1) % P, O = U[S], W = O === pt;
|
|
2969
|
+
for (let y = 0; y < w - 1; y++) {
|
|
2970
|
+
const L = B[y][S], T = B[y][R], I = B[y + 1][S], tt = B[y + 1][R];
|
|
2971
|
+
let K = W ? 0 : Y[y][S], rt = W ? 1 : Y[y][R];
|
|
2972
|
+
!W && O !== yt && (K = ot(K), rt = ot(rt));
|
|
2973
|
+
const v = 1 - y / (w - 1), st = 1 - (y + 1) / (w - 1), Q = (S * (w - 1) + y) * 4;
|
|
2974
|
+
Z.setXYZ(Q, L.x, L.y, L.z), Z.setXYZ(Q + 1, T.x, T.y, T.z), Z.setXYZ(Q + 2, I.x, I.y, I.z), Z.setXYZ(Q + 3, tt.x, tt.y, tt.z), D.setXY(Q, K, v), D.setXY(Q + 1, rt, v), D.setXY(Q + 2, K, st), D.setXY(Q + 3, rt, st);
|
|
2975
|
+
const it = A.getIndex();
|
|
2976
|
+
it.setX(H++, Q + 2), it.setX(H++, Q + 1), it.setX(H++, Q), it.setX(H++, Q + 2), it.setX(H++, Q + 3), it.setX(H++, Q + 1);
|
|
2977
|
+
}
|
|
2978
|
+
}
|
|
2979
|
+
const z = P * (w - 1) * 4;
|
|
2980
|
+
for (let S = 0; S < P; S++) {
|
|
2981
|
+
const R = B[0][S], O = B[w - 1][S];
|
|
2982
|
+
Z.setXYZ(z + S, R.x, R.y, R.z), Z.setXYZ(z + P + S, O.x, O.y, O.z), D.setXY(z + S, 0.5, 0.5), D.setXY(z + P + S, 0.5, 0.5);
|
|
2983
|
+
}
|
|
2984
|
+
const x = A.getIndex();
|
|
2985
|
+
for (let S = 0; S < C - 1; S++) {
|
|
2986
|
+
const R = S, O = S + 1, W = P - 1 - S, y = P - 1 - O;
|
|
2987
|
+
x.setX(H++, z + R), x.setX(H++, z + O), x.setX(H++, z + y), x.setX(H++, z + R), x.setX(H++, z + y), x.setX(H++, z + W), x.setX(H++, z + P + R), x.setX(H++, z + P + y), x.setX(H++, z + P + O), x.setX(H++, z + P + R), x.setX(H++, z + P + W), x.setX(H++, z + P + y);
|
|
2988
|
+
}
|
|
2989
|
+
Z.needsUpdate = !0, D.needsUpdate = !0, x.needsUpdate = !0, A.computeVertexNormals(), A.computeBoundingBox(), A.computeBoundingSphere();
|
|
2949
2990
|
}
|
|
2950
2991
|
/** Keeps the five zone materials pointed at the live content textures. */
|
|
2951
2992
|
refreshCaseMaterials() {
|
|
2952
|
-
var n, r, o,
|
|
2953
|
-
const t = this.m_Book.papers, e = t[t.length - 1], s = (
|
|
2954
|
-
const
|
|
2955
|
-
|
|
2993
|
+
var n, r, o, h, u, c, d, f;
|
|
2994
|
+
const t = this.m_Book.papers, e = t[t.length - 1], s = (g, m, _) => {
|
|
2995
|
+
const p = this.m_CaseMaterials[g];
|
|
2996
|
+
p && (m && _ && (m.repeat.set(_.x, _.y), m.offset.set(_.z, _.w)), p.map !== m && (p.map = m, p.color.set(m ? 16777215 : this.m_Book.coverPaperSetup.color.getHex()), p.needsUpdate = !0));
|
|
2956
2997
|
};
|
|
2957
|
-
this.m_Book.hasCover && (s(
|
|
2958
|
-
const i = this.m_CaseMaterials[
|
|
2998
|
+
this.m_Book.hasCover && (s(se, ((n = t[0].frontContent) == null ? void 0 : n.texture) ?? null, (r = t[0].frontContent) == null ? void 0 : r.textureST), s(ie, ((o = t[0].backContent) == null ? void 0 : o.texture) ?? null, (h = t[0].backContent) == null ? void 0 : h.textureST), s(ne, ((u = e.frontContent) == null ? void 0 : u.texture) ?? null, (c = e.frontContent) == null ? void 0 : c.textureST), s(re, ((d = e.backContent) == null ? void 0 : d.texture) ?? null, (f = e.backContent) == null ? void 0 : f.textureST));
|
|
2999
|
+
const i = this.m_CaseMaterials[yt];
|
|
2959
3000
|
i && i.map !== this.m_Setup.spineTexture && (i.map = this.m_Setup.spineTexture, i.color.set(this.m_Setup.spineTexture ? 16777215 : this.m_Setup.spineColor.getHex()), i.needsUpdate = !0);
|
|
2960
3001
|
}
|
|
2961
3002
|
// ── createPaperPattern ────────────────────────────────────────────────
|
|
2962
3003
|
createPaperPattern(t, e, s, i, n, r) {
|
|
2963
|
-
const o = new
|
|
3004
|
+
const o = new me();
|
|
2964
3005
|
o.size = e, o.thickness = s;
|
|
2965
|
-
const
|
|
2966
|
-
o.baseXOffset = -
|
|
3006
|
+
const h = this.m_Book.coverPaperSetup.size, u = Math.abs(e.x - h.x) < 1e-6 && Math.abs(e.y - h.y) < 1e-6, c = this.bindingWidthFor(u);
|
|
3007
|
+
o.baseXOffset = -c;
|
|
2967
3008
|
const d = (this.m_Quality + 1) * 2;
|
|
2968
3009
|
this.m_BindingVertexCount = d;
|
|
2969
|
-
const
|
|
2970
|
-
|
|
2971
|
-
),
|
|
2972
|
-
let
|
|
2973
|
-
const
|
|
2974
|
-
let C =
|
|
2975
|
-
const
|
|
3010
|
+
const f = t / 5, g = Math.min(e.x, e.y) / 60, m = Math.floor(
|
|
3011
|
+
G(0, (e.x - c) / g, f)
|
|
3012
|
+
), _ = Math.floor(G(0, e.y / g, f));
|
|
3013
|
+
let p = 2 + m + 1 + d, M = 2 + _;
|
|
3014
|
+
const w = new dt(0);
|
|
3015
|
+
let C = w;
|
|
3016
|
+
const P = c / d;
|
|
2976
3017
|
let b = 0;
|
|
2977
|
-
for (let
|
|
2978
|
-
C = C.createNext(b), b +=
|
|
2979
|
-
const
|
|
2980
|
-
for (let
|
|
2981
|
-
C = C.createNext(b), b +=
|
|
2982
|
-
const
|
|
2983
|
-
let
|
|
2984
|
-
const
|
|
2985
|
-
let
|
|
2986
|
-
for (let
|
|
2987
|
-
|
|
2988
|
-
const
|
|
3018
|
+
for (let T = 1; T < d + 1; T++)
|
|
3019
|
+
C = C.createNext(b), b += P;
|
|
3020
|
+
const A = (e.x - c) / (m + 1);
|
|
3021
|
+
for (let T = d + 1; T < p; T++)
|
|
3022
|
+
C = C.createNext(b), b += A;
|
|
3023
|
+
const Z = new dt(0);
|
|
3024
|
+
let D = Z;
|
|
3025
|
+
const U = e.y / (M - 1);
|
|
3026
|
+
let E = 0;
|
|
3027
|
+
for (let T = 0; T < M - 1; T++)
|
|
3028
|
+
E += U, D = D.createNext(E);
|
|
3029
|
+
const N = [], F = [], k = i.clone();
|
|
2989
3030
|
if (n) {
|
|
2990
|
-
let
|
|
2991
|
-
this.m_Book.hasCover && (
|
|
2992
|
-
const
|
|
2993
|
-
|
|
2994
|
-
}
|
|
2995
|
-
const
|
|
2996
|
-
|
|
2997
|
-
const
|
|
2998
|
-
o.xNoneSeamIndexes =
|
|
2999
|
-
for (let
|
|
3000
|
-
|
|
3031
|
+
let T = 0;
|
|
3032
|
+
this.m_Book.hasCover && (T = Math.floor(this.m_Book.coverPaperCount / 2));
|
|
3033
|
+
const I = Math.max(0.01, s);
|
|
3034
|
+
k.left = 0, k.right = (this.getPX(T + 1, s) - this.getPX(T, s) + I) / e.x, k.down = I / e.y, k.up = I / e.y;
|
|
3035
|
+
}
|
|
3036
|
+
const B = new he(o, k, !1);
|
|
3037
|
+
B.insert(w, Z, N, F), w.updateIndex(0), Z.updateIndex(0), xt(N, o.xSeams), xt(F, o.zSeams);
|
|
3038
|
+
const Y = this.m_BindingVertexCount + 2, X = new Array(Y);
|
|
3039
|
+
o.xNoneSeamIndexes = X, C = w;
|
|
3040
|
+
for (let T = 0; T < Y; T++) {
|
|
3041
|
+
X[T] = C.index;
|
|
3001
3042
|
do
|
|
3002
3043
|
C = C.next;
|
|
3003
3044
|
while (C.seam);
|
|
3004
3045
|
}
|
|
3005
|
-
const
|
|
3006
|
-
|
|
3007
|
-
const
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3046
|
+
const J = w.getValues(), $ = Z.getValues();
|
|
3047
|
+
p = J.length, M = $.length;
|
|
3048
|
+
const H = p * M, z = [], x = new Array(H).fill(0), j = [], V = [], S = [], R = [];
|
|
3049
|
+
Ft(
|
|
3050
|
+
z,
|
|
3051
|
+
J,
|
|
3052
|
+
$,
|
|
3012
3053
|
e,
|
|
3013
3054
|
i,
|
|
3014
3055
|
this.m_Book.direction
|
|
3015
3056
|
);
|
|
3016
|
-
const
|
|
3017
|
-
let
|
|
3018
|
-
|
|
3019
|
-
for (let
|
|
3020
|
-
for (let
|
|
3021
|
-
if (n &&
|
|
3057
|
+
const O = B.leftNode.index, W = B.downNode.index;
|
|
3058
|
+
let y = B.rightNode.index, L = B.upNode.index;
|
|
3059
|
+
y === 0 && (y = p - 1), L === 0 && (L = M - 1);
|
|
3060
|
+
for (let T = 0; T < M - 1; T++)
|
|
3061
|
+
for (let I = 0; I < p - 1; I++) {
|
|
3062
|
+
if (n && T >= W && T < L && I >= O && I < y)
|
|
3022
3063
|
continue;
|
|
3023
|
-
const
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3064
|
+
const tt = T * p + I, K = T * p + (I + 1), rt = (T + 1) * p + I, v = (T + 1) * p + (I + 1);
|
|
3065
|
+
x[tt] += 2, x[K] += 2, x[rt] += 2, x[v] += 2, Ht(
|
|
3066
|
+
j,
|
|
3067
|
+
V,
|
|
3068
|
+
tt,
|
|
3069
|
+
K,
|
|
3070
|
+
rt,
|
|
3071
|
+
v,
|
|
3072
|
+
H
|
|
3032
3073
|
);
|
|
3033
3074
|
}
|
|
3034
|
-
if (
|
|
3075
|
+
if (R.push(new St(0, 0, p - 1, M - 1, !1, !1)), At(R, S, z, p, M), o.baseXArray = J, o.baseZArray = $, o.baseVertexCount = H, o.vertexCount = z.length, o.texcoords = z, o.weights = x, r) {
|
|
3035
3076
|
o.subMeshCount = 1;
|
|
3036
|
-
const
|
|
3037
|
-
|
|
3077
|
+
const T = [];
|
|
3078
|
+
T.push(...j), T.push(...S), T.push(...V), o.triangles = T;
|
|
3038
3079
|
} else
|
|
3039
|
-
o.subMeshCount = 3, o.frontTriangles =
|
|
3040
|
-
return o.borders =
|
|
3080
|
+
o.subMeshCount = 3, o.frontTriangles = j, o.backTriangles = V, o.borderTriangles = S;
|
|
3081
|
+
return o.borders = R, o;
|
|
3041
3082
|
}
|
|
3042
3083
|
// ── Pivot placement ───────────────────────────────────────────────────
|
|
3043
3084
|
/**
|
|
@@ -3047,12 +3088,12 @@ class Qe extends le {
|
|
|
3047
3088
|
* lifts over the spine.
|
|
3048
3089
|
*/
|
|
3049
3090
|
pivotAt(t, e, s, i, n, r) {
|
|
3050
|
-
const o = this.bindingWidthFor(e),
|
|
3051
|
-
Math.cos(s *
|
|
3052
|
-
-Math.cos(i *
|
|
3053
|
-
|
|
3054
|
-
),
|
|
3055
|
-
return r.set(
|
|
3091
|
+
const o = this.bindingWidthFor(e), h = t * nt, u = G(
|
|
3092
|
+
Math.cos(s * nt),
|
|
3093
|
+
-Math.cos(i * nt),
|
|
3094
|
+
ot(n)
|
|
3095
|
+
), c = o * Math.cos(h) / Math.max(u, 1e-4);
|
|
3096
|
+
return r.set(q(c, -o, o), Math.sin(h) * this.m_RadiusY, 0), r;
|
|
3056
3097
|
}
|
|
3057
3098
|
/**
|
|
3058
3099
|
* Tight-back spine angle: the case spine follows the block. Closed → 0
|
|
@@ -3061,7 +3102,7 @@ class Qe extends le {
|
|
|
3061
3102
|
*/
|
|
3062
3103
|
spineAngle() {
|
|
3063
3104
|
const { th: t, total: e } = this.computeThPages();
|
|
3064
|
-
return Math.PI *
|
|
3105
|
+
return Math.PI * ot(t / e);
|
|
3065
3106
|
}
|
|
3066
3107
|
updateRootPosition() {
|
|
3067
3108
|
const t = this.m_Book.papers, e = t[0].transform.position.y, s = t[t.length - 1].transform.position.y;
|
|
@@ -3070,12 +3111,12 @@ class Qe extends le {
|
|
|
3070
3111
|
}
|
|
3071
3112
|
resetPaperPosition(t) {
|
|
3072
3113
|
const e = this.m_Book.papers;
|
|
3073
|
-
for (const
|
|
3074
|
-
|
|
3075
|
-
const s = this.getStackHeight(t.index) - t.thickness / 2, i = this.getStackZ(s), n = 180 + i, r = t.isFlipped ? 1 : 0, o =
|
|
3076
|
-
|
|
3077
|
-
const
|
|
3078
|
-
t.transform.position.copy(
|
|
3114
|
+
for (const c of e)
|
|
3115
|
+
c.updateTime();
|
|
3116
|
+
const s = this.getStackHeight(t.index) - t.thickness / 2, i = this.getStackZ(s), n = 180 + i, r = t.isFlipped ? 1 : 0, o = G(i, n, r), h = this.pivotAt(o, t.isCover, i, n, r, new l.Vector3());
|
|
3117
|
+
h.z = t.margin;
|
|
3118
|
+
const u = this.restRotation(t, r, 0);
|
|
3119
|
+
t.transform.position.copy(h), t.transform.quaternion.setFromEuler(new l.Euler(0, 0, u * nt));
|
|
3079
3120
|
}
|
|
3080
3121
|
getPX(t, e) {
|
|
3081
3122
|
const s = this.m_Book.hasCover && (t < Math.floor(this.m_Book.coverPaperCount / 2) || t >= this.m_Book.papers.length - Math.floor(this.m_Book.coverPaperCount / 2));
|
|
@@ -3085,10 +3126,10 @@ class Qe extends le {
|
|
|
3085
3126
|
this.updatePaperPositionWithTh(t, this.computeTh());
|
|
3086
3127
|
}
|
|
3087
3128
|
updatePaperPositionWithTh(t, e) {
|
|
3088
|
-
const s = this.getStackHeight(t.index) - t.thickness / 2, i = this.getStackZ(s + e), n = 180 + this.getStackZ(s + e - this.m_StackHeight), r = t.zTime, o =
|
|
3089
|
-
|
|
3090
|
-
const
|
|
3091
|
-
t.transform.position.copy(
|
|
3129
|
+
const s = this.getStackHeight(t.index) - t.thickness / 2, i = this.getStackZ(s + e), n = 180 + this.getStackZ(s + e - this.m_StackHeight), r = t.zTime, o = G(i, n, r), h = this.pivotAt(o, t.isCover, i, n, r, new l.Vector3());
|
|
3130
|
+
h.z = t.margin;
|
|
3131
|
+
const u = this.restRotation(t, r, e);
|
|
3132
|
+
t.transform.position.copy(h), t.transform.quaternion.setFromEuler(new l.Euler(0, 0, u * nt));
|
|
3092
3133
|
}
|
|
3093
3134
|
/**
|
|
3094
3135
|
* Resting plane rotation. A glued block has no fold gap, so resting papers
|
|
@@ -3100,17 +3141,17 @@ class Qe extends le {
|
|
|
3100
3141
|
if (t.index < Math.floor(i.length / 2)) {
|
|
3101
3142
|
let o = 0;
|
|
3102
3143
|
if (this.m_Book.alignToGround) {
|
|
3103
|
-
const
|
|
3104
|
-
o = (Math.asin(
|
|
3144
|
+
const h = i[0].size.x, u = this.m_StackHeight / 2, c = q(s, 0, u) - u, d = Math.sqrt(Math.max(h * h - c * c, 0));
|
|
3145
|
+
o = (Math.asin(ot(d / h)) * lt - 90) * 2;
|
|
3105
3146
|
}
|
|
3106
|
-
return
|
|
3147
|
+
return G(0, -o, e);
|
|
3107
3148
|
}
|
|
3108
3149
|
let r = 0;
|
|
3109
3150
|
if (this.m_Book.alignToGround) {
|
|
3110
|
-
const o = i[0].size.x,
|
|
3111
|
-
r = (Math.asin(
|
|
3151
|
+
const o = i[0].size.x, h = this.m_StackHeight / 2, u = h - q(s, h, h * 2), c = Math.sqrt(Math.max(o * o - u * u, 0));
|
|
3152
|
+
r = (Math.asin(ot(c / o)) * lt - 90) * 2;
|
|
3112
3153
|
}
|
|
3113
|
-
return
|
|
3154
|
+
return G(r, 0, e);
|
|
3114
3155
|
}
|
|
3115
3156
|
getStackHeight(t) {
|
|
3116
3157
|
const e = this.m_Book.papers;
|
|
@@ -3121,9 +3162,9 @@ class Qe extends le {
|
|
|
3121
3162
|
return s;
|
|
3122
3163
|
}
|
|
3123
3164
|
getStackZ(t) {
|
|
3124
|
-
t =
|
|
3165
|
+
t = q(t, 0, this.m_StackHeight);
|
|
3125
3166
|
const e = t - this.m_StackHeight * 0.5;
|
|
3126
|
-
return Math.asin(
|
|
3167
|
+
return Math.asin(q(e / this.m_RadiusY, -1, 1)) * lt;
|
|
3127
3168
|
}
|
|
3128
3169
|
computeTh() {
|
|
3129
3170
|
const t = this.m_Book.papers;
|
|
@@ -3150,46 +3191,46 @@ class Qe extends le {
|
|
|
3150
3191
|
this.updatePaperPositionWithTh(i, e);
|
|
3151
3192
|
this.m_Root.updateMatrixWorld(!0), this.refreshCaseMaterials();
|
|
3152
3193
|
const s = this.spineAngle();
|
|
3153
|
-
this.
|
|
3194
|
+
this.updateGlueVertices(s);
|
|
3154
3195
|
for (const i of t)
|
|
3155
3196
|
i.updateMesh();
|
|
3156
|
-
this.updateRootPosition();
|
|
3197
|
+
this.updateCaseMesh(s), this.updateRootPosition();
|
|
3157
3198
|
}
|
|
3158
3199
|
// ── updateGlueVertices ────────────────────────────────────────────────
|
|
3159
3200
|
//
|
|
3160
3201
|
// Rewrites each paper's flex-zone vertices: a quadratic bezier from its
|
|
3161
3202
|
// permanent anchor on the spine (glue line for pages, hinge edge for
|
|
3162
3203
|
// boards) out to the free sheet. This is what fuses the block to the
|
|
3163
|
-
// spine and draws the
|
|
3204
|
+
// spine and draws the glued gutter valley / cloth hinge groove.
|
|
3164
3205
|
updateGlueVertices(t) {
|
|
3165
|
-
const e = this.m_Book.papers, s = e.length, i = this.m_Root.matrixWorld.clone(), n = Math.cos(t), r = Math.sin(t), { half: o, cubic:
|
|
3166
|
-
for (let
|
|
3167
|
-
const d = e[
|
|
3168
|
-
let b,
|
|
3206
|
+
const e = this.m_Book.papers, s = e.length, i = this.m_Root.matrixWorld.clone(), n = Math.cos(t), r = Math.sin(t), { half: o, cubic: h, normalAt: u } = this.caseCurve();
|
|
3207
|
+
for (let c = 0; c < s; c++) {
|
|
3208
|
+
const d = e[c], f = d.transform, g = d.meshData.pattern, m = d.meshData.baseVertices, _ = g.baseZArray, p = g.baseXArray.length, M = _.length, w = this.m_BindingVertexCount + 1, C = g.xNoneSeamIndexes, P = f.position.clone();
|
|
3209
|
+
let b, A, Z, D;
|
|
3169
3210
|
if (d.isCover) {
|
|
3170
|
-
const
|
|
3171
|
-
b = -
|
|
3211
|
+
const k = c < Math.floor(s / 2) ? this.spineHalf : -this.spineHalf;
|
|
3212
|
+
b = -k * r, A = k * n, Z = -n, D = -r;
|
|
3172
3213
|
} else {
|
|
3173
|
-
const
|
|
3174
|
-
b =
|
|
3214
|
+
const F = ot(0.5 - this.m_GlueY[c] / this.m_StackHeight), k = h(F), B = u(F);
|
|
3215
|
+
b = k.x - B.x * o, A = k.y - B.y * o, Z = B.x, D = B.y;
|
|
3175
3216
|
}
|
|
3176
|
-
const
|
|
3177
|
-
for (let
|
|
3178
|
-
const
|
|
3179
|
-
b +
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
),
|
|
3183
|
-
|
|
3184
|
-
const
|
|
3185
|
-
m[
|
|
3186
|
-
for (let
|
|
3187
|
-
const
|
|
3188
|
-
m[
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3217
|
+
const U = this.bindingWidthFor(d.isCover) * 0.6, E = Math.min(0.01, this.m_Book.coverPaperSetup.thickness * 0.5), N = f.matrixWorld.clone().invert().multiply(i);
|
|
3218
|
+
for (let F = 0; F < M; F++) {
|
|
3219
|
+
const k = _[F], B = new l.Vector3(
|
|
3220
|
+
b + Z * E,
|
|
3221
|
+
A + D * E,
|
|
3222
|
+
P.z + k
|
|
3223
|
+
), Y = new l.Vector3(b, A, P.z + k), X = P.clone();
|
|
3224
|
+
X.z += k;
|
|
3225
|
+
const J = d.getDirection(k).multiplyScalar(U).add(X.clone()), $ = F * p, H = B.applyMatrix4(N), z = Y.clone().applyMatrix4(N), x = J.clone().applyMatrix4(N), j = X.clone().applyMatrix4(N);
|
|
3226
|
+
m[$] = H, m[$ + C[1]] = z;
|
|
3227
|
+
for (let V = 2; V < w; V++) {
|
|
3228
|
+
const S = at(1, w, V);
|
|
3229
|
+
m[$ + C[V]] = zt(
|
|
3230
|
+
z,
|
|
3231
|
+
x,
|
|
3232
|
+
j,
|
|
3233
|
+
S
|
|
3193
3234
|
);
|
|
3194
3235
|
}
|
|
3195
3236
|
}
|
|
@@ -3216,7 +3257,7 @@ class Qe extends le {
|
|
|
3216
3257
|
this.m_Book.hasCover && t.length > 0 && (t[0].renderer.transform.visible = !0, t[t.length - 1].renderer.transform.visible = !0);
|
|
3217
3258
|
}
|
|
3218
3259
|
}
|
|
3219
|
-
class
|
|
3260
|
+
class rs {
|
|
3220
3261
|
constructor(t) {
|
|
3221
3262
|
this.mesh = t;
|
|
3222
3263
|
}
|
|
@@ -3230,7 +3271,7 @@ class $e {
|
|
|
3230
3271
|
this.mesh.castShadow = t;
|
|
3231
3272
|
}
|
|
3232
3273
|
get bounds() {
|
|
3233
|
-
const t = new
|
|
3274
|
+
const t = new l.Box3();
|
|
3234
3275
|
return this.mesh.geometry && (this.mesh.geometry.computeBoundingBox(), this.mesh.geometry.boundingBox && (t.copy(this.mesh.geometry.boundingBox), t.applyMatrix4(this.mesh.matrixWorld))), t;
|
|
3235
3276
|
}
|
|
3236
3277
|
get transform() {
|
|
@@ -3240,15 +3281,15 @@ class $e {
|
|
|
3240
3281
|
return this.mesh;
|
|
3241
3282
|
}
|
|
3242
3283
|
}
|
|
3243
|
-
class
|
|
3284
|
+
class _s extends _e {
|
|
3244
3285
|
constructor() {
|
|
3245
|
-
super(...arguments), this.quality = 3, this.setup = new
|
|
3286
|
+
super(...arguments), this.quality = 3, this.setup = new ss();
|
|
3246
3287
|
}
|
|
3247
3288
|
createBound(t, e, s, i) {
|
|
3248
|
-
return new
|
|
3289
|
+
return new ns(this.quality, this.setup, t, e);
|
|
3249
3290
|
}
|
|
3250
3291
|
}
|
|
3251
|
-
class
|
|
3292
|
+
class ge {
|
|
3252
3293
|
constructor(t) {
|
|
3253
3294
|
this.x = (t == null ? void 0 : t.x) ?? 0, this.y = (t == null ? void 0 : t.y) ?? 0, this.width = (t == null ? void 0 : t.width) ?? 0, this.text = (t == null ? void 0 : t.text) ?? "", this.fontFamily = (t == null ? void 0 : t.fontFamily) ?? "Georgia", this.fontSize = (t == null ? void 0 : t.fontSize) ?? 24, this.fontWeight = (t == null ? void 0 : t.fontWeight) ?? "normal", this.fontStyle = (t == null ? void 0 : t.fontStyle) ?? "normal", this.color = (t == null ? void 0 : t.color) ?? "#222", this.lineHeight = (t == null ? void 0 : t.lineHeight) ?? 1.4, this.textAlign = (t == null ? void 0 : t.textAlign) ?? "left", this.opacity = (t == null ? void 0 : t.opacity) ?? 1, this.shadowColor = (t == null ? void 0 : t.shadowColor) ?? "", this.shadowBlur = (t == null ? void 0 : t.shadowBlur) ?? 0, this.shadowOffsetX = (t == null ? void 0 : t.shadowOffsetX) ?? 0, this.shadowOffsetY = (t == null ? void 0 : t.shadowOffsetY) ?? 0, this.textTransform = (t == null ? void 0 : t.textTransform) ?? "none", this.textDecoration = (t == null ? void 0 : t.textDecoration) ?? "none", this.background = (t == null ? void 0 : t.background) ?? "", this.backgroundPadding = (t == null ? void 0 : t.backgroundPadding) ?? 0, this.maxLines = (t == null ? void 0 : t.maxLines) ?? 0, this.height = (t == null ? void 0 : t.height) ?? 0, this.verticalAlign = (t == null ? void 0 : t.verticalAlign) ?? "top", this.rotation = (t == null ? void 0 : t.rotation) ?? 0;
|
|
3254
3295
|
}
|
|
@@ -3278,8 +3319,8 @@ class ue {
|
|
|
3278
3319
|
const n = i.split(/\s+/);
|
|
3279
3320
|
let r = "";
|
|
3280
3321
|
for (const o of n) {
|
|
3281
|
-
const
|
|
3282
|
-
t.measureText(
|
|
3322
|
+
const h = r ? `${r} ${o}` : o;
|
|
3323
|
+
t.measureText(h).width > this.width && r ? (s.push(r), r = o) : r = h;
|
|
3283
3324
|
}
|
|
3284
3325
|
r && s.push(r);
|
|
3285
3326
|
}
|
|
@@ -3325,8 +3366,8 @@ class ue {
|
|
|
3325
3366
|
t.save(), t.globalAlpha = this.opacity, t.font = this._font(), t.fillStyle = this.color, t.textBaseline = "top";
|
|
3326
3367
|
const s = this.fontSize * this.lineHeight, i = this.width > 0 ? this.width : this._maxLineWidth(t, e), n = e.length * s, r = this.height > 0 ? this.height : n;
|
|
3327
3368
|
if (this.rotation !== 0) {
|
|
3328
|
-
const
|
|
3329
|
-
t.translate(
|
|
3369
|
+
const h = this.x + i / 2, u = this.y + r / 2;
|
|
3370
|
+
t.translate(h, u), t.rotate(this.rotation), t.translate(-h, -u);
|
|
3330
3371
|
}
|
|
3331
3372
|
this.background && (t.fillStyle = this.background, t.fillRect(
|
|
3332
3373
|
this.x - this.backgroundPadding,
|
|
@@ -3336,49 +3377,49 @@ class ue {
|
|
|
3336
3377
|
), t.fillStyle = this.color), this.shadowColor && this.shadowBlur > 0 && (t.shadowColor = this.shadowColor, t.shadowBlur = this.shadowBlur, t.shadowOffsetX = this.shadowOffsetX, t.shadowOffsetY = this.shadowOffsetY);
|
|
3337
3378
|
let o = this.y;
|
|
3338
3379
|
this.height > 0 && this.verticalAlign !== "top" && (this.verticalAlign === "middle" ? o = this.y + (this.height - n) / 2 : this.verticalAlign === "bottom" && (o = this.y + this.height - n));
|
|
3339
|
-
for (let
|
|
3340
|
-
let
|
|
3341
|
-
this.textAlign === "center" ?
|
|
3342
|
-
const
|
|
3343
|
-
if (t.fillText(e[
|
|
3344
|
-
const d = t.shadowColor,
|
|
3380
|
+
for (let h = 0; h < e.length; h++) {
|
|
3381
|
+
let u = this.x;
|
|
3382
|
+
this.textAlign === "center" ? u = this.x + (i - t.measureText(e[h]).width) / 2 : this.textAlign === "right" && (u = this.x + i - t.measureText(e[h]).width);
|
|
3383
|
+
const c = o + h * s;
|
|
3384
|
+
if (t.fillText(e[h], u, c), this.textDecoration !== "none") {
|
|
3385
|
+
const d = t.shadowColor, f = t.shadowBlur;
|
|
3345
3386
|
t.shadowColor = "", t.shadowBlur = 0;
|
|
3346
|
-
const
|
|
3387
|
+
const g = t.measureText(e[h]).width;
|
|
3347
3388
|
if (t.beginPath(), t.strokeStyle = this.color, t.lineWidth = 1, this.textDecoration === "underline") {
|
|
3348
|
-
const m =
|
|
3349
|
-
t.moveTo(
|
|
3389
|
+
const m = c + this.fontSize + 2;
|
|
3390
|
+
t.moveTo(u, m), t.lineTo(u + g, m);
|
|
3350
3391
|
} else if (this.textDecoration === "strikethrough") {
|
|
3351
|
-
const m =
|
|
3352
|
-
t.moveTo(
|
|
3392
|
+
const m = c + this.fontSize * 0.55;
|
|
3393
|
+
t.moveTo(u, m), t.lineTo(u + g, m);
|
|
3353
3394
|
}
|
|
3354
|
-
t.stroke(), t.shadowColor = d, t.shadowBlur =
|
|
3395
|
+
t.stroke(), t.shadowColor = d, t.shadowBlur = f;
|
|
3355
3396
|
}
|
|
3356
3397
|
}
|
|
3357
3398
|
t.restore();
|
|
3358
3399
|
}
|
|
3359
3400
|
}
|
|
3360
|
-
function
|
|
3361
|
-
return
|
|
3401
|
+
function os(a) {
|
|
3402
|
+
return a.map instanceof l.Texture;
|
|
3362
3403
|
}
|
|
3363
|
-
function
|
|
3364
|
-
|
|
3404
|
+
function pe(a, t) {
|
|
3405
|
+
a.traverse((e) => {
|
|
3365
3406
|
if (!e.isMesh) return;
|
|
3366
3407
|
const s = e, i = Array.isArray(s.material) ? s.material : [s.material];
|
|
3367
3408
|
for (const n of i)
|
|
3368
|
-
|
|
3409
|
+
os(n) && n.map.image === t && (n.map.needsUpdate = !0);
|
|
3369
3410
|
});
|
|
3370
3411
|
}
|
|
3371
|
-
function
|
|
3372
|
-
t.x !== void 0 && (
|
|
3412
|
+
function xe(a, t) {
|
|
3413
|
+
t.x !== void 0 && (a.x = t.x), t.y !== void 0 && (a.y = t.y), t.width !== void 0 && (a.width = t.width), t.text !== void 0 && (a.text = t.text), t.fontFamily !== void 0 && (a.fontFamily = t.fontFamily), t.fontSize !== void 0 && (a.fontSize = t.fontSize), t.fontWeight !== void 0 && (a.fontWeight = t.fontWeight), t.fontStyle !== void 0 && (a.fontStyle = t.fontStyle), t.color !== void 0 && (a.color = t.color), t.lineHeight !== void 0 && (a.lineHeight = t.lineHeight), t.textAlign !== void 0 && (a.textAlign = t.textAlign), t.opacity !== void 0 && (a.opacity = t.opacity), t.shadowColor !== void 0 && (a.shadowColor = t.shadowColor), t.shadowBlur !== void 0 && (a.shadowBlur = t.shadowBlur), t.shadowOffsetX !== void 0 && (a.shadowOffsetX = t.shadowOffsetX), t.shadowOffsetY !== void 0 && (a.shadowOffsetY = t.shadowOffsetY), t.textTransform !== void 0 && (a.textTransform = t.textTransform), t.textDecoration !== void 0 && (a.textDecoration = t.textDecoration), t.background !== void 0 && (a.background = t.background), t.backgroundPadding !== void 0 && (a.backgroundPadding = t.backgroundPadding), t.maxLines !== void 0 && (a.maxLines = t.maxLines), t.height !== void 0 && (a.height = t.height), t.verticalAlign !== void 0 && (a.verticalAlign = t.verticalAlign), t.rotation !== void 0 && (a.rotation = t.rotation);
|
|
3373
3414
|
}
|
|
3374
|
-
class
|
|
3415
|
+
class fs {
|
|
3375
3416
|
constructor(t) {
|
|
3376
|
-
this.texts = [], this._textureST = new
|
|
3417
|
+
this.texts = [], this._textureST = new l.Vector4(1, 1, 0, 0), this._dirty = !0;
|
|
3377
3418
|
const e = (t == null ? void 0 : t.width) ?? 512, s = (t == null ? void 0 : t.height) ?? 512;
|
|
3378
3419
|
this.canvas = document.createElement("canvas"), this.canvas.width = e, this.canvas.height = s;
|
|
3379
3420
|
const i = this.canvas.getContext("2d");
|
|
3380
3421
|
if (!i) throw new Error("TextOverlayContent: could not get 2D context");
|
|
3381
|
-
this.ctx = i, this._source = (t == null ? void 0 : t.source) ?? null, this._texture = new
|
|
3422
|
+
this.ctx = i, this._source = (t == null ? void 0 : t.source) ?? null, this._texture = new l.CanvasTexture(this.canvas), this._texture.colorSpace = l.SRGBColorSpace;
|
|
3382
3423
|
}
|
|
3383
3424
|
get texture() {
|
|
3384
3425
|
return this._texture;
|
|
@@ -3399,7 +3440,7 @@ class hs {
|
|
|
3399
3440
|
}
|
|
3400
3441
|
// ── Text API ─────────────────────────────────────────────────────────────
|
|
3401
3442
|
addText(t) {
|
|
3402
|
-
const e = new
|
|
3443
|
+
const e = new ge(t);
|
|
3403
3444
|
return this.texts.push(e), this._dirty = !0, e;
|
|
3404
3445
|
}
|
|
3405
3446
|
removeText(t) {
|
|
@@ -3409,7 +3450,7 @@ class hs {
|
|
|
3409
3450
|
/** Update a text block by index. Only provided fields are changed. */
|
|
3410
3451
|
updateText(t, e) {
|
|
3411
3452
|
const s = this.texts[t];
|
|
3412
|
-
s && (
|
|
3453
|
+
s && (xe(s, e), this._dirty = !0);
|
|
3413
3454
|
}
|
|
3414
3455
|
// ── Per-frame update ─────────────────────────────────────────────────────
|
|
3415
3456
|
/**
|
|
@@ -3433,7 +3474,7 @@ class hs {
|
|
|
3433
3474
|
* source image is this overlay's canvas.
|
|
3434
3475
|
*/
|
|
3435
3476
|
syncMaterials(t) {
|
|
3436
|
-
|
|
3477
|
+
pe(t, this.canvas);
|
|
3437
3478
|
}
|
|
3438
3479
|
// ── IPageContent ─────────────────────────────────────────────────────────
|
|
3439
3480
|
isPointOverUI(t) {
|
|
@@ -3447,9 +3488,9 @@ class hs {
|
|
|
3447
3488
|
this._texture.dispose(), this.canvas.width = 0, this.canvas.height = 0;
|
|
3448
3489
|
}
|
|
3449
3490
|
}
|
|
3450
|
-
class
|
|
3491
|
+
class oe {
|
|
3451
3492
|
constructor(t, e) {
|
|
3452
|
-
this._spread = t, this._textureST = e === "left" ? new
|
|
3493
|
+
this._spread = t, this._textureST = e === "left" ? new l.Vector4(0.5, 1, 0, 0) : new l.Vector4(0.5, 1, 0.5, 0);
|
|
3453
3494
|
}
|
|
3454
3495
|
get texture() {
|
|
3455
3496
|
return this._spread.texture;
|
|
@@ -3465,18 +3506,18 @@ class ee {
|
|
|
3465
3506
|
setActive(t) {
|
|
3466
3507
|
}
|
|
3467
3508
|
}
|
|
3468
|
-
function
|
|
3509
|
+
function gs(a) {
|
|
3469
3510
|
const t = [];
|
|
3470
|
-
for (let e = 1; e + 1 <
|
|
3511
|
+
for (let e = 1; e + 1 < a; e += 2)
|
|
3471
3512
|
t.push(e);
|
|
3472
3513
|
return t;
|
|
3473
3514
|
}
|
|
3474
|
-
class
|
|
3515
|
+
class ps {
|
|
3475
3516
|
constructor(t) {
|
|
3476
3517
|
this.texts = [], this._dirty = !0, this.pageWidth = (t == null ? void 0 : t.pageWidth) ?? 512, this.pageHeight = (t == null ? void 0 : t.pageHeight) ?? 512, this.canvas = document.createElement("canvas"), this.canvas.width = this.pageWidth * 2, this.canvas.height = this.pageHeight;
|
|
3477
3518
|
const e = this.canvas.getContext("2d");
|
|
3478
3519
|
if (!e) throw new Error("SpreadContent: could not get 2D context");
|
|
3479
|
-
this.ctx = e, this._source = (t == null ? void 0 : t.source) ?? null, this._texture = new
|
|
3520
|
+
this.ctx = e, this._source = (t == null ? void 0 : t.source) ?? null, this._texture = new l.CanvasTexture(this.canvas), this._texture.colorSpace = l.SRGBColorSpace, this.left = new oe(this, "left"), this.right = new oe(this, "right");
|
|
3480
3521
|
}
|
|
3481
3522
|
get texture() {
|
|
3482
3523
|
return this._texture;
|
|
@@ -3494,7 +3535,7 @@ class cs {
|
|
|
3494
3535
|
}
|
|
3495
3536
|
// ── Text API ─────────────────────────────────────────────────────────────
|
|
3496
3537
|
addText(t) {
|
|
3497
|
-
const e = new
|
|
3538
|
+
const e = new ge(t);
|
|
3498
3539
|
return this.texts.push(e), this._dirty = !0, e;
|
|
3499
3540
|
}
|
|
3500
3541
|
removeText(t) {
|
|
@@ -3504,7 +3545,7 @@ class cs {
|
|
|
3504
3545
|
/** Update a text block by index. Only provided fields are changed. */
|
|
3505
3546
|
updateText(t, e) {
|
|
3506
3547
|
const s = this.texts[t];
|
|
3507
|
-
s && (
|
|
3548
|
+
s && (xe(s, e), this._dirty = !0);
|
|
3508
3549
|
}
|
|
3509
3550
|
// ── Per-frame update ─────────────────────────────────────────────────────
|
|
3510
3551
|
/**
|
|
@@ -3527,117 +3568,117 @@ class cs {
|
|
|
3527
3568
|
* source image is this spread's canvas.
|
|
3528
3569
|
*/
|
|
3529
3570
|
syncMaterials(t) {
|
|
3530
|
-
|
|
3571
|
+
pe(t, this.canvas);
|
|
3531
3572
|
}
|
|
3532
3573
|
// ── Lifecycle ────────────────────────────────────────────────────────────
|
|
3533
3574
|
dispose() {
|
|
3534
3575
|
this._texture.dispose(), this.canvas.width = 0, this.canvas.height = 0;
|
|
3535
3576
|
}
|
|
3536
3577
|
}
|
|
3537
|
-
const
|
|
3538
|
-
function
|
|
3539
|
-
const o = t.naturalWidth || t.width,
|
|
3540
|
-
if (o <= 0 ||
|
|
3578
|
+
const ae = 256;
|
|
3579
|
+
function as(a, t, e, s, i, n, r) {
|
|
3580
|
+
const o = t.naturalWidth || t.width, h = t.naturalHeight || t.height;
|
|
3581
|
+
if (o <= 0 || h <= 0) return;
|
|
3541
3582
|
if (r === "fill") {
|
|
3542
|
-
|
|
3583
|
+
a.drawImage(t, e, s, i, n);
|
|
3543
3584
|
return;
|
|
3544
3585
|
}
|
|
3545
|
-
const
|
|
3546
|
-
|
|
3586
|
+
const u = r === "contain" ? Math.min(i / o, n / h) : Math.max(i / o, n / h), c = o * u, d = h * u;
|
|
3587
|
+
a.drawImage(t, e + (i - c) * 0.5, s + (n - d) * 0.5, c, d);
|
|
3547
3588
|
}
|
|
3548
|
-
function
|
|
3549
|
-
const n = i ? 0 : Math.round(Math.min(t, e) * 0.11), r = n, o = n,
|
|
3550
|
-
if (s === "fill" ||
|
|
3551
|
-
return { x: r, y: o, width:
|
|
3552
|
-
const
|
|
3589
|
+
function xs(a, t, e, s, i) {
|
|
3590
|
+
const n = i ? 0 : Math.round(Math.min(t, e) * 0.11), r = n, o = n, h = t - n * 2, u = e - n * 2, c = a.naturalWidth || a.width, d = a.naturalHeight || a.height;
|
|
3591
|
+
if (s === "fill" || c <= 0 || d <= 0)
|
|
3592
|
+
return { x: r, y: o, width: h, height: u };
|
|
3593
|
+
const f = s === "contain" ? Math.min(h / c, u / d) : Math.max(h / c, u / d), g = c * f, m = d * f;
|
|
3553
3594
|
return {
|
|
3554
|
-
x: r + (
|
|
3555
|
-
y: o + (
|
|
3556
|
-
width:
|
|
3595
|
+
x: r + (h - g) * 0.5,
|
|
3596
|
+
y: o + (u - m) * 0.5,
|
|
3597
|
+
width: g,
|
|
3557
3598
|
height: m
|
|
3558
3599
|
};
|
|
3559
3600
|
}
|
|
3560
|
-
function
|
|
3561
|
-
const
|
|
3562
|
-
|
|
3563
|
-
const d =
|
|
3564
|
-
if (d.fillStyle =
|
|
3601
|
+
function hs(a, t, e, s, i, n, r, o) {
|
|
3602
|
+
const h = n ? Math.round(n * ae) : 512, u = r ? Math.round(r * ae) : 512, c = document.createElement("canvas");
|
|
3603
|
+
c.width = h, c.height = u;
|
|
3604
|
+
const d = c.getContext("2d");
|
|
3605
|
+
if (d.fillStyle = a, d.fillRect(0, 0, h, u), e)
|
|
3565
3606
|
if (o)
|
|
3566
3607
|
d.drawImage(e, o.x, o.y, o.width, o.height);
|
|
3567
3608
|
else {
|
|
3568
|
-
const
|
|
3569
|
-
|
|
3609
|
+
const f = i ? 0 : Math.round(Math.min(h, u) * 0.11);
|
|
3610
|
+
as(d, e, f, f, h - f * 2, u - f * 2, s);
|
|
3570
3611
|
}
|
|
3571
3612
|
else {
|
|
3572
3613
|
d.fillStyle = "#333";
|
|
3573
|
-
const
|
|
3574
|
-
d.font = `bold ${
|
|
3614
|
+
const f = Math.round(Math.min(h, u) * 0.094);
|
|
3615
|
+
d.font = `bold ${f}px Arial`, d.textAlign = "center", d.textBaseline = "middle", d.fillText(t, h / 2, u / 2);
|
|
3575
3616
|
}
|
|
3576
|
-
return
|
|
3617
|
+
return c;
|
|
3577
3618
|
}
|
|
3578
|
-
function
|
|
3579
|
-
const
|
|
3580
|
-
return
|
|
3619
|
+
function Ms(a, t, e, s, i, n, r, o) {
|
|
3620
|
+
const h = hs(a, t, e, s, i, n, r, o), u = new l.CanvasTexture(h);
|
|
3621
|
+
return u.colorSpace = l.SRGBColorSpace, u;
|
|
3581
3622
|
}
|
|
3582
|
-
async function
|
|
3583
|
-
if (!
|
|
3584
|
-
const t = URL.createObjectURL(
|
|
3623
|
+
async function ys(a) {
|
|
3624
|
+
if (!a) return null;
|
|
3625
|
+
const t = URL.createObjectURL(a), e = new Image();
|
|
3585
3626
|
e.decoding = "async", e.src = t;
|
|
3586
3627
|
try {
|
|
3587
3628
|
return await new Promise((s, i) => {
|
|
3588
|
-
e.onload = () => s(), e.onerror = () => i(new Error(`Failed to decode image: ${
|
|
3629
|
+
e.onload = () => s(), e.onerror = () => i(new Error(`Failed to decode image: ${a.name}`));
|
|
3589
3630
|
}), { image: e, objectUrl: t };
|
|
3590
3631
|
} catch (s) {
|
|
3591
3632
|
return URL.revokeObjectURL(t), console.error(s), null;
|
|
3592
3633
|
}
|
|
3593
3634
|
}
|
|
3594
3635
|
export {
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3636
|
+
He as AnimationCurve,
|
|
3637
|
+
Rt as AutoTurnDirection,
|
|
3638
|
+
Ct as AutoTurnMode,
|
|
3639
|
+
ft as AutoTurnSetting,
|
|
3640
|
+
Ae as AutoTurnSettingCurveTimeMode,
|
|
3641
|
+
Ie as AutoTurnSettingMode,
|
|
3642
|
+
Kt as AutoTurnSettings,
|
|
3643
|
+
Vt as Book,
|
|
3644
|
+
_e as BookBinding,
|
|
3645
|
+
fe as BookBound,
|
|
3646
|
+
us as BookContent,
|
|
3647
|
+
ut as BookDirection,
|
|
3648
|
+
ue as BookHeightException,
|
|
3649
|
+
ms as BookPointerInteraction,
|
|
3650
|
+
ze as BookRenderer,
|
|
3651
|
+
Dt as Cylinder,
|
|
3652
|
+
_s as GluedBookBinding,
|
|
3653
|
+
ns as GluedBookBound,
|
|
3654
|
+
ss as GluedSetup,
|
|
3655
|
+
Be as MeshFactory,
|
|
3656
|
+
ae as PX_PER_UNIT,
|
|
3657
|
+
ls as PageContent,
|
|
3658
|
+
be as Paper,
|
|
3659
|
+
St as PaperBorder,
|
|
3660
|
+
Gt as PaperMaterialData,
|
|
3661
|
+
Qt as PaperMeshData,
|
|
3662
|
+
De as PaperMeshDataPool,
|
|
3663
|
+
cs as PaperMeshUtility,
|
|
3664
|
+
dt as PaperNode,
|
|
3665
|
+
he as PaperNodeMargin,
|
|
3666
|
+
me as PaperPattern,
|
|
3667
|
+
It as PaperSeam,
|
|
3668
|
+
_t as PaperSetup,
|
|
3669
|
+
kt as PaperUVMargin,
|
|
3670
|
+
Re as RendererFactory,
|
|
3671
|
+
ps as SpreadContent,
|
|
3672
|
+
Jt as SpritePageContent2,
|
|
3673
|
+
ds as StapleBookBinding,
|
|
3674
|
+
je as StapleBookBound,
|
|
3675
|
+
qe as StapleSetup,
|
|
3676
|
+
ge as TextBlock,
|
|
3677
|
+
fs as TextOverlayContent,
|
|
3678
|
+
xs as computeDefaultImageRect,
|
|
3679
|
+
hs as createPageCanvas,
|
|
3680
|
+
Ms as createPageTexture,
|
|
3681
|
+
as as drawImageWithFit,
|
|
3682
|
+
gs as getSpreadPairs,
|
|
3683
|
+
ys as loadImage
|
|
3643
3684
|
};
|