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
|
@@ -25,77 +25,1731 @@ __export(index_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(index_exports);
|
|
26
26
|
|
|
27
27
|
// ../../packages/client/dist/esm/index.js
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
var __defProp2 = Object.defineProperty;
|
|
29
|
+
var __export2 = (target, all) => {
|
|
30
|
+
for (var name in all)
|
|
31
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
32
|
+
};
|
|
33
|
+
var EPSILON = 1e-6;
|
|
34
|
+
var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
|
35
|
+
var RANDOM = Math.random;
|
|
36
|
+
function round(a) {
|
|
37
|
+
if (a >= 0) return Math.round(a);
|
|
38
|
+
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
|
32
39
|
}
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
var degree = Math.PI / 180;
|
|
41
|
+
var radian = 180 / Math.PI;
|
|
42
|
+
var mat4_exports = {};
|
|
43
|
+
__export2(mat4_exports, {
|
|
44
|
+
add: () => add,
|
|
45
|
+
adjoint: () => adjoint,
|
|
46
|
+
clone: () => clone,
|
|
47
|
+
copy: () => copy,
|
|
48
|
+
create: () => create,
|
|
49
|
+
decompose: () => decompose,
|
|
50
|
+
determinant: () => determinant,
|
|
51
|
+
equals: () => equals,
|
|
52
|
+
exactEquals: () => exactEquals,
|
|
53
|
+
frob: () => frob,
|
|
54
|
+
fromQuat: () => fromQuat,
|
|
55
|
+
fromQuat2: () => fromQuat2,
|
|
56
|
+
fromRotation: () => fromRotation,
|
|
57
|
+
fromRotationTranslation: () => fromRotationTranslation,
|
|
58
|
+
fromRotationTranslationScale: () => fromRotationTranslationScale,
|
|
59
|
+
fromRotationTranslationScaleOrigin: () => fromRotationTranslationScaleOrigin,
|
|
60
|
+
fromScaling: () => fromScaling,
|
|
61
|
+
fromTranslation: () => fromTranslation,
|
|
62
|
+
fromValues: () => fromValues,
|
|
63
|
+
fromXRotation: () => fromXRotation,
|
|
64
|
+
fromYRotation: () => fromYRotation,
|
|
65
|
+
fromZRotation: () => fromZRotation,
|
|
66
|
+
frustum: () => frustum,
|
|
67
|
+
getRotation: () => getRotation,
|
|
68
|
+
getScaling: () => getScaling,
|
|
69
|
+
getTranslation: () => getTranslation,
|
|
70
|
+
identity: () => identity,
|
|
71
|
+
invert: () => invert,
|
|
72
|
+
lookAt: () => lookAt,
|
|
73
|
+
mul: () => mul,
|
|
74
|
+
multiply: () => multiply,
|
|
75
|
+
multiplyScalar: () => multiplyScalar,
|
|
76
|
+
multiplyScalarAndAdd: () => multiplyScalarAndAdd,
|
|
77
|
+
ortho: () => ortho,
|
|
78
|
+
orthoNO: () => orthoNO,
|
|
79
|
+
orthoZO: () => orthoZO,
|
|
80
|
+
perspective: () => perspective,
|
|
81
|
+
perspectiveFromFieldOfView: () => perspectiveFromFieldOfView,
|
|
82
|
+
perspectiveNO: () => perspectiveNO,
|
|
83
|
+
perspectiveZO: () => perspectiveZO,
|
|
84
|
+
rotate: () => rotate,
|
|
85
|
+
rotateX: () => rotateX,
|
|
86
|
+
rotateY: () => rotateY,
|
|
87
|
+
rotateZ: () => rotateZ,
|
|
88
|
+
scale: () => scale,
|
|
89
|
+
set: () => set,
|
|
90
|
+
str: () => str,
|
|
91
|
+
sub: () => sub,
|
|
92
|
+
subtract: () => subtract,
|
|
93
|
+
targetTo: () => targetTo,
|
|
94
|
+
translate: () => translate,
|
|
95
|
+
transpose: () => transpose
|
|
96
|
+
});
|
|
97
|
+
function create() {
|
|
98
|
+
var out = new ARRAY_TYPE(16);
|
|
99
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
100
|
+
out[1] = 0;
|
|
101
|
+
out[2] = 0;
|
|
102
|
+
out[3] = 0;
|
|
103
|
+
out[4] = 0;
|
|
104
|
+
out[6] = 0;
|
|
105
|
+
out[7] = 0;
|
|
106
|
+
out[8] = 0;
|
|
107
|
+
out[9] = 0;
|
|
108
|
+
out[11] = 0;
|
|
109
|
+
out[12] = 0;
|
|
110
|
+
out[13] = 0;
|
|
111
|
+
out[14] = 0;
|
|
112
|
+
}
|
|
113
|
+
out[0] = 1;
|
|
114
|
+
out[5] = 1;
|
|
115
|
+
out[10] = 1;
|
|
116
|
+
out[15] = 1;
|
|
117
|
+
return out;
|
|
35
118
|
}
|
|
36
|
-
function
|
|
37
|
-
|
|
119
|
+
function clone(a) {
|
|
120
|
+
var out = new ARRAY_TYPE(16);
|
|
121
|
+
out[0] = a[0];
|
|
122
|
+
out[1] = a[1];
|
|
123
|
+
out[2] = a[2];
|
|
124
|
+
out[3] = a[3];
|
|
125
|
+
out[4] = a[4];
|
|
126
|
+
out[5] = a[5];
|
|
127
|
+
out[6] = a[6];
|
|
128
|
+
out[7] = a[7];
|
|
129
|
+
out[8] = a[8];
|
|
130
|
+
out[9] = a[9];
|
|
131
|
+
out[10] = a[10];
|
|
132
|
+
out[11] = a[11];
|
|
133
|
+
out[12] = a[12];
|
|
134
|
+
out[13] = a[13];
|
|
135
|
+
out[14] = a[14];
|
|
136
|
+
out[15] = a[15];
|
|
137
|
+
return out;
|
|
38
138
|
}
|
|
39
|
-
function
|
|
40
|
-
|
|
139
|
+
function copy(out, a) {
|
|
140
|
+
out[0] = a[0];
|
|
141
|
+
out[1] = a[1];
|
|
142
|
+
out[2] = a[2];
|
|
143
|
+
out[3] = a[3];
|
|
144
|
+
out[4] = a[4];
|
|
145
|
+
out[5] = a[5];
|
|
146
|
+
out[6] = a[6];
|
|
147
|
+
out[7] = a[7];
|
|
148
|
+
out[8] = a[8];
|
|
149
|
+
out[9] = a[9];
|
|
150
|
+
out[10] = a[10];
|
|
151
|
+
out[11] = a[11];
|
|
152
|
+
out[12] = a[12];
|
|
153
|
+
out[13] = a[13];
|
|
154
|
+
out[14] = a[14];
|
|
155
|
+
out[15] = a[15];
|
|
156
|
+
return out;
|
|
41
157
|
}
|
|
42
|
-
function
|
|
43
|
-
|
|
158
|
+
function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
159
|
+
var out = new ARRAY_TYPE(16);
|
|
160
|
+
out[0] = m00;
|
|
161
|
+
out[1] = m01;
|
|
162
|
+
out[2] = m02;
|
|
163
|
+
out[3] = m03;
|
|
164
|
+
out[4] = m10;
|
|
165
|
+
out[5] = m11;
|
|
166
|
+
out[6] = m12;
|
|
167
|
+
out[7] = m13;
|
|
168
|
+
out[8] = m20;
|
|
169
|
+
out[9] = m21;
|
|
170
|
+
out[10] = m22;
|
|
171
|
+
out[11] = m23;
|
|
172
|
+
out[12] = m30;
|
|
173
|
+
out[13] = m31;
|
|
174
|
+
out[14] = m32;
|
|
175
|
+
out[15] = m33;
|
|
176
|
+
return out;
|
|
44
177
|
}
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
178
|
+
function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
179
|
+
out[0] = m00;
|
|
180
|
+
out[1] = m01;
|
|
181
|
+
out[2] = m02;
|
|
182
|
+
out[3] = m03;
|
|
183
|
+
out[4] = m10;
|
|
184
|
+
out[5] = m11;
|
|
185
|
+
out[6] = m12;
|
|
186
|
+
out[7] = m13;
|
|
187
|
+
out[8] = m20;
|
|
188
|
+
out[9] = m21;
|
|
189
|
+
out[10] = m22;
|
|
190
|
+
out[11] = m23;
|
|
191
|
+
out[12] = m30;
|
|
192
|
+
out[13] = m31;
|
|
193
|
+
out[14] = m32;
|
|
194
|
+
out[15] = m33;
|
|
195
|
+
return out;
|
|
48
196
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
197
|
+
function identity(out) {
|
|
198
|
+
out[0] = 1;
|
|
199
|
+
out[1] = 0;
|
|
200
|
+
out[2] = 0;
|
|
201
|
+
out[3] = 0;
|
|
202
|
+
out[4] = 0;
|
|
203
|
+
out[5] = 1;
|
|
204
|
+
out[6] = 0;
|
|
205
|
+
out[7] = 0;
|
|
206
|
+
out[8] = 0;
|
|
207
|
+
out[9] = 0;
|
|
208
|
+
out[10] = 1;
|
|
209
|
+
out[11] = 0;
|
|
210
|
+
out[12] = 0;
|
|
211
|
+
out[13] = 0;
|
|
212
|
+
out[14] = 0;
|
|
213
|
+
out[15] = 1;
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
function transpose(out, a) {
|
|
217
|
+
if (out === a) {
|
|
218
|
+
var a01 = a[1], a02 = a[2], a03 = a[3];
|
|
219
|
+
var a12 = a[6], a13 = a[7];
|
|
220
|
+
var a23 = a[11];
|
|
221
|
+
out[1] = a[4];
|
|
222
|
+
out[2] = a[8];
|
|
223
|
+
out[3] = a[12];
|
|
224
|
+
out[4] = a01;
|
|
225
|
+
out[6] = a[9];
|
|
226
|
+
out[7] = a[13];
|
|
227
|
+
out[8] = a02;
|
|
228
|
+
out[9] = a12;
|
|
229
|
+
out[11] = a[14];
|
|
230
|
+
out[12] = a03;
|
|
231
|
+
out[13] = a13;
|
|
232
|
+
out[14] = a23;
|
|
233
|
+
} else {
|
|
234
|
+
out[0] = a[0];
|
|
235
|
+
out[1] = a[4];
|
|
236
|
+
out[2] = a[8];
|
|
237
|
+
out[3] = a[12];
|
|
238
|
+
out[4] = a[1];
|
|
239
|
+
out[5] = a[5];
|
|
240
|
+
out[6] = a[9];
|
|
241
|
+
out[7] = a[13];
|
|
242
|
+
out[8] = a[2];
|
|
243
|
+
out[9] = a[6];
|
|
244
|
+
out[10] = a[10];
|
|
245
|
+
out[11] = a[14];
|
|
246
|
+
out[12] = a[3];
|
|
247
|
+
out[13] = a[7];
|
|
248
|
+
out[14] = a[11];
|
|
249
|
+
out[15] = a[15];
|
|
250
|
+
}
|
|
251
|
+
return out;
|
|
252
|
+
}
|
|
253
|
+
function invert(out, a) {
|
|
254
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
255
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
256
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
257
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
258
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
259
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
260
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
261
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
262
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
263
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
264
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
265
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
266
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
267
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
268
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
269
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
270
|
+
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
271
|
+
if (!det) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
det = 1 / det;
|
|
275
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
276
|
+
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
277
|
+
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
278
|
+
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
|
|
279
|
+
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
280
|
+
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
281
|
+
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
282
|
+
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
|
|
283
|
+
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
284
|
+
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
285
|
+
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
286
|
+
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
|
|
287
|
+
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
|
|
288
|
+
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
|
|
289
|
+
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
|
|
290
|
+
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
|
|
291
|
+
return out;
|
|
292
|
+
}
|
|
293
|
+
function adjoint(out, a) {
|
|
294
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
295
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
296
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
297
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
298
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
299
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
300
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
301
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
302
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
303
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
304
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
305
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
306
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
307
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
308
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
309
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
310
|
+
out[0] = a11 * b11 - a12 * b10 + a13 * b09;
|
|
311
|
+
out[1] = a02 * b10 - a01 * b11 - a03 * b09;
|
|
312
|
+
out[2] = a31 * b05 - a32 * b04 + a33 * b03;
|
|
313
|
+
out[3] = a22 * b04 - a21 * b05 - a23 * b03;
|
|
314
|
+
out[4] = a12 * b08 - a10 * b11 - a13 * b07;
|
|
315
|
+
out[5] = a00 * b11 - a02 * b08 + a03 * b07;
|
|
316
|
+
out[6] = a32 * b02 - a30 * b05 - a33 * b01;
|
|
317
|
+
out[7] = a20 * b05 - a22 * b02 + a23 * b01;
|
|
318
|
+
out[8] = a10 * b10 - a11 * b08 + a13 * b06;
|
|
319
|
+
out[9] = a01 * b08 - a00 * b10 - a03 * b06;
|
|
320
|
+
out[10] = a30 * b04 - a31 * b02 + a33 * b00;
|
|
321
|
+
out[11] = a21 * b02 - a20 * b04 - a23 * b00;
|
|
322
|
+
out[12] = a11 * b07 - a10 * b09 - a12 * b06;
|
|
323
|
+
out[13] = a00 * b09 - a01 * b07 + a02 * b06;
|
|
324
|
+
out[14] = a31 * b01 - a30 * b03 - a32 * b00;
|
|
325
|
+
out[15] = a20 * b03 - a21 * b01 + a22 * b00;
|
|
326
|
+
return out;
|
|
327
|
+
}
|
|
328
|
+
function determinant(a) {
|
|
329
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
330
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
331
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
332
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
333
|
+
var b0 = a00 * a11 - a01 * a10;
|
|
334
|
+
var b1 = a00 * a12 - a02 * a10;
|
|
335
|
+
var b2 = a01 * a12 - a02 * a11;
|
|
336
|
+
var b3 = a20 * a31 - a21 * a30;
|
|
337
|
+
var b4 = a20 * a32 - a22 * a30;
|
|
338
|
+
var b5 = a21 * a32 - a22 * a31;
|
|
339
|
+
var b6 = a00 * b5 - a01 * b4 + a02 * b3;
|
|
340
|
+
var b7 = a10 * b5 - a11 * b4 + a12 * b3;
|
|
341
|
+
var b8 = a20 * b2 - a21 * b1 + a22 * b0;
|
|
342
|
+
var b9 = a30 * b2 - a31 * b1 + a32 * b0;
|
|
343
|
+
return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
|
|
344
|
+
}
|
|
345
|
+
function multiply(out, a, b) {
|
|
346
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
347
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
348
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
349
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
350
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
351
|
+
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
352
|
+
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
353
|
+
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
354
|
+
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
355
|
+
b0 = b[4];
|
|
356
|
+
b1 = b[5];
|
|
357
|
+
b2 = b[6];
|
|
358
|
+
b3 = b[7];
|
|
359
|
+
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
360
|
+
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
361
|
+
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
362
|
+
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
363
|
+
b0 = b[8];
|
|
364
|
+
b1 = b[9];
|
|
365
|
+
b2 = b[10];
|
|
366
|
+
b3 = b[11];
|
|
367
|
+
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
368
|
+
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
369
|
+
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
370
|
+
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
371
|
+
b0 = b[12];
|
|
372
|
+
b1 = b[13];
|
|
373
|
+
b2 = b[14];
|
|
374
|
+
b3 = b[15];
|
|
375
|
+
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
376
|
+
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
377
|
+
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
378
|
+
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
379
|
+
return out;
|
|
380
|
+
}
|
|
381
|
+
function translate(out, a, v) {
|
|
382
|
+
var x = v[0], y = v[1], z = v[2];
|
|
383
|
+
var a00, a01, a02, a03;
|
|
384
|
+
var a10, a11, a12, a13;
|
|
385
|
+
var a20, a21, a22, a23;
|
|
386
|
+
if (a === out) {
|
|
387
|
+
out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
|
|
388
|
+
out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
|
|
389
|
+
out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
|
|
390
|
+
out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
|
|
391
|
+
} else {
|
|
392
|
+
a00 = a[0];
|
|
393
|
+
a01 = a[1];
|
|
394
|
+
a02 = a[2];
|
|
395
|
+
a03 = a[3];
|
|
396
|
+
a10 = a[4];
|
|
397
|
+
a11 = a[5];
|
|
398
|
+
a12 = a[6];
|
|
399
|
+
a13 = a[7];
|
|
400
|
+
a20 = a[8];
|
|
401
|
+
a21 = a[9];
|
|
402
|
+
a22 = a[10];
|
|
403
|
+
a23 = a[11];
|
|
404
|
+
out[0] = a00;
|
|
405
|
+
out[1] = a01;
|
|
406
|
+
out[2] = a02;
|
|
407
|
+
out[3] = a03;
|
|
408
|
+
out[4] = a10;
|
|
409
|
+
out[5] = a11;
|
|
410
|
+
out[6] = a12;
|
|
411
|
+
out[7] = a13;
|
|
412
|
+
out[8] = a20;
|
|
413
|
+
out[9] = a21;
|
|
414
|
+
out[10] = a22;
|
|
415
|
+
out[11] = a23;
|
|
416
|
+
out[12] = a00 * x + a10 * y + a20 * z + a[12];
|
|
417
|
+
out[13] = a01 * x + a11 * y + a21 * z + a[13];
|
|
418
|
+
out[14] = a02 * x + a12 * y + a22 * z + a[14];
|
|
419
|
+
out[15] = a03 * x + a13 * y + a23 * z + a[15];
|
|
420
|
+
}
|
|
421
|
+
return out;
|
|
422
|
+
}
|
|
423
|
+
function scale(out, a, v) {
|
|
424
|
+
var x = v[0], y = v[1], z = v[2];
|
|
425
|
+
out[0] = a[0] * x;
|
|
426
|
+
out[1] = a[1] * x;
|
|
427
|
+
out[2] = a[2] * x;
|
|
428
|
+
out[3] = a[3] * x;
|
|
429
|
+
out[4] = a[4] * y;
|
|
430
|
+
out[5] = a[5] * y;
|
|
431
|
+
out[6] = a[6] * y;
|
|
432
|
+
out[7] = a[7] * y;
|
|
433
|
+
out[8] = a[8] * z;
|
|
434
|
+
out[9] = a[9] * z;
|
|
435
|
+
out[10] = a[10] * z;
|
|
436
|
+
out[11] = a[11] * z;
|
|
437
|
+
out[12] = a[12];
|
|
438
|
+
out[13] = a[13];
|
|
439
|
+
out[14] = a[14];
|
|
440
|
+
out[15] = a[15];
|
|
441
|
+
return out;
|
|
442
|
+
}
|
|
443
|
+
function rotate(out, a, rad, axis) {
|
|
444
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
445
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
446
|
+
var s, c, t;
|
|
447
|
+
var a00, a01, a02, a03;
|
|
448
|
+
var a10, a11, a12, a13;
|
|
449
|
+
var a20, a21, a22, a23;
|
|
450
|
+
var b00, b01, b02;
|
|
451
|
+
var b10, b11, b12;
|
|
452
|
+
var b20, b21, b22;
|
|
453
|
+
if (len2 < EPSILON) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
len2 = 1 / len2;
|
|
457
|
+
x *= len2;
|
|
458
|
+
y *= len2;
|
|
459
|
+
z *= len2;
|
|
460
|
+
s = Math.sin(rad);
|
|
461
|
+
c = Math.cos(rad);
|
|
462
|
+
t = 1 - c;
|
|
463
|
+
a00 = a[0];
|
|
464
|
+
a01 = a[1];
|
|
465
|
+
a02 = a[2];
|
|
466
|
+
a03 = a[3];
|
|
467
|
+
a10 = a[4];
|
|
468
|
+
a11 = a[5];
|
|
469
|
+
a12 = a[6];
|
|
470
|
+
a13 = a[7];
|
|
471
|
+
a20 = a[8];
|
|
472
|
+
a21 = a[9];
|
|
473
|
+
a22 = a[10];
|
|
474
|
+
a23 = a[11];
|
|
475
|
+
b00 = x * x * t + c;
|
|
476
|
+
b01 = y * x * t + z * s;
|
|
477
|
+
b02 = z * x * t - y * s;
|
|
478
|
+
b10 = x * y * t - z * s;
|
|
479
|
+
b11 = y * y * t + c;
|
|
480
|
+
b12 = z * y * t + x * s;
|
|
481
|
+
b20 = x * z * t + y * s;
|
|
482
|
+
b21 = y * z * t - x * s;
|
|
483
|
+
b22 = z * z * t + c;
|
|
484
|
+
out[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
485
|
+
out[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
486
|
+
out[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
487
|
+
out[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
488
|
+
out[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
489
|
+
out[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
490
|
+
out[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
491
|
+
out[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
492
|
+
out[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
493
|
+
out[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
494
|
+
out[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
495
|
+
out[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
496
|
+
if (a !== out) {
|
|
497
|
+
out[12] = a[12];
|
|
498
|
+
out[13] = a[13];
|
|
499
|
+
out[14] = a[14];
|
|
500
|
+
out[15] = a[15];
|
|
501
|
+
}
|
|
502
|
+
return out;
|
|
503
|
+
}
|
|
504
|
+
function rotateX(out, a, rad) {
|
|
505
|
+
var s = Math.sin(rad);
|
|
506
|
+
var c = Math.cos(rad);
|
|
507
|
+
var a10 = a[4];
|
|
508
|
+
var a11 = a[5];
|
|
509
|
+
var a12 = a[6];
|
|
510
|
+
var a13 = a[7];
|
|
511
|
+
var a20 = a[8];
|
|
512
|
+
var a21 = a[9];
|
|
513
|
+
var a22 = a[10];
|
|
514
|
+
var a23 = a[11];
|
|
515
|
+
if (a !== out) {
|
|
516
|
+
out[0] = a[0];
|
|
517
|
+
out[1] = a[1];
|
|
518
|
+
out[2] = a[2];
|
|
519
|
+
out[3] = a[3];
|
|
520
|
+
out[12] = a[12];
|
|
521
|
+
out[13] = a[13];
|
|
522
|
+
out[14] = a[14];
|
|
523
|
+
out[15] = a[15];
|
|
524
|
+
}
|
|
525
|
+
out[4] = a10 * c + a20 * s;
|
|
526
|
+
out[5] = a11 * c + a21 * s;
|
|
527
|
+
out[6] = a12 * c + a22 * s;
|
|
528
|
+
out[7] = a13 * c + a23 * s;
|
|
529
|
+
out[8] = a20 * c - a10 * s;
|
|
530
|
+
out[9] = a21 * c - a11 * s;
|
|
531
|
+
out[10] = a22 * c - a12 * s;
|
|
532
|
+
out[11] = a23 * c - a13 * s;
|
|
533
|
+
return out;
|
|
534
|
+
}
|
|
535
|
+
function rotateY(out, a, rad) {
|
|
536
|
+
var s = Math.sin(rad);
|
|
537
|
+
var c = Math.cos(rad);
|
|
538
|
+
var a00 = a[0];
|
|
539
|
+
var a01 = a[1];
|
|
540
|
+
var a02 = a[2];
|
|
541
|
+
var a03 = a[3];
|
|
542
|
+
var a20 = a[8];
|
|
543
|
+
var a21 = a[9];
|
|
544
|
+
var a22 = a[10];
|
|
545
|
+
var a23 = a[11];
|
|
546
|
+
if (a !== out) {
|
|
547
|
+
out[4] = a[4];
|
|
548
|
+
out[5] = a[5];
|
|
549
|
+
out[6] = a[6];
|
|
550
|
+
out[7] = a[7];
|
|
551
|
+
out[12] = a[12];
|
|
552
|
+
out[13] = a[13];
|
|
553
|
+
out[14] = a[14];
|
|
554
|
+
out[15] = a[15];
|
|
555
|
+
}
|
|
556
|
+
out[0] = a00 * c - a20 * s;
|
|
557
|
+
out[1] = a01 * c - a21 * s;
|
|
558
|
+
out[2] = a02 * c - a22 * s;
|
|
559
|
+
out[3] = a03 * c - a23 * s;
|
|
560
|
+
out[8] = a00 * s + a20 * c;
|
|
561
|
+
out[9] = a01 * s + a21 * c;
|
|
562
|
+
out[10] = a02 * s + a22 * c;
|
|
563
|
+
out[11] = a03 * s + a23 * c;
|
|
564
|
+
return out;
|
|
565
|
+
}
|
|
566
|
+
function rotateZ(out, a, rad) {
|
|
567
|
+
var s = Math.sin(rad);
|
|
568
|
+
var c = Math.cos(rad);
|
|
569
|
+
var a00 = a[0];
|
|
570
|
+
var a01 = a[1];
|
|
571
|
+
var a02 = a[2];
|
|
572
|
+
var a03 = a[3];
|
|
573
|
+
var a10 = a[4];
|
|
574
|
+
var a11 = a[5];
|
|
575
|
+
var a12 = a[6];
|
|
576
|
+
var a13 = a[7];
|
|
577
|
+
if (a !== out) {
|
|
578
|
+
out[8] = a[8];
|
|
579
|
+
out[9] = a[9];
|
|
580
|
+
out[10] = a[10];
|
|
581
|
+
out[11] = a[11];
|
|
582
|
+
out[12] = a[12];
|
|
583
|
+
out[13] = a[13];
|
|
584
|
+
out[14] = a[14];
|
|
585
|
+
out[15] = a[15];
|
|
586
|
+
}
|
|
587
|
+
out[0] = a00 * c + a10 * s;
|
|
588
|
+
out[1] = a01 * c + a11 * s;
|
|
589
|
+
out[2] = a02 * c + a12 * s;
|
|
590
|
+
out[3] = a03 * c + a13 * s;
|
|
591
|
+
out[4] = a10 * c - a00 * s;
|
|
592
|
+
out[5] = a11 * c - a01 * s;
|
|
593
|
+
out[6] = a12 * c - a02 * s;
|
|
594
|
+
out[7] = a13 * c - a03 * s;
|
|
595
|
+
return out;
|
|
596
|
+
}
|
|
597
|
+
function fromTranslation(out, v) {
|
|
598
|
+
out[0] = 1;
|
|
599
|
+
out[1] = 0;
|
|
600
|
+
out[2] = 0;
|
|
601
|
+
out[3] = 0;
|
|
602
|
+
out[4] = 0;
|
|
603
|
+
out[5] = 1;
|
|
604
|
+
out[6] = 0;
|
|
605
|
+
out[7] = 0;
|
|
606
|
+
out[8] = 0;
|
|
607
|
+
out[9] = 0;
|
|
608
|
+
out[10] = 1;
|
|
609
|
+
out[11] = 0;
|
|
610
|
+
out[12] = v[0];
|
|
611
|
+
out[13] = v[1];
|
|
612
|
+
out[14] = v[2];
|
|
613
|
+
out[15] = 1;
|
|
614
|
+
return out;
|
|
615
|
+
}
|
|
616
|
+
function fromScaling(out, v) {
|
|
617
|
+
out[0] = v[0];
|
|
618
|
+
out[1] = 0;
|
|
619
|
+
out[2] = 0;
|
|
620
|
+
out[3] = 0;
|
|
621
|
+
out[4] = 0;
|
|
622
|
+
out[5] = v[1];
|
|
623
|
+
out[6] = 0;
|
|
624
|
+
out[7] = 0;
|
|
625
|
+
out[8] = 0;
|
|
626
|
+
out[9] = 0;
|
|
627
|
+
out[10] = v[2];
|
|
628
|
+
out[11] = 0;
|
|
629
|
+
out[12] = 0;
|
|
630
|
+
out[13] = 0;
|
|
631
|
+
out[14] = 0;
|
|
632
|
+
out[15] = 1;
|
|
633
|
+
return out;
|
|
634
|
+
}
|
|
635
|
+
function fromRotation(out, rad, axis) {
|
|
636
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
637
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
638
|
+
var s, c, t;
|
|
639
|
+
if (len2 < EPSILON) {
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
len2 = 1 / len2;
|
|
643
|
+
x *= len2;
|
|
644
|
+
y *= len2;
|
|
645
|
+
z *= len2;
|
|
646
|
+
s = Math.sin(rad);
|
|
647
|
+
c = Math.cos(rad);
|
|
648
|
+
t = 1 - c;
|
|
649
|
+
out[0] = x * x * t + c;
|
|
650
|
+
out[1] = y * x * t + z * s;
|
|
651
|
+
out[2] = z * x * t - y * s;
|
|
652
|
+
out[3] = 0;
|
|
653
|
+
out[4] = x * y * t - z * s;
|
|
654
|
+
out[5] = y * y * t + c;
|
|
655
|
+
out[6] = z * y * t + x * s;
|
|
656
|
+
out[7] = 0;
|
|
657
|
+
out[8] = x * z * t + y * s;
|
|
658
|
+
out[9] = y * z * t - x * s;
|
|
659
|
+
out[10] = z * z * t + c;
|
|
660
|
+
out[11] = 0;
|
|
661
|
+
out[12] = 0;
|
|
662
|
+
out[13] = 0;
|
|
663
|
+
out[14] = 0;
|
|
664
|
+
out[15] = 1;
|
|
665
|
+
return out;
|
|
666
|
+
}
|
|
667
|
+
function fromXRotation(out, rad) {
|
|
668
|
+
var s = Math.sin(rad);
|
|
669
|
+
var c = Math.cos(rad);
|
|
670
|
+
out[0] = 1;
|
|
671
|
+
out[1] = 0;
|
|
672
|
+
out[2] = 0;
|
|
673
|
+
out[3] = 0;
|
|
674
|
+
out[4] = 0;
|
|
675
|
+
out[5] = c;
|
|
676
|
+
out[6] = s;
|
|
677
|
+
out[7] = 0;
|
|
678
|
+
out[8] = 0;
|
|
679
|
+
out[9] = -s;
|
|
680
|
+
out[10] = c;
|
|
681
|
+
out[11] = 0;
|
|
682
|
+
out[12] = 0;
|
|
683
|
+
out[13] = 0;
|
|
684
|
+
out[14] = 0;
|
|
685
|
+
out[15] = 1;
|
|
686
|
+
return out;
|
|
687
|
+
}
|
|
688
|
+
function fromYRotation(out, rad) {
|
|
689
|
+
var s = Math.sin(rad);
|
|
690
|
+
var c = Math.cos(rad);
|
|
691
|
+
out[0] = c;
|
|
692
|
+
out[1] = 0;
|
|
693
|
+
out[2] = -s;
|
|
694
|
+
out[3] = 0;
|
|
695
|
+
out[4] = 0;
|
|
696
|
+
out[5] = 1;
|
|
697
|
+
out[6] = 0;
|
|
698
|
+
out[7] = 0;
|
|
699
|
+
out[8] = s;
|
|
700
|
+
out[9] = 0;
|
|
701
|
+
out[10] = c;
|
|
702
|
+
out[11] = 0;
|
|
703
|
+
out[12] = 0;
|
|
704
|
+
out[13] = 0;
|
|
705
|
+
out[14] = 0;
|
|
706
|
+
out[15] = 1;
|
|
707
|
+
return out;
|
|
708
|
+
}
|
|
709
|
+
function fromZRotation(out, rad) {
|
|
710
|
+
var s = Math.sin(rad);
|
|
711
|
+
var c = Math.cos(rad);
|
|
712
|
+
out[0] = c;
|
|
713
|
+
out[1] = s;
|
|
714
|
+
out[2] = 0;
|
|
715
|
+
out[3] = 0;
|
|
716
|
+
out[4] = -s;
|
|
717
|
+
out[5] = c;
|
|
718
|
+
out[6] = 0;
|
|
719
|
+
out[7] = 0;
|
|
720
|
+
out[8] = 0;
|
|
721
|
+
out[9] = 0;
|
|
722
|
+
out[10] = 1;
|
|
723
|
+
out[11] = 0;
|
|
724
|
+
out[12] = 0;
|
|
725
|
+
out[13] = 0;
|
|
726
|
+
out[14] = 0;
|
|
727
|
+
out[15] = 1;
|
|
728
|
+
return out;
|
|
729
|
+
}
|
|
730
|
+
function fromRotationTranslation(out, q, v) {
|
|
731
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
732
|
+
var x2 = x + x;
|
|
733
|
+
var y2 = y + y;
|
|
734
|
+
var z2 = z + z;
|
|
735
|
+
var xx = x * x2;
|
|
736
|
+
var xy = x * y2;
|
|
737
|
+
var xz = x * z2;
|
|
738
|
+
var yy = y * y2;
|
|
739
|
+
var yz = y * z2;
|
|
740
|
+
var zz = z * z2;
|
|
741
|
+
var wx = w * x2;
|
|
742
|
+
var wy = w * y2;
|
|
743
|
+
var wz = w * z2;
|
|
744
|
+
out[0] = 1 - (yy + zz);
|
|
745
|
+
out[1] = xy + wz;
|
|
746
|
+
out[2] = xz - wy;
|
|
747
|
+
out[3] = 0;
|
|
748
|
+
out[4] = xy - wz;
|
|
749
|
+
out[5] = 1 - (xx + zz);
|
|
750
|
+
out[6] = yz + wx;
|
|
751
|
+
out[7] = 0;
|
|
752
|
+
out[8] = xz + wy;
|
|
753
|
+
out[9] = yz - wx;
|
|
754
|
+
out[10] = 1 - (xx + yy);
|
|
755
|
+
out[11] = 0;
|
|
756
|
+
out[12] = v[0];
|
|
757
|
+
out[13] = v[1];
|
|
758
|
+
out[14] = v[2];
|
|
759
|
+
out[15] = 1;
|
|
760
|
+
return out;
|
|
761
|
+
}
|
|
762
|
+
function fromQuat2(out, a) {
|
|
763
|
+
var translation = new ARRAY_TYPE(3);
|
|
764
|
+
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];
|
|
765
|
+
var magnitude = bx * bx + by * by + bz * bz + bw * bw;
|
|
766
|
+
if (magnitude > 0) {
|
|
767
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;
|
|
768
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;
|
|
769
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;
|
|
770
|
+
} else {
|
|
771
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
|
772
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
|
773
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
|
63
774
|
}
|
|
775
|
+
fromRotationTranslation(out, a, translation);
|
|
776
|
+
return out;
|
|
64
777
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
778
|
+
function getTranslation(out, mat) {
|
|
779
|
+
out[0] = mat[12];
|
|
780
|
+
out[1] = mat[13];
|
|
781
|
+
out[2] = mat[14];
|
|
782
|
+
return out;
|
|
67
783
|
}
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
|
|
784
|
+
function getScaling(out, mat) {
|
|
785
|
+
var m11 = mat[0];
|
|
786
|
+
var m12 = mat[1];
|
|
787
|
+
var m13 = mat[2];
|
|
788
|
+
var m21 = mat[4];
|
|
789
|
+
var m22 = mat[5];
|
|
790
|
+
var m23 = mat[6];
|
|
791
|
+
var m31 = mat[8];
|
|
792
|
+
var m32 = mat[9];
|
|
793
|
+
var m33 = mat[10];
|
|
794
|
+
out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
795
|
+
out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
796
|
+
out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
797
|
+
return out;
|
|
71
798
|
}
|
|
72
|
-
function
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
799
|
+
function getRotation(out, mat) {
|
|
800
|
+
var scaling = new ARRAY_TYPE(3);
|
|
801
|
+
getScaling(scaling, mat);
|
|
802
|
+
var is1 = 1 / scaling[0];
|
|
803
|
+
var is2 = 1 / scaling[1];
|
|
804
|
+
var is3 = 1 / scaling[2];
|
|
805
|
+
var sm11 = mat[0] * is1;
|
|
806
|
+
var sm12 = mat[1] * is2;
|
|
807
|
+
var sm13 = mat[2] * is3;
|
|
808
|
+
var sm21 = mat[4] * is1;
|
|
809
|
+
var sm22 = mat[5] * is2;
|
|
810
|
+
var sm23 = mat[6] * is3;
|
|
811
|
+
var sm31 = mat[8] * is1;
|
|
812
|
+
var sm32 = mat[9] * is2;
|
|
813
|
+
var sm33 = mat[10] * is3;
|
|
814
|
+
var trace = sm11 + sm22 + sm33;
|
|
815
|
+
var S = 0;
|
|
816
|
+
if (trace > 0) {
|
|
817
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
818
|
+
out[3] = 0.25 * S;
|
|
819
|
+
out[0] = (sm23 - sm32) / S;
|
|
820
|
+
out[1] = (sm31 - sm13) / S;
|
|
821
|
+
out[2] = (sm12 - sm21) / S;
|
|
822
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
823
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
824
|
+
out[3] = (sm23 - sm32) / S;
|
|
825
|
+
out[0] = 0.25 * S;
|
|
826
|
+
out[1] = (sm12 + sm21) / S;
|
|
827
|
+
out[2] = (sm31 + sm13) / S;
|
|
828
|
+
} else if (sm22 > sm33) {
|
|
829
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
830
|
+
out[3] = (sm31 - sm13) / S;
|
|
831
|
+
out[0] = (sm12 + sm21) / S;
|
|
832
|
+
out[1] = 0.25 * S;
|
|
833
|
+
out[2] = (sm23 + sm32) / S;
|
|
834
|
+
} else {
|
|
835
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
836
|
+
out[3] = (sm12 - sm21) / S;
|
|
837
|
+
out[0] = (sm31 + sm13) / S;
|
|
838
|
+
out[1] = (sm23 + sm32) / S;
|
|
839
|
+
out[2] = 0.25 * S;
|
|
840
|
+
}
|
|
841
|
+
return out;
|
|
842
|
+
}
|
|
843
|
+
function decompose(out_r, out_t, out_s, mat) {
|
|
844
|
+
out_t[0] = mat[12];
|
|
845
|
+
out_t[1] = mat[13];
|
|
846
|
+
out_t[2] = mat[14];
|
|
847
|
+
var m11 = mat[0];
|
|
848
|
+
var m12 = mat[1];
|
|
849
|
+
var m13 = mat[2];
|
|
850
|
+
var m21 = mat[4];
|
|
851
|
+
var m22 = mat[5];
|
|
852
|
+
var m23 = mat[6];
|
|
853
|
+
var m31 = mat[8];
|
|
854
|
+
var m32 = mat[9];
|
|
855
|
+
var m33 = mat[10];
|
|
856
|
+
out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
857
|
+
out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
858
|
+
out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
859
|
+
var is1 = 1 / out_s[0];
|
|
860
|
+
var is2 = 1 / out_s[1];
|
|
861
|
+
var is3 = 1 / out_s[2];
|
|
862
|
+
var sm11 = m11 * is1;
|
|
863
|
+
var sm12 = m12 * is2;
|
|
864
|
+
var sm13 = m13 * is3;
|
|
865
|
+
var sm21 = m21 * is1;
|
|
866
|
+
var sm22 = m22 * is2;
|
|
867
|
+
var sm23 = m23 * is3;
|
|
868
|
+
var sm31 = m31 * is1;
|
|
869
|
+
var sm32 = m32 * is2;
|
|
870
|
+
var sm33 = m33 * is3;
|
|
871
|
+
var trace = sm11 + sm22 + sm33;
|
|
872
|
+
var S = 0;
|
|
873
|
+
if (trace > 0) {
|
|
874
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
875
|
+
out_r[3] = 0.25 * S;
|
|
876
|
+
out_r[0] = (sm23 - sm32) / S;
|
|
877
|
+
out_r[1] = (sm31 - sm13) / S;
|
|
878
|
+
out_r[2] = (sm12 - sm21) / S;
|
|
879
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
880
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
881
|
+
out_r[3] = (sm23 - sm32) / S;
|
|
882
|
+
out_r[0] = 0.25 * S;
|
|
883
|
+
out_r[1] = (sm12 + sm21) / S;
|
|
884
|
+
out_r[2] = (sm31 + sm13) / S;
|
|
885
|
+
} else if (sm22 > sm33) {
|
|
886
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
887
|
+
out_r[3] = (sm31 - sm13) / S;
|
|
888
|
+
out_r[0] = (sm12 + sm21) / S;
|
|
889
|
+
out_r[1] = 0.25 * S;
|
|
890
|
+
out_r[2] = (sm23 + sm32) / S;
|
|
891
|
+
} else {
|
|
892
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
893
|
+
out_r[3] = (sm12 - sm21) / S;
|
|
894
|
+
out_r[0] = (sm31 + sm13) / S;
|
|
895
|
+
out_r[1] = (sm23 + sm32) / S;
|
|
896
|
+
out_r[2] = 0.25 * S;
|
|
897
|
+
}
|
|
898
|
+
return out_r;
|
|
899
|
+
}
|
|
900
|
+
function fromRotationTranslationScale(out, q, v, s) {
|
|
901
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
902
|
+
var x2 = x + x;
|
|
903
|
+
var y2 = y + y;
|
|
904
|
+
var z2 = z + z;
|
|
905
|
+
var xx = x * x2;
|
|
906
|
+
var xy = x * y2;
|
|
907
|
+
var xz = x * z2;
|
|
908
|
+
var yy = y * y2;
|
|
909
|
+
var yz = y * z2;
|
|
910
|
+
var zz = z * z2;
|
|
911
|
+
var wx = w * x2;
|
|
912
|
+
var wy = w * y2;
|
|
913
|
+
var wz = w * z2;
|
|
914
|
+
var sx = s[0];
|
|
915
|
+
var sy = s[1];
|
|
916
|
+
var sz = s[2];
|
|
917
|
+
out[0] = (1 - (yy + zz)) * sx;
|
|
918
|
+
out[1] = (xy + wz) * sx;
|
|
919
|
+
out[2] = (xz - wy) * sx;
|
|
920
|
+
out[3] = 0;
|
|
921
|
+
out[4] = (xy - wz) * sy;
|
|
922
|
+
out[5] = (1 - (xx + zz)) * sy;
|
|
923
|
+
out[6] = (yz + wx) * sy;
|
|
924
|
+
out[7] = 0;
|
|
925
|
+
out[8] = (xz + wy) * sz;
|
|
926
|
+
out[9] = (yz - wx) * sz;
|
|
927
|
+
out[10] = (1 - (xx + yy)) * sz;
|
|
928
|
+
out[11] = 0;
|
|
929
|
+
out[12] = v[0];
|
|
930
|
+
out[13] = v[1];
|
|
931
|
+
out[14] = v[2];
|
|
932
|
+
out[15] = 1;
|
|
933
|
+
return out;
|
|
98
934
|
}
|
|
935
|
+
function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
|
|
936
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
937
|
+
var x2 = x + x;
|
|
938
|
+
var y2 = y + y;
|
|
939
|
+
var z2 = z + z;
|
|
940
|
+
var xx = x * x2;
|
|
941
|
+
var xy = x * y2;
|
|
942
|
+
var xz = x * z2;
|
|
943
|
+
var yy = y * y2;
|
|
944
|
+
var yz = y * z2;
|
|
945
|
+
var zz = z * z2;
|
|
946
|
+
var wx = w * x2;
|
|
947
|
+
var wy = w * y2;
|
|
948
|
+
var wz = w * z2;
|
|
949
|
+
var sx = s[0];
|
|
950
|
+
var sy = s[1];
|
|
951
|
+
var sz = s[2];
|
|
952
|
+
var ox = o[0];
|
|
953
|
+
var oy = o[1];
|
|
954
|
+
var oz = o[2];
|
|
955
|
+
var out0 = (1 - (yy + zz)) * sx;
|
|
956
|
+
var out1 = (xy + wz) * sx;
|
|
957
|
+
var out2 = (xz - wy) * sx;
|
|
958
|
+
var out4 = (xy - wz) * sy;
|
|
959
|
+
var out5 = (1 - (xx + zz)) * sy;
|
|
960
|
+
var out6 = (yz + wx) * sy;
|
|
961
|
+
var out8 = (xz + wy) * sz;
|
|
962
|
+
var out9 = (yz - wx) * sz;
|
|
963
|
+
var out10 = (1 - (xx + yy)) * sz;
|
|
964
|
+
out[0] = out0;
|
|
965
|
+
out[1] = out1;
|
|
966
|
+
out[2] = out2;
|
|
967
|
+
out[3] = 0;
|
|
968
|
+
out[4] = out4;
|
|
969
|
+
out[5] = out5;
|
|
970
|
+
out[6] = out6;
|
|
971
|
+
out[7] = 0;
|
|
972
|
+
out[8] = out8;
|
|
973
|
+
out[9] = out9;
|
|
974
|
+
out[10] = out10;
|
|
975
|
+
out[11] = 0;
|
|
976
|
+
out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);
|
|
977
|
+
out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);
|
|
978
|
+
out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);
|
|
979
|
+
out[15] = 1;
|
|
980
|
+
return out;
|
|
981
|
+
}
|
|
982
|
+
function fromQuat(out, q) {
|
|
983
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
984
|
+
var x2 = x + x;
|
|
985
|
+
var y2 = y + y;
|
|
986
|
+
var z2 = z + z;
|
|
987
|
+
var xx = x * x2;
|
|
988
|
+
var yx = y * x2;
|
|
989
|
+
var yy = y * y2;
|
|
990
|
+
var zx = z * x2;
|
|
991
|
+
var zy = z * y2;
|
|
992
|
+
var zz = z * z2;
|
|
993
|
+
var wx = w * x2;
|
|
994
|
+
var wy = w * y2;
|
|
995
|
+
var wz = w * z2;
|
|
996
|
+
out[0] = 1 - yy - zz;
|
|
997
|
+
out[1] = yx + wz;
|
|
998
|
+
out[2] = zx - wy;
|
|
999
|
+
out[3] = 0;
|
|
1000
|
+
out[4] = yx - wz;
|
|
1001
|
+
out[5] = 1 - xx - zz;
|
|
1002
|
+
out[6] = zy + wx;
|
|
1003
|
+
out[7] = 0;
|
|
1004
|
+
out[8] = zx + wy;
|
|
1005
|
+
out[9] = zy - wx;
|
|
1006
|
+
out[10] = 1 - xx - yy;
|
|
1007
|
+
out[11] = 0;
|
|
1008
|
+
out[12] = 0;
|
|
1009
|
+
out[13] = 0;
|
|
1010
|
+
out[14] = 0;
|
|
1011
|
+
out[15] = 1;
|
|
1012
|
+
return out;
|
|
1013
|
+
}
|
|
1014
|
+
function frustum(out, left, right, bottom, top, near, far) {
|
|
1015
|
+
var rl = 1 / (right - left);
|
|
1016
|
+
var tb = 1 / (top - bottom);
|
|
1017
|
+
var nf = 1 / (near - far);
|
|
1018
|
+
out[0] = near * 2 * rl;
|
|
1019
|
+
out[1] = 0;
|
|
1020
|
+
out[2] = 0;
|
|
1021
|
+
out[3] = 0;
|
|
1022
|
+
out[4] = 0;
|
|
1023
|
+
out[5] = near * 2 * tb;
|
|
1024
|
+
out[6] = 0;
|
|
1025
|
+
out[7] = 0;
|
|
1026
|
+
out[8] = (right + left) * rl;
|
|
1027
|
+
out[9] = (top + bottom) * tb;
|
|
1028
|
+
out[10] = (far + near) * nf;
|
|
1029
|
+
out[11] = -1;
|
|
1030
|
+
out[12] = 0;
|
|
1031
|
+
out[13] = 0;
|
|
1032
|
+
out[14] = far * near * 2 * nf;
|
|
1033
|
+
out[15] = 0;
|
|
1034
|
+
return out;
|
|
1035
|
+
}
|
|
1036
|
+
function perspectiveNO(out, fovy, aspect, near, far) {
|
|
1037
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
1038
|
+
out[0] = f / aspect;
|
|
1039
|
+
out[1] = 0;
|
|
1040
|
+
out[2] = 0;
|
|
1041
|
+
out[3] = 0;
|
|
1042
|
+
out[4] = 0;
|
|
1043
|
+
out[5] = f;
|
|
1044
|
+
out[6] = 0;
|
|
1045
|
+
out[7] = 0;
|
|
1046
|
+
out[8] = 0;
|
|
1047
|
+
out[9] = 0;
|
|
1048
|
+
out[11] = -1;
|
|
1049
|
+
out[12] = 0;
|
|
1050
|
+
out[13] = 0;
|
|
1051
|
+
out[15] = 0;
|
|
1052
|
+
if (far != null && far !== Infinity) {
|
|
1053
|
+
var nf = 1 / (near - far);
|
|
1054
|
+
out[10] = (far + near) * nf;
|
|
1055
|
+
out[14] = 2 * far * near * nf;
|
|
1056
|
+
} else {
|
|
1057
|
+
out[10] = -1;
|
|
1058
|
+
out[14] = -2 * near;
|
|
1059
|
+
}
|
|
1060
|
+
return out;
|
|
1061
|
+
}
|
|
1062
|
+
var perspective = perspectiveNO;
|
|
1063
|
+
function perspectiveZO(out, fovy, aspect, near, far) {
|
|
1064
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
1065
|
+
out[0] = f / aspect;
|
|
1066
|
+
out[1] = 0;
|
|
1067
|
+
out[2] = 0;
|
|
1068
|
+
out[3] = 0;
|
|
1069
|
+
out[4] = 0;
|
|
1070
|
+
out[5] = f;
|
|
1071
|
+
out[6] = 0;
|
|
1072
|
+
out[7] = 0;
|
|
1073
|
+
out[8] = 0;
|
|
1074
|
+
out[9] = 0;
|
|
1075
|
+
out[11] = -1;
|
|
1076
|
+
out[12] = 0;
|
|
1077
|
+
out[13] = 0;
|
|
1078
|
+
out[15] = 0;
|
|
1079
|
+
if (far != null && far !== Infinity) {
|
|
1080
|
+
var nf = 1 / (near - far);
|
|
1081
|
+
out[10] = far * nf;
|
|
1082
|
+
out[14] = far * near * nf;
|
|
1083
|
+
} else {
|
|
1084
|
+
out[10] = -1;
|
|
1085
|
+
out[14] = -near;
|
|
1086
|
+
}
|
|
1087
|
+
return out;
|
|
1088
|
+
}
|
|
1089
|
+
function perspectiveFromFieldOfView(out, fov, near, far) {
|
|
1090
|
+
var upTan = Math.tan(fov.upDegrees * Math.PI / 180);
|
|
1091
|
+
var downTan = Math.tan(fov.downDegrees * Math.PI / 180);
|
|
1092
|
+
var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180);
|
|
1093
|
+
var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180);
|
|
1094
|
+
var xScale = 2 / (leftTan + rightTan);
|
|
1095
|
+
var yScale = 2 / (upTan + downTan);
|
|
1096
|
+
out[0] = xScale;
|
|
1097
|
+
out[1] = 0;
|
|
1098
|
+
out[2] = 0;
|
|
1099
|
+
out[3] = 0;
|
|
1100
|
+
out[4] = 0;
|
|
1101
|
+
out[5] = yScale;
|
|
1102
|
+
out[6] = 0;
|
|
1103
|
+
out[7] = 0;
|
|
1104
|
+
out[8] = -((leftTan - rightTan) * xScale * 0.5);
|
|
1105
|
+
out[9] = (upTan - downTan) * yScale * 0.5;
|
|
1106
|
+
out[10] = far / (near - far);
|
|
1107
|
+
out[11] = -1;
|
|
1108
|
+
out[12] = 0;
|
|
1109
|
+
out[13] = 0;
|
|
1110
|
+
out[14] = far * near / (near - far);
|
|
1111
|
+
out[15] = 0;
|
|
1112
|
+
return out;
|
|
1113
|
+
}
|
|
1114
|
+
function orthoNO(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] = 2 * nf;
|
|
1129
|
+
out[11] = 0;
|
|
1130
|
+
out[12] = (left + right) * lr;
|
|
1131
|
+
out[13] = (top + bottom) * bt;
|
|
1132
|
+
out[14] = (far + near) * nf;
|
|
1133
|
+
out[15] = 1;
|
|
1134
|
+
return out;
|
|
1135
|
+
}
|
|
1136
|
+
var ortho = orthoNO;
|
|
1137
|
+
function orthoZO(out, left, right, bottom, top, near, far) {
|
|
1138
|
+
var lr = 1 / (left - right);
|
|
1139
|
+
var bt = 1 / (bottom - top);
|
|
1140
|
+
var nf = 1 / (near - far);
|
|
1141
|
+
out[0] = -2 * lr;
|
|
1142
|
+
out[1] = 0;
|
|
1143
|
+
out[2] = 0;
|
|
1144
|
+
out[3] = 0;
|
|
1145
|
+
out[4] = 0;
|
|
1146
|
+
out[5] = -2 * bt;
|
|
1147
|
+
out[6] = 0;
|
|
1148
|
+
out[7] = 0;
|
|
1149
|
+
out[8] = 0;
|
|
1150
|
+
out[9] = 0;
|
|
1151
|
+
out[10] = nf;
|
|
1152
|
+
out[11] = 0;
|
|
1153
|
+
out[12] = (left + right) * lr;
|
|
1154
|
+
out[13] = (top + bottom) * bt;
|
|
1155
|
+
out[14] = near * nf;
|
|
1156
|
+
out[15] = 1;
|
|
1157
|
+
return out;
|
|
1158
|
+
}
|
|
1159
|
+
function lookAt(out, eye, center, up) {
|
|
1160
|
+
var x0, x1, x2, y0, y1, y2, z0, z1, z2, len2;
|
|
1161
|
+
var eyex = eye[0];
|
|
1162
|
+
var eyey = eye[1];
|
|
1163
|
+
var eyez = eye[2];
|
|
1164
|
+
var upx = up[0];
|
|
1165
|
+
var upy = up[1];
|
|
1166
|
+
var upz = up[2];
|
|
1167
|
+
var centerx = center[0];
|
|
1168
|
+
var centery = center[1];
|
|
1169
|
+
var centerz = center[2];
|
|
1170
|
+
if (Math.abs(eyex - centerx) < EPSILON && Math.abs(eyey - centery) < EPSILON && Math.abs(eyez - centerz) < EPSILON) {
|
|
1171
|
+
return identity(out);
|
|
1172
|
+
}
|
|
1173
|
+
z0 = eyex - centerx;
|
|
1174
|
+
z1 = eyey - centery;
|
|
1175
|
+
z2 = eyez - centerz;
|
|
1176
|
+
len2 = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
1177
|
+
z0 *= len2;
|
|
1178
|
+
z1 *= len2;
|
|
1179
|
+
z2 *= len2;
|
|
1180
|
+
x0 = upy * z2 - upz * z1;
|
|
1181
|
+
x1 = upz * z0 - upx * z2;
|
|
1182
|
+
x2 = upx * z1 - upy * z0;
|
|
1183
|
+
len2 = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
1184
|
+
if (!len2) {
|
|
1185
|
+
x0 = 0;
|
|
1186
|
+
x1 = 0;
|
|
1187
|
+
x2 = 0;
|
|
1188
|
+
} else {
|
|
1189
|
+
len2 = 1 / len2;
|
|
1190
|
+
x0 *= len2;
|
|
1191
|
+
x1 *= len2;
|
|
1192
|
+
x2 *= len2;
|
|
1193
|
+
}
|
|
1194
|
+
y0 = z1 * x2 - z2 * x1;
|
|
1195
|
+
y1 = z2 * x0 - z0 * x2;
|
|
1196
|
+
y2 = z0 * x1 - z1 * x0;
|
|
1197
|
+
len2 = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
1198
|
+
if (!len2) {
|
|
1199
|
+
y0 = 0;
|
|
1200
|
+
y1 = 0;
|
|
1201
|
+
y2 = 0;
|
|
1202
|
+
} else {
|
|
1203
|
+
len2 = 1 / len2;
|
|
1204
|
+
y0 *= len2;
|
|
1205
|
+
y1 *= len2;
|
|
1206
|
+
y2 *= len2;
|
|
1207
|
+
}
|
|
1208
|
+
out[0] = x0;
|
|
1209
|
+
out[1] = y0;
|
|
1210
|
+
out[2] = z0;
|
|
1211
|
+
out[3] = 0;
|
|
1212
|
+
out[4] = x1;
|
|
1213
|
+
out[5] = y1;
|
|
1214
|
+
out[6] = z1;
|
|
1215
|
+
out[7] = 0;
|
|
1216
|
+
out[8] = x2;
|
|
1217
|
+
out[9] = y2;
|
|
1218
|
+
out[10] = z2;
|
|
1219
|
+
out[11] = 0;
|
|
1220
|
+
out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
|
|
1221
|
+
out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
|
|
1222
|
+
out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
|
|
1223
|
+
out[15] = 1;
|
|
1224
|
+
return out;
|
|
1225
|
+
}
|
|
1226
|
+
function targetTo(out, eye, target, up) {
|
|
1227
|
+
var eyex = eye[0], eyey = eye[1], eyez = eye[2], upx = up[0], upy = up[1], upz = up[2];
|
|
1228
|
+
var z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
|
|
1229
|
+
var len2 = z0 * z0 + z1 * z1 + z2 * z2;
|
|
1230
|
+
if (len2 > 0) {
|
|
1231
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1232
|
+
z0 *= len2;
|
|
1233
|
+
z1 *= len2;
|
|
1234
|
+
z2 *= len2;
|
|
1235
|
+
}
|
|
1236
|
+
var x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
|
|
1237
|
+
len2 = x0 * x0 + x1 * x1 + x2 * x2;
|
|
1238
|
+
if (len2 > 0) {
|
|
1239
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1240
|
+
x0 *= len2;
|
|
1241
|
+
x1 *= len2;
|
|
1242
|
+
x2 *= len2;
|
|
1243
|
+
}
|
|
1244
|
+
out[0] = x0;
|
|
1245
|
+
out[1] = x1;
|
|
1246
|
+
out[2] = x2;
|
|
1247
|
+
out[3] = 0;
|
|
1248
|
+
out[4] = z1 * x2 - z2 * x1;
|
|
1249
|
+
out[5] = z2 * x0 - z0 * x2;
|
|
1250
|
+
out[6] = z0 * x1 - z1 * x0;
|
|
1251
|
+
out[7] = 0;
|
|
1252
|
+
out[8] = z0;
|
|
1253
|
+
out[9] = z1;
|
|
1254
|
+
out[10] = z2;
|
|
1255
|
+
out[11] = 0;
|
|
1256
|
+
out[12] = eyex;
|
|
1257
|
+
out[13] = eyey;
|
|
1258
|
+
out[14] = eyez;
|
|
1259
|
+
out[15] = 1;
|
|
1260
|
+
return out;
|
|
1261
|
+
}
|
|
1262
|
+
function str(a) {
|
|
1263
|
+
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] + ")";
|
|
1264
|
+
}
|
|
1265
|
+
function frob(a) {
|
|
1266
|
+
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]);
|
|
1267
|
+
}
|
|
1268
|
+
function add(out, a, b) {
|
|
1269
|
+
out[0] = a[0] + b[0];
|
|
1270
|
+
out[1] = a[1] + b[1];
|
|
1271
|
+
out[2] = a[2] + b[2];
|
|
1272
|
+
out[3] = a[3] + b[3];
|
|
1273
|
+
out[4] = a[4] + b[4];
|
|
1274
|
+
out[5] = a[5] + b[5];
|
|
1275
|
+
out[6] = a[6] + b[6];
|
|
1276
|
+
out[7] = a[7] + b[7];
|
|
1277
|
+
out[8] = a[8] + b[8];
|
|
1278
|
+
out[9] = a[9] + b[9];
|
|
1279
|
+
out[10] = a[10] + b[10];
|
|
1280
|
+
out[11] = a[11] + b[11];
|
|
1281
|
+
out[12] = a[12] + b[12];
|
|
1282
|
+
out[13] = a[13] + b[13];
|
|
1283
|
+
out[14] = a[14] + b[14];
|
|
1284
|
+
out[15] = a[15] + b[15];
|
|
1285
|
+
return out;
|
|
1286
|
+
}
|
|
1287
|
+
function subtract(out, a, b) {
|
|
1288
|
+
out[0] = a[0] - b[0];
|
|
1289
|
+
out[1] = a[1] - b[1];
|
|
1290
|
+
out[2] = a[2] - b[2];
|
|
1291
|
+
out[3] = a[3] - b[3];
|
|
1292
|
+
out[4] = a[4] - b[4];
|
|
1293
|
+
out[5] = a[5] - b[5];
|
|
1294
|
+
out[6] = a[6] - b[6];
|
|
1295
|
+
out[7] = a[7] - b[7];
|
|
1296
|
+
out[8] = a[8] - b[8];
|
|
1297
|
+
out[9] = a[9] - b[9];
|
|
1298
|
+
out[10] = a[10] - b[10];
|
|
1299
|
+
out[11] = a[11] - b[11];
|
|
1300
|
+
out[12] = a[12] - b[12];
|
|
1301
|
+
out[13] = a[13] - b[13];
|
|
1302
|
+
out[14] = a[14] - b[14];
|
|
1303
|
+
out[15] = a[15] - b[15];
|
|
1304
|
+
return out;
|
|
1305
|
+
}
|
|
1306
|
+
function multiplyScalar(out, a, b) {
|
|
1307
|
+
out[0] = a[0] * b;
|
|
1308
|
+
out[1] = a[1] * b;
|
|
1309
|
+
out[2] = a[2] * b;
|
|
1310
|
+
out[3] = a[3] * b;
|
|
1311
|
+
out[4] = a[4] * b;
|
|
1312
|
+
out[5] = a[5] * b;
|
|
1313
|
+
out[6] = a[6] * b;
|
|
1314
|
+
out[7] = a[7] * b;
|
|
1315
|
+
out[8] = a[8] * b;
|
|
1316
|
+
out[9] = a[9] * b;
|
|
1317
|
+
out[10] = a[10] * b;
|
|
1318
|
+
out[11] = a[11] * b;
|
|
1319
|
+
out[12] = a[12] * b;
|
|
1320
|
+
out[13] = a[13] * b;
|
|
1321
|
+
out[14] = a[14] * b;
|
|
1322
|
+
out[15] = a[15] * b;
|
|
1323
|
+
return out;
|
|
1324
|
+
}
|
|
1325
|
+
function multiplyScalarAndAdd(out, a, b, scale3) {
|
|
1326
|
+
out[0] = a[0] + b[0] * scale3;
|
|
1327
|
+
out[1] = a[1] + b[1] * scale3;
|
|
1328
|
+
out[2] = a[2] + b[2] * scale3;
|
|
1329
|
+
out[3] = a[3] + b[3] * scale3;
|
|
1330
|
+
out[4] = a[4] + b[4] * scale3;
|
|
1331
|
+
out[5] = a[5] + b[5] * scale3;
|
|
1332
|
+
out[6] = a[6] + b[6] * scale3;
|
|
1333
|
+
out[7] = a[7] + b[7] * scale3;
|
|
1334
|
+
out[8] = a[8] + b[8] * scale3;
|
|
1335
|
+
out[9] = a[9] + b[9] * scale3;
|
|
1336
|
+
out[10] = a[10] + b[10] * scale3;
|
|
1337
|
+
out[11] = a[11] + b[11] * scale3;
|
|
1338
|
+
out[12] = a[12] + b[12] * scale3;
|
|
1339
|
+
out[13] = a[13] + b[13] * scale3;
|
|
1340
|
+
out[14] = a[14] + b[14] * scale3;
|
|
1341
|
+
out[15] = a[15] + b[15] * scale3;
|
|
1342
|
+
return out;
|
|
1343
|
+
}
|
|
1344
|
+
function exactEquals(a, b) {
|
|
1345
|
+
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];
|
|
1346
|
+
}
|
|
1347
|
+
function equals(a, b) {
|
|
1348
|
+
var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
|
|
1349
|
+
var a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
|
|
1350
|
+
var a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
|
|
1351
|
+
var a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
|
|
1352
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
1353
|
+
var b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7];
|
|
1354
|
+
var b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11];
|
|
1355
|
+
var b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
|
|
1356
|
+
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));
|
|
1357
|
+
}
|
|
1358
|
+
var mul = multiply;
|
|
1359
|
+
var sub = subtract;
|
|
1360
|
+
var vec3_exports = {};
|
|
1361
|
+
__export2(vec3_exports, {
|
|
1362
|
+
add: () => add2,
|
|
1363
|
+
angle: () => angle,
|
|
1364
|
+
bezier: () => bezier,
|
|
1365
|
+
ceil: () => ceil,
|
|
1366
|
+
clone: () => clone2,
|
|
1367
|
+
copy: () => copy2,
|
|
1368
|
+
create: () => create2,
|
|
1369
|
+
cross: () => cross,
|
|
1370
|
+
dist: () => dist,
|
|
1371
|
+
distance: () => distance,
|
|
1372
|
+
div: () => div,
|
|
1373
|
+
divide: () => divide,
|
|
1374
|
+
dot: () => dot,
|
|
1375
|
+
equals: () => equals2,
|
|
1376
|
+
exactEquals: () => exactEquals2,
|
|
1377
|
+
floor: () => floor,
|
|
1378
|
+
forEach: () => forEach,
|
|
1379
|
+
fromValues: () => fromValues2,
|
|
1380
|
+
hermite: () => hermite,
|
|
1381
|
+
inverse: () => inverse,
|
|
1382
|
+
len: () => len,
|
|
1383
|
+
length: () => length,
|
|
1384
|
+
lerp: () => lerp,
|
|
1385
|
+
max: () => max,
|
|
1386
|
+
min: () => min,
|
|
1387
|
+
mul: () => mul2,
|
|
1388
|
+
multiply: () => multiply2,
|
|
1389
|
+
negate: () => negate,
|
|
1390
|
+
normalize: () => normalize,
|
|
1391
|
+
random: () => random,
|
|
1392
|
+
rotateX: () => rotateX2,
|
|
1393
|
+
rotateY: () => rotateY2,
|
|
1394
|
+
rotateZ: () => rotateZ2,
|
|
1395
|
+
round: () => round2,
|
|
1396
|
+
scale: () => scale2,
|
|
1397
|
+
scaleAndAdd: () => scaleAndAdd,
|
|
1398
|
+
set: () => set2,
|
|
1399
|
+
slerp: () => slerp,
|
|
1400
|
+
sqrDist: () => sqrDist,
|
|
1401
|
+
sqrLen: () => sqrLen,
|
|
1402
|
+
squaredDistance: () => squaredDistance,
|
|
1403
|
+
squaredLength: () => squaredLength,
|
|
1404
|
+
str: () => str2,
|
|
1405
|
+
sub: () => sub2,
|
|
1406
|
+
subtract: () => subtract2,
|
|
1407
|
+
transformMat3: () => transformMat3,
|
|
1408
|
+
transformMat4: () => transformMat4,
|
|
1409
|
+
transformQuat: () => transformQuat,
|
|
1410
|
+
zero: () => zero
|
|
1411
|
+
});
|
|
1412
|
+
function create2() {
|
|
1413
|
+
var out = new ARRAY_TYPE(3);
|
|
1414
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
1415
|
+
out[0] = 0;
|
|
1416
|
+
out[1] = 0;
|
|
1417
|
+
out[2] = 0;
|
|
1418
|
+
}
|
|
1419
|
+
return out;
|
|
1420
|
+
}
|
|
1421
|
+
function clone2(a) {
|
|
1422
|
+
var out = new ARRAY_TYPE(3);
|
|
1423
|
+
out[0] = a[0];
|
|
1424
|
+
out[1] = a[1];
|
|
1425
|
+
out[2] = a[2];
|
|
1426
|
+
return out;
|
|
1427
|
+
}
|
|
1428
|
+
function length(a) {
|
|
1429
|
+
var x = a[0];
|
|
1430
|
+
var y = a[1];
|
|
1431
|
+
var z = a[2];
|
|
1432
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
1433
|
+
}
|
|
1434
|
+
function fromValues2(x, y, z) {
|
|
1435
|
+
var out = new ARRAY_TYPE(3);
|
|
1436
|
+
out[0] = x;
|
|
1437
|
+
out[1] = y;
|
|
1438
|
+
out[2] = z;
|
|
1439
|
+
return out;
|
|
1440
|
+
}
|
|
1441
|
+
function copy2(out, a) {
|
|
1442
|
+
out[0] = a[0];
|
|
1443
|
+
out[1] = a[1];
|
|
1444
|
+
out[2] = a[2];
|
|
1445
|
+
return out;
|
|
1446
|
+
}
|
|
1447
|
+
function set2(out, x, y, z) {
|
|
1448
|
+
out[0] = x;
|
|
1449
|
+
out[1] = y;
|
|
1450
|
+
out[2] = z;
|
|
1451
|
+
return out;
|
|
1452
|
+
}
|
|
1453
|
+
function add2(out, a, b) {
|
|
1454
|
+
out[0] = a[0] + b[0];
|
|
1455
|
+
out[1] = a[1] + b[1];
|
|
1456
|
+
out[2] = a[2] + b[2];
|
|
1457
|
+
return out;
|
|
1458
|
+
}
|
|
1459
|
+
function subtract2(out, a, b) {
|
|
1460
|
+
out[0] = a[0] - b[0];
|
|
1461
|
+
out[1] = a[1] - b[1];
|
|
1462
|
+
out[2] = a[2] - b[2];
|
|
1463
|
+
return out;
|
|
1464
|
+
}
|
|
1465
|
+
function multiply2(out, a, b) {
|
|
1466
|
+
out[0] = a[0] * b[0];
|
|
1467
|
+
out[1] = a[1] * b[1];
|
|
1468
|
+
out[2] = a[2] * b[2];
|
|
1469
|
+
return out;
|
|
1470
|
+
}
|
|
1471
|
+
function divide(out, a, b) {
|
|
1472
|
+
out[0] = a[0] / b[0];
|
|
1473
|
+
out[1] = a[1] / b[1];
|
|
1474
|
+
out[2] = a[2] / b[2];
|
|
1475
|
+
return out;
|
|
1476
|
+
}
|
|
1477
|
+
function ceil(out, a) {
|
|
1478
|
+
out[0] = Math.ceil(a[0]);
|
|
1479
|
+
out[1] = Math.ceil(a[1]);
|
|
1480
|
+
out[2] = Math.ceil(a[2]);
|
|
1481
|
+
return out;
|
|
1482
|
+
}
|
|
1483
|
+
function floor(out, a) {
|
|
1484
|
+
out[0] = Math.floor(a[0]);
|
|
1485
|
+
out[1] = Math.floor(a[1]);
|
|
1486
|
+
out[2] = Math.floor(a[2]);
|
|
1487
|
+
return out;
|
|
1488
|
+
}
|
|
1489
|
+
function min(out, a, b) {
|
|
1490
|
+
out[0] = Math.min(a[0], b[0]);
|
|
1491
|
+
out[1] = Math.min(a[1], b[1]);
|
|
1492
|
+
out[2] = Math.min(a[2], b[2]);
|
|
1493
|
+
return out;
|
|
1494
|
+
}
|
|
1495
|
+
function max(out, a, b) {
|
|
1496
|
+
out[0] = Math.max(a[0], b[0]);
|
|
1497
|
+
out[1] = Math.max(a[1], b[1]);
|
|
1498
|
+
out[2] = Math.max(a[2], b[2]);
|
|
1499
|
+
return out;
|
|
1500
|
+
}
|
|
1501
|
+
function round2(out, a) {
|
|
1502
|
+
out[0] = round(a[0]);
|
|
1503
|
+
out[1] = round(a[1]);
|
|
1504
|
+
out[2] = round(a[2]);
|
|
1505
|
+
return out;
|
|
1506
|
+
}
|
|
1507
|
+
function scale2(out, a, b) {
|
|
1508
|
+
out[0] = a[0] * b;
|
|
1509
|
+
out[1] = a[1] * b;
|
|
1510
|
+
out[2] = a[2] * b;
|
|
1511
|
+
return out;
|
|
1512
|
+
}
|
|
1513
|
+
function scaleAndAdd(out, a, b, scale3) {
|
|
1514
|
+
out[0] = a[0] + b[0] * scale3;
|
|
1515
|
+
out[1] = a[1] + b[1] * scale3;
|
|
1516
|
+
out[2] = a[2] + b[2] * scale3;
|
|
1517
|
+
return out;
|
|
1518
|
+
}
|
|
1519
|
+
function distance(a, b) {
|
|
1520
|
+
var x = b[0] - a[0];
|
|
1521
|
+
var y = b[1] - a[1];
|
|
1522
|
+
var z = b[2] - a[2];
|
|
1523
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
1524
|
+
}
|
|
1525
|
+
function squaredDistance(a, b) {
|
|
1526
|
+
var x = b[0] - a[0];
|
|
1527
|
+
var y = b[1] - a[1];
|
|
1528
|
+
var z = b[2] - a[2];
|
|
1529
|
+
return x * x + y * y + z * z;
|
|
1530
|
+
}
|
|
1531
|
+
function squaredLength(a) {
|
|
1532
|
+
var x = a[0];
|
|
1533
|
+
var y = a[1];
|
|
1534
|
+
var z = a[2];
|
|
1535
|
+
return x * x + y * y + z * z;
|
|
1536
|
+
}
|
|
1537
|
+
function negate(out, a) {
|
|
1538
|
+
out[0] = -a[0];
|
|
1539
|
+
out[1] = -a[1];
|
|
1540
|
+
out[2] = -a[2];
|
|
1541
|
+
return out;
|
|
1542
|
+
}
|
|
1543
|
+
function inverse(out, a) {
|
|
1544
|
+
out[0] = 1 / a[0];
|
|
1545
|
+
out[1] = 1 / a[1];
|
|
1546
|
+
out[2] = 1 / a[2];
|
|
1547
|
+
return out;
|
|
1548
|
+
}
|
|
1549
|
+
function normalize(out, a) {
|
|
1550
|
+
var x = a[0];
|
|
1551
|
+
var y = a[1];
|
|
1552
|
+
var z = a[2];
|
|
1553
|
+
var len2 = x * x + y * y + z * z;
|
|
1554
|
+
if (len2 > 0) {
|
|
1555
|
+
len2 = 1 / Math.sqrt(len2);
|
|
1556
|
+
}
|
|
1557
|
+
out[0] = a[0] * len2;
|
|
1558
|
+
out[1] = a[1] * len2;
|
|
1559
|
+
out[2] = a[2] * len2;
|
|
1560
|
+
return out;
|
|
1561
|
+
}
|
|
1562
|
+
function dot(a, b) {
|
|
1563
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
1564
|
+
}
|
|
1565
|
+
function cross(out, a, b) {
|
|
1566
|
+
var ax = a[0], ay = a[1], az = a[2];
|
|
1567
|
+
var bx = b[0], by = b[1], bz = b[2];
|
|
1568
|
+
out[0] = ay * bz - az * by;
|
|
1569
|
+
out[1] = az * bx - ax * bz;
|
|
1570
|
+
out[2] = ax * by - ay * bx;
|
|
1571
|
+
return out;
|
|
1572
|
+
}
|
|
1573
|
+
function lerp(out, a, b, t) {
|
|
1574
|
+
var ax = a[0];
|
|
1575
|
+
var ay = a[1];
|
|
1576
|
+
var az = a[2];
|
|
1577
|
+
out[0] = ax + t * (b[0] - ax);
|
|
1578
|
+
out[1] = ay + t * (b[1] - ay);
|
|
1579
|
+
out[2] = az + t * (b[2] - az);
|
|
1580
|
+
return out;
|
|
1581
|
+
}
|
|
1582
|
+
function slerp(out, a, b, t) {
|
|
1583
|
+
var angle2 = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
|
1584
|
+
var sinTotal = Math.sin(angle2);
|
|
1585
|
+
var ratioA = Math.sin((1 - t) * angle2) / sinTotal;
|
|
1586
|
+
var ratioB = Math.sin(t * angle2) / sinTotal;
|
|
1587
|
+
out[0] = ratioA * a[0] + ratioB * b[0];
|
|
1588
|
+
out[1] = ratioA * a[1] + ratioB * b[1];
|
|
1589
|
+
out[2] = ratioA * a[2] + ratioB * b[2];
|
|
1590
|
+
return out;
|
|
1591
|
+
}
|
|
1592
|
+
function hermite(out, a, b, c, d, t) {
|
|
1593
|
+
var factorTimes2 = t * t;
|
|
1594
|
+
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
|
1595
|
+
var factor2 = factorTimes2 * (t - 2) + t;
|
|
1596
|
+
var factor3 = factorTimes2 * (t - 1);
|
|
1597
|
+
var factor4 = factorTimes2 * (3 - 2 * t);
|
|
1598
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
1599
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
1600
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
1601
|
+
return out;
|
|
1602
|
+
}
|
|
1603
|
+
function bezier(out, a, b, c, d, t) {
|
|
1604
|
+
var inverseFactor = 1 - t;
|
|
1605
|
+
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
|
1606
|
+
var factorTimes2 = t * t;
|
|
1607
|
+
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
|
1608
|
+
var factor2 = 3 * t * inverseFactorTimesTwo;
|
|
1609
|
+
var factor3 = 3 * factorTimes2 * inverseFactor;
|
|
1610
|
+
var factor4 = factorTimes2 * t;
|
|
1611
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
1612
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
1613
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
1614
|
+
return out;
|
|
1615
|
+
}
|
|
1616
|
+
function random(out, scale3) {
|
|
1617
|
+
scale3 = scale3 === void 0 ? 1 : scale3;
|
|
1618
|
+
var r = RANDOM() * 2 * Math.PI;
|
|
1619
|
+
var z = RANDOM() * 2 - 1;
|
|
1620
|
+
var zScale = Math.sqrt(1 - z * z) * scale3;
|
|
1621
|
+
out[0] = Math.cos(r) * zScale;
|
|
1622
|
+
out[1] = Math.sin(r) * zScale;
|
|
1623
|
+
out[2] = z * scale3;
|
|
1624
|
+
return out;
|
|
1625
|
+
}
|
|
1626
|
+
function transformMat4(out, a, m) {
|
|
1627
|
+
var x = a[0], y = a[1], z = a[2];
|
|
1628
|
+
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
1629
|
+
w = w || 1;
|
|
1630
|
+
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
1631
|
+
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
1632
|
+
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
|
1633
|
+
return out;
|
|
1634
|
+
}
|
|
1635
|
+
function transformMat3(out, a, m) {
|
|
1636
|
+
var x = a[0], y = a[1], z = a[2];
|
|
1637
|
+
out[0] = x * m[0] + y * m[3] + z * m[6];
|
|
1638
|
+
out[1] = x * m[1] + y * m[4] + z * m[7];
|
|
1639
|
+
out[2] = x * m[2] + y * m[5] + z * m[8];
|
|
1640
|
+
return out;
|
|
1641
|
+
}
|
|
1642
|
+
function transformQuat(out, a, q) {
|
|
1643
|
+
var qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
1644
|
+
var vx = a[0], vy = a[1], vz = a[2];
|
|
1645
|
+
var tx = qy * vz - qz * vy;
|
|
1646
|
+
var ty = qz * vx - qx * vz;
|
|
1647
|
+
var tz = qx * vy - qy * vx;
|
|
1648
|
+
tx = tx + tx;
|
|
1649
|
+
ty = ty + ty;
|
|
1650
|
+
tz = tz + tz;
|
|
1651
|
+
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
|
1652
|
+
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
|
1653
|
+
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
|
1654
|
+
return out;
|
|
1655
|
+
}
|
|
1656
|
+
function rotateX2(out, a, b, rad) {
|
|
1657
|
+
var p = [], r = [];
|
|
1658
|
+
p[0] = a[0] - b[0];
|
|
1659
|
+
p[1] = a[1] - b[1];
|
|
1660
|
+
p[2] = a[2] - b[2];
|
|
1661
|
+
r[0] = p[0];
|
|
1662
|
+
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
|
1663
|
+
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
|
1664
|
+
out[0] = r[0] + b[0];
|
|
1665
|
+
out[1] = r[1] + b[1];
|
|
1666
|
+
out[2] = r[2] + b[2];
|
|
1667
|
+
return out;
|
|
1668
|
+
}
|
|
1669
|
+
function rotateY2(out, a, b, rad) {
|
|
1670
|
+
var p = [], r = [];
|
|
1671
|
+
p[0] = a[0] - b[0];
|
|
1672
|
+
p[1] = a[1] - b[1];
|
|
1673
|
+
p[2] = a[2] - b[2];
|
|
1674
|
+
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
|
1675
|
+
r[1] = p[1];
|
|
1676
|
+
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
|
1677
|
+
out[0] = r[0] + b[0];
|
|
1678
|
+
out[1] = r[1] + b[1];
|
|
1679
|
+
out[2] = r[2] + b[2];
|
|
1680
|
+
return out;
|
|
1681
|
+
}
|
|
1682
|
+
function rotateZ2(out, a, b, rad) {
|
|
1683
|
+
var p = [], r = [];
|
|
1684
|
+
p[0] = a[0] - b[0];
|
|
1685
|
+
p[1] = a[1] - b[1];
|
|
1686
|
+
p[2] = a[2] - b[2];
|
|
1687
|
+
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
|
1688
|
+
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
|
1689
|
+
r[2] = p[2];
|
|
1690
|
+
out[0] = r[0] + b[0];
|
|
1691
|
+
out[1] = r[1] + b[1];
|
|
1692
|
+
out[2] = r[2] + b[2];
|
|
1693
|
+
return out;
|
|
1694
|
+
}
|
|
1695
|
+
function angle(a, b) {
|
|
1696
|
+
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;
|
|
1697
|
+
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
|
1698
|
+
}
|
|
1699
|
+
function zero(out) {
|
|
1700
|
+
out[0] = 0;
|
|
1701
|
+
out[1] = 0;
|
|
1702
|
+
out[2] = 0;
|
|
1703
|
+
return out;
|
|
1704
|
+
}
|
|
1705
|
+
function str2(a) {
|
|
1706
|
+
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
|
1707
|
+
}
|
|
1708
|
+
function exactEquals2(a, b) {
|
|
1709
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
|
1710
|
+
}
|
|
1711
|
+
function equals2(a, b) {
|
|
1712
|
+
var a0 = a[0], a1 = a[1], a2 = a[2];
|
|
1713
|
+
var b0 = b[0], b1 = b[1], b2 = b[2];
|
|
1714
|
+
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));
|
|
1715
|
+
}
|
|
1716
|
+
var sub2 = subtract2;
|
|
1717
|
+
var mul2 = multiply2;
|
|
1718
|
+
var div = divide;
|
|
1719
|
+
var dist = distance;
|
|
1720
|
+
var sqrDist = squaredDistance;
|
|
1721
|
+
var len = length;
|
|
1722
|
+
var sqrLen = squaredLength;
|
|
1723
|
+
var forEach = (function() {
|
|
1724
|
+
var vec = create2();
|
|
1725
|
+
return function(a, stride, offset, count, fn, arg) {
|
|
1726
|
+
var i, l;
|
|
1727
|
+
if (!stride) {
|
|
1728
|
+
stride = 3;
|
|
1729
|
+
}
|
|
1730
|
+
if (!offset) {
|
|
1731
|
+
offset = 0;
|
|
1732
|
+
}
|
|
1733
|
+
if (count) {
|
|
1734
|
+
l = Math.min(count * stride + offset, a.length);
|
|
1735
|
+
} else {
|
|
1736
|
+
l = a.length;
|
|
1737
|
+
}
|
|
1738
|
+
for (i = offset; i < l; i += stride) {
|
|
1739
|
+
vec[0] = a[i];
|
|
1740
|
+
vec[1] = a[i + 1];
|
|
1741
|
+
vec[2] = a[i + 2];
|
|
1742
|
+
fn(vec, vec, arg);
|
|
1743
|
+
a[i] = vec[0];
|
|
1744
|
+
a[i + 1] = vec[1];
|
|
1745
|
+
a[i + 2] = vec[2];
|
|
1746
|
+
}
|
|
1747
|
+
return a;
|
|
1748
|
+
};
|
|
1749
|
+
})();
|
|
1750
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
1751
|
+
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
1752
|
+
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
99
1753
|
var CONTENTS_SOLID = 1 << 0;
|
|
100
1754
|
var CONTENTS_WINDOW = 1 << 1;
|
|
101
1755
|
var CONTENTS_AUX = 1 << 2;
|
|
@@ -169,22 +1823,341 @@ var ConfigStringIndex = ((ConfigStringIndex22) => {
|
|
|
169
1823
|
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
170
1824
|
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
171
1825
|
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
172
|
-
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
173
|
-
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS] = "Images";
|
|
174
|
-
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES] = "Lights";
|
|
175
|
-
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
176
|
-
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
177
|
-
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS] = "PlayerSkins";
|
|
178
|
-
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS] = "General";
|
|
179
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL] = "WheelWeapons";
|
|
180
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
181
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
182
|
-
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
1826
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
1827
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS] = "Images";
|
|
1828
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES] = "Lights";
|
|
1829
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
1830
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
1831
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS] = "PlayerSkins";
|
|
1832
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS] = "General";
|
|
1833
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL] = "WheelWeapons";
|
|
1834
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
1835
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
1836
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
1837
|
+
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
1838
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
1839
|
+
return ConfigStringIndex22;
|
|
1840
|
+
})(ConfigStringIndex || {});
|
|
1841
|
+
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
1842
|
+
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
1843
|
+
function createCrcTable() {
|
|
1844
|
+
const table = new Uint32Array(256);
|
|
1845
|
+
for (let i = 0; i < 256; i += 1) {
|
|
1846
|
+
let crc = i;
|
|
1847
|
+
for (let j = 0; j < 8; j += 1) {
|
|
1848
|
+
crc = (crc & 1) !== 0 ? 3988292384 ^ crc >>> 1 : crc >>> 1;
|
|
1849
|
+
}
|
|
1850
|
+
table[i] = crc >>> 0;
|
|
1851
|
+
}
|
|
1852
|
+
return table;
|
|
1853
|
+
}
|
|
1854
|
+
var CRC_TABLE = createCrcTable();
|
|
1855
|
+
var RERELEASE_KNOWN_PAKS = Object.freeze([
|
|
1856
|
+
// Base campaign
|
|
1857
|
+
{ name: "pak0.pak", checksum: 2378051181, description: "Base game assets" },
|
|
1858
|
+
{ name: "pak0.pak@baseq2", checksum: 2378051181, description: "Base game assets (baseq2)" },
|
|
1859
|
+
// Mission packs bundled with the rerelease
|
|
1860
|
+
{ name: "pak0.pak@rogue", checksum: 3373211245, description: "Ground Zero (rogue) mission pack" },
|
|
1861
|
+
{ name: "pak0.pak@xatrix", checksum: 1358269824, description: "The Reckoning (xatrix) mission pack" }
|
|
1862
|
+
]);
|
|
1863
|
+
var HEADER_SIZE2 = 17 * 4;
|
|
1864
|
+
var FLOAT_BYTES = 4;
|
|
1865
|
+
var STRIDE = 7 * FLOAT_BYTES;
|
|
1866
|
+
var BSP_VERTEX_LAYOUT = [
|
|
1867
|
+
// Position
|
|
1868
|
+
{ index: 0, size: 3, type: 5126, stride: STRIDE, offset: 0 },
|
|
1869
|
+
// Diffuse UV
|
|
1870
|
+
{ index: 1, size: 2, type: 5126, stride: STRIDE, offset: 3 * FLOAT_BYTES },
|
|
1871
|
+
// Lightmap UV
|
|
1872
|
+
{ index: 2, size: 2, type: 5126, stride: STRIDE, offset: 5 * FLOAT_BYTES }
|
|
1873
|
+
];
|
|
1874
|
+
var SKYBOX_POSITIONS = new Float32Array([
|
|
1875
|
+
// Front
|
|
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
|
+
// Back
|
|
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
|
+
// Left
|
|
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
|
+
// Right
|
|
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
|
+
// Top
|
|
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
|
+
// Bottom
|
|
1971
|
+
-1,
|
|
1972
|
+
-1,
|
|
1973
|
+
-1,
|
|
1974
|
+
1,
|
|
1975
|
+
-1,
|
|
1976
|
+
-1,
|
|
1977
|
+
1,
|
|
1978
|
+
-1,
|
|
1979
|
+
1,
|
|
1980
|
+
-1,
|
|
1981
|
+
-1,
|
|
1982
|
+
-1,
|
|
1983
|
+
1,
|
|
1984
|
+
-1,
|
|
1985
|
+
1,
|
|
1986
|
+
-1,
|
|
1987
|
+
-1,
|
|
1988
|
+
1
|
|
1989
|
+
]);
|
|
1990
|
+
var createCamera = (position, target, up, fov, aspect, near, far) => {
|
|
1991
|
+
const viewMatrix = mat4_exports.create();
|
|
1992
|
+
mat4_exports.lookAt(viewMatrix, position, target, up);
|
|
1993
|
+
const projectionMatrix = mat4_exports.create();
|
|
1994
|
+
mat4_exports.perspective(projectionMatrix, fov, aspect, near, far);
|
|
1995
|
+
return {
|
|
1996
|
+
position,
|
|
1997
|
+
viewMatrix,
|
|
1998
|
+
projectionMatrix
|
|
1999
|
+
};
|
|
2000
|
+
};
|
|
2001
|
+
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
2002
|
+
var DEG_TO_RAD2 = Math.PI / 180;
|
|
2003
|
+
function addVec3(a, b) {
|
|
2004
|
+
return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
|
|
2005
|
+
}
|
|
2006
|
+
function scaleVec3(a, scalar) {
|
|
2007
|
+
return { x: a.x * scalar, y: a.y * scalar, z: a.z * scalar };
|
|
2008
|
+
}
|
|
2009
|
+
function dotVec3(a, b) {
|
|
2010
|
+
return a.x * b.x + a.y * b.y + a.z * b.z;
|
|
2011
|
+
}
|
|
2012
|
+
function lengthSquaredVec3(a) {
|
|
2013
|
+
return dotVec3(a, a);
|
|
2014
|
+
}
|
|
2015
|
+
function lengthVec3(a) {
|
|
2016
|
+
return Math.sqrt(lengthSquaredVec3(a));
|
|
2017
|
+
}
|
|
2018
|
+
function normalizeVec3(a) {
|
|
2019
|
+
const len2 = lengthVec3(a);
|
|
2020
|
+
return len2 === 0 ? a : scaleVec3(a, 1 / len2);
|
|
2021
|
+
}
|
|
2022
|
+
var PITCH = 0;
|
|
2023
|
+
var YAW = 1;
|
|
2024
|
+
var ROLL = 2;
|
|
2025
|
+
var DEG2RAD_FACTOR2 = Math.PI / 180;
|
|
2026
|
+
var RAD2DEG_FACTOR2 = 180 / Math.PI;
|
|
2027
|
+
function axisComponent(vec, axis) {
|
|
2028
|
+
switch (axis) {
|
|
2029
|
+
case PITCH:
|
|
2030
|
+
return vec.x;
|
|
2031
|
+
case YAW:
|
|
2032
|
+
return vec.y;
|
|
2033
|
+
case ROLL:
|
|
2034
|
+
default:
|
|
2035
|
+
return vec.z;
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
function degToRad(degrees) {
|
|
2039
|
+
return degrees * DEG2RAD_FACTOR2;
|
|
2040
|
+
}
|
|
2041
|
+
function angleMod(angle2) {
|
|
2042
|
+
const value = angle2 % 360;
|
|
2043
|
+
return value < 0 ? 360 + value : value;
|
|
2044
|
+
}
|
|
2045
|
+
function angleVectors(angles) {
|
|
2046
|
+
const yaw = degToRad(axisComponent(angles, YAW));
|
|
2047
|
+
const pitch = degToRad(axisComponent(angles, PITCH));
|
|
2048
|
+
const roll = degToRad(axisComponent(angles, ROLL));
|
|
2049
|
+
const sy = Math.sin(yaw);
|
|
2050
|
+
const cy = Math.cos(yaw);
|
|
2051
|
+
const sp = Math.sin(pitch);
|
|
2052
|
+
const cp = Math.cos(pitch);
|
|
2053
|
+
const sr = Math.sin(roll);
|
|
2054
|
+
const cr = Math.cos(roll);
|
|
2055
|
+
const forward = {
|
|
2056
|
+
x: cp * cy,
|
|
2057
|
+
y: cp * sy,
|
|
2058
|
+
z: -sp
|
|
2059
|
+
};
|
|
2060
|
+
const right = {
|
|
2061
|
+
x: -sr * sp * cy - cr * -sy,
|
|
2062
|
+
y: -sr * sp * sy - cr * cy,
|
|
2063
|
+
z: -sr * cp
|
|
2064
|
+
};
|
|
2065
|
+
const up = {
|
|
2066
|
+
x: cr * sp * cy - sr * -sy,
|
|
2067
|
+
y: cr * sp * sy - sr * cy,
|
|
2068
|
+
z: cr * cp
|
|
2069
|
+
};
|
|
2070
|
+
return { forward, right, up };
|
|
2071
|
+
}
|
|
2072
|
+
var CONTENTS_SOLID2 = 1 << 0;
|
|
2073
|
+
var CONTENTS_WINDOW2 = 1 << 1;
|
|
2074
|
+
var CONTENTS_AUX2 = 1 << 2;
|
|
2075
|
+
var CONTENTS_LAVA2 = 1 << 3;
|
|
2076
|
+
var CONTENTS_SLIME2 = 1 << 4;
|
|
2077
|
+
var CONTENTS_WATER2 = 1 << 5;
|
|
2078
|
+
var CONTENTS_MIST2 = 1 << 6;
|
|
2079
|
+
var CONTENTS_NO_WATERJUMP2 = 1 << 13;
|
|
2080
|
+
var CONTENTS_PROJECTILECLIP2 = 1 << 14;
|
|
2081
|
+
var CONTENTS_AREAPORTAL2 = 1 << 15;
|
|
2082
|
+
var CONTENTS_PLAYERCLIP2 = 1 << 16;
|
|
2083
|
+
var CONTENTS_MONSTERCLIP2 = 1 << 17;
|
|
2084
|
+
var CONTENTS_CURRENT_02 = 1 << 18;
|
|
2085
|
+
var CONTENTS_CURRENT_902 = 1 << 19;
|
|
2086
|
+
var CONTENTS_CURRENT_1802 = 1 << 20;
|
|
2087
|
+
var CONTENTS_CURRENT_2702 = 1 << 21;
|
|
2088
|
+
var CONTENTS_CURRENT_UP2 = 1 << 22;
|
|
2089
|
+
var CONTENTS_CURRENT_DOWN2 = 1 << 23;
|
|
2090
|
+
var CONTENTS_ORIGIN2 = 1 << 24;
|
|
2091
|
+
var CONTENTS_MONSTER2 = 1 << 25;
|
|
2092
|
+
var CONTENTS_DEADMONSTER2 = 1 << 26;
|
|
2093
|
+
var CONTENTS_DETAIL2 = 1 << 27;
|
|
2094
|
+
var CONTENTS_TRANSLUCENT2 = 1 << 28;
|
|
2095
|
+
var CONTENTS_LADDER2 = 1 << 29;
|
|
2096
|
+
var CONTENTS_PLAYER2 = 1 << 30;
|
|
2097
|
+
var CONTENTS_PROJECTILE2 = 1 << 31;
|
|
2098
|
+
var SURF_LIGHT2 = 1 << 0;
|
|
2099
|
+
var SURF_SLICK2 = 1 << 1;
|
|
2100
|
+
var SURF_SKY2 = 1 << 2;
|
|
2101
|
+
var SURF_WARP2 = 1 << 3;
|
|
2102
|
+
var SURF_TRANS332 = 1 << 4;
|
|
2103
|
+
var SURF_TRANS662 = 1 << 5;
|
|
2104
|
+
var SURF_FLOWING2 = 1 << 6;
|
|
2105
|
+
var SURF_NODRAW2 = 1 << 7;
|
|
2106
|
+
var SURF_ALPHATEST2 = 1 << 25;
|
|
2107
|
+
var SURF_N64_UV2 = 1 << 28;
|
|
2108
|
+
var SURF_N64_SCROLL_X2 = 1 << 29;
|
|
2109
|
+
var SURF_N64_SCROLL_Y2 = 1 << 30;
|
|
2110
|
+
var SURF_N64_SCROLL_FLIP2 = 1 << 31;
|
|
2111
|
+
var MASK_SOLID2 = CONTENTS_SOLID2 | CONTENTS_WINDOW2;
|
|
2112
|
+
var MASK_PLAYERSOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2113
|
+
var MASK_DEADSOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2;
|
|
2114
|
+
var MASK_MONSTERSOLID2 = CONTENTS_SOLID2 | CONTENTS_MONSTERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2115
|
+
var MASK_WATER2 = CONTENTS_WATER2 | CONTENTS_LAVA2 | CONTENTS_SLIME2;
|
|
2116
|
+
var MASK_OPAQUE2 = CONTENTS_SOLID2 | CONTENTS_SLIME2 | CONTENTS_LAVA2;
|
|
2117
|
+
var MASK_SHOT2 = CONTENTS_SOLID2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2 | CONTENTS_WINDOW2 | CONTENTS_DEADMONSTER2;
|
|
2118
|
+
var MASK_CURRENT2 = CONTENTS_CURRENT_02 | CONTENTS_CURRENT_902 | CONTENTS_CURRENT_1802 | CONTENTS_CURRENT_2702 | CONTENTS_CURRENT_UP2 | CONTENTS_CURRENT_DOWN2;
|
|
2119
|
+
var MASK_BLOCK_SIGHT2 = CONTENTS_SOLID2 | CONTENTS_LAVA2 | CONTENTS_SLIME2 | CONTENTS_MONSTER2 | CONTENTS_PLAYER2;
|
|
2120
|
+
var MASK_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2;
|
|
2121
|
+
var MASK_LADDER_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_WINDOW2;
|
|
2122
|
+
var MASK_WALK_NAV_SOLID2 = CONTENTS_SOLID2 | CONTENTS_PLAYERCLIP2 | CONTENTS_WINDOW2 | CONTENTS_MONSTERCLIP2;
|
|
2123
|
+
var MASK_PROJECTILE2 = MASK_SHOT2 | CONTENTS_PROJECTILECLIP2;
|
|
2124
|
+
var MAX_CHECKCOUNT2 = Number.MAX_SAFE_INTEGER - 1;
|
|
2125
|
+
var MAX_CLIENTS2 = 256;
|
|
2126
|
+
var MAX_LIGHTSTYLES2 = 256;
|
|
2127
|
+
var MAX_MODELS2 = 8192;
|
|
2128
|
+
var MAX_SOUNDS2 = 2048;
|
|
2129
|
+
var MAX_IMAGES2 = 512;
|
|
2130
|
+
var MAX_ITEMS2 = 256;
|
|
2131
|
+
var MAX_GENERAL2 = MAX_CLIENTS2 * 2;
|
|
2132
|
+
var MAX_SHADOW_LIGHTS2 = 256;
|
|
2133
|
+
var MAX_WHEEL_ITEMS2 = 32;
|
|
2134
|
+
var ConfigStringIndex2 = ((ConfigStringIndex22) => {
|
|
2135
|
+
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
2136
|
+
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
2137
|
+
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
2138
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyAxis"] = 3] = "SkyAxis";
|
|
2139
|
+
ConfigStringIndex22[ConfigStringIndex22["SkyRotate"] = 4] = "SkyRotate";
|
|
2140
|
+
ConfigStringIndex22[ConfigStringIndex22["StatusBar"] = 5] = "StatusBar";
|
|
2141
|
+
ConfigStringIndex22[ConfigStringIndex22["AirAccel"] = 59] = "AirAccel";
|
|
2142
|
+
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
2143
|
+
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
2144
|
+
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
2145
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS2] = "Sounds";
|
|
2146
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS2] = "Images";
|
|
2147
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES2] = "Lights";
|
|
2148
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES2] = "ShadowLights";
|
|
2149
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS2] = "Items";
|
|
2150
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS2] = "PlayerSkins";
|
|
2151
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS2] = "General";
|
|
2152
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL2] = "WheelWeapons";
|
|
2153
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS2] = "WheelAmmo";
|
|
2154
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS2] = "WheelPowerups";
|
|
2155
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS2] = "CdLoopCount";
|
|
183
2156
|
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
184
2157
|
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
185
2158
|
return ConfigStringIndex22;
|
|
186
|
-
})(
|
|
187
|
-
var
|
|
2159
|
+
})(ConfigStringIndex2 || {});
|
|
2160
|
+
var MAX_CONFIGSTRINGS2 = ConfigStringIndex2.MaxConfigStrings;
|
|
188
2161
|
var WaterLevel = /* @__PURE__ */ ((WaterLevel3) => {
|
|
189
2162
|
WaterLevel3[WaterLevel3["None"] = 0] = "None";
|
|
190
2163
|
WaterLevel3[WaterLevel3["Feet"] = 1] = "Feet";
|
|
@@ -261,8 +2234,8 @@ function applyPmoveFriction(params) {
|
|
|
261
2234
|
if (newspeed === speed) {
|
|
262
2235
|
return velocity;
|
|
263
2236
|
}
|
|
264
|
-
const
|
|
265
|
-
return scaleVec3(velocity,
|
|
2237
|
+
const scale3 = newspeed / speed;
|
|
2238
|
+
return scaleVec3(velocity, scale3);
|
|
266
2239
|
}
|
|
267
2240
|
function applyPmoveAccelerate(params) {
|
|
268
2241
|
const { velocity, wishdir, wishspeed, accel, frametime } = params;
|
|
@@ -308,8 +2281,8 @@ function buildAirGroundWish(params) {
|
|
|
308
2281
|
};
|
|
309
2282
|
let wishspeed = lengthVec3(wishvel);
|
|
310
2283
|
if (wishspeed > maxSpeed) {
|
|
311
|
-
const
|
|
312
|
-
wishvel = scaleVec3(wishvel,
|
|
2284
|
+
const scale3 = maxSpeed / wishspeed;
|
|
2285
|
+
wishvel = scaleVec3(wishvel, scale3);
|
|
313
2286
|
wishspeed = maxSpeed;
|
|
314
2287
|
}
|
|
315
2288
|
return {
|
|
@@ -333,8 +2306,8 @@ function buildWaterWish(params) {
|
|
|
333
2306
|
}
|
|
334
2307
|
let wishspeed = lengthVec3(wishvel);
|
|
335
2308
|
if (wishspeed > maxSpeed) {
|
|
336
|
-
const
|
|
337
|
-
wishvel = scaleVec3(wishvel,
|
|
2309
|
+
const scale3 = maxSpeed / wishspeed;
|
|
2310
|
+
wishvel = scaleVec3(wishvel, scale3);
|
|
338
2311
|
wishspeed = maxSpeed;
|
|
339
2312
|
}
|
|
340
2313
|
wishspeed *= 0.5;
|
|
@@ -343,7 +2316,7 @@ function buildWaterWish(params) {
|
|
|
343
2316
|
wishspeed
|
|
344
2317
|
};
|
|
345
2318
|
}
|
|
346
|
-
var
|
|
2319
|
+
var WATERJUMP_CLEAR2 = 8 | 16 | 32 | 1024;
|
|
347
2320
|
function addAngles(cmdAngles, deltaAngles) {
|
|
348
2321
|
return {
|
|
349
2322
|
x: cmdAngles.x + deltaAngles.x,
|
|
@@ -414,7 +2387,7 @@ function normalizeState(state) {
|
|
|
414
2387
|
deltaAngles: state.deltaAngles ? { ...state.deltaAngles } : ZERO_VEC32
|
|
415
2388
|
};
|
|
416
2389
|
}
|
|
417
|
-
function
|
|
2390
|
+
function lerp2(a, b, t) {
|
|
418
2391
|
return a + (b - a) * t;
|
|
419
2392
|
}
|
|
420
2393
|
function lerpAngle(a, b, t) {
|
|
@@ -428,14 +2401,14 @@ function interpolatePredictionState(previous, latest, alpha) {
|
|
|
428
2401
|
const clamped = Math.max(0, Math.min(alpha, 1));
|
|
429
2402
|
return {
|
|
430
2403
|
origin: {
|
|
431
|
-
x:
|
|
432
|
-
y:
|
|
433
|
-
z:
|
|
2404
|
+
x: lerp2(previous.origin.x, latest.origin.x, clamped),
|
|
2405
|
+
y: lerp2(previous.origin.y, latest.origin.y, clamped),
|
|
2406
|
+
z: lerp2(previous.origin.z, latest.origin.z, clamped)
|
|
434
2407
|
},
|
|
435
2408
|
velocity: {
|
|
436
|
-
x:
|
|
437
|
-
y:
|
|
438
|
-
z:
|
|
2409
|
+
x: lerp2(previous.velocity.x, latest.velocity.x, clamped),
|
|
2410
|
+
y: lerp2(previous.velocity.y, latest.velocity.y, clamped),
|
|
2411
|
+
z: lerp2(previous.velocity.z, latest.velocity.z, clamped)
|
|
439
2412
|
},
|
|
440
2413
|
viewangles: {
|
|
441
2414
|
x: lerpAngle(previous.viewangles.x, latest.viewangles.x, clamped),
|
|
@@ -449,7 +2422,7 @@ function interpolatePredictionState(previous, latest, alpha) {
|
|
|
449
2422
|
deltaAngles: latest.deltaAngles
|
|
450
2423
|
};
|
|
451
2424
|
}
|
|
452
|
-
function simulateCommand(state, cmd, settings) {
|
|
2425
|
+
function simulateCommand(state, cmd, settings, trace) {
|
|
453
2426
|
const frametime = Math.min(Math.max(cmd.msec, 0), MSEC_MAX) / 1e3;
|
|
454
2427
|
const onGround = hasPmFlag(state.pmFlags, PmFlag.OnGround);
|
|
455
2428
|
const onLadder = hasPmFlag(state.pmFlags, PmFlag.OnLadder);
|
|
@@ -501,8 +2474,8 @@ function simulateCommand(state, cmd, settings) {
|
|
|
501
2474
|
});
|
|
502
2475
|
velocity = { ...velocity, z: velocity.z - state.gravity * frametime };
|
|
503
2476
|
}
|
|
504
|
-
const
|
|
505
|
-
const origin =
|
|
2477
|
+
const traceResult = trace(state.origin, addVec3(state.origin, scaleVec3(velocity, frametime)));
|
|
2478
|
+
const origin = traceResult.endpos;
|
|
506
2479
|
return {
|
|
507
2480
|
...state,
|
|
508
2481
|
origin,
|
|
@@ -511,7 +2484,7 @@ function simulateCommand(state, cmd, settings) {
|
|
|
511
2484
|
};
|
|
512
2485
|
}
|
|
513
2486
|
var ClientPrediction = class {
|
|
514
|
-
constructor(settings = {}) {
|
|
2487
|
+
constructor(trace, settings = {}) {
|
|
515
2488
|
this.baseFrame = {
|
|
516
2489
|
frame: 0,
|
|
517
2490
|
timeMs: 0,
|
|
@@ -520,6 +2493,7 @@ var ClientPrediction = class {
|
|
|
520
2493
|
this.commands = [];
|
|
521
2494
|
this.predicted = defaultPredictionState();
|
|
522
2495
|
this.settings = { ...DEFAULTS, ...settings };
|
|
2496
|
+
this.trace = trace;
|
|
523
2497
|
this.predicted = this.baseFrame.state ?? defaultPredictionState();
|
|
524
2498
|
}
|
|
525
2499
|
setAuthoritative(frame) {
|
|
@@ -538,7 +2512,7 @@ var ClientPrediction = class {
|
|
|
538
2512
|
recompute() {
|
|
539
2513
|
let state = normalizeState(this.baseFrame.state);
|
|
540
2514
|
for (const cmd of this.commands) {
|
|
541
|
-
state = simulateCommand(state, cmd, this.settings);
|
|
2515
|
+
state = simulateCommand(state, cmd, this.settings, this.trace);
|
|
542
2516
|
}
|
|
543
2517
|
this.predicted = state;
|
|
544
2518
|
return state;
|
|
@@ -692,11 +2666,12 @@ var ACTION_LOOKUP = new Map(
|
|
|
692
2666
|
Object.values(InputAction).map((action) => [normalizeCommand(action), action])
|
|
693
2667
|
);
|
|
694
2668
|
function createClient(imports) {
|
|
695
|
-
const prediction = new ClientPrediction();
|
|
2669
|
+
const prediction = new ClientPrediction(imports.engine.trace);
|
|
696
2670
|
const view = new ViewEffects();
|
|
697
2671
|
let latestFrame;
|
|
698
2672
|
let lastRendered;
|
|
699
2673
|
let lastView;
|
|
2674
|
+
let camera;
|
|
700
2675
|
return {
|
|
701
2676
|
init(initial) {
|
|
702
2677
|
latestFrame = initial;
|
|
@@ -720,8 +2695,20 @@ function createClient(imports) {
|
|
|
720
2695
|
}
|
|
721
2696
|
const frameTimeMs = sample.latest && sample.previous ? Math.max(0, sample.latest.timeMs - sample.previous.timeMs) : 0;
|
|
722
2697
|
lastView = view.sample(lastRendered, frameTimeMs);
|
|
2698
|
+
if (lastRendered) {
|
|
2699
|
+
const { origin, viewangles } = lastRendered;
|
|
2700
|
+
const position = vec3_exports.fromValues(origin.x, origin.y, origin.z);
|
|
2701
|
+
const rotation = mat4_exports.create();
|
|
2702
|
+
mat4_exports.rotateY(rotation, rotation, viewangles.y * (Math.PI / 180));
|
|
2703
|
+
mat4_exports.rotateX(rotation, rotation, viewangles.x * (Math.PI / 180));
|
|
2704
|
+
const forward = vec3_exports.transformMat4(vec3_exports.create(), vec3_exports.fromValues(1, 0, 0), rotation);
|
|
2705
|
+
const target = vec3_exports.add(vec3_exports.create(), position, forward);
|
|
2706
|
+
camera = createCamera(position, target, vec3_exports.fromValues(0, 0, 1), 90, 4 / 3, 0.1, 1e3);
|
|
2707
|
+
}
|
|
2708
|
+
const command = {};
|
|
723
2709
|
void imports;
|
|
724
2710
|
void sample;
|
|
2711
|
+
return command;
|
|
725
2712
|
},
|
|
726
2713
|
shutdown() {
|
|
727
2714
|
latestFrame = void 0;
|
|
@@ -738,6 +2725,9 @@ function createClient(imports) {
|
|
|
738
2725
|
},
|
|
739
2726
|
get lastView() {
|
|
740
2727
|
return lastView;
|
|
2728
|
+
},
|
|
2729
|
+
get camera() {
|
|
2730
|
+
return camera;
|
|
741
2731
|
}
|
|
742
2732
|
};
|
|
743
2733
|
}
|
|
@@ -814,128 +2804,128 @@ var FixedTimestepLoop = class {
|
|
|
814
2804
|
steps += 1;
|
|
815
2805
|
}
|
|
816
2806
|
const alpha = this.options.fixedDeltaMs === 0 ? 0 : this.accumulatorMs / this.options.fixedDeltaMs;
|
|
817
|
-
this.callbacks.render?.({ alpha, nowMs, accumulatorMs: this.accumulatorMs, frame: this.frame });
|
|
818
|
-
}
|
|
819
|
-
};
|
|
820
|
-
var EngineHost = class {
|
|
821
|
-
constructor(game, client, options = {}) {
|
|
822
|
-
this.game = game;
|
|
823
|
-
this.client = client;
|
|
824
|
-
this.started = false;
|
|
825
|
-
this.stepSimulation = (step) => {
|
|
826
|
-
this.previousFrame = this.latestFrame;
|
|
827
|
-
this.latestFrame = this.game.frame(step);
|
|
828
|
-
};
|
|
829
|
-
this.renderClient = (renderContext) => {
|
|
830
|
-
if (!this.client) return;
|
|
831
|
-
this.client.render({
|
|
832
|
-
...renderContext,
|
|
833
|
-
previous: this.previousFrame,
|
|
834
|
-
latest: this.latestFrame
|
|
835
|
-
});
|
|
836
|
-
};
|
|
837
|
-
const now = options.loop?.now?.() ?? Date.now();
|
|
838
|
-
this.startTimeMs = options.startTimeMs ?? options.loop?.startTimeMs ?? now;
|
|
839
|
-
this.loop = new FixedTimestepLoop(
|
|
840
|
-
{
|
|
841
|
-
simulate: this.stepSimulation,
|
|
842
|
-
render: this.renderClient
|
|
843
|
-
},
|
|
844
|
-
{ ...options.loop, startTimeMs: this.startTimeMs }
|
|
845
|
-
);
|
|
846
|
-
}
|
|
847
|
-
start() {
|
|
848
|
-
if (this.started) return;
|
|
849
|
-
this.latestFrame = this.game.init(this.startTimeMs) ?? this.latestFrame;
|
|
850
|
-
this.client?.init(this.latestFrame);
|
|
851
|
-
this.started = true;
|
|
852
|
-
this.loop.start();
|
|
853
|
-
}
|
|
854
|
-
stop() {
|
|
855
|
-
if (!this.started) return;
|
|
856
|
-
this.loop.stop();
|
|
857
|
-
this.client?.shutdown();
|
|
858
|
-
this.game.shutdown();
|
|
859
|
-
this.previousFrame = void 0;
|
|
860
|
-
this.latestFrame = void 0;
|
|
861
|
-
this.started = false;
|
|
862
|
-
}
|
|
863
|
-
pump(elapsedMs) {
|
|
864
|
-
this.loop.pump(elapsedMs);
|
|
865
|
-
}
|
|
866
|
-
getLatestFrame() {
|
|
867
|
-
return this.latestFrame;
|
|
868
|
-
}
|
|
869
|
-
isRunning() {
|
|
870
|
-
return this.loop.isRunning();
|
|
871
|
-
}
|
|
872
|
-
};
|
|
873
|
-
var
|
|
874
|
-
var
|
|
875
|
-
var
|
|
876
|
-
var
|
|
877
|
-
var
|
|
878
|
-
var
|
|
879
|
-
var
|
|
880
|
-
var
|
|
881
|
-
var
|
|
882
|
-
var
|
|
883
|
-
var
|
|
884
|
-
var
|
|
885
|
-
var
|
|
886
|
-
var
|
|
887
|
-
var
|
|
888
|
-
var
|
|
889
|
-
var
|
|
890
|
-
var
|
|
891
|
-
var
|
|
892
|
-
var
|
|
893
|
-
var
|
|
894
|
-
var
|
|
895
|
-
var
|
|
896
|
-
var
|
|
897
|
-
var
|
|
898
|
-
var
|
|
899
|
-
var
|
|
900
|
-
var
|
|
901
|
-
var
|
|
902
|
-
var
|
|
903
|
-
var
|
|
904
|
-
var
|
|
905
|
-
var
|
|
906
|
-
var
|
|
907
|
-
var
|
|
908
|
-
var
|
|
909
|
-
var
|
|
910
|
-
var
|
|
911
|
-
var
|
|
912
|
-
var
|
|
913
|
-
var
|
|
914
|
-
var
|
|
915
|
-
var
|
|
916
|
-
var
|
|
917
|
-
var
|
|
918
|
-
var
|
|
919
|
-
var
|
|
920
|
-
var
|
|
921
|
-
var
|
|
922
|
-
var
|
|
923
|
-
var
|
|
924
|
-
var
|
|
925
|
-
var
|
|
926
|
-
var
|
|
927
|
-
var
|
|
928
|
-
var
|
|
929
|
-
var
|
|
930
|
-
var
|
|
931
|
-
var
|
|
932
|
-
var
|
|
933
|
-
var
|
|
934
|
-
var
|
|
935
|
-
var
|
|
936
|
-
var
|
|
937
|
-
var
|
|
938
|
-
var
|
|
2807
|
+
this.callbacks.render?.({ alpha, nowMs, accumulatorMs: this.accumulatorMs, frame: this.frame });
|
|
2808
|
+
}
|
|
2809
|
+
};
|
|
2810
|
+
var EngineHost = class {
|
|
2811
|
+
constructor(game, client, options = {}) {
|
|
2812
|
+
this.game = game;
|
|
2813
|
+
this.client = client;
|
|
2814
|
+
this.started = false;
|
|
2815
|
+
this.stepSimulation = (step) => {
|
|
2816
|
+
this.previousFrame = this.latestFrame;
|
|
2817
|
+
this.latestFrame = this.game.frame(step, this.latestCommand);
|
|
2818
|
+
};
|
|
2819
|
+
this.renderClient = (renderContext) => {
|
|
2820
|
+
if (!this.client) return;
|
|
2821
|
+
this.latestCommand = this.client.render({
|
|
2822
|
+
...renderContext,
|
|
2823
|
+
previous: this.previousFrame,
|
|
2824
|
+
latest: this.latestFrame
|
|
2825
|
+
});
|
|
2826
|
+
};
|
|
2827
|
+
const now = options.loop?.now?.() ?? Date.now();
|
|
2828
|
+
this.startTimeMs = options.startTimeMs ?? options.loop?.startTimeMs ?? now;
|
|
2829
|
+
this.loop = new FixedTimestepLoop(
|
|
2830
|
+
{
|
|
2831
|
+
simulate: this.stepSimulation,
|
|
2832
|
+
render: this.renderClient
|
|
2833
|
+
},
|
|
2834
|
+
{ ...options.loop, startTimeMs: this.startTimeMs }
|
|
2835
|
+
);
|
|
2836
|
+
}
|
|
2837
|
+
start() {
|
|
2838
|
+
if (this.started) return;
|
|
2839
|
+
this.latestFrame = this.game.init(this.startTimeMs) ?? this.latestFrame;
|
|
2840
|
+
this.client?.init(this.latestFrame);
|
|
2841
|
+
this.started = true;
|
|
2842
|
+
this.loop.start();
|
|
2843
|
+
}
|
|
2844
|
+
stop() {
|
|
2845
|
+
if (!this.started) return;
|
|
2846
|
+
this.loop.stop();
|
|
2847
|
+
this.client?.shutdown();
|
|
2848
|
+
this.game.shutdown();
|
|
2849
|
+
this.previousFrame = void 0;
|
|
2850
|
+
this.latestFrame = void 0;
|
|
2851
|
+
this.started = false;
|
|
2852
|
+
}
|
|
2853
|
+
pump(elapsedMs) {
|
|
2854
|
+
this.loop.pump(elapsedMs);
|
|
2855
|
+
}
|
|
2856
|
+
getLatestFrame() {
|
|
2857
|
+
return this.latestFrame;
|
|
2858
|
+
}
|
|
2859
|
+
isRunning() {
|
|
2860
|
+
return this.loop.isRunning();
|
|
2861
|
+
}
|
|
2862
|
+
};
|
|
2863
|
+
var DEG_TO_RAD3 = Math.PI / 180;
|
|
2864
|
+
var DEG2RAD_FACTOR3 = Math.PI / 180;
|
|
2865
|
+
var RAD2DEG_FACTOR3 = 180 / Math.PI;
|
|
2866
|
+
var CONTENTS_SOLID3 = 1 << 0;
|
|
2867
|
+
var CONTENTS_WINDOW3 = 1 << 1;
|
|
2868
|
+
var CONTENTS_AUX3 = 1 << 2;
|
|
2869
|
+
var CONTENTS_LAVA3 = 1 << 3;
|
|
2870
|
+
var CONTENTS_SLIME3 = 1 << 4;
|
|
2871
|
+
var CONTENTS_WATER3 = 1 << 5;
|
|
2872
|
+
var CONTENTS_MIST3 = 1 << 6;
|
|
2873
|
+
var CONTENTS_NO_WATERJUMP3 = 1 << 13;
|
|
2874
|
+
var CONTENTS_PROJECTILECLIP3 = 1 << 14;
|
|
2875
|
+
var CONTENTS_AREAPORTAL3 = 1 << 15;
|
|
2876
|
+
var CONTENTS_PLAYERCLIP3 = 1 << 16;
|
|
2877
|
+
var CONTENTS_MONSTERCLIP3 = 1 << 17;
|
|
2878
|
+
var CONTENTS_CURRENT_03 = 1 << 18;
|
|
2879
|
+
var CONTENTS_CURRENT_903 = 1 << 19;
|
|
2880
|
+
var CONTENTS_CURRENT_1803 = 1 << 20;
|
|
2881
|
+
var CONTENTS_CURRENT_2703 = 1 << 21;
|
|
2882
|
+
var CONTENTS_CURRENT_UP3 = 1 << 22;
|
|
2883
|
+
var CONTENTS_CURRENT_DOWN3 = 1 << 23;
|
|
2884
|
+
var CONTENTS_ORIGIN3 = 1 << 24;
|
|
2885
|
+
var CONTENTS_MONSTER3 = 1 << 25;
|
|
2886
|
+
var CONTENTS_DEADMONSTER3 = 1 << 26;
|
|
2887
|
+
var CONTENTS_DETAIL3 = 1 << 27;
|
|
2888
|
+
var CONTENTS_TRANSLUCENT3 = 1 << 28;
|
|
2889
|
+
var CONTENTS_LADDER3 = 1 << 29;
|
|
2890
|
+
var CONTENTS_PLAYER3 = 1 << 30;
|
|
2891
|
+
var CONTENTS_PROJECTILE3 = 1 << 31;
|
|
2892
|
+
var SURF_LIGHT3 = 1 << 0;
|
|
2893
|
+
var SURF_SLICK3 = 1 << 1;
|
|
2894
|
+
var SURF_SKY3 = 1 << 2;
|
|
2895
|
+
var SURF_WARP3 = 1 << 3;
|
|
2896
|
+
var SURF_TRANS333 = 1 << 4;
|
|
2897
|
+
var SURF_TRANS663 = 1 << 5;
|
|
2898
|
+
var SURF_FLOWING3 = 1 << 6;
|
|
2899
|
+
var SURF_NODRAW3 = 1 << 7;
|
|
2900
|
+
var SURF_ALPHATEST3 = 1 << 25;
|
|
2901
|
+
var SURF_N64_UV3 = 1 << 28;
|
|
2902
|
+
var SURF_N64_SCROLL_X3 = 1 << 29;
|
|
2903
|
+
var SURF_N64_SCROLL_Y3 = 1 << 30;
|
|
2904
|
+
var SURF_N64_SCROLL_FLIP3 = 1 << 31;
|
|
2905
|
+
var MASK_SOLID3 = CONTENTS_SOLID3 | CONTENTS_WINDOW3;
|
|
2906
|
+
var MASK_PLAYERSOLID3 = CONTENTS_SOLID3 | CONTENTS_PLAYERCLIP3 | CONTENTS_WINDOW3 | CONTENTS_MONSTER3 | CONTENTS_PLAYER3;
|
|
2907
|
+
var MASK_DEADSOLID3 = CONTENTS_SOLID3 | CONTENTS_PLAYERCLIP3 | CONTENTS_WINDOW3;
|
|
2908
|
+
var MASK_MONSTERSOLID3 = CONTENTS_SOLID3 | CONTENTS_MONSTERCLIP3 | CONTENTS_WINDOW3 | CONTENTS_MONSTER3 | CONTENTS_PLAYER3;
|
|
2909
|
+
var MASK_WATER3 = CONTENTS_WATER3 | CONTENTS_LAVA3 | CONTENTS_SLIME3;
|
|
2910
|
+
var MASK_OPAQUE3 = CONTENTS_SOLID3 | CONTENTS_SLIME3 | CONTENTS_LAVA3;
|
|
2911
|
+
var MASK_SHOT3 = CONTENTS_SOLID3 | CONTENTS_MONSTER3 | CONTENTS_PLAYER3 | CONTENTS_WINDOW3 | CONTENTS_DEADMONSTER3;
|
|
2912
|
+
var MASK_CURRENT3 = CONTENTS_CURRENT_03 | CONTENTS_CURRENT_903 | CONTENTS_CURRENT_1803 | CONTENTS_CURRENT_2703 | CONTENTS_CURRENT_UP3 | CONTENTS_CURRENT_DOWN3;
|
|
2913
|
+
var MASK_BLOCK_SIGHT3 = CONTENTS_SOLID3 | CONTENTS_LAVA3 | CONTENTS_SLIME3 | CONTENTS_MONSTER3 | CONTENTS_PLAYER3;
|
|
2914
|
+
var MASK_NAV_SOLID3 = CONTENTS_SOLID3 | CONTENTS_PLAYERCLIP3 | CONTENTS_WINDOW3;
|
|
2915
|
+
var MASK_LADDER_NAV_SOLID3 = CONTENTS_SOLID3 | CONTENTS_WINDOW3;
|
|
2916
|
+
var MASK_WALK_NAV_SOLID3 = CONTENTS_SOLID3 | CONTENTS_PLAYERCLIP3 | CONTENTS_WINDOW3 | CONTENTS_MONSTERCLIP3;
|
|
2917
|
+
var MASK_PROJECTILE3 = MASK_SHOT3 | CONTENTS_PROJECTILECLIP3;
|
|
2918
|
+
var MAX_CHECKCOUNT3 = Number.MAX_SAFE_INTEGER - 1;
|
|
2919
|
+
var MAX_CLIENTS3 = 256;
|
|
2920
|
+
var MAX_LIGHTSTYLES3 = 256;
|
|
2921
|
+
var MAX_MODELS3 = 8192;
|
|
2922
|
+
var MAX_SOUNDS3 = 2048;
|
|
2923
|
+
var MAX_IMAGES3 = 512;
|
|
2924
|
+
var MAX_ITEMS3 = 256;
|
|
2925
|
+
var MAX_GENERAL3 = MAX_CLIENTS3 * 2;
|
|
2926
|
+
var MAX_SHADOW_LIGHTS3 = 256;
|
|
2927
|
+
var MAX_WHEEL_ITEMS3 = 32;
|
|
2928
|
+
var ConfigStringIndex3 = ((ConfigStringIndex22) => {
|
|
939
2929
|
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
940
2930
|
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
941
2931
|
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
@@ -946,23 +2936,23 @@ var ConfigStringIndex2 = ((ConfigStringIndex22) => {
|
|
|
946
2936
|
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
947
2937
|
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
948
2938
|
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
949
|
-
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 +
|
|
950
|
-
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds +
|
|
951
|
-
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images +
|
|
952
|
-
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights +
|
|
953
|
-
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights +
|
|
954
|
-
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items +
|
|
955
|
-
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins +
|
|
956
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General +
|
|
957
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons +
|
|
958
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo +
|
|
959
|
-
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups +
|
|
2939
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS3] = "Sounds";
|
|
2940
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS3] = "Images";
|
|
2941
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES3] = "Lights";
|
|
2942
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES3] = "ShadowLights";
|
|
2943
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS3] = "Items";
|
|
2944
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS3] = "PlayerSkins";
|
|
2945
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS3] = "General";
|
|
2946
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL3] = "WheelWeapons";
|
|
2947
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS3] = "WheelAmmo";
|
|
2948
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS3] = "WheelPowerups";
|
|
2949
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS3] = "CdLoopCount";
|
|
960
2950
|
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
961
2951
|
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
962
2952
|
return ConfigStringIndex22;
|
|
963
|
-
})(
|
|
964
|
-
var
|
|
965
|
-
var
|
|
2953
|
+
})(ConfigStringIndex3 || {});
|
|
2954
|
+
var MAX_CONFIGSTRINGS3 = ConfigStringIndex3.MaxConfigStrings;
|
|
2955
|
+
var WATERJUMP_CLEAR3 = 8 | 16 | 32 | 1024;
|
|
966
2956
|
var EngineRuntime = class {
|
|
967
2957
|
constructor(engine, host) {
|
|
968
2958
|
this.engine = engine;
|
|
@@ -994,7 +2984,7 @@ var EngineRuntime = class {
|
|
|
994
2984
|
function createEngineRuntime(engine, game, client, options) {
|
|
995
2985
|
return new EngineRuntime(engine, new EngineHost(game, client, options));
|
|
996
2986
|
}
|
|
997
|
-
function
|
|
2987
|
+
function createCrcTable2() {
|
|
998
2988
|
const table = new Uint32Array(256);
|
|
999
2989
|
for (let i = 0; i < 256; i += 1) {
|
|
1000
2990
|
let crc = i;
|
|
@@ -1005,8 +2995,8 @@ function createCrcTable() {
|
|
|
1005
2995
|
}
|
|
1006
2996
|
return table;
|
|
1007
2997
|
}
|
|
1008
|
-
var
|
|
1009
|
-
var
|
|
2998
|
+
var CRC_TABLE2 = createCrcTable2();
|
|
2999
|
+
var RERELEASE_KNOWN_PAKS2 = Object.freeze([
|
|
1010
3000
|
// Base campaign
|
|
1011
3001
|
{ name: "pak0.pak", checksum: 2378051181, description: "Base game assets" },
|
|
1012
3002
|
{ name: "pak0.pak@baseq2", checksum: 2378051181, description: "Base game assets (baseq2)" },
|
|
@@ -1014,18 +3004,18 @@ var RERELEASE_KNOWN_PAKS = Object.freeze([
|
|
|
1014
3004
|
{ name: "pak0.pak@rogue", checksum: 3373211245, description: "Ground Zero (rogue) mission pack" },
|
|
1015
3005
|
{ name: "pak0.pak@xatrix", checksum: 1358269824, description: "The Reckoning (xatrix) mission pack" }
|
|
1016
3006
|
]);
|
|
1017
|
-
var
|
|
1018
|
-
var
|
|
1019
|
-
var
|
|
1020
|
-
var
|
|
3007
|
+
var HEADER_SIZE22 = 17 * 4;
|
|
3008
|
+
var FLOAT_BYTES2 = 4;
|
|
3009
|
+
var STRIDE2 = 7 * FLOAT_BYTES2;
|
|
3010
|
+
var BSP_VERTEX_LAYOUT2 = [
|
|
1021
3011
|
// Position
|
|
1022
|
-
{ index: 0, size: 3, type: 5126, stride:
|
|
3012
|
+
{ index: 0, size: 3, type: 5126, stride: STRIDE2, offset: 0 },
|
|
1023
3013
|
// Diffuse UV
|
|
1024
|
-
{ index: 1, size: 2, type: 5126, stride:
|
|
3014
|
+
{ index: 1, size: 2, type: 5126, stride: STRIDE2, offset: 3 * FLOAT_BYTES2 },
|
|
1025
3015
|
// Lightmap UV
|
|
1026
|
-
{ index: 2, size: 2, type: 5126, stride:
|
|
3016
|
+
{ index: 2, size: 2, type: 5126, stride: STRIDE2, offset: 5 * FLOAT_BYTES2 }
|
|
1027
3017
|
];
|
|
1028
|
-
var
|
|
3018
|
+
var SKYBOX_POSITIONS2 = new Float32Array([
|
|
1029
3019
|
// Front
|
|
1030
3020
|
-1,
|
|
1031
3021
|
-1,
|
|
@@ -1156,9 +3146,28 @@ function createEngine(imports) {
|
|
|
1156
3146
|
|
|
1157
3147
|
// ../../packages/game/dist/esm/index.js
|
|
1158
3148
|
var ZERO_VEC33 = { x: 0, y: 0, z: 0 };
|
|
1159
|
-
var
|
|
1160
|
-
|
|
1161
|
-
|
|
3149
|
+
var DEG_TO_RAD4 = Math.PI / 180;
|
|
3150
|
+
function addVec32(a, b) {
|
|
3151
|
+
return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
|
|
3152
|
+
}
|
|
3153
|
+
function scaleVec32(a, scalar) {
|
|
3154
|
+
return { x: a.x * scalar, y: a.y * scalar, z: a.z * scalar };
|
|
3155
|
+
}
|
|
3156
|
+
function dotVec32(a, b) {
|
|
3157
|
+
return a.x * b.x + a.y * b.y + a.z * b.z;
|
|
3158
|
+
}
|
|
3159
|
+
function lengthSquaredVec32(a) {
|
|
3160
|
+
return dotVec32(a, a);
|
|
3161
|
+
}
|
|
3162
|
+
function lengthVec32(a) {
|
|
3163
|
+
return Math.sqrt(lengthSquaredVec32(a));
|
|
3164
|
+
}
|
|
3165
|
+
function normalizeVec32(a) {
|
|
3166
|
+
const len2 = lengthVec32(a);
|
|
3167
|
+
return len2 === 0 ? a : scaleVec32(a, 1 / len2);
|
|
3168
|
+
}
|
|
3169
|
+
var DEG2RAD_FACTOR4 = Math.PI / 180;
|
|
3170
|
+
var RAD2DEG_FACTOR4 = 180 / Math.PI;
|
|
1162
3171
|
var STATE_SIZE = 624;
|
|
1163
3172
|
var MIDDLE_WORD = 397;
|
|
1164
3173
|
var MATRIX_A = 2567483615;
|
|
@@ -1289,69 +3298,69 @@ var RandomGenerator = class {
|
|
|
1289
3298
|
function createRandomGenerator(options) {
|
|
1290
3299
|
return new RandomGenerator(options);
|
|
1291
3300
|
}
|
|
1292
|
-
var
|
|
1293
|
-
var
|
|
1294
|
-
var
|
|
1295
|
-
var
|
|
1296
|
-
var
|
|
1297
|
-
var
|
|
1298
|
-
var
|
|
1299
|
-
var
|
|
1300
|
-
var
|
|
1301
|
-
var
|
|
1302
|
-
var
|
|
1303
|
-
var
|
|
1304
|
-
var
|
|
1305
|
-
var
|
|
1306
|
-
var
|
|
1307
|
-
var
|
|
1308
|
-
var
|
|
1309
|
-
var
|
|
1310
|
-
var
|
|
1311
|
-
var
|
|
1312
|
-
var
|
|
1313
|
-
var
|
|
1314
|
-
var
|
|
1315
|
-
var
|
|
1316
|
-
var
|
|
1317
|
-
var
|
|
1318
|
-
var
|
|
1319
|
-
var
|
|
1320
|
-
var
|
|
1321
|
-
var
|
|
1322
|
-
var
|
|
1323
|
-
var
|
|
1324
|
-
var
|
|
1325
|
-
var
|
|
1326
|
-
var
|
|
1327
|
-
var
|
|
1328
|
-
var
|
|
1329
|
-
var
|
|
1330
|
-
var
|
|
1331
|
-
var
|
|
1332
|
-
var
|
|
1333
|
-
var
|
|
1334
|
-
var
|
|
1335
|
-
var
|
|
1336
|
-
var
|
|
1337
|
-
var
|
|
1338
|
-
var
|
|
1339
|
-
var
|
|
1340
|
-
var
|
|
1341
|
-
var
|
|
1342
|
-
var
|
|
1343
|
-
var
|
|
1344
|
-
var
|
|
1345
|
-
var
|
|
1346
|
-
var
|
|
1347
|
-
var
|
|
1348
|
-
var
|
|
1349
|
-
var
|
|
1350
|
-
var
|
|
1351
|
-
var
|
|
1352
|
-
var
|
|
1353
|
-
var
|
|
1354
|
-
var
|
|
3301
|
+
var CONTENTS_SOLID4 = 1 << 0;
|
|
3302
|
+
var CONTENTS_WINDOW4 = 1 << 1;
|
|
3303
|
+
var CONTENTS_AUX4 = 1 << 2;
|
|
3304
|
+
var CONTENTS_LAVA4 = 1 << 3;
|
|
3305
|
+
var CONTENTS_SLIME4 = 1 << 4;
|
|
3306
|
+
var CONTENTS_WATER4 = 1 << 5;
|
|
3307
|
+
var CONTENTS_MIST4 = 1 << 6;
|
|
3308
|
+
var CONTENTS_NO_WATERJUMP4 = 1 << 13;
|
|
3309
|
+
var CONTENTS_PROJECTILECLIP4 = 1 << 14;
|
|
3310
|
+
var CONTENTS_AREAPORTAL4 = 1 << 15;
|
|
3311
|
+
var CONTENTS_PLAYERCLIP4 = 1 << 16;
|
|
3312
|
+
var CONTENTS_MONSTERCLIP4 = 1 << 17;
|
|
3313
|
+
var CONTENTS_CURRENT_04 = 1 << 18;
|
|
3314
|
+
var CONTENTS_CURRENT_904 = 1 << 19;
|
|
3315
|
+
var CONTENTS_CURRENT_1804 = 1 << 20;
|
|
3316
|
+
var CONTENTS_CURRENT_2704 = 1 << 21;
|
|
3317
|
+
var CONTENTS_CURRENT_UP4 = 1 << 22;
|
|
3318
|
+
var CONTENTS_CURRENT_DOWN4 = 1 << 23;
|
|
3319
|
+
var CONTENTS_ORIGIN4 = 1 << 24;
|
|
3320
|
+
var CONTENTS_MONSTER4 = 1 << 25;
|
|
3321
|
+
var CONTENTS_DEADMONSTER4 = 1 << 26;
|
|
3322
|
+
var CONTENTS_DETAIL4 = 1 << 27;
|
|
3323
|
+
var CONTENTS_TRANSLUCENT4 = 1 << 28;
|
|
3324
|
+
var CONTENTS_LADDER4 = 1 << 29;
|
|
3325
|
+
var CONTENTS_PLAYER4 = 1 << 30;
|
|
3326
|
+
var CONTENTS_PROJECTILE4 = 1 << 31;
|
|
3327
|
+
var SURF_LIGHT4 = 1 << 0;
|
|
3328
|
+
var SURF_SLICK4 = 1 << 1;
|
|
3329
|
+
var SURF_SKY4 = 1 << 2;
|
|
3330
|
+
var SURF_WARP4 = 1 << 3;
|
|
3331
|
+
var SURF_TRANS334 = 1 << 4;
|
|
3332
|
+
var SURF_TRANS664 = 1 << 5;
|
|
3333
|
+
var SURF_FLOWING4 = 1 << 6;
|
|
3334
|
+
var SURF_NODRAW4 = 1 << 7;
|
|
3335
|
+
var SURF_ALPHATEST4 = 1 << 25;
|
|
3336
|
+
var SURF_N64_UV4 = 1 << 28;
|
|
3337
|
+
var SURF_N64_SCROLL_X4 = 1 << 29;
|
|
3338
|
+
var SURF_N64_SCROLL_Y4 = 1 << 30;
|
|
3339
|
+
var SURF_N64_SCROLL_FLIP4 = 1 << 31;
|
|
3340
|
+
var MASK_SOLID4 = CONTENTS_SOLID4 | CONTENTS_WINDOW4;
|
|
3341
|
+
var MASK_PLAYERSOLID4 = CONTENTS_SOLID4 | CONTENTS_PLAYERCLIP4 | CONTENTS_WINDOW4 | CONTENTS_MONSTER4 | CONTENTS_PLAYER4;
|
|
3342
|
+
var MASK_DEADSOLID4 = CONTENTS_SOLID4 | CONTENTS_PLAYERCLIP4 | CONTENTS_WINDOW4;
|
|
3343
|
+
var MASK_MONSTERSOLID4 = CONTENTS_SOLID4 | CONTENTS_MONSTERCLIP4 | CONTENTS_WINDOW4 | CONTENTS_MONSTER4 | CONTENTS_PLAYER4;
|
|
3344
|
+
var MASK_WATER4 = CONTENTS_WATER4 | CONTENTS_LAVA4 | CONTENTS_SLIME4;
|
|
3345
|
+
var MASK_OPAQUE4 = CONTENTS_SOLID4 | CONTENTS_SLIME4 | CONTENTS_LAVA4;
|
|
3346
|
+
var MASK_SHOT4 = CONTENTS_SOLID4 | CONTENTS_MONSTER4 | CONTENTS_PLAYER4 | CONTENTS_WINDOW4 | CONTENTS_DEADMONSTER4;
|
|
3347
|
+
var MASK_CURRENT4 = CONTENTS_CURRENT_04 | CONTENTS_CURRENT_904 | CONTENTS_CURRENT_1804 | CONTENTS_CURRENT_2704 | CONTENTS_CURRENT_UP4 | CONTENTS_CURRENT_DOWN4;
|
|
3348
|
+
var MASK_BLOCK_SIGHT4 = CONTENTS_SOLID4 | CONTENTS_LAVA4 | CONTENTS_SLIME4 | CONTENTS_MONSTER4 | CONTENTS_PLAYER4;
|
|
3349
|
+
var MASK_NAV_SOLID4 = CONTENTS_SOLID4 | CONTENTS_PLAYERCLIP4 | CONTENTS_WINDOW4;
|
|
3350
|
+
var MASK_LADDER_NAV_SOLID4 = CONTENTS_SOLID4 | CONTENTS_WINDOW4;
|
|
3351
|
+
var MASK_WALK_NAV_SOLID4 = CONTENTS_SOLID4 | CONTENTS_PLAYERCLIP4 | CONTENTS_WINDOW4 | CONTENTS_MONSTERCLIP4;
|
|
3352
|
+
var MASK_PROJECTILE4 = MASK_SHOT4 | CONTENTS_PROJECTILECLIP4;
|
|
3353
|
+
var MAX_CHECKCOUNT4 = Number.MAX_SAFE_INTEGER - 1;
|
|
3354
|
+
var MAX_CLIENTS4 = 256;
|
|
3355
|
+
var MAX_LIGHTSTYLES4 = 256;
|
|
3356
|
+
var MAX_MODELS4 = 8192;
|
|
3357
|
+
var MAX_SOUNDS4 = 2048;
|
|
3358
|
+
var MAX_IMAGES4 = 512;
|
|
3359
|
+
var MAX_ITEMS4 = 256;
|
|
3360
|
+
var MAX_GENERAL4 = MAX_CLIENTS4 * 2;
|
|
3361
|
+
var MAX_SHADOW_LIGHTS4 = 256;
|
|
3362
|
+
var MAX_WHEEL_ITEMS4 = 32;
|
|
3363
|
+
var ConfigStringIndex4 = ((ConfigStringIndex22) => {
|
|
1355
3364
|
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
1356
3365
|
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
1357
3366
|
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
@@ -1362,23 +3371,183 @@ var ConfigStringIndex3 = ((ConfigStringIndex22) => {
|
|
|
1362
3371
|
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
1363
3372
|
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
1364
3373
|
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
1365
|
-
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 +
|
|
1366
|
-
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds +
|
|
1367
|
-
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images +
|
|
1368
|
-
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights +
|
|
1369
|
-
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights +
|
|
1370
|
-
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items +
|
|
1371
|
-
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins +
|
|
1372
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General +
|
|
1373
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons +
|
|
1374
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo +
|
|
1375
|
-
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups +
|
|
3374
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS4] = "Sounds";
|
|
3375
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS4] = "Images";
|
|
3376
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES4] = "Lights";
|
|
3377
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES4] = "ShadowLights";
|
|
3378
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS4] = "Items";
|
|
3379
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS4] = "PlayerSkins";
|
|
3380
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS4] = "General";
|
|
3381
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL4] = "WheelWeapons";
|
|
3382
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS4] = "WheelAmmo";
|
|
3383
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS4] = "WheelPowerups";
|
|
3384
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS4] = "CdLoopCount";
|
|
1376
3385
|
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
1377
3386
|
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
1378
3387
|
return ConfigStringIndex22;
|
|
1379
|
-
})(
|
|
1380
|
-
var
|
|
1381
|
-
|
|
3388
|
+
})(ConfigStringIndex4 || {});
|
|
3389
|
+
var MAX_CONFIGSTRINGS4 = ConfigStringIndex4.MaxConfigStrings;
|
|
3390
|
+
function applyPmoveFriction2(params) {
|
|
3391
|
+
const {
|
|
3392
|
+
velocity,
|
|
3393
|
+
frametime,
|
|
3394
|
+
onGround,
|
|
3395
|
+
groundIsSlick,
|
|
3396
|
+
onLadder,
|
|
3397
|
+
waterlevel,
|
|
3398
|
+
pmFriction,
|
|
3399
|
+
pmStopSpeed,
|
|
3400
|
+
pmWaterFriction
|
|
3401
|
+
} = params;
|
|
3402
|
+
const speed = lengthVec32(velocity);
|
|
3403
|
+
if (speed < 1) {
|
|
3404
|
+
return { x: 0, y: 0, z: velocity.z };
|
|
3405
|
+
}
|
|
3406
|
+
let drop = 0;
|
|
3407
|
+
if (onGround && !groundIsSlick || onLadder) {
|
|
3408
|
+
const control = speed < pmStopSpeed ? pmStopSpeed : speed;
|
|
3409
|
+
const friction = pmFriction;
|
|
3410
|
+
drop += control * friction * frametime;
|
|
3411
|
+
}
|
|
3412
|
+
if (waterlevel > 0 && !onLadder) {
|
|
3413
|
+
drop += speed * pmWaterFriction * waterlevel * frametime;
|
|
3414
|
+
}
|
|
3415
|
+
let newspeed = speed - drop;
|
|
3416
|
+
if (newspeed < 0) {
|
|
3417
|
+
newspeed = 0;
|
|
3418
|
+
}
|
|
3419
|
+
if (newspeed === speed) {
|
|
3420
|
+
return velocity;
|
|
3421
|
+
}
|
|
3422
|
+
const scale3 = newspeed / speed;
|
|
3423
|
+
return scaleVec32(velocity, scale3);
|
|
3424
|
+
}
|
|
3425
|
+
function applyPmoveAccelerate2(params) {
|
|
3426
|
+
const { velocity, wishdir, wishspeed, accel, frametime } = params;
|
|
3427
|
+
const currentSpeed = dotVec32(velocity, wishdir);
|
|
3428
|
+
const addSpeed = wishspeed - currentSpeed;
|
|
3429
|
+
if (addSpeed <= 0) {
|
|
3430
|
+
return velocity;
|
|
3431
|
+
}
|
|
3432
|
+
let accelSpeed = accel * frametime * wishspeed;
|
|
3433
|
+
if (accelSpeed > addSpeed) {
|
|
3434
|
+
accelSpeed = addSpeed;
|
|
3435
|
+
}
|
|
3436
|
+
return {
|
|
3437
|
+
x: velocity.x + wishdir.x * accelSpeed,
|
|
3438
|
+
y: velocity.y + wishdir.y * accelSpeed,
|
|
3439
|
+
z: velocity.z + wishdir.z * accelSpeed
|
|
3440
|
+
};
|
|
3441
|
+
}
|
|
3442
|
+
function buildAirGroundWish2(params) {
|
|
3443
|
+
const { forward, right, cmd, maxSpeed } = params;
|
|
3444
|
+
let wishvel = {
|
|
3445
|
+
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
3446
|
+
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
3447
|
+
z: 0
|
|
3448
|
+
};
|
|
3449
|
+
let wishspeed = lengthVec32(wishvel);
|
|
3450
|
+
if (wishspeed > maxSpeed) {
|
|
3451
|
+
const scale3 = maxSpeed / wishspeed;
|
|
3452
|
+
wishvel = scaleVec32(wishvel, scale3);
|
|
3453
|
+
wishspeed = maxSpeed;
|
|
3454
|
+
}
|
|
3455
|
+
return {
|
|
3456
|
+
wishdir: wishspeed === 0 ? wishvel : normalizeVec32(wishvel),
|
|
3457
|
+
wishspeed
|
|
3458
|
+
};
|
|
3459
|
+
}
|
|
3460
|
+
function buildWaterWish2(params) {
|
|
3461
|
+
const { forward, right, cmd, maxSpeed } = params;
|
|
3462
|
+
let wishvel = {
|
|
3463
|
+
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
3464
|
+
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
3465
|
+
z: 0
|
|
3466
|
+
};
|
|
3467
|
+
if (cmd.upmove > 10) {
|
|
3468
|
+
wishvel = addVec32(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
3469
|
+
} else if (cmd.upmove < -10) {
|
|
3470
|
+
wishvel = addVec32(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
3471
|
+
} else {
|
|
3472
|
+
wishvel = addVec32(wishvel, { x: 0, y: 0, z: 10 });
|
|
3473
|
+
}
|
|
3474
|
+
let wishspeed = lengthVec32(wishvel);
|
|
3475
|
+
if (wishspeed > maxSpeed) {
|
|
3476
|
+
const scale3 = maxSpeed / wishspeed;
|
|
3477
|
+
wishvel = scaleVec32(wishvel, scale3);
|
|
3478
|
+
wishspeed = maxSpeed;
|
|
3479
|
+
}
|
|
3480
|
+
wishspeed *= 0.5;
|
|
3481
|
+
return {
|
|
3482
|
+
wishdir: wishspeed === 0 ? wishvel : normalizeVec32(wishvel),
|
|
3483
|
+
wishspeed
|
|
3484
|
+
};
|
|
3485
|
+
}
|
|
3486
|
+
var WATERJUMP_CLEAR4 = 8 | 16 | 32 | 1024;
|
|
3487
|
+
var FRAMETIME = 0.025;
|
|
3488
|
+
var categorizePosition2 = (state, trace) => {
|
|
3489
|
+
const point = { ...state.origin };
|
|
3490
|
+
point.z -= 0.25;
|
|
3491
|
+
const traceResult = trace(state.origin, point);
|
|
3492
|
+
return {
|
|
3493
|
+
...state,
|
|
3494
|
+
onGround: traceResult.fraction < 1
|
|
3495
|
+
};
|
|
3496
|
+
};
|
|
3497
|
+
var checkWater = (state, pointContents2) => {
|
|
3498
|
+
const point = { ...state.origin };
|
|
3499
|
+
point.z += state.mins.z + 1;
|
|
3500
|
+
const contents = pointContents2(point);
|
|
3501
|
+
if (contents & 33554432) {
|
|
3502
|
+
return { ...state, waterLevel: 1 };
|
|
3503
|
+
}
|
|
3504
|
+
return { ...state, waterLevel: 0 };
|
|
3505
|
+
};
|
|
3506
|
+
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
3507
|
+
let newState = { ...state };
|
|
3508
|
+
newState = categorizePosition2(newState, trace);
|
|
3509
|
+
newState = checkWater(newState, pointContents2);
|
|
3510
|
+
const { origin, velocity, onGround, waterLevel } = newState;
|
|
3511
|
+
const frictionedVelocity = applyPmoveFriction2({
|
|
3512
|
+
velocity,
|
|
3513
|
+
frametime: FRAMETIME,
|
|
3514
|
+
onGround,
|
|
3515
|
+
groundIsSlick: false,
|
|
3516
|
+
onLadder: false,
|
|
3517
|
+
waterlevel: waterLevel,
|
|
3518
|
+
pmFriction: 6,
|
|
3519
|
+
pmStopSpeed: 100,
|
|
3520
|
+
pmWaterFriction: 1
|
|
3521
|
+
});
|
|
3522
|
+
const wish = waterLevel >= 2 ? buildWaterWish2({
|
|
3523
|
+
forward: { x: 1, y: 0, z: 0 },
|
|
3524
|
+
right: { x: 0, y: 1, z: 0 },
|
|
3525
|
+
cmd,
|
|
3526
|
+
maxSpeed: 320
|
|
3527
|
+
}) : buildAirGroundWish2({
|
|
3528
|
+
forward: { x: 1, y: 0, z: 0 },
|
|
3529
|
+
right: { x: 0, y: 1, z: 0 },
|
|
3530
|
+
cmd,
|
|
3531
|
+
maxSpeed: 320
|
|
3532
|
+
});
|
|
3533
|
+
const finalVelocity = applyPmoveAccelerate2({
|
|
3534
|
+
velocity: frictionedVelocity,
|
|
3535
|
+
wishdir: wish.wishdir,
|
|
3536
|
+
wishspeed: wish.wishspeed,
|
|
3537
|
+
accel: onGround ? 10 : 1,
|
|
3538
|
+
frametime: FRAMETIME
|
|
3539
|
+
});
|
|
3540
|
+
const traceResult = trace(origin, {
|
|
3541
|
+
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
3542
|
+
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
3543
|
+
z: origin.z + finalVelocity.z * FRAMETIME
|
|
3544
|
+
});
|
|
3545
|
+
return {
|
|
3546
|
+
...newState,
|
|
3547
|
+
origin: traceResult.endpos,
|
|
3548
|
+
velocity: finalVelocity
|
|
3549
|
+
};
|
|
3550
|
+
};
|
|
1382
3551
|
var ZERO = { ...ZERO_VEC33 };
|
|
1383
3552
|
function copyVec3() {
|
|
1384
3553
|
return { ...ZERO };
|
|
@@ -1905,6 +4074,14 @@ var EntitySystem = class {
|
|
|
1905
4074
|
callback(entity);
|
|
1906
4075
|
}
|
|
1907
4076
|
}
|
|
4077
|
+
find(predicate) {
|
|
4078
|
+
for (const entity of this.pool) {
|
|
4079
|
+
if (predicate(entity)) {
|
|
4080
|
+
return entity;
|
|
4081
|
+
}
|
|
4082
|
+
}
|
|
4083
|
+
return void 0;
|
|
4084
|
+
}
|
|
1908
4085
|
spawn() {
|
|
1909
4086
|
return this.pool.spawn();
|
|
1910
4087
|
}
|
|
@@ -2219,6 +4396,11 @@ var MONSTERJUMP_SPAWNFLAGS = {
|
|
|
2219
4396
|
var FIELD_LOOKUP = new Map(
|
|
2220
4397
|
ENTITY_FIELD_METADATA.map((field) => [field.name, field])
|
|
2221
4398
|
);
|
|
4399
|
+
function findPlayerStart(entities) {
|
|
4400
|
+
return entities.find(
|
|
4401
|
+
(entity) => entity.classname === "info_player_start"
|
|
4402
|
+
);
|
|
4403
|
+
}
|
|
2222
4404
|
var AmmoType = /* @__PURE__ */ ((AmmoType3) => {
|
|
2223
4405
|
AmmoType3[AmmoType3["Bullets"] = 0] = "Bullets";
|
|
2224
4406
|
AmmoType3[AmmoType3["Shells"] = 1] = "Shells";
|
|
@@ -2596,12 +4778,12 @@ var MemorySaveAdapter = class {
|
|
|
2596
4778
|
return Promise.resolve();
|
|
2597
4779
|
}
|
|
2598
4780
|
async put(record) {
|
|
2599
|
-
const
|
|
4781
|
+
const copy3 = {
|
|
2600
4782
|
id: record.id,
|
|
2601
4783
|
metadata: { ...record.metadata },
|
|
2602
4784
|
save: cloneSave(record.save)
|
|
2603
4785
|
};
|
|
2604
|
-
this.records.set(record.id,
|
|
4786
|
+
this.records.set(record.id, copy3);
|
|
2605
4787
|
}
|
|
2606
4788
|
async get(id) {
|
|
2607
4789
|
const record = this.records.get(id);
|
|
@@ -2741,7 +4923,7 @@ _SaveStorage.DEFAULT_DB_NAME = "quake2ts-saves";
|
|
|
2741
4923
|
_SaveStorage.DEFAULT_STORE = "saves";
|
|
2742
4924
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
2743
4925
|
var ZERO_VEC322 = { x: 0, y: 0, z: 0 };
|
|
2744
|
-
function createGame(engine, options) {
|
|
4926
|
+
function createGame(trace, pointContents, engine, options) {
|
|
2745
4927
|
const gravity = options.gravity;
|
|
2746
4928
|
const levelClock = new LevelClock();
|
|
2747
4929
|
const frameLoop = new GameFrameLoop();
|
|
@@ -2790,15 +4972,39 @@ function createGame(engine, options) {
|
|
|
2790
4972
|
return {
|
|
2791
4973
|
init(startTimeMs) {
|
|
2792
4974
|
resetState(startTimeMs);
|
|
2793
|
-
void engine.trace({ x: 0, y: 0, z: 0 }, gravity);
|
|
2794
4975
|
return snapshot(0);
|
|
2795
4976
|
},
|
|
2796
4977
|
shutdown() {
|
|
2797
4978
|
},
|
|
2798
4979
|
spawnWorld() {
|
|
4980
|
+
const playerStart = findPlayerStart(entities);
|
|
4981
|
+
if (playerStart) {
|
|
4982
|
+
const player = entities.spawn();
|
|
4983
|
+
player.classname = "player";
|
|
4984
|
+
player.origin = { ...playerStart.origin };
|
|
4985
|
+
player.angles = { ...playerStart.angles };
|
|
4986
|
+
player.health = 100;
|
|
4987
|
+
player.mins = { x: -16, y: -16, z: -24 };
|
|
4988
|
+
player.maxs = { x: 16, y: 16, z: 32 };
|
|
4989
|
+
entities.finalizeSpawn(player);
|
|
4990
|
+
origin = { ...player.origin };
|
|
4991
|
+
}
|
|
2799
4992
|
},
|
|
2800
|
-
frame(step) {
|
|
4993
|
+
frame(step, command) {
|
|
2801
4994
|
const context = frameLoop.advance(step);
|
|
4995
|
+
const player = entities.find((e) => e.classname === "player");
|
|
4996
|
+
if (command && player) {
|
|
4997
|
+
const pcmd = {
|
|
4998
|
+
forwardmove: command.forwardmove,
|
|
4999
|
+
sidemove: command.sidemove,
|
|
5000
|
+
upmove: command.upmove,
|
|
5001
|
+
buttons: command.buttons
|
|
5002
|
+
};
|
|
5003
|
+
const playerState = { origin: player.origin, velocity: player.velocity, onGround: false, waterLevel: 0, mins: player.mins, maxs: player.maxs };
|
|
5004
|
+
const newState = applyPmove(playerState, pcmd, trace, pointContents);
|
|
5005
|
+
player.origin = newState.origin;
|
|
5006
|
+
player.velocity = newState.velocity;
|
|
5007
|
+
}
|
|
2802
5008
|
return snapshot(context.frame);
|
|
2803
5009
|
},
|
|
2804
5010
|
entities,
|
|
@@ -2816,72 +5022,72 @@ function createGame(engine, options) {
|
|
|
2816
5022
|
|
|
2817
5023
|
// ../../packages/shared/dist/esm/index.js
|
|
2818
5024
|
var ZERO_VEC34 = { x: 0, y: 0, z: 0 };
|
|
2819
|
-
var
|
|
2820
|
-
var
|
|
2821
|
-
var
|
|
2822
|
-
var
|
|
2823
|
-
var
|
|
2824
|
-
var
|
|
2825
|
-
var
|
|
2826
|
-
var
|
|
2827
|
-
var
|
|
2828
|
-
var
|
|
2829
|
-
var
|
|
2830
|
-
var
|
|
2831
|
-
var
|
|
2832
|
-
var
|
|
2833
|
-
var
|
|
2834
|
-
var
|
|
2835
|
-
var
|
|
2836
|
-
var
|
|
2837
|
-
var
|
|
2838
|
-
var
|
|
2839
|
-
var
|
|
2840
|
-
var
|
|
2841
|
-
var
|
|
2842
|
-
var
|
|
2843
|
-
var
|
|
2844
|
-
var
|
|
2845
|
-
var
|
|
2846
|
-
var
|
|
2847
|
-
var
|
|
2848
|
-
var
|
|
2849
|
-
var
|
|
2850
|
-
var
|
|
2851
|
-
var
|
|
2852
|
-
var
|
|
2853
|
-
var
|
|
2854
|
-
var
|
|
2855
|
-
var
|
|
2856
|
-
var
|
|
2857
|
-
var
|
|
2858
|
-
var
|
|
2859
|
-
var
|
|
2860
|
-
var
|
|
2861
|
-
var
|
|
2862
|
-
var
|
|
2863
|
-
var
|
|
2864
|
-
var
|
|
2865
|
-
var
|
|
2866
|
-
var
|
|
2867
|
-
var
|
|
2868
|
-
var
|
|
2869
|
-
var
|
|
2870
|
-
var
|
|
2871
|
-
var
|
|
2872
|
-
var
|
|
2873
|
-
var
|
|
2874
|
-
var
|
|
2875
|
-
var
|
|
2876
|
-
var
|
|
2877
|
-
var
|
|
2878
|
-
var
|
|
2879
|
-
var
|
|
2880
|
-
var
|
|
2881
|
-
var
|
|
2882
|
-
var
|
|
2883
|
-
var
|
|
2884
|
-
var
|
|
5025
|
+
var DEG_TO_RAD5 = Math.PI / 180;
|
|
5026
|
+
var DEG2RAD_FACTOR5 = Math.PI / 180;
|
|
5027
|
+
var RAD2DEG_FACTOR5 = 180 / Math.PI;
|
|
5028
|
+
var CONTENTS_SOLID5 = 1 << 0;
|
|
5029
|
+
var CONTENTS_WINDOW5 = 1 << 1;
|
|
5030
|
+
var CONTENTS_AUX5 = 1 << 2;
|
|
5031
|
+
var CONTENTS_LAVA5 = 1 << 3;
|
|
5032
|
+
var CONTENTS_SLIME5 = 1 << 4;
|
|
5033
|
+
var CONTENTS_WATER5 = 1 << 5;
|
|
5034
|
+
var CONTENTS_MIST5 = 1 << 6;
|
|
5035
|
+
var CONTENTS_NO_WATERJUMP5 = 1 << 13;
|
|
5036
|
+
var CONTENTS_PROJECTILECLIP5 = 1 << 14;
|
|
5037
|
+
var CONTENTS_AREAPORTAL5 = 1 << 15;
|
|
5038
|
+
var CONTENTS_PLAYERCLIP5 = 1 << 16;
|
|
5039
|
+
var CONTENTS_MONSTERCLIP5 = 1 << 17;
|
|
5040
|
+
var CONTENTS_CURRENT_05 = 1 << 18;
|
|
5041
|
+
var CONTENTS_CURRENT_905 = 1 << 19;
|
|
5042
|
+
var CONTENTS_CURRENT_1805 = 1 << 20;
|
|
5043
|
+
var CONTENTS_CURRENT_2705 = 1 << 21;
|
|
5044
|
+
var CONTENTS_CURRENT_UP5 = 1 << 22;
|
|
5045
|
+
var CONTENTS_CURRENT_DOWN5 = 1 << 23;
|
|
5046
|
+
var CONTENTS_ORIGIN5 = 1 << 24;
|
|
5047
|
+
var CONTENTS_MONSTER5 = 1 << 25;
|
|
5048
|
+
var CONTENTS_DEADMONSTER5 = 1 << 26;
|
|
5049
|
+
var CONTENTS_DETAIL5 = 1 << 27;
|
|
5050
|
+
var CONTENTS_TRANSLUCENT5 = 1 << 28;
|
|
5051
|
+
var CONTENTS_LADDER5 = 1 << 29;
|
|
5052
|
+
var CONTENTS_PLAYER5 = 1 << 30;
|
|
5053
|
+
var CONTENTS_PROJECTILE5 = 1 << 31;
|
|
5054
|
+
var SURF_LIGHT5 = 1 << 0;
|
|
5055
|
+
var SURF_SLICK5 = 1 << 1;
|
|
5056
|
+
var SURF_SKY5 = 1 << 2;
|
|
5057
|
+
var SURF_WARP5 = 1 << 3;
|
|
5058
|
+
var SURF_TRANS335 = 1 << 4;
|
|
5059
|
+
var SURF_TRANS665 = 1 << 5;
|
|
5060
|
+
var SURF_FLOWING5 = 1 << 6;
|
|
5061
|
+
var SURF_NODRAW5 = 1 << 7;
|
|
5062
|
+
var SURF_ALPHATEST5 = 1 << 25;
|
|
5063
|
+
var SURF_N64_UV5 = 1 << 28;
|
|
5064
|
+
var SURF_N64_SCROLL_X5 = 1 << 29;
|
|
5065
|
+
var SURF_N64_SCROLL_Y5 = 1 << 30;
|
|
5066
|
+
var SURF_N64_SCROLL_FLIP5 = 1 << 31;
|
|
5067
|
+
var MASK_SOLID5 = CONTENTS_SOLID5 | CONTENTS_WINDOW5;
|
|
5068
|
+
var MASK_PLAYERSOLID5 = CONTENTS_SOLID5 | CONTENTS_PLAYERCLIP5 | CONTENTS_WINDOW5 | CONTENTS_MONSTER5 | CONTENTS_PLAYER5;
|
|
5069
|
+
var MASK_DEADSOLID5 = CONTENTS_SOLID5 | CONTENTS_PLAYERCLIP5 | CONTENTS_WINDOW5;
|
|
5070
|
+
var MASK_MONSTERSOLID5 = CONTENTS_SOLID5 | CONTENTS_MONSTERCLIP5 | CONTENTS_WINDOW5 | CONTENTS_MONSTER5 | CONTENTS_PLAYER5;
|
|
5071
|
+
var MASK_WATER5 = CONTENTS_WATER5 | CONTENTS_LAVA5 | CONTENTS_SLIME5;
|
|
5072
|
+
var MASK_OPAQUE5 = CONTENTS_SOLID5 | CONTENTS_SLIME5 | CONTENTS_LAVA5;
|
|
5073
|
+
var MASK_SHOT5 = CONTENTS_SOLID5 | CONTENTS_MONSTER5 | CONTENTS_PLAYER5 | CONTENTS_WINDOW5 | CONTENTS_DEADMONSTER5;
|
|
5074
|
+
var MASK_CURRENT5 = CONTENTS_CURRENT_05 | CONTENTS_CURRENT_905 | CONTENTS_CURRENT_1805 | CONTENTS_CURRENT_2705 | CONTENTS_CURRENT_UP5 | CONTENTS_CURRENT_DOWN5;
|
|
5075
|
+
var MASK_BLOCK_SIGHT5 = CONTENTS_SOLID5 | CONTENTS_LAVA5 | CONTENTS_SLIME5 | CONTENTS_MONSTER5 | CONTENTS_PLAYER5;
|
|
5076
|
+
var MASK_NAV_SOLID5 = CONTENTS_SOLID5 | CONTENTS_PLAYERCLIP5 | CONTENTS_WINDOW5;
|
|
5077
|
+
var MASK_LADDER_NAV_SOLID5 = CONTENTS_SOLID5 | CONTENTS_WINDOW5;
|
|
5078
|
+
var MASK_WALK_NAV_SOLID5 = CONTENTS_SOLID5 | CONTENTS_PLAYERCLIP5 | CONTENTS_WINDOW5 | CONTENTS_MONSTERCLIP5;
|
|
5079
|
+
var MASK_PROJECTILE5 = MASK_SHOT5 | CONTENTS_PROJECTILECLIP5;
|
|
5080
|
+
var MAX_CHECKCOUNT5 = Number.MAX_SAFE_INTEGER - 1;
|
|
5081
|
+
var MAX_CLIENTS5 = 256;
|
|
5082
|
+
var MAX_LIGHTSTYLES5 = 256;
|
|
5083
|
+
var MAX_MODELS5 = 8192;
|
|
5084
|
+
var MAX_SOUNDS5 = 2048;
|
|
5085
|
+
var MAX_IMAGES5 = 512;
|
|
5086
|
+
var MAX_ITEMS5 = 256;
|
|
5087
|
+
var MAX_GENERAL5 = MAX_CLIENTS5 * 2;
|
|
5088
|
+
var MAX_SHADOW_LIGHTS5 = 256;
|
|
5089
|
+
var MAX_WHEEL_ITEMS5 = 32;
|
|
5090
|
+
var ConfigStringIndex5 = ((ConfigStringIndex22) => {
|
|
2885
5091
|
ConfigStringIndex22[ConfigStringIndex22["Name"] = 0] = "Name";
|
|
2886
5092
|
ConfigStringIndex22[ConfigStringIndex22["CdTrack"] = 1] = "CdTrack";
|
|
2887
5093
|
ConfigStringIndex22[ConfigStringIndex22["Sky"] = 2] = "Sky";
|
|
@@ -2892,35 +5098,41 @@ var ConfigStringIndex4 = ((ConfigStringIndex22) => {
|
|
|
2892
5098
|
ConfigStringIndex22[ConfigStringIndex22["MaxClients"] = 60] = "MaxClients";
|
|
2893
5099
|
ConfigStringIndex22[ConfigStringIndex22["MapChecksum"] = 61] = "MapChecksum";
|
|
2894
5100
|
ConfigStringIndex22[ConfigStringIndex22["Models"] = 62] = "Models";
|
|
2895
|
-
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 +
|
|
2896
|
-
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds +
|
|
2897
|
-
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images +
|
|
2898
|
-
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights +
|
|
2899
|
-
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights +
|
|
2900
|
-
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items +
|
|
2901
|
-
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins +
|
|
2902
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General +
|
|
2903
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons +
|
|
2904
|
-
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo +
|
|
2905
|
-
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups +
|
|
5101
|
+
ConfigStringIndex22[ConfigStringIndex22["Sounds"] = 62 + MAX_MODELS5] = "Sounds";
|
|
5102
|
+
ConfigStringIndex22[ConfigStringIndex22["Images"] = ConfigStringIndex22.Sounds + MAX_SOUNDS5] = "Images";
|
|
5103
|
+
ConfigStringIndex22[ConfigStringIndex22["Lights"] = ConfigStringIndex22.Images + MAX_IMAGES5] = "Lights";
|
|
5104
|
+
ConfigStringIndex22[ConfigStringIndex22["ShadowLights"] = ConfigStringIndex22.Lights + MAX_LIGHTSTYLES5] = "ShadowLights";
|
|
5105
|
+
ConfigStringIndex22[ConfigStringIndex22["Items"] = ConfigStringIndex22.ShadowLights + MAX_SHADOW_LIGHTS5] = "Items";
|
|
5106
|
+
ConfigStringIndex22[ConfigStringIndex22["PlayerSkins"] = ConfigStringIndex22.Items + MAX_ITEMS5] = "PlayerSkins";
|
|
5107
|
+
ConfigStringIndex22[ConfigStringIndex22["General"] = ConfigStringIndex22.PlayerSkins + MAX_CLIENTS5] = "General";
|
|
5108
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelWeapons"] = ConfigStringIndex22.General + MAX_GENERAL5] = "WheelWeapons";
|
|
5109
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelAmmo"] = ConfigStringIndex22.WheelWeapons + MAX_WHEEL_ITEMS5] = "WheelAmmo";
|
|
5110
|
+
ConfigStringIndex22[ConfigStringIndex22["WheelPowerups"] = ConfigStringIndex22.WheelAmmo + MAX_WHEEL_ITEMS5] = "WheelPowerups";
|
|
5111
|
+
ConfigStringIndex22[ConfigStringIndex22["CdLoopCount"] = ConfigStringIndex22.WheelPowerups + MAX_WHEEL_ITEMS5] = "CdLoopCount";
|
|
2906
5112
|
ConfigStringIndex22[ConfigStringIndex22["GameStyle"] = ConfigStringIndex22.CdLoopCount + 1] = "GameStyle";
|
|
2907
5113
|
ConfigStringIndex22[ConfigStringIndex22["MaxConfigStrings"] = ConfigStringIndex22.GameStyle + 1] = "MaxConfigStrings";
|
|
2908
5114
|
return ConfigStringIndex22;
|
|
2909
|
-
})(
|
|
2910
|
-
var
|
|
2911
|
-
var
|
|
5115
|
+
})(ConfigStringIndex5 || {});
|
|
5116
|
+
var MAX_CONFIGSTRINGS5 = ConfigStringIndex5.MaxConfigStrings;
|
|
5117
|
+
var WATERJUMP_CLEAR5 = 8 | 16 | 32 | 1024;
|
|
2912
5118
|
|
|
2913
5119
|
// src/index.ts
|
|
2914
5120
|
function bootstrapViewer() {
|
|
5121
|
+
const trace = (start, end) => {
|
|
5122
|
+
return {
|
|
5123
|
+
start,
|
|
5124
|
+
end,
|
|
5125
|
+
fraction: 1,
|
|
5126
|
+
endpos: end,
|
|
5127
|
+
allsolid: false,
|
|
5128
|
+
startsolid: false
|
|
5129
|
+
};
|
|
5130
|
+
};
|
|
5131
|
+
const pointContents = (point) => 0;
|
|
2915
5132
|
const engine = createEngine({
|
|
2916
|
-
trace
|
|
2917
|
-
return { start, end, fraction: 1 };
|
|
2918
|
-
}
|
|
5133
|
+
trace
|
|
2919
5134
|
});
|
|
2920
|
-
const
|
|
2921
|
-
trace(start, end) {
|
|
2922
|
-
return { start, end, fraction: 1 };
|
|
2923
|
-
},
|
|
5135
|
+
const gameEngine = {
|
|
2924
5136
|
sound: (entity, channel, sound) => console.log(`Sound played: ${sound}`),
|
|
2925
5137
|
centerprintf(entity, message) {
|
|
2926
5138
|
const el = document.createElement("div");
|
|
@@ -2935,8 +5147,9 @@ function bootstrapViewer() {
|
|
|
2935
5147
|
document.body.appendChild(el);
|
|
2936
5148
|
setTimeout(() => document.body.removeChild(el), 3e3);
|
|
2937
5149
|
}
|
|
2938
|
-
}
|
|
2939
|
-
const
|
|
5150
|
+
};
|
|
5151
|
+
const game = createGame(trace, pointContents, gameEngine, { gravity: ZERO_VEC34 });
|
|
5152
|
+
const client = createClient({ engine: { trace } });
|
|
2940
5153
|
const runtime = createEngineRuntime(engine, game, client);
|
|
2941
5154
|
runtime.start();
|
|
2942
5155
|
return { engine, game, client, runtime };
|