quake2ts 0.0.52 → 0.0.55
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/apps/demo/dist/assets/index-BBC0sAl6.js +1 -0
- package/apps/demo/dist/index.html +20 -0
- package/apps/viewer/dist/browser/index.global.js +1 -1
- package/apps/viewer/dist/browser/index.global.js.map +1 -1
- package/apps/viewer/dist/cjs/index.cjs +2627 -414
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +2627 -414
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/viewer/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +2101 -108
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +2107 -108
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +3 -2
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/prediction.d.ts +3 -1
- package/packages/client/dist/types/prediction.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +15 -15
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +18 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +17 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/host.d.ts +5 -2
- package/packages/engine/dist/types/host.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +3 -2
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/camera.d.ts +8 -0
- package/packages/engine/dist/types/render/camera.d.ts.map +1 -0
- package/packages/engine/dist/types/render/draw.d.ts +9 -0
- package/packages/engine/dist/types/render/draw.d.ts.map +1 -0
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +200 -3
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +200 -3
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/spawn.d.ts +1 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +1 -0
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +2 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +68 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +67 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/index.d.ts +2 -1
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/pmove/apply.d.ts +5 -0
- package/packages/shared/dist/types/pmove/apply.d.ts.map +1 -0
- package/packages/shared/dist/types/pmove/index.d.ts +18 -0
- package/packages/shared/dist/types/pmove/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts +6 -0
- package/packages/shared/dist/types/protocol/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts +11 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,75 +1,1736 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/common.js
|
|
8
|
+
var EPSILON = 1e-6;
|
|
9
|
+
var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
|
10
|
+
var RANDOM = Math.random;
|
|
11
|
+
function round(a) {
|
|
12
|
+
if (a >= 0) return Math.round(a);
|
|
13
|
+
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
|
6
14
|
}
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
var degree = Math.PI / 180;
|
|
16
|
+
var radian = 180 / Math.PI;
|
|
17
|
+
|
|
18
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/mat4.js
|
|
19
|
+
var mat4_exports = {};
|
|
20
|
+
__export(mat4_exports, {
|
|
21
|
+
add: () => add,
|
|
22
|
+
adjoint: () => adjoint,
|
|
23
|
+
clone: () => clone,
|
|
24
|
+
copy: () => copy,
|
|
25
|
+
create: () => create,
|
|
26
|
+
decompose: () => decompose,
|
|
27
|
+
determinant: () => determinant,
|
|
28
|
+
equals: () => equals,
|
|
29
|
+
exactEquals: () => exactEquals,
|
|
30
|
+
frob: () => frob,
|
|
31
|
+
fromQuat: () => fromQuat,
|
|
32
|
+
fromQuat2: () => fromQuat2,
|
|
33
|
+
fromRotation: () => fromRotation,
|
|
34
|
+
fromRotationTranslation: () => fromRotationTranslation,
|
|
35
|
+
fromRotationTranslationScale: () => fromRotationTranslationScale,
|
|
36
|
+
fromRotationTranslationScaleOrigin: () => fromRotationTranslationScaleOrigin,
|
|
37
|
+
fromScaling: () => fromScaling,
|
|
38
|
+
fromTranslation: () => fromTranslation,
|
|
39
|
+
fromValues: () => fromValues,
|
|
40
|
+
fromXRotation: () => fromXRotation,
|
|
41
|
+
fromYRotation: () => fromYRotation,
|
|
42
|
+
fromZRotation: () => fromZRotation,
|
|
43
|
+
frustum: () => frustum,
|
|
44
|
+
getRotation: () => getRotation,
|
|
45
|
+
getScaling: () => getScaling,
|
|
46
|
+
getTranslation: () => getTranslation,
|
|
47
|
+
identity: () => identity,
|
|
48
|
+
invert: () => invert,
|
|
49
|
+
lookAt: () => lookAt,
|
|
50
|
+
mul: () => mul,
|
|
51
|
+
multiply: () => multiply,
|
|
52
|
+
multiplyScalar: () => multiplyScalar,
|
|
53
|
+
multiplyScalarAndAdd: () => multiplyScalarAndAdd,
|
|
54
|
+
ortho: () => ortho,
|
|
55
|
+
orthoNO: () => orthoNO,
|
|
56
|
+
orthoZO: () => orthoZO,
|
|
57
|
+
perspective: () => perspective,
|
|
58
|
+
perspectiveFromFieldOfView: () => perspectiveFromFieldOfView,
|
|
59
|
+
perspectiveNO: () => perspectiveNO,
|
|
60
|
+
perspectiveZO: () => perspectiveZO,
|
|
61
|
+
rotate: () => rotate,
|
|
62
|
+
rotateX: () => rotateX,
|
|
63
|
+
rotateY: () => rotateY,
|
|
64
|
+
rotateZ: () => rotateZ,
|
|
65
|
+
scale: () => scale,
|
|
66
|
+
set: () => set,
|
|
67
|
+
str: () => str,
|
|
68
|
+
sub: () => sub,
|
|
69
|
+
subtract: () => subtract,
|
|
70
|
+
targetTo: () => targetTo,
|
|
71
|
+
translate: () => translate,
|
|
72
|
+
transpose: () => transpose
|
|
73
|
+
});
|
|
74
|
+
function create() {
|
|
75
|
+
var out = new ARRAY_TYPE(16);
|
|
76
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
77
|
+
out[1] = 0;
|
|
78
|
+
out[2] = 0;
|
|
79
|
+
out[3] = 0;
|
|
80
|
+
out[4] = 0;
|
|
81
|
+
out[6] = 0;
|
|
82
|
+
out[7] = 0;
|
|
83
|
+
out[8] = 0;
|
|
84
|
+
out[9] = 0;
|
|
85
|
+
out[11] = 0;
|
|
86
|
+
out[12] = 0;
|
|
87
|
+
out[13] = 0;
|
|
88
|
+
out[14] = 0;
|
|
89
|
+
}
|
|
90
|
+
out[0] = 1;
|
|
91
|
+
out[5] = 1;
|
|
92
|
+
out[10] = 1;
|
|
93
|
+
out[15] = 1;
|
|
94
|
+
return out;
|
|
9
95
|
}
|
|
10
|
-
function
|
|
11
|
-
|
|
96
|
+
function clone(a) {
|
|
97
|
+
var out = new ARRAY_TYPE(16);
|
|
98
|
+
out[0] = a[0];
|
|
99
|
+
out[1] = a[1];
|
|
100
|
+
out[2] = a[2];
|
|
101
|
+
out[3] = a[3];
|
|
102
|
+
out[4] = a[4];
|
|
103
|
+
out[5] = a[5];
|
|
104
|
+
out[6] = a[6];
|
|
105
|
+
out[7] = a[7];
|
|
106
|
+
out[8] = a[8];
|
|
107
|
+
out[9] = a[9];
|
|
108
|
+
out[10] = a[10];
|
|
109
|
+
out[11] = a[11];
|
|
110
|
+
out[12] = a[12];
|
|
111
|
+
out[13] = a[13];
|
|
112
|
+
out[14] = a[14];
|
|
113
|
+
out[15] = a[15];
|
|
114
|
+
return out;
|
|
12
115
|
}
|
|
13
|
-
function
|
|
14
|
-
|
|
116
|
+
function copy(out, a) {
|
|
117
|
+
out[0] = a[0];
|
|
118
|
+
out[1] = a[1];
|
|
119
|
+
out[2] = a[2];
|
|
120
|
+
out[3] = a[3];
|
|
121
|
+
out[4] = a[4];
|
|
122
|
+
out[5] = a[5];
|
|
123
|
+
out[6] = a[6];
|
|
124
|
+
out[7] = a[7];
|
|
125
|
+
out[8] = a[8];
|
|
126
|
+
out[9] = a[9];
|
|
127
|
+
out[10] = a[10];
|
|
128
|
+
out[11] = a[11];
|
|
129
|
+
out[12] = a[12];
|
|
130
|
+
out[13] = a[13];
|
|
131
|
+
out[14] = a[14];
|
|
132
|
+
out[15] = a[15];
|
|
133
|
+
return out;
|
|
15
134
|
}
|
|
16
|
-
function
|
|
17
|
-
|
|
135
|
+
function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
136
|
+
var out = new ARRAY_TYPE(16);
|
|
137
|
+
out[0] = m00;
|
|
138
|
+
out[1] = m01;
|
|
139
|
+
out[2] = m02;
|
|
140
|
+
out[3] = m03;
|
|
141
|
+
out[4] = m10;
|
|
142
|
+
out[5] = m11;
|
|
143
|
+
out[6] = m12;
|
|
144
|
+
out[7] = m13;
|
|
145
|
+
out[8] = m20;
|
|
146
|
+
out[9] = m21;
|
|
147
|
+
out[10] = m22;
|
|
148
|
+
out[11] = m23;
|
|
149
|
+
out[12] = m30;
|
|
150
|
+
out[13] = m31;
|
|
151
|
+
out[14] = m32;
|
|
152
|
+
out[15] = m33;
|
|
153
|
+
return out;
|
|
18
154
|
}
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
155
|
+
function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
156
|
+
out[0] = m00;
|
|
157
|
+
out[1] = m01;
|
|
158
|
+
out[2] = m02;
|
|
159
|
+
out[3] = m03;
|
|
160
|
+
out[4] = m10;
|
|
161
|
+
out[5] = m11;
|
|
162
|
+
out[6] = m12;
|
|
163
|
+
out[7] = m13;
|
|
164
|
+
out[8] = m20;
|
|
165
|
+
out[9] = m21;
|
|
166
|
+
out[10] = m22;
|
|
167
|
+
out[11] = m23;
|
|
168
|
+
out[12] = m30;
|
|
169
|
+
out[13] = m31;
|
|
170
|
+
out[14] = m32;
|
|
171
|
+
out[15] = m33;
|
|
172
|
+
return out;
|
|
22
173
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
174
|
+
function identity(out) {
|
|
175
|
+
out[0] = 1;
|
|
176
|
+
out[1] = 0;
|
|
177
|
+
out[2] = 0;
|
|
178
|
+
out[3] = 0;
|
|
179
|
+
out[4] = 0;
|
|
180
|
+
out[5] = 1;
|
|
181
|
+
out[6] = 0;
|
|
182
|
+
out[7] = 0;
|
|
183
|
+
out[8] = 0;
|
|
184
|
+
out[9] = 0;
|
|
185
|
+
out[10] = 1;
|
|
186
|
+
out[11] = 0;
|
|
187
|
+
out[12] = 0;
|
|
188
|
+
out[13] = 0;
|
|
189
|
+
out[14] = 0;
|
|
190
|
+
out[15] = 1;
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
function transpose(out, a) {
|
|
194
|
+
if (out === a) {
|
|
195
|
+
var a01 = a[1], a02 = a[2], a03 = a[3];
|
|
196
|
+
var a12 = a[6], a13 = a[7];
|
|
197
|
+
var a23 = a[11];
|
|
198
|
+
out[1] = a[4];
|
|
199
|
+
out[2] = a[8];
|
|
200
|
+
out[3] = a[12];
|
|
201
|
+
out[4] = a01;
|
|
202
|
+
out[6] = a[9];
|
|
203
|
+
out[7] = a[13];
|
|
204
|
+
out[8] = a02;
|
|
205
|
+
out[9] = a12;
|
|
206
|
+
out[11] = a[14];
|
|
207
|
+
out[12] = a03;
|
|
208
|
+
out[13] = a13;
|
|
209
|
+
out[14] = a23;
|
|
210
|
+
} else {
|
|
211
|
+
out[0] = a[0];
|
|
212
|
+
out[1] = a[4];
|
|
213
|
+
out[2] = a[8];
|
|
214
|
+
out[3] = a[12];
|
|
215
|
+
out[4] = a[1];
|
|
216
|
+
out[5] = a[5];
|
|
217
|
+
out[6] = a[9];
|
|
218
|
+
out[7] = a[13];
|
|
219
|
+
out[8] = a[2];
|
|
220
|
+
out[9] = a[6];
|
|
221
|
+
out[10] = a[10];
|
|
222
|
+
out[11] = a[14];
|
|
223
|
+
out[12] = a[3];
|
|
224
|
+
out[13] = a[7];
|
|
225
|
+
out[14] = a[11];
|
|
226
|
+
out[15] = a[15];
|
|
227
|
+
}
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
function invert(out, a) {
|
|
231
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
232
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
233
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
234
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
235
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
236
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
237
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
238
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
239
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
240
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
241
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
242
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
243
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
244
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
245
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
246
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
247
|
+
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
248
|
+
if (!det) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
det = 1 / det;
|
|
252
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
253
|
+
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
254
|
+
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
255
|
+
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
|
|
256
|
+
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
257
|
+
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
258
|
+
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
259
|
+
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
|
|
260
|
+
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
261
|
+
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
262
|
+
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
263
|
+
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
|
|
264
|
+
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
|
|
265
|
+
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
|
|
266
|
+
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
|
|
267
|
+
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
|
|
268
|
+
return out;
|
|
269
|
+
}
|
|
270
|
+
function adjoint(out, a) {
|
|
271
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
272
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
273
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
274
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
275
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
276
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
277
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
278
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
279
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
280
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
281
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
282
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
283
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
284
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
285
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
286
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
287
|
+
out[0] = a11 * b11 - a12 * b10 + a13 * b09;
|
|
288
|
+
out[1] = a02 * b10 - a01 * b11 - a03 * b09;
|
|
289
|
+
out[2] = a31 * b05 - a32 * b04 + a33 * b03;
|
|
290
|
+
out[3] = a22 * b04 - a21 * b05 - a23 * b03;
|
|
291
|
+
out[4] = a12 * b08 - a10 * b11 - a13 * b07;
|
|
292
|
+
out[5] = a00 * b11 - a02 * b08 + a03 * b07;
|
|
293
|
+
out[6] = a32 * b02 - a30 * b05 - a33 * b01;
|
|
294
|
+
out[7] = a20 * b05 - a22 * b02 + a23 * b01;
|
|
295
|
+
out[8] = a10 * b10 - a11 * b08 + a13 * b06;
|
|
296
|
+
out[9] = a01 * b08 - a00 * b10 - a03 * b06;
|
|
297
|
+
out[10] = a30 * b04 - a31 * b02 + a33 * b00;
|
|
298
|
+
out[11] = a21 * b02 - a20 * b04 - a23 * b00;
|
|
299
|
+
out[12] = a11 * b07 - a10 * b09 - a12 * b06;
|
|
300
|
+
out[13] = a00 * b09 - a01 * b07 + a02 * b06;
|
|
301
|
+
out[14] = a31 * b01 - a30 * b03 - a32 * b00;
|
|
302
|
+
out[15] = a20 * b03 - a21 * b01 + a22 * b00;
|
|
303
|
+
return out;
|
|
304
|
+
}
|
|
305
|
+
function determinant(a) {
|
|
306
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
307
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
308
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
309
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
310
|
+
var b0 = a00 * a11 - a01 * a10;
|
|
311
|
+
var b1 = a00 * a12 - a02 * a10;
|
|
312
|
+
var b2 = a01 * a12 - a02 * a11;
|
|
313
|
+
var b3 = a20 * a31 - a21 * a30;
|
|
314
|
+
var b4 = a20 * a32 - a22 * a30;
|
|
315
|
+
var b5 = a21 * a32 - a22 * a31;
|
|
316
|
+
var b6 = a00 * b5 - a01 * b4 + a02 * b3;
|
|
317
|
+
var b7 = a10 * b5 - a11 * b4 + a12 * b3;
|
|
318
|
+
var b8 = a20 * b2 - a21 * b1 + a22 * b0;
|
|
319
|
+
var b9 = a30 * b2 - a31 * b1 + a32 * b0;
|
|
320
|
+
return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
|
|
321
|
+
}
|
|
322
|
+
function multiply(out, a, b) {
|
|
323
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
324
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
325
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
326
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
327
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
328
|
+
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
329
|
+
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
330
|
+
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
331
|
+
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
332
|
+
b0 = b[4];
|
|
333
|
+
b1 = b[5];
|
|
334
|
+
b2 = b[6];
|
|
335
|
+
b3 = b[7];
|
|
336
|
+
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
337
|
+
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
338
|
+
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
339
|
+
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
340
|
+
b0 = b[8];
|
|
341
|
+
b1 = b[9];
|
|
342
|
+
b2 = b[10];
|
|
343
|
+
b3 = b[11];
|
|
344
|
+
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
345
|
+
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
346
|
+
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
347
|
+
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
348
|
+
b0 = b[12];
|
|
349
|
+
b1 = b[13];
|
|
350
|
+
b2 = b[14];
|
|
351
|
+
b3 = b[15];
|
|
352
|
+
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
353
|
+
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
354
|
+
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
355
|
+
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
356
|
+
return out;
|
|
357
|
+
}
|
|
358
|
+
function translate(out, a, v) {
|
|
359
|
+
var x = v[0], y = v[1], z = v[2];
|
|
360
|
+
var a00, a01, a02, a03;
|
|
361
|
+
var a10, a11, a12, a13;
|
|
362
|
+
var a20, a21, a22, a23;
|
|
363
|
+
if (a === out) {
|
|
364
|
+
out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
|
|
365
|
+
out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
|
|
366
|
+
out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
|
|
367
|
+
out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
|
|
368
|
+
} else {
|
|
369
|
+
a00 = a[0];
|
|
370
|
+
a01 = a[1];
|
|
371
|
+
a02 = a[2];
|
|
372
|
+
a03 = a[3];
|
|
373
|
+
a10 = a[4];
|
|
374
|
+
a11 = a[5];
|
|
375
|
+
a12 = a[6];
|
|
376
|
+
a13 = a[7];
|
|
377
|
+
a20 = a[8];
|
|
378
|
+
a21 = a[9];
|
|
379
|
+
a22 = a[10];
|
|
380
|
+
a23 = a[11];
|
|
381
|
+
out[0] = a00;
|
|
382
|
+
out[1] = a01;
|
|
383
|
+
out[2] = a02;
|
|
384
|
+
out[3] = a03;
|
|
385
|
+
out[4] = a10;
|
|
386
|
+
out[5] = a11;
|
|
387
|
+
out[6] = a12;
|
|
388
|
+
out[7] = a13;
|
|
389
|
+
out[8] = a20;
|
|
390
|
+
out[9] = a21;
|
|
391
|
+
out[10] = a22;
|
|
392
|
+
out[11] = a23;
|
|
393
|
+
out[12] = a00 * x + a10 * y + a20 * z + a[12];
|
|
394
|
+
out[13] = a01 * x + a11 * y + a21 * z + a[13];
|
|
395
|
+
out[14] = a02 * x + a12 * y + a22 * z + a[14];
|
|
396
|
+
out[15] = a03 * x + a13 * y + a23 * z + a[15];
|
|
397
|
+
}
|
|
398
|
+
return out;
|
|
399
|
+
}
|
|
400
|
+
function scale(out, a, v) {
|
|
401
|
+
var x = v[0], y = v[1], z = v[2];
|
|
402
|
+
out[0] = a[0] * x;
|
|
403
|
+
out[1] = a[1] * x;
|
|
404
|
+
out[2] = a[2] * x;
|
|
405
|
+
out[3] = a[3] * x;
|
|
406
|
+
out[4] = a[4] * y;
|
|
407
|
+
out[5] = a[5] * y;
|
|
408
|
+
out[6] = a[6] * y;
|
|
409
|
+
out[7] = a[7] * y;
|
|
410
|
+
out[8] = a[8] * z;
|
|
411
|
+
out[9] = a[9] * z;
|
|
412
|
+
out[10] = a[10] * z;
|
|
413
|
+
out[11] = a[11] * z;
|
|
414
|
+
out[12] = a[12];
|
|
415
|
+
out[13] = a[13];
|
|
416
|
+
out[14] = a[14];
|
|
417
|
+
out[15] = a[15];
|
|
418
|
+
return out;
|
|
419
|
+
}
|
|
420
|
+
function rotate(out, a, rad, axis) {
|
|
421
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
422
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
423
|
+
var s, c, t;
|
|
424
|
+
var a00, a01, a02, a03;
|
|
425
|
+
var a10, a11, a12, a13;
|
|
426
|
+
var a20, a21, a22, a23;
|
|
427
|
+
var b00, b01, b02;
|
|
428
|
+
var b10, b11, b12;
|
|
429
|
+
var b20, b21, b22;
|
|
430
|
+
if (len2 < EPSILON) {
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
len2 = 1 / len2;
|
|
434
|
+
x *= len2;
|
|
435
|
+
y *= len2;
|
|
436
|
+
z *= len2;
|
|
437
|
+
s = Math.sin(rad);
|
|
438
|
+
c = Math.cos(rad);
|
|
439
|
+
t = 1 - c;
|
|
440
|
+
a00 = a[0];
|
|
441
|
+
a01 = a[1];
|
|
442
|
+
a02 = a[2];
|
|
443
|
+
a03 = a[3];
|
|
444
|
+
a10 = a[4];
|
|
445
|
+
a11 = a[5];
|
|
446
|
+
a12 = a[6];
|
|
447
|
+
a13 = a[7];
|
|
448
|
+
a20 = a[8];
|
|
449
|
+
a21 = a[9];
|
|
450
|
+
a22 = a[10];
|
|
451
|
+
a23 = a[11];
|
|
452
|
+
b00 = x * x * t + c;
|
|
453
|
+
b01 = y * x * t + z * s;
|
|
454
|
+
b02 = z * x * t - y * s;
|
|
455
|
+
b10 = x * y * t - z * s;
|
|
456
|
+
b11 = y * y * t + c;
|
|
457
|
+
b12 = z * y * t + x * s;
|
|
458
|
+
b20 = x * z * t + y * s;
|
|
459
|
+
b21 = y * z * t - x * s;
|
|
460
|
+
b22 = z * z * t + c;
|
|
461
|
+
out[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
462
|
+
out[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
463
|
+
out[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
464
|
+
out[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
465
|
+
out[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
466
|
+
out[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
467
|
+
out[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
468
|
+
out[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
469
|
+
out[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
470
|
+
out[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
471
|
+
out[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
472
|
+
out[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
473
|
+
if (a !== out) {
|
|
474
|
+
out[12] = a[12];
|
|
475
|
+
out[13] = a[13];
|
|
476
|
+
out[14] = a[14];
|
|
477
|
+
out[15] = a[15];
|
|
478
|
+
}
|
|
479
|
+
return out;
|
|
480
|
+
}
|
|
481
|
+
function rotateX(out, a, rad) {
|
|
482
|
+
var s = Math.sin(rad);
|
|
483
|
+
var c = Math.cos(rad);
|
|
484
|
+
var a10 = a[4];
|
|
485
|
+
var a11 = a[5];
|
|
486
|
+
var a12 = a[6];
|
|
487
|
+
var a13 = a[7];
|
|
488
|
+
var a20 = a[8];
|
|
489
|
+
var a21 = a[9];
|
|
490
|
+
var a22 = a[10];
|
|
491
|
+
var a23 = a[11];
|
|
492
|
+
if (a !== out) {
|
|
493
|
+
out[0] = a[0];
|
|
494
|
+
out[1] = a[1];
|
|
495
|
+
out[2] = a[2];
|
|
496
|
+
out[3] = a[3];
|
|
497
|
+
out[12] = a[12];
|
|
498
|
+
out[13] = a[13];
|
|
499
|
+
out[14] = a[14];
|
|
500
|
+
out[15] = a[15];
|
|
501
|
+
}
|
|
502
|
+
out[4] = a10 * c + a20 * s;
|
|
503
|
+
out[5] = a11 * c + a21 * s;
|
|
504
|
+
out[6] = a12 * c + a22 * s;
|
|
505
|
+
out[7] = a13 * c + a23 * s;
|
|
506
|
+
out[8] = a20 * c - a10 * s;
|
|
507
|
+
out[9] = a21 * c - a11 * s;
|
|
508
|
+
out[10] = a22 * c - a12 * s;
|
|
509
|
+
out[11] = a23 * c - a13 * s;
|
|
510
|
+
return out;
|
|
511
|
+
}
|
|
512
|
+
function rotateY(out, a, rad) {
|
|
513
|
+
var s = Math.sin(rad);
|
|
514
|
+
var c = Math.cos(rad);
|
|
515
|
+
var a00 = a[0];
|
|
516
|
+
var a01 = a[1];
|
|
517
|
+
var a02 = a[2];
|
|
518
|
+
var a03 = a[3];
|
|
519
|
+
var a20 = a[8];
|
|
520
|
+
var a21 = a[9];
|
|
521
|
+
var a22 = a[10];
|
|
522
|
+
var a23 = a[11];
|
|
523
|
+
if (a !== out) {
|
|
524
|
+
out[4] = a[4];
|
|
525
|
+
out[5] = a[5];
|
|
526
|
+
out[6] = a[6];
|
|
527
|
+
out[7] = a[7];
|
|
528
|
+
out[12] = a[12];
|
|
529
|
+
out[13] = a[13];
|
|
530
|
+
out[14] = a[14];
|
|
531
|
+
out[15] = a[15];
|
|
532
|
+
}
|
|
533
|
+
out[0] = a00 * c - a20 * s;
|
|
534
|
+
out[1] = a01 * c - a21 * s;
|
|
535
|
+
out[2] = a02 * c - a22 * s;
|
|
536
|
+
out[3] = a03 * c - a23 * s;
|
|
537
|
+
out[8] = a00 * s + a20 * c;
|
|
538
|
+
out[9] = a01 * s + a21 * c;
|
|
539
|
+
out[10] = a02 * s + a22 * c;
|
|
540
|
+
out[11] = a03 * s + a23 * c;
|
|
541
|
+
return out;
|
|
542
|
+
}
|
|
543
|
+
function rotateZ(out, a, rad) {
|
|
544
|
+
var s = Math.sin(rad);
|
|
545
|
+
var c = Math.cos(rad);
|
|
546
|
+
var a00 = a[0];
|
|
547
|
+
var a01 = a[1];
|
|
548
|
+
var a02 = a[2];
|
|
549
|
+
var a03 = a[3];
|
|
550
|
+
var a10 = a[4];
|
|
551
|
+
var a11 = a[5];
|
|
552
|
+
var a12 = a[6];
|
|
553
|
+
var a13 = a[7];
|
|
554
|
+
if (a !== out) {
|
|
555
|
+
out[8] = a[8];
|
|
556
|
+
out[9] = a[9];
|
|
557
|
+
out[10] = a[10];
|
|
558
|
+
out[11] = a[11];
|
|
559
|
+
out[12] = a[12];
|
|
560
|
+
out[13] = a[13];
|
|
561
|
+
out[14] = a[14];
|
|
562
|
+
out[15] = a[15];
|
|
563
|
+
}
|
|
564
|
+
out[0] = a00 * c + a10 * s;
|
|
565
|
+
out[1] = a01 * c + a11 * s;
|
|
566
|
+
out[2] = a02 * c + a12 * s;
|
|
567
|
+
out[3] = a03 * c + a13 * s;
|
|
568
|
+
out[4] = a10 * c - a00 * s;
|
|
569
|
+
out[5] = a11 * c - a01 * s;
|
|
570
|
+
out[6] = a12 * c - a02 * s;
|
|
571
|
+
out[7] = a13 * c - a03 * s;
|
|
572
|
+
return out;
|
|
573
|
+
}
|
|
574
|
+
function fromTranslation(out, v) {
|
|
575
|
+
out[0] = 1;
|
|
576
|
+
out[1] = 0;
|
|
577
|
+
out[2] = 0;
|
|
578
|
+
out[3] = 0;
|
|
579
|
+
out[4] = 0;
|
|
580
|
+
out[5] = 1;
|
|
581
|
+
out[6] = 0;
|
|
582
|
+
out[7] = 0;
|
|
583
|
+
out[8] = 0;
|
|
584
|
+
out[9] = 0;
|
|
585
|
+
out[10] = 1;
|
|
586
|
+
out[11] = 0;
|
|
587
|
+
out[12] = v[0];
|
|
588
|
+
out[13] = v[1];
|
|
589
|
+
out[14] = v[2];
|
|
590
|
+
out[15] = 1;
|
|
591
|
+
return out;
|
|
592
|
+
}
|
|
593
|
+
function fromScaling(out, v) {
|
|
594
|
+
out[0] = v[0];
|
|
595
|
+
out[1] = 0;
|
|
596
|
+
out[2] = 0;
|
|
597
|
+
out[3] = 0;
|
|
598
|
+
out[4] = 0;
|
|
599
|
+
out[5] = v[1];
|
|
600
|
+
out[6] = 0;
|
|
601
|
+
out[7] = 0;
|
|
602
|
+
out[8] = 0;
|
|
603
|
+
out[9] = 0;
|
|
604
|
+
out[10] = v[2];
|
|
605
|
+
out[11] = 0;
|
|
606
|
+
out[12] = 0;
|
|
607
|
+
out[13] = 0;
|
|
608
|
+
out[14] = 0;
|
|
609
|
+
out[15] = 1;
|
|
610
|
+
return out;
|
|
611
|
+
}
|
|
612
|
+
function fromRotation(out, rad, axis) {
|
|
613
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
614
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
615
|
+
var s, c, t;
|
|
616
|
+
if (len2 < EPSILON) {
|
|
617
|
+
return null;
|
|
618
|
+
}
|
|
619
|
+
len2 = 1 / len2;
|
|
620
|
+
x *= len2;
|
|
621
|
+
y *= len2;
|
|
622
|
+
z *= len2;
|
|
623
|
+
s = Math.sin(rad);
|
|
624
|
+
c = Math.cos(rad);
|
|
625
|
+
t = 1 - c;
|
|
626
|
+
out[0] = x * x * t + c;
|
|
627
|
+
out[1] = y * x * t + z * s;
|
|
628
|
+
out[2] = z * x * t - y * s;
|
|
629
|
+
out[3] = 0;
|
|
630
|
+
out[4] = x * y * t - z * s;
|
|
631
|
+
out[5] = y * y * t + c;
|
|
632
|
+
out[6] = z * y * t + x * s;
|
|
633
|
+
out[7] = 0;
|
|
634
|
+
out[8] = x * z * t + y * s;
|
|
635
|
+
out[9] = y * z * t - x * s;
|
|
636
|
+
out[10] = z * z * t + c;
|
|
637
|
+
out[11] = 0;
|
|
638
|
+
out[12] = 0;
|
|
639
|
+
out[13] = 0;
|
|
640
|
+
out[14] = 0;
|
|
641
|
+
out[15] = 1;
|
|
642
|
+
return out;
|
|
643
|
+
}
|
|
644
|
+
function fromXRotation(out, rad) {
|
|
645
|
+
var s = Math.sin(rad);
|
|
646
|
+
var c = Math.cos(rad);
|
|
647
|
+
out[0] = 1;
|
|
648
|
+
out[1] = 0;
|
|
649
|
+
out[2] = 0;
|
|
650
|
+
out[3] = 0;
|
|
651
|
+
out[4] = 0;
|
|
652
|
+
out[5] = c;
|
|
653
|
+
out[6] = s;
|
|
654
|
+
out[7] = 0;
|
|
655
|
+
out[8] = 0;
|
|
656
|
+
out[9] = -s;
|
|
657
|
+
out[10] = c;
|
|
658
|
+
out[11] = 0;
|
|
659
|
+
out[12] = 0;
|
|
660
|
+
out[13] = 0;
|
|
661
|
+
out[14] = 0;
|
|
662
|
+
out[15] = 1;
|
|
663
|
+
return out;
|
|
664
|
+
}
|
|
665
|
+
function fromYRotation(out, rad) {
|
|
666
|
+
var s = Math.sin(rad);
|
|
667
|
+
var c = Math.cos(rad);
|
|
668
|
+
out[0] = c;
|
|
669
|
+
out[1] = 0;
|
|
670
|
+
out[2] = -s;
|
|
671
|
+
out[3] = 0;
|
|
672
|
+
out[4] = 0;
|
|
673
|
+
out[5] = 1;
|
|
674
|
+
out[6] = 0;
|
|
675
|
+
out[7] = 0;
|
|
676
|
+
out[8] = s;
|
|
677
|
+
out[9] = 0;
|
|
678
|
+
out[10] = c;
|
|
679
|
+
out[11] = 0;
|
|
680
|
+
out[12] = 0;
|
|
681
|
+
out[13] = 0;
|
|
682
|
+
out[14] = 0;
|
|
683
|
+
out[15] = 1;
|
|
684
|
+
return out;
|
|
685
|
+
}
|
|
686
|
+
function fromZRotation(out, rad) {
|
|
687
|
+
var s = Math.sin(rad);
|
|
688
|
+
var c = Math.cos(rad);
|
|
689
|
+
out[0] = c;
|
|
690
|
+
out[1] = s;
|
|
691
|
+
out[2] = 0;
|
|
692
|
+
out[3] = 0;
|
|
693
|
+
out[4] = -s;
|
|
694
|
+
out[5] = c;
|
|
695
|
+
out[6] = 0;
|
|
696
|
+
out[7] = 0;
|
|
697
|
+
out[8] = 0;
|
|
698
|
+
out[9] = 0;
|
|
699
|
+
out[10] = 1;
|
|
700
|
+
out[11] = 0;
|
|
701
|
+
out[12] = 0;
|
|
702
|
+
out[13] = 0;
|
|
703
|
+
out[14] = 0;
|
|
704
|
+
out[15] = 1;
|
|
705
|
+
return out;
|
|
706
|
+
}
|
|
707
|
+
function fromRotationTranslation(out, q, v) {
|
|
708
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
709
|
+
var x2 = x + x;
|
|
710
|
+
var y2 = y + y;
|
|
711
|
+
var z2 = z + z;
|
|
712
|
+
var xx = x * x2;
|
|
713
|
+
var xy = x * y2;
|
|
714
|
+
var xz = x * z2;
|
|
715
|
+
var yy = y * y2;
|
|
716
|
+
var yz = y * z2;
|
|
717
|
+
var zz = z * z2;
|
|
718
|
+
var wx = w * x2;
|
|
719
|
+
var wy = w * y2;
|
|
720
|
+
var wz = w * z2;
|
|
721
|
+
out[0] = 1 - (yy + zz);
|
|
722
|
+
out[1] = xy + wz;
|
|
723
|
+
out[2] = xz - wy;
|
|
724
|
+
out[3] = 0;
|
|
725
|
+
out[4] = xy - wz;
|
|
726
|
+
out[5] = 1 - (xx + zz);
|
|
727
|
+
out[6] = yz + wx;
|
|
728
|
+
out[7] = 0;
|
|
729
|
+
out[8] = xz + wy;
|
|
730
|
+
out[9] = yz - wx;
|
|
731
|
+
out[10] = 1 - (xx + yy);
|
|
732
|
+
out[11] = 0;
|
|
733
|
+
out[12] = v[0];
|
|
734
|
+
out[13] = v[1];
|
|
735
|
+
out[14] = v[2];
|
|
736
|
+
out[15] = 1;
|
|
737
|
+
return out;
|
|
738
|
+
}
|
|
739
|
+
function fromQuat2(out, a) {
|
|
740
|
+
var translation = new ARRAY_TYPE(3);
|
|
741
|
+
var bx = -a[0], by = -a[1], bz = -a[2], bw = a[3], ax = a[4], ay = a[5], az = a[6], aw = a[7];
|
|
742
|
+
var magnitude = bx * bx + by * by + bz * bz + bw * bw;
|
|
743
|
+
if (magnitude > 0) {
|
|
744
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;
|
|
745
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;
|
|
746
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;
|
|
747
|
+
} else {
|
|
748
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
|
749
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
|
750
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
|
37
751
|
}
|
|
752
|
+
fromRotationTranslation(out, a, translation);
|
|
753
|
+
return out;
|
|
38
754
|
}
|
|
39
|
-
function
|
|
40
|
-
|
|
755
|
+
function getTranslation(out, mat) {
|
|
756
|
+
out[0] = mat[12];
|
|
757
|
+
out[1] = mat[13];
|
|
758
|
+
out[2] = mat[14];
|
|
759
|
+
return out;
|
|
41
760
|
}
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
761
|
+
function getScaling(out, mat) {
|
|
762
|
+
var m11 = mat[0];
|
|
763
|
+
var m12 = mat[1];
|
|
764
|
+
var m13 = mat[2];
|
|
765
|
+
var m21 = mat[4];
|
|
766
|
+
var m22 = mat[5];
|
|
767
|
+
var m23 = mat[6];
|
|
768
|
+
var m31 = mat[8];
|
|
769
|
+
var m32 = mat[9];
|
|
770
|
+
var m33 = mat[10];
|
|
771
|
+
out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
772
|
+
out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
773
|
+
out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
774
|
+
return out;
|
|
45
775
|
}
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
776
|
+
function getRotation(out, mat) {
|
|
777
|
+
var scaling = new ARRAY_TYPE(3);
|
|
778
|
+
getScaling(scaling, mat);
|
|
779
|
+
var is1 = 1 / scaling[0];
|
|
780
|
+
var is2 = 1 / scaling[1];
|
|
781
|
+
var is3 = 1 / scaling[2];
|
|
782
|
+
var sm11 = mat[0] * is1;
|
|
783
|
+
var sm12 = mat[1] * is2;
|
|
784
|
+
var sm13 = mat[2] * is3;
|
|
785
|
+
var sm21 = mat[4] * is1;
|
|
786
|
+
var sm22 = mat[5] * is2;
|
|
787
|
+
var sm23 = mat[6] * is3;
|
|
788
|
+
var sm31 = mat[8] * is1;
|
|
789
|
+
var sm32 = mat[9] * is2;
|
|
790
|
+
var sm33 = mat[10] * is3;
|
|
791
|
+
var trace = sm11 + sm22 + sm33;
|
|
792
|
+
var S = 0;
|
|
793
|
+
if (trace > 0) {
|
|
794
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
795
|
+
out[3] = 0.25 * S;
|
|
796
|
+
out[0] = (sm23 - sm32) / S;
|
|
797
|
+
out[1] = (sm31 - sm13) / S;
|
|
798
|
+
out[2] = (sm12 - sm21) / S;
|
|
799
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
800
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
801
|
+
out[3] = (sm23 - sm32) / S;
|
|
802
|
+
out[0] = 0.25 * S;
|
|
803
|
+
out[1] = (sm12 + sm21) / S;
|
|
804
|
+
out[2] = (sm31 + sm13) / S;
|
|
805
|
+
} else if (sm22 > sm33) {
|
|
806
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
807
|
+
out[3] = (sm31 - sm13) / S;
|
|
808
|
+
out[0] = (sm12 + sm21) / S;
|
|
809
|
+
out[1] = 0.25 * S;
|
|
810
|
+
out[2] = (sm23 + sm32) / S;
|
|
811
|
+
} else {
|
|
812
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
813
|
+
out[3] = (sm12 - sm21) / S;
|
|
814
|
+
out[0] = (sm31 + sm13) / S;
|
|
815
|
+
out[1] = (sm23 + sm32) / S;
|
|
816
|
+
out[2] = 0.25 * S;
|
|
817
|
+
}
|
|
818
|
+
return out;
|
|
819
|
+
}
|
|
820
|
+
function decompose(out_r, out_t, out_s, mat) {
|
|
821
|
+
out_t[0] = mat[12];
|
|
822
|
+
out_t[1] = mat[13];
|
|
823
|
+
out_t[2] = mat[14];
|
|
824
|
+
var m11 = mat[0];
|
|
825
|
+
var m12 = mat[1];
|
|
826
|
+
var m13 = mat[2];
|
|
827
|
+
var m21 = mat[4];
|
|
828
|
+
var m22 = mat[5];
|
|
829
|
+
var m23 = mat[6];
|
|
830
|
+
var m31 = mat[8];
|
|
831
|
+
var m32 = mat[9];
|
|
832
|
+
var m33 = mat[10];
|
|
833
|
+
out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
834
|
+
out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
835
|
+
out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
836
|
+
var is1 = 1 / out_s[0];
|
|
837
|
+
var is2 = 1 / out_s[1];
|
|
838
|
+
var is3 = 1 / out_s[2];
|
|
839
|
+
var sm11 = m11 * is1;
|
|
840
|
+
var sm12 = m12 * is2;
|
|
841
|
+
var sm13 = m13 * is3;
|
|
842
|
+
var sm21 = m21 * is1;
|
|
843
|
+
var sm22 = m22 * is2;
|
|
844
|
+
var sm23 = m23 * is3;
|
|
845
|
+
var sm31 = m31 * is1;
|
|
846
|
+
var sm32 = m32 * is2;
|
|
847
|
+
var sm33 = m33 * is3;
|
|
848
|
+
var trace = sm11 + sm22 + sm33;
|
|
849
|
+
var S = 0;
|
|
850
|
+
if (trace > 0) {
|
|
851
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
852
|
+
out_r[3] = 0.25 * S;
|
|
853
|
+
out_r[0] = (sm23 - sm32) / S;
|
|
854
|
+
out_r[1] = (sm31 - sm13) / S;
|
|
855
|
+
out_r[2] = (sm12 - sm21) / S;
|
|
856
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
857
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
858
|
+
out_r[3] = (sm23 - sm32) / S;
|
|
859
|
+
out_r[0] = 0.25 * S;
|
|
860
|
+
out_r[1] = (sm12 + sm21) / S;
|
|
861
|
+
out_r[2] = (sm31 + sm13) / S;
|
|
862
|
+
} else if (sm22 > sm33) {
|
|
863
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
864
|
+
out_r[3] = (sm31 - sm13) / S;
|
|
865
|
+
out_r[0] = (sm12 + sm21) / S;
|
|
866
|
+
out_r[1] = 0.25 * S;
|
|
867
|
+
out_r[2] = (sm23 + sm32) / S;
|
|
868
|
+
} else {
|
|
869
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
870
|
+
out_r[3] = (sm12 - sm21) / S;
|
|
871
|
+
out_r[0] = (sm31 + sm13) / S;
|
|
872
|
+
out_r[1] = (sm23 + sm32) / S;
|
|
873
|
+
out_r[2] = 0.25 * S;
|
|
874
|
+
}
|
|
875
|
+
return out_r;
|
|
876
|
+
}
|
|
877
|
+
function fromRotationTranslationScale(out, q, v, s) {
|
|
878
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
879
|
+
var x2 = x + x;
|
|
880
|
+
var y2 = y + y;
|
|
881
|
+
var z2 = z + z;
|
|
882
|
+
var xx = x * x2;
|
|
883
|
+
var xy = x * y2;
|
|
884
|
+
var xz = x * z2;
|
|
885
|
+
var yy = y * y2;
|
|
886
|
+
var yz = y * z2;
|
|
887
|
+
var zz = z * z2;
|
|
888
|
+
var wx = w * x2;
|
|
889
|
+
var wy = w * y2;
|
|
890
|
+
var wz = w * z2;
|
|
891
|
+
var sx = s[0];
|
|
892
|
+
var sy = s[1];
|
|
893
|
+
var sz = s[2];
|
|
894
|
+
out[0] = (1 - (yy + zz)) * sx;
|
|
895
|
+
out[1] = (xy + wz) * sx;
|
|
896
|
+
out[2] = (xz - wy) * sx;
|
|
897
|
+
out[3] = 0;
|
|
898
|
+
out[4] = (xy - wz) * sy;
|
|
899
|
+
out[5] = (1 - (xx + zz)) * sy;
|
|
900
|
+
out[6] = (yz + wx) * sy;
|
|
901
|
+
out[7] = 0;
|
|
902
|
+
out[8] = (xz + wy) * sz;
|
|
903
|
+
out[9] = (yz - wx) * sz;
|
|
904
|
+
out[10] = (1 - (xx + yy)) * sz;
|
|
905
|
+
out[11] = 0;
|
|
906
|
+
out[12] = v[0];
|
|
907
|
+
out[13] = v[1];
|
|
908
|
+
out[14] = v[2];
|
|
909
|
+
out[15] = 1;
|
|
910
|
+
return out;
|
|
911
|
+
}
|
|
912
|
+
function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
|
|
913
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
914
|
+
var x2 = x + x;
|
|
915
|
+
var y2 = y + y;
|
|
916
|
+
var z2 = z + z;
|
|
917
|
+
var xx = x * x2;
|
|
918
|
+
var xy = x * y2;
|
|
919
|
+
var xz = x * z2;
|
|
920
|
+
var yy = y * y2;
|
|
921
|
+
var yz = y * z2;
|
|
922
|
+
var zz = z * z2;
|
|
923
|
+
var wx = w * x2;
|
|
924
|
+
var wy = w * y2;
|
|
925
|
+
var wz = w * z2;
|
|
926
|
+
var sx = s[0];
|
|
927
|
+
var sy = s[1];
|
|
928
|
+
var sz = s[2];
|
|
929
|
+
var ox = o[0];
|
|
930
|
+
var oy = o[1];
|
|
931
|
+
var oz = o[2];
|
|
932
|
+
var out0 = (1 - (yy + zz)) * sx;
|
|
933
|
+
var out1 = (xy + wz) * sx;
|
|
934
|
+
var out2 = (xz - wy) * sx;
|
|
935
|
+
var out4 = (xy - wz) * sy;
|
|
936
|
+
var out5 = (1 - (xx + zz)) * sy;
|
|
937
|
+
var out6 = (yz + wx) * sy;
|
|
938
|
+
var out8 = (xz + wy) * sz;
|
|
939
|
+
var out9 = (yz - wx) * sz;
|
|
940
|
+
var out10 = (1 - (xx + yy)) * sz;
|
|
941
|
+
out[0] = out0;
|
|
942
|
+
out[1] = out1;
|
|
943
|
+
out[2] = out2;
|
|
944
|
+
out[3] = 0;
|
|
945
|
+
out[4] = out4;
|
|
946
|
+
out[5] = out5;
|
|
947
|
+
out[6] = out6;
|
|
948
|
+
out[7] = 0;
|
|
949
|
+
out[8] = out8;
|
|
950
|
+
out[9] = out9;
|
|
951
|
+
out[10] = out10;
|
|
952
|
+
out[11] = 0;
|
|
953
|
+
out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);
|
|
954
|
+
out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);
|
|
955
|
+
out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);
|
|
956
|
+
out[15] = 1;
|
|
957
|
+
return out;
|
|
958
|
+
}
|
|
959
|
+
function fromQuat(out, q) {
|
|
960
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
961
|
+
var x2 = x + x;
|
|
962
|
+
var y2 = y + y;
|
|
963
|
+
var z2 = z + z;
|
|
964
|
+
var xx = x * x2;
|
|
965
|
+
var yx = y * x2;
|
|
966
|
+
var yy = y * y2;
|
|
967
|
+
var zx = z * x2;
|
|
968
|
+
var zy = z * y2;
|
|
969
|
+
var zz = z * z2;
|
|
970
|
+
var wx = w * x2;
|
|
971
|
+
var wy = w * y2;
|
|
972
|
+
var wz = w * z2;
|
|
973
|
+
out[0] = 1 - yy - zz;
|
|
974
|
+
out[1] = yx + wz;
|
|
975
|
+
out[2] = zx - wy;
|
|
976
|
+
out[3] = 0;
|
|
977
|
+
out[4] = yx - wz;
|
|
978
|
+
out[5] = 1 - xx - zz;
|
|
979
|
+
out[6] = zy + wx;
|
|
980
|
+
out[7] = 0;
|
|
981
|
+
out[8] = zx + wy;
|
|
982
|
+
out[9] = zy - wx;
|
|
983
|
+
out[10] = 1 - xx - yy;
|
|
984
|
+
out[11] = 0;
|
|
985
|
+
out[12] = 0;
|
|
986
|
+
out[13] = 0;
|
|
987
|
+
out[14] = 0;
|
|
988
|
+
out[15] = 1;
|
|
989
|
+
return out;
|
|
990
|
+
}
|
|
991
|
+
function frustum(out, left, right, bottom, top, near, far) {
|
|
992
|
+
var rl = 1 / (right - left);
|
|
993
|
+
var tb = 1 / (top - bottom);
|
|
994
|
+
var nf = 1 / (near - far);
|
|
995
|
+
out[0] = near * 2 * rl;
|
|
996
|
+
out[1] = 0;
|
|
997
|
+
out[2] = 0;
|
|
998
|
+
out[3] = 0;
|
|
999
|
+
out[4] = 0;
|
|
1000
|
+
out[5] = near * 2 * tb;
|
|
1001
|
+
out[6] = 0;
|
|
1002
|
+
out[7] = 0;
|
|
1003
|
+
out[8] = (right + left) * rl;
|
|
1004
|
+
out[9] = (top + bottom) * tb;
|
|
1005
|
+
out[10] = (far + near) * nf;
|
|
1006
|
+
out[11] = -1;
|
|
1007
|
+
out[12] = 0;
|
|
1008
|
+
out[13] = 0;
|
|
1009
|
+
out[14] = far * near * 2 * nf;
|
|
1010
|
+
out[15] = 0;
|
|
1011
|
+
return out;
|
|
1012
|
+
}
|
|
1013
|
+
function perspectiveNO(out, fovy, aspect, near, far) {
|
|
1014
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
1015
|
+
out[0] = f / aspect;
|
|
1016
|
+
out[1] = 0;
|
|
1017
|
+
out[2] = 0;
|
|
1018
|
+
out[3] = 0;
|
|
1019
|
+
out[4] = 0;
|
|
1020
|
+
out[5] = f;
|
|
1021
|
+
out[6] = 0;
|
|
1022
|
+
out[7] = 0;
|
|
1023
|
+
out[8] = 0;
|
|
1024
|
+
out[9] = 0;
|
|
1025
|
+
out[11] = -1;
|
|
1026
|
+
out[12] = 0;
|
|
1027
|
+
out[13] = 0;
|
|
1028
|
+
out[15] = 0;
|
|
1029
|
+
if (far != null && far !== Infinity) {
|
|
1030
|
+
var nf = 1 / (near - far);
|
|
1031
|
+
out[10] = (far + near) * nf;
|
|
1032
|
+
out[14] = 2 * far * near * nf;
|
|
1033
|
+
} else {
|
|
1034
|
+
out[10] = -1;
|
|
1035
|
+
out[14] = -2 * near;
|
|
1036
|
+
}
|
|
1037
|
+
return out;
|
|
1038
|
+
}
|
|
1039
|
+
var perspective = perspectiveNO;
|
|
1040
|
+
function perspectiveZO(out, fovy, aspect, near, far) {
|
|
1041
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
1042
|
+
out[0] = f / aspect;
|
|
1043
|
+
out[1] = 0;
|
|
1044
|
+
out[2] = 0;
|
|
1045
|
+
out[3] = 0;
|
|
1046
|
+
out[4] = 0;
|
|
1047
|
+
out[5] = f;
|
|
1048
|
+
out[6] = 0;
|
|
1049
|
+
out[7] = 0;
|
|
1050
|
+
out[8] = 0;
|
|
1051
|
+
out[9] = 0;
|
|
1052
|
+
out[11] = -1;
|
|
1053
|
+
out[12] = 0;
|
|
1054
|
+
out[13] = 0;
|
|
1055
|
+
out[15] = 0;
|
|
1056
|
+
if (far != null && far !== Infinity) {
|
|
1057
|
+
var nf = 1 / (near - far);
|
|
1058
|
+
out[10] = far * nf;
|
|
1059
|
+
out[14] = far * near * nf;
|
|
1060
|
+
} else {
|
|
1061
|
+
out[10] = -1;
|
|
1062
|
+
out[14] = -near;
|
|
1063
|
+
}
|
|
1064
|
+
return out;
|
|
1065
|
+
}
|
|
1066
|
+
function perspectiveFromFieldOfView(out, fov, near, far) {
|
|
1067
|
+
var upTan = Math.tan(fov.upDegrees * Math.PI / 180);
|
|
1068
|
+
var downTan = Math.tan(fov.downDegrees * Math.PI / 180);
|
|
1069
|
+
var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180);
|
|
1070
|
+
var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180);
|
|
1071
|
+
var xScale = 2 / (leftTan + rightTan);
|
|
1072
|
+
var yScale = 2 / (upTan + downTan);
|
|
1073
|
+
out[0] = xScale;
|
|
1074
|
+
out[1] = 0;
|
|
1075
|
+
out[2] = 0;
|
|
1076
|
+
out[3] = 0;
|
|
1077
|
+
out[4] = 0;
|
|
1078
|
+
out[5] = yScale;
|
|
1079
|
+
out[6] = 0;
|
|
1080
|
+
out[7] = 0;
|
|
1081
|
+
out[8] = -((leftTan - rightTan) * xScale * 0.5);
|
|
1082
|
+
out[9] = (upTan - downTan) * yScale * 0.5;
|
|
1083
|
+
out[10] = far / (near - far);
|
|
1084
|
+
out[11] = -1;
|
|
1085
|
+
out[12] = 0;
|
|
1086
|
+
out[13] = 0;
|
|
1087
|
+
out[14] = far * near / (near - far);
|
|
1088
|
+
out[15] = 0;
|
|
1089
|
+
return out;
|
|
1090
|
+
}
|
|
1091
|
+
function orthoNO(out, left, right, bottom, top, near, far) {
|
|
1092
|
+
var lr = 1 / (left - right);
|
|
1093
|
+
var bt = 1 / (bottom - top);
|
|
1094
|
+
var nf = 1 / (near - far);
|
|
1095
|
+
out[0] = -2 * lr;
|
|
1096
|
+
out[1] = 0;
|
|
1097
|
+
out[2] = 0;
|
|
1098
|
+
out[3] = 0;
|
|
1099
|
+
out[4] = 0;
|
|
1100
|
+
out[5] = -2 * bt;
|
|
1101
|
+
out[6] = 0;
|
|
1102
|
+
out[7] = 0;
|
|
1103
|
+
out[8] = 0;
|
|
1104
|
+
out[9] = 0;
|
|
1105
|
+
out[10] = 2 * nf;
|
|
1106
|
+
out[11] = 0;
|
|
1107
|
+
out[12] = (left + right) * lr;
|
|
1108
|
+
out[13] = (top + bottom) * bt;
|
|
1109
|
+
out[14] = (far + near) * nf;
|
|
1110
|
+
out[15] = 1;
|
|
1111
|
+
return out;
|
|
1112
|
+
}
|
|
1113
|
+
var ortho = orthoNO;
|
|
1114
|
+
function orthoZO(out, left, right, bottom, top, near, far) {
|
|
1115
|
+
var lr = 1 / (left - right);
|
|
1116
|
+
var bt = 1 / (bottom - top);
|
|
1117
|
+
var nf = 1 / (near - far);
|
|
1118
|
+
out[0] = -2 * lr;
|
|
1119
|
+
out[1] = 0;
|
|
1120
|
+
out[2] = 0;
|
|
1121
|
+
out[3] = 0;
|
|
1122
|
+
out[4] = 0;
|
|
1123
|
+
out[5] = -2 * bt;
|
|
1124
|
+
out[6] = 0;
|
|
1125
|
+
out[7] = 0;
|
|
1126
|
+
out[8] = 0;
|
|
1127
|
+
out[9] = 0;
|
|
1128
|
+
out[10] = nf;
|
|
1129
|
+
out[11] = 0;
|
|
1130
|
+
out[12] = (left + right) * lr;
|
|
1131
|
+
out[13] = (top + bottom) * bt;
|
|
1132
|
+
out[14] = near * nf;
|
|
1133
|
+
out[15] = 1;
|
|
1134
|
+
return out;
|
|
1135
|
+
}
|
|
1136
|
+
function lookAt(out, eye, center, up) {
|
|
1137
|
+
var x0, x1, x2, y0, y1, y2, z0, z1, z2, len2;
|
|
1138
|
+
var eyex = eye[0];
|
|
1139
|
+
var eyey = eye[1];
|
|
1140
|
+
var eyez = eye[2];
|
|
1141
|
+
var upx = up[0];
|
|
1142
|
+
var upy = up[1];
|
|
1143
|
+
var upz = up[2];
|
|
1144
|
+
var centerx = center[0];
|
|
1145
|
+
var centery = center[1];
|
|
1146
|
+
var centerz = center[2];
|
|
1147
|
+
if (Math.abs(eyex - centerx) < EPSILON && Math.abs(eyey - centery) < EPSILON && Math.abs(eyez - centerz) < EPSILON) {
|
|
1148
|
+
return identity(out);
|
|
1149
|
+
}
|
|
1150
|
+
z0 = eyex - centerx;
|
|
1151
|
+
z1 = eyey - centery;
|
|
1152
|
+
z2 = eyez - centerz;
|
|
1153
|
+
len2 = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
1154
|
+
z0 *= len2;
|
|
1155
|
+
z1 *= len2;
|
|
1156
|
+
z2 *= len2;
|
|
1157
|
+
x0 = upy * z2 - upz * z1;
|
|
1158
|
+
x1 = upz * z0 - upx * z2;
|
|
1159
|
+
x2 = upx * z1 - upy * z0;
|
|
1160
|
+
len2 = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
1161
|
+
if (!len2) {
|
|
1162
|
+
x0 = 0;
|
|
1163
|
+
x1 = 0;
|
|
1164
|
+
x2 = 0;
|
|
1165
|
+
} else {
|
|
1166
|
+
len2 = 1 / len2;
|
|
1167
|
+
x0 *= len2;
|
|
1168
|
+
x1 *= len2;
|
|
1169
|
+
x2 *= len2;
|
|
1170
|
+
}
|
|
1171
|
+
y0 = z1 * x2 - z2 * x1;
|
|
1172
|
+
y1 = z2 * x0 - z0 * x2;
|
|
1173
|
+
y2 = z0 * x1 - z1 * x0;
|
|
1174
|
+
len2 = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
1175
|
+
if (!len2) {
|
|
1176
|
+
y0 = 0;
|
|
1177
|
+
y1 = 0;
|
|
1178
|
+
y2 = 0;
|
|
1179
|
+
} else {
|
|
1180
|
+
len2 = 1 / len2;
|
|
1181
|
+
y0 *= len2;
|
|
1182
|
+
y1 *= len2;
|
|
1183
|
+
y2 *= len2;
|
|
1184
|
+
}
|
|
1185
|
+
out[0] = x0;
|
|
1186
|
+
out[1] = y0;
|
|
1187
|
+
out[2] = z0;
|
|
1188
|
+
out[3] = 0;
|
|
1189
|
+
out[4] = x1;
|
|
1190
|
+
out[5] = y1;
|
|
1191
|
+
out[6] = z1;
|
|
1192
|
+
out[7] = 0;
|
|
1193
|
+
out[8] = x2;
|
|
1194
|
+
out[9] = y2;
|
|
1195
|
+
out[10] = z2;
|
|
1196
|
+
out[11] = 0;
|
|
1197
|
+
out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
|
|
1198
|
+
out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
|
|
1199
|
+
out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
|
|
1200
|
+
out[15] = 1;
|
|
1201
|
+
return out;
|
|
1202
|
+
}
|
|
1203
|
+
function targetTo(out, eye, target, up) {
|
|
1204
|
+
var eyex = eye[0], eyey = eye[1], eyez = eye[2], upx = up[0], upy = up[1], upz = up[2];
|
|
1205
|
+
var z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
|
|
1206
|
+
var len2 = z0 * z0 + z1 * z1 + z2 * z2;
|
|
1207
|
+
if (len2 > 0) {
|
|
1208
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1209
|
+
z0 *= len2;
|
|
1210
|
+
z1 *= len2;
|
|
1211
|
+
z2 *= len2;
|
|
1212
|
+
}
|
|
1213
|
+
var x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
|
|
1214
|
+
len2 = x0 * x0 + x1 * x1 + x2 * x2;
|
|
1215
|
+
if (len2 > 0) {
|
|
1216
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1217
|
+
x0 *= len2;
|
|
1218
|
+
x1 *= len2;
|
|
1219
|
+
x2 *= len2;
|
|
1220
|
+
}
|
|
1221
|
+
out[0] = x0;
|
|
1222
|
+
out[1] = x1;
|
|
1223
|
+
out[2] = x2;
|
|
1224
|
+
out[3] = 0;
|
|
1225
|
+
out[4] = z1 * x2 - z2 * x1;
|
|
1226
|
+
out[5] = z2 * x0 - z0 * x2;
|
|
1227
|
+
out[6] = z0 * x1 - z1 * x0;
|
|
1228
|
+
out[7] = 0;
|
|
1229
|
+
out[8] = z0;
|
|
1230
|
+
out[9] = z1;
|
|
1231
|
+
out[10] = z2;
|
|
1232
|
+
out[11] = 0;
|
|
1233
|
+
out[12] = eyex;
|
|
1234
|
+
out[13] = eyey;
|
|
1235
|
+
out[14] = eyez;
|
|
1236
|
+
out[15] = 1;
|
|
1237
|
+
return out;
|
|
1238
|
+
}
|
|
1239
|
+
function str(a) {
|
|
1240
|
+
return "mat4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ", " + a[9] + ", " + a[10] + ", " + a[11] + ", " + a[12] + ", " + a[13] + ", " + a[14] + ", " + a[15] + ")";
|
|
1241
|
+
}
|
|
1242
|
+
function frob(a) {
|
|
1243
|
+
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8] + a[9] * a[9] + a[10] * a[10] + a[11] * a[11] + a[12] * a[12] + a[13] * a[13] + a[14] * a[14] + a[15] * a[15]);
|
|
1244
|
+
}
|
|
1245
|
+
function add(out, a, b) {
|
|
1246
|
+
out[0] = a[0] + b[0];
|
|
1247
|
+
out[1] = a[1] + b[1];
|
|
1248
|
+
out[2] = a[2] + b[2];
|
|
1249
|
+
out[3] = a[3] + b[3];
|
|
1250
|
+
out[4] = a[4] + b[4];
|
|
1251
|
+
out[5] = a[5] + b[5];
|
|
1252
|
+
out[6] = a[6] + b[6];
|
|
1253
|
+
out[7] = a[7] + b[7];
|
|
1254
|
+
out[8] = a[8] + b[8];
|
|
1255
|
+
out[9] = a[9] + b[9];
|
|
1256
|
+
out[10] = a[10] + b[10];
|
|
1257
|
+
out[11] = a[11] + b[11];
|
|
1258
|
+
out[12] = a[12] + b[12];
|
|
1259
|
+
out[13] = a[13] + b[13];
|
|
1260
|
+
out[14] = a[14] + b[14];
|
|
1261
|
+
out[15] = a[15] + b[15];
|
|
1262
|
+
return out;
|
|
1263
|
+
}
|
|
1264
|
+
function subtract(out, a, b) {
|
|
1265
|
+
out[0] = a[0] - b[0];
|
|
1266
|
+
out[1] = a[1] - b[1];
|
|
1267
|
+
out[2] = a[2] - b[2];
|
|
1268
|
+
out[3] = a[3] - b[3];
|
|
1269
|
+
out[4] = a[4] - b[4];
|
|
1270
|
+
out[5] = a[5] - b[5];
|
|
1271
|
+
out[6] = a[6] - b[6];
|
|
1272
|
+
out[7] = a[7] - b[7];
|
|
1273
|
+
out[8] = a[8] - b[8];
|
|
1274
|
+
out[9] = a[9] - b[9];
|
|
1275
|
+
out[10] = a[10] - b[10];
|
|
1276
|
+
out[11] = a[11] - b[11];
|
|
1277
|
+
out[12] = a[12] - b[12];
|
|
1278
|
+
out[13] = a[13] - b[13];
|
|
1279
|
+
out[14] = a[14] - b[14];
|
|
1280
|
+
out[15] = a[15] - b[15];
|
|
1281
|
+
return out;
|
|
1282
|
+
}
|
|
1283
|
+
function multiplyScalar(out, a, b) {
|
|
1284
|
+
out[0] = a[0] * b;
|
|
1285
|
+
out[1] = a[1] * b;
|
|
1286
|
+
out[2] = a[2] * b;
|
|
1287
|
+
out[3] = a[3] * b;
|
|
1288
|
+
out[4] = a[4] * b;
|
|
1289
|
+
out[5] = a[5] * b;
|
|
1290
|
+
out[6] = a[6] * b;
|
|
1291
|
+
out[7] = a[7] * b;
|
|
1292
|
+
out[8] = a[8] * b;
|
|
1293
|
+
out[9] = a[9] * b;
|
|
1294
|
+
out[10] = a[10] * b;
|
|
1295
|
+
out[11] = a[11] * b;
|
|
1296
|
+
out[12] = a[12] * b;
|
|
1297
|
+
out[13] = a[13] * b;
|
|
1298
|
+
out[14] = a[14] * b;
|
|
1299
|
+
out[15] = a[15] * b;
|
|
1300
|
+
return out;
|
|
1301
|
+
}
|
|
1302
|
+
function multiplyScalarAndAdd(out, a, b, scale3) {
|
|
1303
|
+
out[0] = a[0] + b[0] * scale3;
|
|
1304
|
+
out[1] = a[1] + b[1] * scale3;
|
|
1305
|
+
out[2] = a[2] + b[2] * scale3;
|
|
1306
|
+
out[3] = a[3] + b[3] * scale3;
|
|
1307
|
+
out[4] = a[4] + b[4] * scale3;
|
|
1308
|
+
out[5] = a[5] + b[5] * scale3;
|
|
1309
|
+
out[6] = a[6] + b[6] * scale3;
|
|
1310
|
+
out[7] = a[7] + b[7] * scale3;
|
|
1311
|
+
out[8] = a[8] + b[8] * scale3;
|
|
1312
|
+
out[9] = a[9] + b[9] * scale3;
|
|
1313
|
+
out[10] = a[10] + b[10] * scale3;
|
|
1314
|
+
out[11] = a[11] + b[11] * scale3;
|
|
1315
|
+
out[12] = a[12] + b[12] * scale3;
|
|
1316
|
+
out[13] = a[13] + b[13] * scale3;
|
|
1317
|
+
out[14] = a[14] + b[14] * scale3;
|
|
1318
|
+
out[15] = a[15] + b[15] * scale3;
|
|
1319
|
+
return out;
|
|
1320
|
+
}
|
|
1321
|
+
function exactEquals(a, b) {
|
|
1322
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];
|
|
1323
|
+
}
|
|
1324
|
+
function equals(a, b) {
|
|
1325
|
+
var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
|
|
1326
|
+
var a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
|
|
1327
|
+
var a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
|
|
1328
|
+
var a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
|
|
1329
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
1330
|
+
var b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7];
|
|
1331
|
+
var b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11];
|
|
1332
|
+
var b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
|
|
1333
|
+
return Math.abs(a0 - b0) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= EPSILON * Math.max(1, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= EPSILON * Math.max(1, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= EPSILON * Math.max(1, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= EPSILON * Math.max(1, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= EPSILON * Math.max(1, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= EPSILON * Math.max(1, Math.abs(a15), Math.abs(b15));
|
|
1334
|
+
}
|
|
1335
|
+
var mul = multiply;
|
|
1336
|
+
var sub = subtract;
|
|
1337
|
+
|
|
1338
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/vec3.js
|
|
1339
|
+
var vec3_exports = {};
|
|
1340
|
+
__export(vec3_exports, {
|
|
1341
|
+
add: () => add2,
|
|
1342
|
+
angle: () => angle,
|
|
1343
|
+
bezier: () => bezier,
|
|
1344
|
+
ceil: () => ceil,
|
|
1345
|
+
clone: () => clone2,
|
|
1346
|
+
copy: () => copy2,
|
|
1347
|
+
create: () => create2,
|
|
1348
|
+
cross: () => cross,
|
|
1349
|
+
dist: () => dist,
|
|
1350
|
+
distance: () => distance,
|
|
1351
|
+
div: () => div,
|
|
1352
|
+
divide: () => divide,
|
|
1353
|
+
dot: () => dot,
|
|
1354
|
+
equals: () => equals2,
|
|
1355
|
+
exactEquals: () => exactEquals2,
|
|
1356
|
+
floor: () => floor,
|
|
1357
|
+
forEach: () => forEach,
|
|
1358
|
+
fromValues: () => fromValues2,
|
|
1359
|
+
hermite: () => hermite,
|
|
1360
|
+
inverse: () => inverse,
|
|
1361
|
+
len: () => len,
|
|
1362
|
+
length: () => length,
|
|
1363
|
+
lerp: () => lerp,
|
|
1364
|
+
max: () => max,
|
|
1365
|
+
min: () => min,
|
|
1366
|
+
mul: () => mul2,
|
|
1367
|
+
multiply: () => multiply2,
|
|
1368
|
+
negate: () => negate,
|
|
1369
|
+
normalize: () => normalize,
|
|
1370
|
+
random: () => random,
|
|
1371
|
+
rotateX: () => rotateX2,
|
|
1372
|
+
rotateY: () => rotateY2,
|
|
1373
|
+
rotateZ: () => rotateZ2,
|
|
1374
|
+
round: () => round2,
|
|
1375
|
+
scale: () => scale2,
|
|
1376
|
+
scaleAndAdd: () => scaleAndAdd,
|
|
1377
|
+
set: () => set2,
|
|
1378
|
+
slerp: () => slerp,
|
|
1379
|
+
sqrDist: () => sqrDist,
|
|
1380
|
+
sqrLen: () => sqrLen,
|
|
1381
|
+
squaredDistance: () => squaredDistance,
|
|
1382
|
+
squaredLength: () => squaredLength,
|
|
1383
|
+
str: () => str2,
|
|
1384
|
+
sub: () => sub2,
|
|
1385
|
+
subtract: () => subtract2,
|
|
1386
|
+
transformMat3: () => transformMat3,
|
|
1387
|
+
transformMat4: () => transformMat4,
|
|
1388
|
+
transformQuat: () => transformQuat,
|
|
1389
|
+
zero: () => zero
|
|
1390
|
+
});
|
|
1391
|
+
function create2() {
|
|
1392
|
+
var out = new ARRAY_TYPE(3);
|
|
1393
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
1394
|
+
out[0] = 0;
|
|
1395
|
+
out[1] = 0;
|
|
1396
|
+
out[2] = 0;
|
|
1397
|
+
}
|
|
1398
|
+
return out;
|
|
1399
|
+
}
|
|
1400
|
+
function clone2(a) {
|
|
1401
|
+
var out = new ARRAY_TYPE(3);
|
|
1402
|
+
out[0] = a[0];
|
|
1403
|
+
out[1] = a[1];
|
|
1404
|
+
out[2] = a[2];
|
|
1405
|
+
return out;
|
|
1406
|
+
}
|
|
1407
|
+
function length(a) {
|
|
1408
|
+
var x = a[0];
|
|
1409
|
+
var y = a[1];
|
|
1410
|
+
var z = a[2];
|
|
1411
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
1412
|
+
}
|
|
1413
|
+
function fromValues2(x, y, z) {
|
|
1414
|
+
var out = new ARRAY_TYPE(3);
|
|
1415
|
+
out[0] = x;
|
|
1416
|
+
out[1] = y;
|
|
1417
|
+
out[2] = z;
|
|
1418
|
+
return out;
|
|
1419
|
+
}
|
|
1420
|
+
function copy2(out, a) {
|
|
1421
|
+
out[0] = a[0];
|
|
1422
|
+
out[1] = a[1];
|
|
1423
|
+
out[2] = a[2];
|
|
1424
|
+
return out;
|
|
1425
|
+
}
|
|
1426
|
+
function set2(out, x, y, z) {
|
|
1427
|
+
out[0] = x;
|
|
1428
|
+
out[1] = y;
|
|
1429
|
+
out[2] = z;
|
|
1430
|
+
return out;
|
|
1431
|
+
}
|
|
1432
|
+
function add2(out, a, b) {
|
|
1433
|
+
out[0] = a[0] + b[0];
|
|
1434
|
+
out[1] = a[1] + b[1];
|
|
1435
|
+
out[2] = a[2] + b[2];
|
|
1436
|
+
return out;
|
|
1437
|
+
}
|
|
1438
|
+
function subtract2(out, a, b) {
|
|
1439
|
+
out[0] = a[0] - b[0];
|
|
1440
|
+
out[1] = a[1] - b[1];
|
|
1441
|
+
out[2] = a[2] - b[2];
|
|
1442
|
+
return out;
|
|
72
1443
|
}
|
|
1444
|
+
function multiply2(out, a, b) {
|
|
1445
|
+
out[0] = a[0] * b[0];
|
|
1446
|
+
out[1] = a[1] * b[1];
|
|
1447
|
+
out[2] = a[2] * b[2];
|
|
1448
|
+
return out;
|
|
1449
|
+
}
|
|
1450
|
+
function divide(out, a, b) {
|
|
1451
|
+
out[0] = a[0] / b[0];
|
|
1452
|
+
out[1] = a[1] / b[1];
|
|
1453
|
+
out[2] = a[2] / b[2];
|
|
1454
|
+
return out;
|
|
1455
|
+
}
|
|
1456
|
+
function ceil(out, a) {
|
|
1457
|
+
out[0] = Math.ceil(a[0]);
|
|
1458
|
+
out[1] = Math.ceil(a[1]);
|
|
1459
|
+
out[2] = Math.ceil(a[2]);
|
|
1460
|
+
return out;
|
|
1461
|
+
}
|
|
1462
|
+
function floor(out, a) {
|
|
1463
|
+
out[0] = Math.floor(a[0]);
|
|
1464
|
+
out[1] = Math.floor(a[1]);
|
|
1465
|
+
out[2] = Math.floor(a[2]);
|
|
1466
|
+
return out;
|
|
1467
|
+
}
|
|
1468
|
+
function min(out, a, b) {
|
|
1469
|
+
out[0] = Math.min(a[0], b[0]);
|
|
1470
|
+
out[1] = Math.min(a[1], b[1]);
|
|
1471
|
+
out[2] = Math.min(a[2], b[2]);
|
|
1472
|
+
return out;
|
|
1473
|
+
}
|
|
1474
|
+
function max(out, a, b) {
|
|
1475
|
+
out[0] = Math.max(a[0], b[0]);
|
|
1476
|
+
out[1] = Math.max(a[1], b[1]);
|
|
1477
|
+
out[2] = Math.max(a[2], b[2]);
|
|
1478
|
+
return out;
|
|
1479
|
+
}
|
|
1480
|
+
function round2(out, a) {
|
|
1481
|
+
out[0] = round(a[0]);
|
|
1482
|
+
out[1] = round(a[1]);
|
|
1483
|
+
out[2] = round(a[2]);
|
|
1484
|
+
return out;
|
|
1485
|
+
}
|
|
1486
|
+
function scale2(out, a, b) {
|
|
1487
|
+
out[0] = a[0] * b;
|
|
1488
|
+
out[1] = a[1] * b;
|
|
1489
|
+
out[2] = a[2] * b;
|
|
1490
|
+
return out;
|
|
1491
|
+
}
|
|
1492
|
+
function scaleAndAdd(out, a, b, scale3) {
|
|
1493
|
+
out[0] = a[0] + b[0] * scale3;
|
|
1494
|
+
out[1] = a[1] + b[1] * scale3;
|
|
1495
|
+
out[2] = a[2] + b[2] * scale3;
|
|
1496
|
+
return out;
|
|
1497
|
+
}
|
|
1498
|
+
function distance(a, b) {
|
|
1499
|
+
var x = b[0] - a[0];
|
|
1500
|
+
var y = b[1] - a[1];
|
|
1501
|
+
var z = b[2] - a[2];
|
|
1502
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
1503
|
+
}
|
|
1504
|
+
function squaredDistance(a, b) {
|
|
1505
|
+
var x = b[0] - a[0];
|
|
1506
|
+
var y = b[1] - a[1];
|
|
1507
|
+
var z = b[2] - a[2];
|
|
1508
|
+
return x * x + y * y + z * z;
|
|
1509
|
+
}
|
|
1510
|
+
function squaredLength(a) {
|
|
1511
|
+
var x = a[0];
|
|
1512
|
+
var y = a[1];
|
|
1513
|
+
var z = a[2];
|
|
1514
|
+
return x * x + y * y + z * z;
|
|
1515
|
+
}
|
|
1516
|
+
function negate(out, a) {
|
|
1517
|
+
out[0] = -a[0];
|
|
1518
|
+
out[1] = -a[1];
|
|
1519
|
+
out[2] = -a[2];
|
|
1520
|
+
return out;
|
|
1521
|
+
}
|
|
1522
|
+
function inverse(out, a) {
|
|
1523
|
+
out[0] = 1 / a[0];
|
|
1524
|
+
out[1] = 1 / a[1];
|
|
1525
|
+
out[2] = 1 / a[2];
|
|
1526
|
+
return out;
|
|
1527
|
+
}
|
|
1528
|
+
function normalize(out, a) {
|
|
1529
|
+
var x = a[0];
|
|
1530
|
+
var y = a[1];
|
|
1531
|
+
var z = a[2];
|
|
1532
|
+
var len2 = x * x + y * y + z * z;
|
|
1533
|
+
if (len2 > 0) {
|
|
1534
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1535
|
+
}
|
|
1536
|
+
out[0] = a[0] * len2;
|
|
1537
|
+
out[1] = a[1] * len2;
|
|
1538
|
+
out[2] = a[2] * len2;
|
|
1539
|
+
return out;
|
|
1540
|
+
}
|
|
1541
|
+
function dot(a, b) {
|
|
1542
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
1543
|
+
}
|
|
1544
|
+
function cross(out, a, b) {
|
|
1545
|
+
var ax = a[0], ay = a[1], az = a[2];
|
|
1546
|
+
var bx = b[0], by = b[1], bz = b[2];
|
|
1547
|
+
out[0] = ay * bz - az * by;
|
|
1548
|
+
out[1] = az * bx - ax * bz;
|
|
1549
|
+
out[2] = ax * by - ay * bx;
|
|
1550
|
+
return out;
|
|
1551
|
+
}
|
|
1552
|
+
function lerp(out, a, b, t) {
|
|
1553
|
+
var ax = a[0];
|
|
1554
|
+
var ay = a[1];
|
|
1555
|
+
var az = a[2];
|
|
1556
|
+
out[0] = ax + t * (b[0] - ax);
|
|
1557
|
+
out[1] = ay + t * (b[1] - ay);
|
|
1558
|
+
out[2] = az + t * (b[2] - az);
|
|
1559
|
+
return out;
|
|
1560
|
+
}
|
|
1561
|
+
function slerp(out, a, b, t) {
|
|
1562
|
+
var angle2 = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
|
1563
|
+
var sinTotal = Math.sin(angle2);
|
|
1564
|
+
var ratioA = Math.sin((1 - t) * angle2) / sinTotal;
|
|
1565
|
+
var ratioB = Math.sin(t * angle2) / sinTotal;
|
|
1566
|
+
out[0] = ratioA * a[0] + ratioB * b[0];
|
|
1567
|
+
out[1] = ratioA * a[1] + ratioB * b[1];
|
|
1568
|
+
out[2] = ratioA * a[2] + ratioB * b[2];
|
|
1569
|
+
return out;
|
|
1570
|
+
}
|
|
1571
|
+
function hermite(out, a, b, c, d, t) {
|
|
1572
|
+
var factorTimes2 = t * t;
|
|
1573
|
+
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
|
1574
|
+
var factor2 = factorTimes2 * (t - 2) + t;
|
|
1575
|
+
var factor3 = factorTimes2 * (t - 1);
|
|
1576
|
+
var factor4 = factorTimes2 * (3 - 2 * t);
|
|
1577
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
1578
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
1579
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
1580
|
+
return out;
|
|
1581
|
+
}
|
|
1582
|
+
function bezier(out, a, b, c, d, t) {
|
|
1583
|
+
var inverseFactor = 1 - t;
|
|
1584
|
+
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
|
1585
|
+
var factorTimes2 = t * t;
|
|
1586
|
+
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
|
1587
|
+
var factor2 = 3 * t * inverseFactorTimesTwo;
|
|
1588
|
+
var factor3 = 3 * factorTimes2 * inverseFactor;
|
|
1589
|
+
var factor4 = factorTimes2 * t;
|
|
1590
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
1591
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
1592
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
1593
|
+
return out;
|
|
1594
|
+
}
|
|
1595
|
+
function random(out, scale3) {
|
|
1596
|
+
scale3 = scale3 === void 0 ? 1 : scale3;
|
|
1597
|
+
var r = RANDOM() * 2 * Math.PI;
|
|
1598
|
+
var z = RANDOM() * 2 - 1;
|
|
1599
|
+
var zScale = Math.sqrt(1 - z * z) * scale3;
|
|
1600
|
+
out[0] = Math.cos(r) * zScale;
|
|
1601
|
+
out[1] = Math.sin(r) * zScale;
|
|
1602
|
+
out[2] = z * scale3;
|
|
1603
|
+
return out;
|
|
1604
|
+
}
|
|
1605
|
+
function transformMat4(out, a, m) {
|
|
1606
|
+
var x = a[0], y = a[1], z = a[2];
|
|
1607
|
+
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
1608
|
+
w = w || 1;
|
|
1609
|
+
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
1610
|
+
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
1611
|
+
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
|
1612
|
+
return out;
|
|
1613
|
+
}
|
|
1614
|
+
function transformMat3(out, a, m) {
|
|
1615
|
+
var x = a[0], y = a[1], z = a[2];
|
|
1616
|
+
out[0] = x * m[0] + y * m[3] + z * m[6];
|
|
1617
|
+
out[1] = x * m[1] + y * m[4] + z * m[7];
|
|
1618
|
+
out[2] = x * m[2] + y * m[5] + z * m[8];
|
|
1619
|
+
return out;
|
|
1620
|
+
}
|
|
1621
|
+
function transformQuat(out, a, q) {
|
|
1622
|
+
var qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
1623
|
+
var vx = a[0], vy = a[1], vz = a[2];
|
|
1624
|
+
var tx = qy * vz - qz * vy;
|
|
1625
|
+
var ty = qz * vx - qx * vz;
|
|
1626
|
+
var tz = qx * vy - qy * vx;
|
|
1627
|
+
tx = tx + tx;
|
|
1628
|
+
ty = ty + ty;
|
|
1629
|
+
tz = tz + tz;
|
|
1630
|
+
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
|
1631
|
+
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
|
1632
|
+
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
|
1633
|
+
return out;
|
|
1634
|
+
}
|
|
1635
|
+
function rotateX2(out, a, b, rad) {
|
|
1636
|
+
var p = [], r = [];
|
|
1637
|
+
p[0] = a[0] - b[0];
|
|
1638
|
+
p[1] = a[1] - b[1];
|
|
1639
|
+
p[2] = a[2] - b[2];
|
|
1640
|
+
r[0] = p[0];
|
|
1641
|
+
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
|
1642
|
+
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
|
1643
|
+
out[0] = r[0] + b[0];
|
|
1644
|
+
out[1] = r[1] + b[1];
|
|
1645
|
+
out[2] = r[2] + b[2];
|
|
1646
|
+
return out;
|
|
1647
|
+
}
|
|
1648
|
+
function rotateY2(out, a, b, rad) {
|
|
1649
|
+
var p = [], r = [];
|
|
1650
|
+
p[0] = a[0] - b[0];
|
|
1651
|
+
p[1] = a[1] - b[1];
|
|
1652
|
+
p[2] = a[2] - b[2];
|
|
1653
|
+
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
|
1654
|
+
r[1] = p[1];
|
|
1655
|
+
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
|
1656
|
+
out[0] = r[0] + b[0];
|
|
1657
|
+
out[1] = r[1] + b[1];
|
|
1658
|
+
out[2] = r[2] + b[2];
|
|
1659
|
+
return out;
|
|
1660
|
+
}
|
|
1661
|
+
function rotateZ2(out, a, b, rad) {
|
|
1662
|
+
var p = [], r = [];
|
|
1663
|
+
p[0] = a[0] - b[0];
|
|
1664
|
+
p[1] = a[1] - b[1];
|
|
1665
|
+
p[2] = a[2] - b[2];
|
|
1666
|
+
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
|
1667
|
+
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
|
1668
|
+
r[2] = p[2];
|
|
1669
|
+
out[0] = r[0] + b[0];
|
|
1670
|
+
out[1] = r[1] + b[1];
|
|
1671
|
+
out[2] = r[2] + b[2];
|
|
1672
|
+
return out;
|
|
1673
|
+
}
|
|
1674
|
+
function angle(a, b) {
|
|
1675
|
+
var ax = a[0], ay = a[1], az = a[2], bx = b[0], by = b[1], bz = b[2], mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)), cosine = mag && dot(a, b) / mag;
|
|
1676
|
+
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
|
1677
|
+
}
|
|
1678
|
+
function zero(out) {
|
|
1679
|
+
out[0] = 0;
|
|
1680
|
+
out[1] = 0;
|
|
1681
|
+
out[2] = 0;
|
|
1682
|
+
return out;
|
|
1683
|
+
}
|
|
1684
|
+
function str2(a) {
|
|
1685
|
+
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
|
1686
|
+
}
|
|
1687
|
+
function exactEquals2(a, b) {
|
|
1688
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
|
1689
|
+
}
|
|
1690
|
+
function equals2(a, b) {
|
|
1691
|
+
var a0 = a[0], a1 = a[1], a2 = a[2];
|
|
1692
|
+
var b0 = b[0], b1 = b[1], b2 = b[2];
|
|
1693
|
+
return Math.abs(a0 - b0) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2));
|
|
1694
|
+
}
|
|
1695
|
+
var sub2 = subtract2;
|
|
1696
|
+
var mul2 = multiply2;
|
|
1697
|
+
var div = divide;
|
|
1698
|
+
var dist = distance;
|
|
1699
|
+
var sqrDist = squaredDistance;
|
|
1700
|
+
var len = length;
|
|
1701
|
+
var sqrLen = squaredLength;
|
|
1702
|
+
var forEach = (function() {
|
|
1703
|
+
var vec = create2();
|
|
1704
|
+
return function(a, stride, offset, count, fn, arg) {
|
|
1705
|
+
var i, l;
|
|
1706
|
+
if (!stride) {
|
|
1707
|
+
stride = 3;
|
|
1708
|
+
}
|
|
1709
|
+
if (!offset) {
|
|
1710
|
+
offset = 0;
|
|
1711
|
+
}
|
|
1712
|
+
if (count) {
|
|
1713
|
+
l = Math.min(count * stride + offset, a.length);
|
|
1714
|
+
} else {
|
|
1715
|
+
l = a.length;
|
|
1716
|
+
}
|
|
1717
|
+
for (i = offset; i < l; i += stride) {
|
|
1718
|
+
vec[0] = a[i];
|
|
1719
|
+
vec[1] = a[i + 1];
|
|
1720
|
+
vec[2] = a[i + 2];
|
|
1721
|
+
fn(vec, vec, arg);
|
|
1722
|
+
a[i] = vec[0];
|
|
1723
|
+
a[i + 1] = vec[1];
|
|
1724
|
+
a[i + 2] = vec[2];
|
|
1725
|
+
}
|
|
1726
|
+
return a;
|
|
1727
|
+
};
|
|
1728
|
+
})();
|
|
1729
|
+
|
|
1730
|
+
// ../engine/dist/esm/index.js
|
|
1731
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
1732
|
+
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
1733
|
+
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
73
1734
|
var CONTENTS_SOLID = 1 << 0;
|
|
74
1735
|
var CONTENTS_WINDOW = 1 << 1;
|
|
75
1736
|
var CONTENTS_AUX = 1 << 2;
|
|
@@ -132,33 +1793,354 @@ var MAX_ITEMS = 256;
|
|
|
132
1793
|
var MAX_GENERAL = MAX_CLIENTS * 2;
|
|
133
1794
|
var MAX_SHADOW_LIGHTS = 256;
|
|
134
1795
|
var MAX_WHEEL_ITEMS = 32;
|
|
135
|
-
var ConfigStringIndex = ((
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
return
|
|
1796
|
+
var ConfigStringIndex = ((ConfigStringIndex22) => {
|
|
1797
|
+
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
1798
|
+
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
1799
|
+
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
1800
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyAxis"] = 3] = "SkyAxis";
|
|
1801
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyRotate"] = 4] = "SkyRotate";
|
|
1802
|
+
ConfigStringIndex22[ConfigStringIndex22["StatusBar"] = 5] = "StatusBar";
|
|
1803
|
+
ConfigStringIndex22[ConfigStringIndex22["AirAccel"] = 59] = "AirAccel";
|
|
1804
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
1805
|
+
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
1806
|
+
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
1807
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
1808
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS] = "Images";
|
|
1809
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES] = "Lights";
|
|
1810
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
1811
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
1812
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS] = "PlayerSkins";
|
|
1813
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS] = "General";
|
|
1814
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL] = "WheelWeapons";
|
|
1815
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
1816
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
1817
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
1818
|
+
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
1819
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
1820
|
+
return ConfigStringIndex22;
|
|
160
1821
|
})(ConfigStringIndex || {});
|
|
161
1822
|
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
1823
|
+
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
1824
|
+
function createCrcTable() {
|
|
1825
|
+
const table = new Uint32Array(256);
|
|
1826
|
+
for (let i = 0; i < 256; i += 1) {
|
|
1827
|
+
let crc = i;
|
|
1828
|
+
for (let j = 0; j < 8; j += 1) {
|
|
1829
|
+
crc = (crc & 1) !== 0 ? 3988292384 ^ crc >>> 1 : crc >>> 1;
|
|
1830
|
+
}
|
|
1831
|
+
table[i] = crc >>> 0;
|
|
1832
|
+
}
|
|
1833
|
+
return table;
|
|
1834
|
+
}
|
|
1835
|
+
var CRC_TABLE = createCrcTable();
|
|
1836
|
+
var RERELEASE_KNOWN_PAKS = Object.freeze([
|
|
1837
|
+
// Base campaign
|
|
1838
|
+
{ name: "pak0.pak", checksum: 2378051181, description: "Base game assets" },
|
|
1839
|
+
{ name: "pak0.pak@baseq2", checksum: 2378051181, description: "Base game assets (baseq2)" },
|
|
1840
|
+
// Mission packs bundled with the rerelease
|
|
1841
|
+
{ name: "pak0.pak@rogue", checksum: 3373211245, description: "Ground Zero (rogue) mission pack" },
|
|
1842
|
+
{ name: "pak0.pak@xatrix", checksum: 1358269824, description: "The Reckoning (xatrix) mission pack" }
|
|
1843
|
+
]);
|
|
1844
|
+
var HEADER_SIZE2 = 17 * 4;
|
|
1845
|
+
var FLOAT_BYTES = 4;
|
|
1846
|
+
var STRIDE = 7 * FLOAT_BYTES;
|
|
1847
|
+
var BSP_VERTEX_LAYOUT = [
|
|
1848
|
+
// Position
|
|
1849
|
+
{ index: 0, size: 3, type: 5126, stride: STRIDE, offset: 0 },
|
|
1850
|
+
// Diffuse UV
|
|
1851
|
+
{ index: 1, size: 2, type: 5126, stride: STRIDE, offset: 3 * FLOAT_BYTES },
|
|
1852
|
+
// Lightmap UV
|
|
1853
|
+
{ index: 2, size: 2, type: 5126, stride: STRIDE, offset: 5 * FLOAT_BYTES }
|
|
1854
|
+
];
|
|
1855
|
+
var SKYBOX_POSITIONS = new Float32Array([
|
|
1856
|
+
// Front
|
|
1857
|
+
-1,
|
|
1858
|
+
-1,
|
|
1859
|
+
1,
|
|
1860
|
+
1,
|
|
1861
|
+
-1,
|
|
1862
|
+
1,
|
|
1863
|
+
1,
|
|
1864
|
+
1,
|
|
1865
|
+
1,
|
|
1866
|
+
-1,
|
|
1867
|
+
-1,
|
|
1868
|
+
1,
|
|
1869
|
+
1,
|
|
1870
|
+
1,
|
|
1871
|
+
1,
|
|
1872
|
+
-1,
|
|
1873
|
+
1,
|
|
1874
|
+
1,
|
|
1875
|
+
// Back
|
|
1876
|
+
-1,
|
|
1877
|
+
-1,
|
|
1878
|
+
-1,
|
|
1879
|
+
-1,
|
|
1880
|
+
1,
|
|
1881
|
+
-1,
|
|
1882
|
+
1,
|
|
1883
|
+
1,
|
|
1884
|
+
-1,
|
|
1885
|
+
-1,
|
|
1886
|
+
-1,
|
|
1887
|
+
-1,
|
|
1888
|
+
1,
|
|
1889
|
+
1,
|
|
1890
|
+
-1,
|
|
1891
|
+
1,
|
|
1892
|
+
-1,
|
|
1893
|
+
-1,
|
|
1894
|
+
// Left
|
|
1895
|
+
-1,
|
|
1896
|
+
-1,
|
|
1897
|
+
-1,
|
|
1898
|
+
-1,
|
|
1899
|
+
-1,
|
|
1900
|
+
1,
|
|
1901
|
+
-1,
|
|
1902
|
+
1,
|
|
1903
|
+
1,
|
|
1904
|
+
-1,
|
|
1905
|
+
-1,
|
|
1906
|
+
-1,
|
|
1907
|
+
-1,
|
|
1908
|
+
1,
|
|
1909
|
+
1,
|
|
1910
|
+
-1,
|
|
1911
|
+
1,
|
|
1912
|
+
-1,
|
|
1913
|
+
// Right
|
|
1914
|
+
1,
|
|
1915
|
+
-1,
|
|
1916
|
+
-1,
|
|
1917
|
+
1,
|
|
1918
|
+
1,
|
|
1919
|
+
-1,
|
|
1920
|
+
1,
|
|
1921
|
+
1,
|
|
1922
|
+
1,
|
|
1923
|
+
1,
|
|
1924
|
+
-1,
|
|
1925
|
+
-1,
|
|
1926
|
+
1,
|
|
1927
|
+
1,
|
|
1928
|
+
1,
|
|
1929
|
+
1,
|
|
1930
|
+
-1,
|
|
1931
|
+
1,
|
|
1932
|
+
// Top
|
|
1933
|
+
-1,
|
|
1934
|
+
1,
|
|
1935
|
+
-1,
|
|
1936
|
+
-1,
|
|
1937
|
+
1,
|
|
1938
|
+
1,
|
|
1939
|
+
1,
|
|
1940
|
+
1,
|
|
1941
|
+
1,
|
|
1942
|
+
-1,
|
|
1943
|
+
1,
|
|
1944
|
+
-1,
|
|
1945
|
+
1,
|
|
1946
|
+
1,
|
|
1947
|
+
1,
|
|
1948
|
+
1,
|
|
1949
|
+
1,
|
|
1950
|
+
-1,
|
|
1951
|
+
// Bottom
|
|
1952
|
+
-1,
|
|
1953
|
+
-1,
|
|
1954
|
+
-1,
|
|
1955
|
+
1,
|
|
1956
|
+
-1,
|
|
1957
|
+
-1,
|
|
1958
|
+
1,
|
|
1959
|
+
-1,
|
|
1960
|
+
1,
|
|
1961
|
+
-1,
|
|
1962
|
+
-1,
|
|
1963
|
+
-1,
|
|
1964
|
+
1,
|
|
1965
|
+
-1,
|
|
1966
|
+
1,
|
|
1967
|
+
-1,
|
|
1968
|
+
-1,
|
|
1969
|
+
1
|
|
1970
|
+
]);
|
|
1971
|
+
var createCamera = (position, target, up, fov, aspect, near, far) => {
|
|
1972
|
+
const viewMatrix = mat4_exports.create();
|
|
1973
|
+
mat4_exports.lookAt(viewMatrix, position, target, up);
|
|
1974
|
+
const projectionMatrix = mat4_exports.create();
|
|
1975
|
+
mat4_exports.perspective(projectionMatrix, fov, aspect, near, far);
|
|
1976
|
+
return {
|
|
1977
|
+
position,
|
|
1978
|
+
viewMatrix,
|
|
1979
|
+
projectionMatrix
|
|
1980
|
+
};
|
|
1981
|
+
};
|
|
1982
|
+
|
|
1983
|
+
// ../shared/dist/esm/index.js
|
|
1984
|
+
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
1985
|
+
var DEG_TO_RAD2 = Math.PI / 180;
|
|
1986
|
+
function addVec3(a, b) {
|
|
1987
|
+
return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
|
|
1988
|
+
}
|
|
1989
|
+
function scaleVec3(a, scalar) {
|
|
1990
|
+
return { x: a.x * scalar, y: a.y * scalar, z: a.z * scalar };
|
|
1991
|
+
}
|
|
1992
|
+
function dotVec3(a, b) {
|
|
1993
|
+
return a.x * b.x + a.y * b.y + a.z * b.z;
|
|
1994
|
+
}
|
|
1995
|
+
function lengthSquaredVec3(a) {
|
|
1996
|
+
return dotVec3(a, a);
|
|
1997
|
+
}
|
|
1998
|
+
function lengthVec3(a) {
|
|
1999
|
+
return Math.sqrt(lengthSquaredVec3(a));
|
|
2000
|
+
}
|
|
2001
|
+
function normalizeVec3(a) {
|
|
2002
|
+
const len2 = lengthVec3(a);
|
|
2003
|
+
return len2 === 0 ? a : scaleVec3(a, 1 / len2);
|
|
2004
|
+
}
|
|
2005
|
+
var PITCH = 0;
|
|
2006
|
+
var YAW = 1;
|
|
2007
|
+
var ROLL = 2;
|
|
2008
|
+
var DEG2RAD_FACTOR2 = Math.PI / 180;
|
|
2009
|
+
var RAD2DEG_FACTOR2 = 180 / Math.PI;
|
|
2010
|
+
function axisComponent(vec, axis) {
|
|
2011
|
+
switch (axis) {
|
|
2012
|
+
case PITCH:
|
|
2013
|
+
return vec.x;
|
|
2014
|
+
case YAW:
|
|
2015
|
+
return vec.y;
|
|
2016
|
+
case ROLL:
|
|
2017
|
+
default:
|
|
2018
|
+
return vec.z;
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2021
|
+
function degToRad(degrees) {
|
|
2022
|
+
return degrees * DEG2RAD_FACTOR2;
|
|
2023
|
+
}
|
|
2024
|
+
function angleMod(angle2) {
|
|
2025
|
+
const value = angle2 % 360;
|
|
2026
|
+
return value < 0 ? 360 + value : value;
|
|
2027
|
+
}
|
|
2028
|
+
function angleVectors(angles) {
|
|
2029
|
+
const yaw = degToRad(axisComponent(angles, YAW));
|
|
2030
|
+
const pitch = degToRad(axisComponent(angles, PITCH));
|
|
2031
|
+
const roll = degToRad(axisComponent(angles, ROLL));
|
|
2032
|
+
const sy = Math.sin(yaw);
|
|
2033
|
+
const cy = Math.cos(yaw);
|
|
2034
|
+
const sp = Math.sin(pitch);
|
|
2035
|
+
const cp = Math.cos(pitch);
|
|
2036
|
+
const sr = Math.sin(roll);
|
|
2037
|
+
const cr = Math.cos(roll);
|
|
2038
|
+
const forward = {
|
|
2039
|
+
x: cp * cy,
|
|
2040
|
+
y: cp * sy,
|
|
2041
|
+
z: -sp
|
|
2042
|
+
};
|
|
2043
|
+
const right = {
|
|
2044
|
+
x: -sr * sp * cy - cr * -sy,
|
|
2045
|
+
y: -sr * sp * sy - cr * cy,
|
|
2046
|
+
z: -sr * cp
|
|
2047
|
+
};
|
|
2048
|
+
const up = {
|
|
2049
|
+
x: cr * sp * cy - sr * -sy,
|
|
2050
|
+
y: cr * sp * sy - sr * cy,
|
|
2051
|
+
z: cr * cp
|
|
2052
|
+
};
|
|
2053
|
+
return { forward, right, up };
|
|
2054
|
+
}
|
|
2055
|
+
var CONTENTS_SOLID2 = 1 << 0;
|
|
2056
|
+
var CONTENTS_WINDOW2 = 1 << 1;
|
|
2057
|
+
var CONTENTS_AUX2 = 1 << 2;
|
|
2058
|
+
var CONTENTS_LAVA2 = 1 << 3;
|
|
2059
|
+
var CONTENTS_SLIME2 = 1 << 4;
|
|
2060
|
+
var CONTENTS_WATER2 = 1 << 5;
|
|
2061
|
+
var CONTENTS_MIST2 = 1 << 6;
|
|
2062
|
+
var CONTENTS_NO_WATERJUMP2 = 1 << 13;
|
|
2063
|
+
var CONTENTS_PROJECTILECLIP2 = 1 << 14;
|
|
2064
|
+
var CONTENTS_AREAPORTAL2 = 1 << 15;
|
|
2065
|
+
var CONTENTS_PLAYERCLIP2 = 1 << 16;
|
|
2066
|
+
var CONTENTS_MONSTERCLIP2 = 1 << 17;
|
|
2067
|
+
var CONTENTS_CURRENT_02 = 1 << 18;
|
|
2068
|
+
var CONTENTS_CURRENT_902 = 1 << 19;
|
|
2069
|
+
var CONTENTS_CURRENT_1802 = 1 << 20;
|
|
2070
|
+
var CONTENTS_CURRENT_2702 = 1 << 21;
|
|
2071
|
+
var CONTENTS_CURRENT_UP2 = 1 << 22;
|
|
2072
|
+
var CONTENTS_CURRENT_DOWN2 = 1 << 23;
|
|
2073
|
+
var CONTENTS_ORIGIN2 = 1 << 24;
|
|
2074
|
+
var CONTENTS_MONSTER2 = 1 << 25;
|
|
2075
|
+
var CONTENTS_DEADMONSTER2 = 1 << 26;
|
|
2076
|
+
var CONTENTS_DETAIL2 = 1 << 27;
|
|
2077
|
+
var CONTENTS_TRANSLUCENT2 = 1 << 28;
|
|
2078
|
+
var CONTENTS_LADDER2 = 1 << 29;
|
|
2079
|
+
var CONTENTS_PLAYER2 = 1 << 30;
|
|
2080
|
+
var CONTENTS_PROJECTILE2 = 1 << 31;
|
|
2081
|
+
var SURF_LIGHT2 = 1 << 0;
|
|
2082
|
+
var SURF_SLICK2 = 1 << 1;
|
|
2083
|
+
var SURF_SKY2 = 1 << 2;
|
|
2084
|
+
var SURF_WARP2 = 1 << 3;
|
|
2085
|
+
var SURF_TRANS332 = 1 << 4;
|
|
2086
|
+
var SURF_TRANS662 = 1 << 5;
|
|
2087
|
+
var SURF_FLOWING2 = 1 << 6;
|
|
2088
|
+
var SURF_NODRAW2 = 1 << 7;
|
|
2089
|
+
var SURF_ALPHATEST2 = 1 << 25;
|
|
2090
|
+
var SURF_N64_UV2 = 1 << 28;
|
|
2091
|
+
var SURF_N64_SCROLL_X2 = 1 << 29;
|
|
2092
|
+
var SURF_N64_SCROLL_Y2 = 1 << 30;
|
|
2093
|
+
var SURF_N64_SCROLL_FLIP2 = 1 << 31;
|
|
2094
|
+
var MASK_SOLID2 = CONTENTS_SOLID2 | CONTENTS_WINDOW2;
|
|
2095
|
+
var MASK_PLAYERSOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2096
|
+
var MASK_DEADSOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2;
|
|
2097
|
+
var MASK_MONSTERSOLID2 = CONTENTS_SOLID2 | CONTENTS_MONSTERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2098
|
+
var MASK_WATER2 = CONTENTS_WATER2 | CONTENTS_LAVA2 | CONTENTS_SLIME2;
|
|
2099
|
+
var MASK_OPAQUE2 = CONTENTS_SOLID2 | CONTENTS_SLIME2 | CONTENTS_LAVA2;
|
|
2100
|
+
var MASK_SHOT2 = CONTENTS_SOLID2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2 | CONTENTS_WINDOW2 | CONTENTS_DEADMONSTER2;
|
|
2101
|
+
var MASK_CURRENT2 = CONTENTS_CURRENT_02 | CONTENTS_CURRENT_902 | CONTENTS_CURRENT_1802 | CONTENTS_CURRENT_2702 | CONTENTS_CURRENT_UP2 | CONTENTS_CURRENT_DOWN2;
|
|
2102
|
+
var MASK_BLOCK_SIGHT2 = CONTENTS_SOLID2 | CONTENTS_LAVA2 | CONTENTS_SLIME2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2103
|
+
var MASK_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2;
|
|
2104
|
+
var MASK_LADDER_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_WINDOW2;
|
|
2105
|
+
var MASK_WALK_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTERCLIP2;
|
|
2106
|
+
var MASK_PROJECTILE2 = MASK_SHOT2 | CONTENTS_PROJECTILECLIP2;
|
|
2107
|
+
var MAX_CHECKCOUNT2 = Number.MAX_SAFE_INTEGER - 1;
|
|
2108
|
+
var MAX_CLIENTS2 = 256;
|
|
2109
|
+
var MAX_LIGHTSTYLES2 = 256;
|
|
2110
|
+
var MAX_MODELS2 = 8192;
|
|
2111
|
+
var MAX_SOUNDS2 = 2048;
|
|
2112
|
+
var MAX_IMAGES2 = 512;
|
|
2113
|
+
var MAX_ITEMS2 = 256;
|
|
2114
|
+
var MAX_GENERAL2 = MAX_CLIENTS2 * 2;
|
|
2115
|
+
var MAX_SHADOW_LIGHTS2 = 256;
|
|
2116
|
+
var MAX_WHEEL_ITEMS2 = 32;
|
|
2117
|
+
var ConfigStringIndex2 = ((ConfigStringIndex22) => {
|
|
2118
|
+
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
2119
|
+
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
2120
|
+
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
2121
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyAxis"] = 3] = "SkyAxis";
|
|
2122
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyRotate"] = 4] = "SkyRotate";
|
|
2123
|
+
ConfigStringIndex22[ConfigStringIndex22["StatusBar"] = 5] = "StatusBar";
|
|
2124
|
+
ConfigStringIndex22[ConfigStringIndex22["AirAccel"] = 59] = "AirAccel";
|
|
2125
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
2126
|
+
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
2127
|
+
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
2128
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS2] = "Sounds";
|
|
2129
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS2] = "Images";
|
|
2130
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES2] = "Lights";
|
|
2131
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES2] = "ShadowLights";
|
|
2132
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS2] = "Items";
|
|
2133
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS2] = "PlayerSkins";
|
|
2134
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS2] = "General";
|
|
2135
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL2] = "WheelWeapons";
|
|
2136
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS2] = "WheelAmmo";
|
|
2137
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS2] = "WheelPowerups";
|
|
2138
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS2] = "CdLoopCount";
|
|
2139
|
+
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
2140
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
2141
|
+
return ConfigStringIndex22;
|
|
2142
|
+
})(ConfigStringIndex2 || {});
|
|
2143
|
+
var MAX_CONFIGSTRINGS2 = ConfigStringIndex2.MaxConfigStrings;
|
|
162
2144
|
var WaterLevel = /* @__PURE__ */ ((WaterLevel3) => {
|
|
163
2145
|
WaterLevel3[WaterLevel3["None"] = 0] = "None";
|
|
164
2146
|
WaterLevel3[WaterLevel3["Feet"] = 1] = "Feet";
|
|
@@ -235,8 +2217,8 @@ function applyPmoveFriction(params) {
|
|
|
235
2217
|
if (newspeed === speed) {
|
|
236
2218
|
return velocity;
|
|
237
2219
|
}
|
|
238
|
-
const
|
|
239
|
-
return scaleVec3(velocity,
|
|
2220
|
+
const scale3 = newspeed / speed;
|
|
2221
|
+
return scaleVec3(velocity, scale3);
|
|
240
2222
|
}
|
|
241
2223
|
function applyPmoveAccelerate(params) {
|
|
242
2224
|
const { velocity, wishdir, wishspeed, accel, frametime } = params;
|
|
@@ -282,8 +2264,8 @@ function buildAirGroundWish(params) {
|
|
|
282
2264
|
};
|
|
283
2265
|
let wishspeed = lengthVec3(wishvel);
|
|
284
2266
|
if (wishspeed > maxSpeed) {
|
|
285
|
-
const
|
|
286
|
-
wishvel = scaleVec3(wishvel,
|
|
2267
|
+
const scale3 = maxSpeed / wishspeed;
|
|
2268
|
+
wishvel = scaleVec3(wishvel, scale3);
|
|
287
2269
|
wishspeed = maxSpeed;
|
|
288
2270
|
}
|
|
289
2271
|
return {
|
|
@@ -307,8 +2289,8 @@ function buildWaterWish(params) {
|
|
|
307
2289
|
}
|
|
308
2290
|
let wishspeed = lengthVec3(wishvel);
|
|
309
2291
|
if (wishspeed > maxSpeed) {
|
|
310
|
-
const
|
|
311
|
-
wishvel = scaleVec3(wishvel,
|
|
2292
|
+
const scale3 = maxSpeed / wishspeed;
|
|
2293
|
+
wishvel = scaleVec3(wishvel, scale3);
|
|
312
2294
|
wishspeed = maxSpeed;
|
|
313
2295
|
}
|
|
314
2296
|
wishspeed *= 0.5;
|
|
@@ -317,7 +2299,7 @@ function buildWaterWish(params) {
|
|
|
317
2299
|
wishspeed
|
|
318
2300
|
};
|
|
319
2301
|
}
|
|
320
|
-
var
|
|
2302
|
+
var WATERJUMP_CLEAR2 = 8 | 16 | 32 | 1024;
|
|
321
2303
|
function addAngles(cmdAngles, deltaAngles) {
|
|
322
2304
|
return {
|
|
323
2305
|
x: cmdAngles.x + deltaAngles.x,
|
|
@@ -418,7 +2400,7 @@ function normalizeState(state) {
|
|
|
418
2400
|
deltaAngles: state.deltaAngles ? { ...state.deltaAngles } : ZERO_VEC32
|
|
419
2401
|
};
|
|
420
2402
|
}
|
|
421
|
-
function
|
|
2403
|
+
function lerp2(a, b, t) {
|
|
422
2404
|
return a + (b - a) * t;
|
|
423
2405
|
}
|
|
424
2406
|
function lerpAngle(a, b, t) {
|
|
@@ -432,14 +2414,14 @@ function interpolatePredictionState(previous, latest, alpha) {
|
|
|
432
2414
|
const clamped = Math.max(0, Math.min(alpha, 1));
|
|
433
2415
|
return {
|
|
434
2416
|
origin: {
|
|
435
|
-
x:
|
|
436
|
-
y:
|
|
437
|
-
z:
|
|
2417
|
+
x: lerp2(previous.origin.x, latest.origin.x, clamped),
|
|
2418
|
+
y: lerp2(previous.origin.y, latest.origin.y, clamped),
|
|
2419
|
+
z: lerp2(previous.origin.z, latest.origin.z, clamped)
|
|
438
2420
|
},
|
|
439
2421
|
velocity: {
|
|
440
|
-
x:
|
|
441
|
-
y:
|
|
442
|
-
z:
|
|
2422
|
+
x: lerp2(previous.velocity.x, latest.velocity.x, clamped),
|
|
2423
|
+
y: lerp2(previous.velocity.y, latest.velocity.y, clamped),
|
|
2424
|
+
z: lerp2(previous.velocity.z, latest.velocity.z, clamped)
|
|
443
2425
|
},
|
|
444
2426
|
viewangles: {
|
|
445
2427
|
x: lerpAngle(previous.viewangles.x, latest.viewangles.x, clamped),
|
|
@@ -453,7 +2435,7 @@ function interpolatePredictionState(previous, latest, alpha) {
|
|
|
453
2435
|
deltaAngles: latest.deltaAngles
|
|
454
2436
|
};
|
|
455
2437
|
}
|
|
456
|
-
function simulateCommand(state, cmd, settings) {
|
|
2438
|
+
function simulateCommand(state, cmd, settings, trace) {
|
|
457
2439
|
const frametime = Math.min(Math.max(cmd.msec, 0), MSEC_MAX) / 1e3;
|
|
458
2440
|
const onGround = hasPmFlag(state.pmFlags, PmFlag.OnGround);
|
|
459
2441
|
const onLadder = hasPmFlag(state.pmFlags, PmFlag.OnLadder);
|
|
@@ -505,8 +2487,8 @@ function simulateCommand(state, cmd, settings) {
|
|
|
505
2487
|
});
|
|
506
2488
|
velocity = { ...velocity, z: velocity.z - state.gravity * frametime };
|
|
507
2489
|
}
|
|
508
|
-
const
|
|
509
|
-
const origin =
|
|
2490
|
+
const traceResult = trace(state.origin, addVec3(state.origin, scaleVec3(velocity, frametime)));
|
|
2491
|
+
const origin = traceResult.endpos;
|
|
510
2492
|
return {
|
|
511
2493
|
...state,
|
|
512
2494
|
origin,
|
|
@@ -515,7 +2497,7 @@ function simulateCommand(state, cmd, settings) {
|
|
|
515
2497
|
};
|
|
516
2498
|
}
|
|
517
2499
|
var ClientPrediction = class {
|
|
518
|
-
constructor(settings = {}) {
|
|
2500
|
+
constructor(trace, settings = {}) {
|
|
519
2501
|
this.baseFrame = {
|
|
520
2502
|
frame: 0,
|
|
521
2503
|
timeMs: 0,
|
|
@@ -524,6 +2506,7 @@ var ClientPrediction = class {
|
|
|
524
2506
|
this.commands = [];
|
|
525
2507
|
this.predicted = defaultPredictionState();
|
|
526
2508
|
this.settings = { ...DEFAULTS, ...settings };
|
|
2509
|
+
this.trace = trace;
|
|
527
2510
|
this.predicted = this.baseFrame.state ?? defaultPredictionState();
|
|
528
2511
|
}
|
|
529
2512
|
setAuthoritative(frame) {
|
|
@@ -542,7 +2525,7 @@ var ClientPrediction = class {
|
|
|
542
2525
|
recompute() {
|
|
543
2526
|
let state = normalizeState(this.baseFrame.state);
|
|
544
2527
|
for (const cmd of this.commands) {
|
|
545
|
-
state = simulateCommand(state, cmd, this.settings);
|
|
2528
|
+
state = simulateCommand(state, cmd, this.settings, this.trace);
|
|
546
2529
|
}
|
|
547
2530
|
this.predicted = state;
|
|
548
2531
|
return state;
|
|
@@ -1110,8 +3093,8 @@ var InputController = class {
|
|
|
1110
3093
|
mergeAnalog(current, incoming) {
|
|
1111
3094
|
return Math.abs(incoming) > Math.abs(current) ? incoming : current;
|
|
1112
3095
|
}
|
|
1113
|
-
clampMove(value,
|
|
1114
|
-
return Math.max(-
|
|
3096
|
+
clampMove(value, max2) {
|
|
3097
|
+
return Math.max(-max2, Math.min(max2, value));
|
|
1115
3098
|
}
|
|
1116
3099
|
};
|
|
1117
3100
|
|
|
@@ -1140,11 +3123,12 @@ var InputCommandBuffer = class {
|
|
|
1140
3123
|
|
|
1141
3124
|
// src/index.ts
|
|
1142
3125
|
function createClient(imports) {
|
|
1143
|
-
const prediction = new ClientPrediction();
|
|
3126
|
+
const prediction = new ClientPrediction(imports.engine.trace);
|
|
1144
3127
|
const view = new ViewEffects();
|
|
1145
3128
|
let latestFrame;
|
|
1146
3129
|
let lastRendered;
|
|
1147
3130
|
let lastView;
|
|
3131
|
+
let camera;
|
|
1148
3132
|
return {
|
|
1149
3133
|
init(initial) {
|
|
1150
3134
|
latestFrame = initial;
|
|
@@ -1168,8 +3152,20 @@ function createClient(imports) {
|
|
|
1168
3152
|
}
|
|
1169
3153
|
const frameTimeMs = sample.latest && sample.previous ? Math.max(0, sample.latest.timeMs - sample.previous.timeMs) : 0;
|
|
1170
3154
|
lastView = view.sample(lastRendered, frameTimeMs);
|
|
3155
|
+
if (lastRendered) {
|
|
3156
|
+
const { origin, viewangles } = lastRendered;
|
|
3157
|
+
const position = vec3_exports.fromValues(origin.x, origin.y, origin.z);
|
|
3158
|
+
const rotation = mat4_exports.create();
|
|
3159
|
+
mat4_exports.rotateY(rotation, rotation, viewangles.y * (Math.PI / 180));
|
|
3160
|
+
mat4_exports.rotateX(rotation, rotation, viewangles.x * (Math.PI / 180));
|
|
3161
|
+
const forward = vec3_exports.transformMat4(vec3_exports.create(), vec3_exports.fromValues(1, 0, 0), rotation);
|
|
3162
|
+
const target = vec3_exports.add(vec3_exports.create(), position, forward);
|
|
3163
|
+
camera = createCamera(position, target, vec3_exports.fromValues(0, 0, 1), 90, 4 / 3, 0.1, 1e3);
|
|
3164
|
+
}
|
|
3165
|
+
const command = {};
|
|
1171
3166
|
void imports;
|
|
1172
3167
|
void sample;
|
|
3168
|
+
return command;
|
|
1173
3169
|
},
|
|
1174
3170
|
shutdown() {
|
|
1175
3171
|
latestFrame = void 0;
|
|
@@ -1186,6 +3182,9 @@ function createClient(imports) {
|
|
|
1186
3182
|
},
|
|
1187
3183
|
get lastView() {
|
|
1188
3184
|
return lastView;
|
|
3185
|
+
},
|
|
3186
|
+
get camera() {
|
|
3187
|
+
return camera;
|
|
1189
3188
|
}
|
|
1190
3189
|
};
|
|
1191
3190
|
}
|