quake2ts 0.0.553 → 0.0.557
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/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +17 -17
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +4607 -2885
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +4607 -2885
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +2256 -534
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +2266 -538
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/visibilityAnalyzer.d.ts +7 -2
- package/packages/engine/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/target/speaker.d.ts.map +1 -1
- package/packages/test-utils/dist/index.cjs +808 -194
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +220 -1
- package/packages/test-utils/dist/index.d.ts +220 -1
- package/packages/test-utils/dist/index.js +771 -193
- package/packages/test-utils/dist/index.js.map +1 -1
|
@@ -426,8 +426,8 @@ function lengthVec3(a) {
|
|
|
426
426
|
return Math.sqrt(lengthSquaredVec3(a));
|
|
427
427
|
}
|
|
428
428
|
function normalizeVec3(a) {
|
|
429
|
-
const
|
|
430
|
-
return
|
|
429
|
+
const len2 = lengthVec3(a);
|
|
430
|
+
return len2 === 0 ? a : scaleVec3(a, 1 / len2);
|
|
431
431
|
}
|
|
432
432
|
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
433
433
|
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
@@ -1033,26 +1033,26 @@ var BinaryStream = class {
|
|
|
1033
1033
|
return value;
|
|
1034
1034
|
}
|
|
1035
1035
|
readString() {
|
|
1036
|
-
let
|
|
1036
|
+
let str3 = "";
|
|
1037
1037
|
while (this.offset < this.length) {
|
|
1038
1038
|
const charCode = this.readChar();
|
|
1039
1039
|
if (charCode === -1 || charCode === 0) {
|
|
1040
1040
|
break;
|
|
1041
1041
|
}
|
|
1042
|
-
|
|
1042
|
+
str3 += String.fromCharCode(charCode);
|
|
1043
1043
|
}
|
|
1044
|
-
return
|
|
1044
|
+
return str3;
|
|
1045
1045
|
}
|
|
1046
1046
|
readStringLine() {
|
|
1047
|
-
let
|
|
1047
|
+
let str3 = "";
|
|
1048
1048
|
while (this.offset < this.length) {
|
|
1049
1049
|
const charCode = this.readChar();
|
|
1050
1050
|
if (charCode === -1 || charCode === 0 || charCode === 10) {
|
|
1051
1051
|
break;
|
|
1052
1052
|
}
|
|
1053
|
-
|
|
1053
|
+
str3 += String.fromCharCode(charCode);
|
|
1054
1054
|
}
|
|
1055
|
-
return
|
|
1055
|
+
return str3;
|
|
1056
1056
|
}
|
|
1057
1057
|
readCoord() {
|
|
1058
1058
|
return this.readShort() * (1 / 8);
|
|
@@ -1063,12 +1063,12 @@ var BinaryStream = class {
|
|
|
1063
1063
|
readAngle16() {
|
|
1064
1064
|
return this.readShort() * 360 / 65536;
|
|
1065
1065
|
}
|
|
1066
|
-
readData(
|
|
1067
|
-
if (this.offset +
|
|
1068
|
-
throw new Error(`Read out of bounds: ${this.offset +
|
|
1066
|
+
readData(length2) {
|
|
1067
|
+
if (this.offset + length2 > this.length) {
|
|
1068
|
+
throw new Error(`Read out of bounds: ${this.offset + length2} (length: ${this.length})`);
|
|
1069
1069
|
}
|
|
1070
|
-
const data = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset,
|
|
1071
|
-
this.offset +=
|
|
1070
|
+
const data = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, length2);
|
|
1071
|
+
this.offset += length2;
|
|
1072
1072
|
return new Uint8Array(data);
|
|
1073
1073
|
}
|
|
1074
1074
|
readPos(out) {
|
|
@@ -1145,13 +1145,13 @@ var BinaryWriter = class {
|
|
|
1145
1145
|
this.offset += 4;
|
|
1146
1146
|
}
|
|
1147
1147
|
writeString(value) {
|
|
1148
|
-
const
|
|
1149
|
-
this.ensureSpace(
|
|
1150
|
-
for (let i = 0; i <
|
|
1148
|
+
const len2 = value.length;
|
|
1149
|
+
this.ensureSpace(len2 + 1);
|
|
1150
|
+
for (let i = 0; i < len2; i++) {
|
|
1151
1151
|
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
1152
1152
|
}
|
|
1153
|
-
this.view.setUint8(this.offset +
|
|
1154
|
-
this.offset +=
|
|
1153
|
+
this.view.setUint8(this.offset + len2, 0);
|
|
1154
|
+
this.offset += len2 + 1;
|
|
1155
1155
|
}
|
|
1156
1156
|
writeCoord(value) {
|
|
1157
1157
|
this.writeShort(Math.trunc(value * 8));
|
|
@@ -1176,9 +1176,9 @@ var BinaryWriter = class {
|
|
|
1176
1176
|
}
|
|
1177
1177
|
for (let i = 0; i < ANORMS.length; i++) {
|
|
1178
1178
|
const norm = ANORMS[i];
|
|
1179
|
-
const
|
|
1180
|
-
if (
|
|
1181
|
-
maxDot =
|
|
1179
|
+
const dot2 = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
|
|
1180
|
+
if (dot2 > maxDot) {
|
|
1181
|
+
maxDot = dot2;
|
|
1182
1182
|
bestIndex = i;
|
|
1183
1183
|
}
|
|
1184
1184
|
}
|
|
@@ -1459,12 +1459,12 @@ var _NetChan = class _NetChan2 {
|
|
|
1459
1459
|
* Writes a string to the reliable message buffer
|
|
1460
1460
|
*/
|
|
1461
1461
|
writeReliableString(value) {
|
|
1462
|
-
const
|
|
1463
|
-
if (this.reliableLength +
|
|
1462
|
+
const len2 = value.length + 1;
|
|
1463
|
+
if (this.reliableLength + len2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1464
1464
|
throw new Error("NetChan reliable buffer overflow");
|
|
1465
1465
|
}
|
|
1466
1466
|
this.reliableMessage.writeString(value);
|
|
1467
|
-
this.reliableLength +=
|
|
1467
|
+
this.reliableLength += len2;
|
|
1468
1468
|
}
|
|
1469
1469
|
/**
|
|
1470
1470
|
* Returns the current reliable data buffer
|
|
@@ -2821,9 +2821,9 @@ var BspLoader = class {
|
|
|
2821
2821
|
}
|
|
2822
2822
|
async load(path) {
|
|
2823
2823
|
const buffer = await this.vfs.readFile(path);
|
|
2824
|
-
const
|
|
2825
|
-
|
|
2826
|
-
return parseBsp(
|
|
2824
|
+
const copy3 = new Uint8Array(buffer.byteLength);
|
|
2825
|
+
copy3.set(buffer);
|
|
2826
|
+
return parseBsp(copy3.buffer);
|
|
2827
2827
|
}
|
|
2828
2828
|
};
|
|
2829
2829
|
function parseBsp(buffer) {
|
|
@@ -2842,11 +2842,11 @@ function parseBsp(buffer) {
|
|
|
2842
2842
|
const lumps = /* @__PURE__ */ new Map();
|
|
2843
2843
|
for (let i = 0; i < HEADER_LUMPS; i += 1) {
|
|
2844
2844
|
const offset = view.getInt32(8 + i * 8, true);
|
|
2845
|
-
const
|
|
2846
|
-
if (offset < 0 ||
|
|
2845
|
+
const length2 = view.getInt32(12 + i * 8, true);
|
|
2846
|
+
if (offset < 0 || length2 < 0 || offset + length2 > buffer.byteLength) {
|
|
2847
2847
|
throw new BspParseError(`Invalid lump bounds for index ${i}`);
|
|
2848
2848
|
}
|
|
2849
|
-
lumps.set(i, { offset, length });
|
|
2849
|
+
lumps.set(i, { offset, length: length2 });
|
|
2850
2850
|
}
|
|
2851
2851
|
const header = { version, lumps };
|
|
2852
2852
|
const entities = parseEntities(buffer, lumps.get(0 /* Entities */));
|
|
@@ -2896,10 +2896,10 @@ function parseBsp(buffer) {
|
|
|
2896
2896
|
continue;
|
|
2897
2897
|
}
|
|
2898
2898
|
const model = models[modelIndex];
|
|
2899
|
-
const
|
|
2900
|
-
if (
|
|
2901
|
-
minDistance =
|
|
2902
|
-
closest = { entity, model, distance:
|
|
2899
|
+
const dist2 = intersectRayAabb(ray.origin, ray.direction, model.mins, model.maxs);
|
|
2900
|
+
if (dist2 !== null && dist2 < minDistance) {
|
|
2901
|
+
minDistance = dist2;
|
|
2902
|
+
closest = { entity, model, distance: dist2 };
|
|
2903
2903
|
}
|
|
2904
2904
|
}
|
|
2905
2905
|
return closest;
|
|
@@ -2977,9 +2977,9 @@ function parsePlanes(buffer, info) {
|
|
|
2977
2977
|
const planes = [];
|
|
2978
2978
|
for (let i = 0; i < count; i += 1) {
|
|
2979
2979
|
const normal = [view.getFloat32(i * 20, true), view.getFloat32(i * 20 + 4, true), view.getFloat32(i * 20 + 8, true)];
|
|
2980
|
-
const
|
|
2980
|
+
const dist2 = view.getFloat32(i * 20 + 12, true);
|
|
2981
2981
|
const type = view.getInt32(i * 20 + 16, true);
|
|
2982
|
-
planes.push({ normal, dist, type });
|
|
2982
|
+
planes.push({ normal, dist: dist2, type });
|
|
2983
2983
|
}
|
|
2984
2984
|
return planes;
|
|
2985
2985
|
}
|
|
@@ -3270,11 +3270,11 @@ function createFaceLightmap(face, lightMaps, info) {
|
|
|
3270
3270
|
return void 0;
|
|
3271
3271
|
}
|
|
3272
3272
|
const available = lightMaps.byteLength - face.lightOffset;
|
|
3273
|
-
const
|
|
3274
|
-
if (
|
|
3273
|
+
const length2 = Math.min(info?.length ?? available, available);
|
|
3274
|
+
if (length2 <= 0) {
|
|
3275
3275
|
return void 0;
|
|
3276
3276
|
}
|
|
3277
|
-
return lightMaps.subarray(face.lightOffset, face.lightOffset +
|
|
3277
|
+
return lightMaps.subarray(face.lightOffset, face.lightOffset + length2);
|
|
3278
3278
|
}
|
|
3279
3279
|
|
|
3280
3280
|
// src/assets/md2.ts
|
|
@@ -3457,9 +3457,9 @@ var Md2Loader = class {
|
|
|
3457
3457
|
return this.cache.get(path);
|
|
3458
3458
|
}
|
|
3459
3459
|
const bytes = await this.vfs.readFile(path);
|
|
3460
|
-
const
|
|
3461
|
-
|
|
3462
|
-
const model = parseMd2(
|
|
3460
|
+
const copy3 = new Uint8Array(bytes.byteLength);
|
|
3461
|
+
copy3.set(bytes);
|
|
3462
|
+
const model = parseMd2(copy3.buffer);
|
|
3463
3463
|
this.cache.set(path, model);
|
|
3464
3464
|
return model;
|
|
3465
3465
|
}
|
|
@@ -3476,9 +3476,9 @@ function readCString2(view, offset, maxLength) {
|
|
|
3476
3476
|
}
|
|
3477
3477
|
return String.fromCharCode(...chars);
|
|
3478
3478
|
}
|
|
3479
|
-
function validateSection(buffer, offset,
|
|
3480
|
-
if (
|
|
3481
|
-
if (offset < HEADER_SIZE4 || offset +
|
|
3479
|
+
function validateSection(buffer, offset, length2, label) {
|
|
3480
|
+
if (length2 === 0) return;
|
|
3481
|
+
if (offset < HEADER_SIZE4 || offset + length2 > buffer.byteLength) {
|
|
3482
3482
|
throw new Md2ParseError(`${label} section is out of bounds`);
|
|
3483
3483
|
}
|
|
3484
3484
|
}
|
|
@@ -3576,8 +3576,8 @@ function parseFrames(buffer, header) {
|
|
|
3576
3576
|
for (let i = 0; i < header.numFrames; i += 1) {
|
|
3577
3577
|
const base = header.offsetFrames + i * header.frameSize;
|
|
3578
3578
|
const view = new DataView(buffer, base, header.frameSize);
|
|
3579
|
-
const
|
|
3580
|
-
const
|
|
3579
|
+
const scale3 = { x: view.getFloat32(0, true), y: view.getFloat32(4, true), z: view.getFloat32(8, true) };
|
|
3580
|
+
const translate2 = {
|
|
3581
3581
|
x: view.getFloat32(12, true),
|
|
3582
3582
|
y: view.getFloat32(16, true),
|
|
3583
3583
|
z: view.getFloat32(20, true)
|
|
@@ -3588,9 +3588,9 @@ function parseFrames(buffer, header) {
|
|
|
3588
3588
|
let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
|
|
3589
3589
|
for (let v = 0; v < header.numVertices; v += 1) {
|
|
3590
3590
|
const offset = 40 + v * 4;
|
|
3591
|
-
const x = view.getUint8(offset) *
|
|
3592
|
-
const y = view.getUint8(offset + 1) *
|
|
3593
|
-
const z = view.getUint8(offset + 2) *
|
|
3591
|
+
const x = view.getUint8(offset) * scale3.x + translate2.x;
|
|
3592
|
+
const y = view.getUint8(offset + 1) * scale3.y + translate2.y;
|
|
3593
|
+
const z = view.getUint8(offset + 2) * scale3.z + translate2.z;
|
|
3594
3594
|
if (x < minX) minX = x;
|
|
3595
3595
|
if (y < minY) minY = y;
|
|
3596
3596
|
if (z < minZ) minZ = z;
|
|
@@ -3689,8 +3689,8 @@ var Md3ParseError = class extends Error {
|
|
|
3689
3689
|
this.name = "Md3ParseError";
|
|
3690
3690
|
}
|
|
3691
3691
|
};
|
|
3692
|
-
function readString(view, offset,
|
|
3693
|
-
const bytes = new Uint8Array(view.buffer, view.byteOffset + offset,
|
|
3692
|
+
function readString(view, offset, length2) {
|
|
3693
|
+
const bytes = new Uint8Array(view.buffer, view.byteOffset + offset, length2);
|
|
3694
3694
|
const decoded = new TextDecoder("utf-8").decode(bytes);
|
|
3695
3695
|
return decoded.replace(/\0.*$/, "").trim();
|
|
3696
3696
|
}
|
|
@@ -3980,9 +3980,9 @@ var SpriteLoader = class {
|
|
|
3980
3980
|
}
|
|
3981
3981
|
async load(path) {
|
|
3982
3982
|
const bytes = await this.vfs.readFile(path);
|
|
3983
|
-
const
|
|
3984
|
-
|
|
3985
|
-
return parseSprite(
|
|
3983
|
+
const copy3 = new Uint8Array(bytes.byteLength);
|
|
3984
|
+
copy3.set(bytes);
|
|
3985
|
+
return parseSprite(copy3.buffer);
|
|
3986
3986
|
}
|
|
3987
3987
|
};
|
|
3988
3988
|
|
|
@@ -4010,8 +4010,8 @@ function computeFrameBlend(state) {
|
|
|
4010
4010
|
const baseFrame = Math.floor(normalizedPosition);
|
|
4011
4011
|
const frame0 = state.sequence.start + baseFrame;
|
|
4012
4012
|
const frame1 = baseFrame + 1 >= totalFrames ? loop ? state.sequence.start : state.sequence.end : frame0 + 1;
|
|
4013
|
-
const
|
|
4014
|
-
return { frame0, frame1, lerp:
|
|
4013
|
+
const lerp4 = !loop && baseFrame >= totalFrames - 1 ? 0 : normalizedPosition - baseFrame;
|
|
4014
|
+
return { frame0, frame1, lerp: lerp4 };
|
|
4015
4015
|
}
|
|
4016
4016
|
function createAnimationState(sequence) {
|
|
4017
4017
|
return { sequence, time: 0 };
|
|
@@ -4326,8 +4326,8 @@ var WavParseError = class extends Error {
|
|
|
4326
4326
|
this.name = "WavParseError";
|
|
4327
4327
|
}
|
|
4328
4328
|
};
|
|
4329
|
-
function readString2(view, offset,
|
|
4330
|
-
return new TextDecoder("ascii").decode(new Uint8Array(view.buffer, view.byteOffset + offset,
|
|
4329
|
+
function readString2(view, offset, length2) {
|
|
4330
|
+
return new TextDecoder("ascii").decode(new Uint8Array(view.buffer, view.byteOffset + offset, length2));
|
|
4331
4331
|
}
|
|
4332
4332
|
function parseWav(buffer) {
|
|
4333
4333
|
if (buffer.byteLength < 44) {
|
|
@@ -5071,8 +5071,8 @@ var SoundPrecache = class {
|
|
|
5071
5071
|
continue;
|
|
5072
5072
|
}
|
|
5073
5073
|
const bytes = await this.vfs.readFile(path);
|
|
5074
|
-
const
|
|
5075
|
-
const buffer = await this.decodeAudio(context,
|
|
5074
|
+
const copy3 = bytes.slice().buffer;
|
|
5075
|
+
const buffer = await this.decodeAudio(context, copy3);
|
|
5076
5076
|
this.registry.register(path, buffer);
|
|
5077
5077
|
report.loaded.push(path);
|
|
5078
5078
|
} catch (error) {
|
|
@@ -5401,22 +5401,22 @@ var AudioSystem = class {
|
|
|
5401
5401
|
active.gain.gain.value = active.baseGain * occlusionScale * playbackRateMute;
|
|
5402
5402
|
}
|
|
5403
5403
|
applyOcclusion(active, occlusion) {
|
|
5404
|
-
const
|
|
5404
|
+
const scale3 = clamp01(occlusion?.gainScale ?? 1);
|
|
5405
5405
|
const playbackRateMute = Math.abs(this.playbackRate - 1) < 1e-3 ? 1 : 0;
|
|
5406
|
-
active.gain.gain.value = active.baseGain *
|
|
5406
|
+
active.gain.gain.value = active.baseGain * scale3 * playbackRateMute;
|
|
5407
5407
|
if (active.occlusion?.filter) {
|
|
5408
5408
|
const cutoff = occlusion?.lowpassHz ?? 2e4;
|
|
5409
5409
|
active.occlusion.filter.frequency.value = clamp(cutoff, 10, 2e4);
|
|
5410
5410
|
}
|
|
5411
5411
|
if (active.occlusion) {
|
|
5412
|
-
active.occlusion.scale =
|
|
5412
|
+
active.occlusion.scale = scale3;
|
|
5413
5413
|
active.occlusion.lowpassHz = occlusion?.lowpassHz;
|
|
5414
5414
|
} else if (occlusion) {
|
|
5415
|
-
active.occlusion = { scale, lowpassHz: occlusion.lowpassHz };
|
|
5415
|
+
active.occlusion = { scale: scale3, lowpassHz: occlusion.lowpassHz };
|
|
5416
5416
|
}
|
|
5417
5417
|
}
|
|
5418
5418
|
};
|
|
5419
|
-
var clamp = (value,
|
|
5419
|
+
var clamp = (value, min2, max2) => Math.min(max2, Math.max(min2, value));
|
|
5420
5420
|
var clamp01 = (value) => clamp(value, 0, 1);
|
|
5421
5421
|
|
|
5422
5422
|
// src/audio/occlusion.ts
|
|
@@ -5424,9 +5424,9 @@ var AudioOcclusion = class {
|
|
|
5424
5424
|
constructor(trace) {
|
|
5425
5425
|
this.trace = trace;
|
|
5426
5426
|
this.resolve = (listener, source, attenuation) => {
|
|
5427
|
-
const
|
|
5427
|
+
const dist2 = lengthVec3(subtractVec3(source, listener.origin));
|
|
5428
5428
|
const maxDist = calculateMaxAudibleDistance(attenuation);
|
|
5429
|
-
const clampedDist = Math.min(
|
|
5429
|
+
const clampedDist = Math.min(dist2, maxDist);
|
|
5430
5430
|
const distanceFactor = clampedDist / Math.max(1, maxDist);
|
|
5431
5431
|
const distanceCutoff = 2e4 * (1 - distanceFactor * 0.9);
|
|
5432
5432
|
const tr = this.trace(listener.origin, source, void 0, void 0);
|
|
@@ -6197,15 +6197,15 @@ function buildBspGeometry(gl, surfaces, map, options = {}) {
|
|
|
6197
6197
|
|
|
6198
6198
|
// src/render/culling.ts
|
|
6199
6199
|
function normalizePlane(plane) {
|
|
6200
|
-
const { normal, distance } = plane;
|
|
6201
|
-
const
|
|
6202
|
-
if (
|
|
6200
|
+
const { normal, distance: distance2 } = plane;
|
|
6201
|
+
const length2 = Math.sqrt(normal.x * normal.x + normal.y * normal.y + normal.z * normal.z);
|
|
6202
|
+
if (length2 === 0) {
|
|
6203
6203
|
return plane;
|
|
6204
6204
|
}
|
|
6205
|
-
const inv = 1 /
|
|
6205
|
+
const inv = 1 / length2;
|
|
6206
6206
|
return {
|
|
6207
6207
|
normal: { x: normal.x * inv, y: normal.y * inv, z: normal.z * inv },
|
|
6208
|
-
distance:
|
|
6208
|
+
distance: distance2 * inv
|
|
6209
6209
|
};
|
|
6210
6210
|
}
|
|
6211
6211
|
function extractFrustumPlanes(matrix) {
|
|
@@ -6295,8 +6295,8 @@ function findLeafForPoint(map, point) {
|
|
|
6295
6295
|
while (nodeIndex >= 0) {
|
|
6296
6296
|
const node = map.nodes[nodeIndex];
|
|
6297
6297
|
const plane = map.planes[node.planeIndex];
|
|
6298
|
-
const
|
|
6299
|
-
const side =
|
|
6298
|
+
const dist2 = distanceToPlane(plane, point);
|
|
6299
|
+
const side = dist2 >= 0 ? 0 : 1;
|
|
6300
6300
|
const child = node.children[side];
|
|
6301
6301
|
if (childIsLeaf(child)) {
|
|
6302
6302
|
return childLeafIndex(child);
|
|
@@ -6313,14 +6313,14 @@ function collectFacesFromLeaf(map, leafIndex) {
|
|
|
6313
6313
|
}
|
|
6314
6314
|
return faces;
|
|
6315
6315
|
}
|
|
6316
|
-
function traverse(map, nodeIndex, camera,
|
|
6316
|
+
function traverse(map, nodeIndex, camera, frustum2, viewCluster, visibleFaces, visitedFaces) {
|
|
6317
6317
|
if (childIsLeaf(nodeIndex)) {
|
|
6318
6318
|
const leafIndex = childLeafIndex(nodeIndex);
|
|
6319
6319
|
const leaf = map.leafs[leafIndex];
|
|
6320
6320
|
if (!isClusterVisible(map.visibility, viewCluster, leaf.cluster)) {
|
|
6321
6321
|
return;
|
|
6322
6322
|
}
|
|
6323
|
-
if (!leafIntersectsFrustum(leaf,
|
|
6323
|
+
if (!leafIntersectsFrustum(leaf, frustum2)) {
|
|
6324
6324
|
return;
|
|
6325
6325
|
}
|
|
6326
6326
|
const center = {
|
|
@@ -6343,24 +6343,24 @@ function traverse(map, nodeIndex, camera, frustum, viewCluster, visibleFaces, vi
|
|
|
6343
6343
|
}
|
|
6344
6344
|
const node = map.nodes[nodeIndex];
|
|
6345
6345
|
const plane = map.planes[node.planeIndex];
|
|
6346
|
-
const
|
|
6347
|
-
const nearChild =
|
|
6348
|
-
const farChild =
|
|
6346
|
+
const dist2 = distanceToPlane(plane, camera);
|
|
6347
|
+
const nearChild = dist2 >= 0 ? node.children[0] : node.children[1];
|
|
6348
|
+
const farChild = dist2 >= 0 ? node.children[1] : node.children[0];
|
|
6349
6349
|
if (boxIntersectsFrustum(
|
|
6350
6350
|
{ x: node.mins[0], y: node.mins[1], z: node.mins[2] },
|
|
6351
6351
|
{ x: node.maxs[0], y: node.maxs[1], z: node.maxs[2] },
|
|
6352
|
-
|
|
6352
|
+
frustum2
|
|
6353
6353
|
)) {
|
|
6354
|
-
traverse(map, nearChild, camera,
|
|
6355
|
-
traverse(map, farChild, camera,
|
|
6354
|
+
traverse(map, nearChild, camera, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6355
|
+
traverse(map, farChild, camera, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6356
6356
|
}
|
|
6357
6357
|
}
|
|
6358
|
-
function gatherVisibleFaces(map, cameraPosition,
|
|
6358
|
+
function gatherVisibleFaces(map, cameraPosition, frustum2) {
|
|
6359
6359
|
const viewLeaf = findLeafForPoint(map, cameraPosition);
|
|
6360
6360
|
const viewCluster = viewLeaf >= 0 ? map.leafs[viewLeaf].cluster : -1;
|
|
6361
6361
|
const visibleFaces = [];
|
|
6362
6362
|
const visitedFaces = /* @__PURE__ */ new Set();
|
|
6363
|
-
traverse(map, 0, cameraPosition,
|
|
6363
|
+
traverse(map, 0, cameraPosition, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6364
6364
|
return visibleFaces;
|
|
6365
6365
|
}
|
|
6366
6366
|
|
|
@@ -7205,7 +7205,7 @@ function buildMd2Geometry(model) {
|
|
|
7205
7205
|
return { vertices, indices: new Uint16Array(indices) };
|
|
7206
7206
|
}
|
|
7207
7207
|
function buildMd2VertexData(model, geometry, blend) {
|
|
7208
|
-
const { frame0, frame1, lerp:
|
|
7208
|
+
const { frame0, frame1, lerp: lerp4 } = blend;
|
|
7209
7209
|
const frameA = model.frames[frame0];
|
|
7210
7210
|
const frameB = model.frames[frame1];
|
|
7211
7211
|
if (!frameA || !frameB) {
|
|
@@ -7218,8 +7218,8 @@ function buildMd2VertexData(model, geometry, blend) {
|
|
|
7218
7218
|
if (!vA || !vB) {
|
|
7219
7219
|
throw new Error("MD2 vertex index out of range for frame");
|
|
7220
7220
|
}
|
|
7221
|
-
const position = lerpVec3(vA.position, vB.position,
|
|
7222
|
-
const normal = normalizeVec32(lerpVec3(vA.normal, vB.normal,
|
|
7221
|
+
const position = lerpVec3(vA.position, vB.position, lerp4);
|
|
7222
|
+
const normal = normalizeVec32(lerpVec3(vA.normal, vB.normal, lerp4));
|
|
7223
7223
|
const base = index * 8;
|
|
7224
7224
|
data[base] = position.x;
|
|
7225
7225
|
data[base + 1] = position.y;
|
|
@@ -7375,32 +7375,1754 @@ var Md2Pipeline = class {
|
|
|
7375
7375
|
}
|
|
7376
7376
|
};
|
|
7377
7377
|
|
|
7378
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/common.js
|
|
7379
|
+
var EPSILON = 1e-6;
|
|
7380
|
+
var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
|
7381
|
+
var RANDOM = Math.random;
|
|
7382
|
+
function round(a) {
|
|
7383
|
+
if (a >= 0) return Math.round(a);
|
|
7384
|
+
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
|
7385
|
+
}
|
|
7386
|
+
var degree = Math.PI / 180;
|
|
7387
|
+
var radian = 180 / Math.PI;
|
|
7388
|
+
|
|
7389
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/mat4.js
|
|
7390
|
+
var mat4_exports = {};
|
|
7391
|
+
__export(mat4_exports, {
|
|
7392
|
+
add: () => add,
|
|
7393
|
+
adjoint: () => adjoint,
|
|
7394
|
+
clone: () => clone,
|
|
7395
|
+
copy: () => copy,
|
|
7396
|
+
create: () => create,
|
|
7397
|
+
decompose: () => decompose,
|
|
7398
|
+
determinant: () => determinant,
|
|
7399
|
+
equals: () => equals,
|
|
7400
|
+
exactEquals: () => exactEquals,
|
|
7401
|
+
frob: () => frob,
|
|
7402
|
+
fromQuat: () => fromQuat,
|
|
7403
|
+
fromQuat2: () => fromQuat2,
|
|
7404
|
+
fromRotation: () => fromRotation,
|
|
7405
|
+
fromRotationTranslation: () => fromRotationTranslation,
|
|
7406
|
+
fromRotationTranslationScale: () => fromRotationTranslationScale,
|
|
7407
|
+
fromRotationTranslationScaleOrigin: () => fromRotationTranslationScaleOrigin,
|
|
7408
|
+
fromScaling: () => fromScaling,
|
|
7409
|
+
fromTranslation: () => fromTranslation,
|
|
7410
|
+
fromValues: () => fromValues,
|
|
7411
|
+
fromXRotation: () => fromXRotation,
|
|
7412
|
+
fromYRotation: () => fromYRotation,
|
|
7413
|
+
fromZRotation: () => fromZRotation,
|
|
7414
|
+
frustum: () => frustum,
|
|
7415
|
+
getRotation: () => getRotation,
|
|
7416
|
+
getScaling: () => getScaling,
|
|
7417
|
+
getTranslation: () => getTranslation,
|
|
7418
|
+
identity: () => identity,
|
|
7419
|
+
invert: () => invert,
|
|
7420
|
+
lookAt: () => lookAt,
|
|
7421
|
+
mul: () => mul,
|
|
7422
|
+
multiply: () => multiply,
|
|
7423
|
+
multiplyScalar: () => multiplyScalar,
|
|
7424
|
+
multiplyScalarAndAdd: () => multiplyScalarAndAdd,
|
|
7425
|
+
ortho: () => ortho,
|
|
7426
|
+
orthoNO: () => orthoNO,
|
|
7427
|
+
orthoZO: () => orthoZO,
|
|
7428
|
+
perspective: () => perspective,
|
|
7429
|
+
perspectiveFromFieldOfView: () => perspectiveFromFieldOfView,
|
|
7430
|
+
perspectiveNO: () => perspectiveNO,
|
|
7431
|
+
perspectiveZO: () => perspectiveZO,
|
|
7432
|
+
rotate: () => rotate,
|
|
7433
|
+
rotateX: () => rotateX,
|
|
7434
|
+
rotateY: () => rotateY,
|
|
7435
|
+
rotateZ: () => rotateZ,
|
|
7436
|
+
scale: () => scale,
|
|
7437
|
+
set: () => set,
|
|
7438
|
+
str: () => str,
|
|
7439
|
+
sub: () => sub,
|
|
7440
|
+
subtract: () => subtract,
|
|
7441
|
+
targetTo: () => targetTo,
|
|
7442
|
+
translate: () => translate,
|
|
7443
|
+
transpose: () => transpose
|
|
7444
|
+
});
|
|
7445
|
+
function create() {
|
|
7446
|
+
var out = new ARRAY_TYPE(16);
|
|
7447
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
7448
|
+
out[1] = 0;
|
|
7449
|
+
out[2] = 0;
|
|
7450
|
+
out[3] = 0;
|
|
7451
|
+
out[4] = 0;
|
|
7452
|
+
out[6] = 0;
|
|
7453
|
+
out[7] = 0;
|
|
7454
|
+
out[8] = 0;
|
|
7455
|
+
out[9] = 0;
|
|
7456
|
+
out[11] = 0;
|
|
7457
|
+
out[12] = 0;
|
|
7458
|
+
out[13] = 0;
|
|
7459
|
+
out[14] = 0;
|
|
7460
|
+
}
|
|
7461
|
+
out[0] = 1;
|
|
7462
|
+
out[5] = 1;
|
|
7463
|
+
out[10] = 1;
|
|
7464
|
+
out[15] = 1;
|
|
7465
|
+
return out;
|
|
7466
|
+
}
|
|
7467
|
+
function clone(a) {
|
|
7468
|
+
var out = new ARRAY_TYPE(16);
|
|
7469
|
+
out[0] = a[0];
|
|
7470
|
+
out[1] = a[1];
|
|
7471
|
+
out[2] = a[2];
|
|
7472
|
+
out[3] = a[3];
|
|
7473
|
+
out[4] = a[4];
|
|
7474
|
+
out[5] = a[5];
|
|
7475
|
+
out[6] = a[6];
|
|
7476
|
+
out[7] = a[7];
|
|
7477
|
+
out[8] = a[8];
|
|
7478
|
+
out[9] = a[9];
|
|
7479
|
+
out[10] = a[10];
|
|
7480
|
+
out[11] = a[11];
|
|
7481
|
+
out[12] = a[12];
|
|
7482
|
+
out[13] = a[13];
|
|
7483
|
+
out[14] = a[14];
|
|
7484
|
+
out[15] = a[15];
|
|
7485
|
+
return out;
|
|
7486
|
+
}
|
|
7487
|
+
function copy(out, a) {
|
|
7488
|
+
out[0] = a[0];
|
|
7489
|
+
out[1] = a[1];
|
|
7490
|
+
out[2] = a[2];
|
|
7491
|
+
out[3] = a[3];
|
|
7492
|
+
out[4] = a[4];
|
|
7493
|
+
out[5] = a[5];
|
|
7494
|
+
out[6] = a[6];
|
|
7495
|
+
out[7] = a[7];
|
|
7496
|
+
out[8] = a[8];
|
|
7497
|
+
out[9] = a[9];
|
|
7498
|
+
out[10] = a[10];
|
|
7499
|
+
out[11] = a[11];
|
|
7500
|
+
out[12] = a[12];
|
|
7501
|
+
out[13] = a[13];
|
|
7502
|
+
out[14] = a[14];
|
|
7503
|
+
out[15] = a[15];
|
|
7504
|
+
return out;
|
|
7505
|
+
}
|
|
7506
|
+
function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
7507
|
+
var out = new ARRAY_TYPE(16);
|
|
7508
|
+
out[0] = m00;
|
|
7509
|
+
out[1] = m01;
|
|
7510
|
+
out[2] = m02;
|
|
7511
|
+
out[3] = m03;
|
|
7512
|
+
out[4] = m10;
|
|
7513
|
+
out[5] = m11;
|
|
7514
|
+
out[6] = m12;
|
|
7515
|
+
out[7] = m13;
|
|
7516
|
+
out[8] = m20;
|
|
7517
|
+
out[9] = m21;
|
|
7518
|
+
out[10] = m22;
|
|
7519
|
+
out[11] = m23;
|
|
7520
|
+
out[12] = m30;
|
|
7521
|
+
out[13] = m31;
|
|
7522
|
+
out[14] = m32;
|
|
7523
|
+
out[15] = m33;
|
|
7524
|
+
return out;
|
|
7525
|
+
}
|
|
7526
|
+
function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
7527
|
+
out[0] = m00;
|
|
7528
|
+
out[1] = m01;
|
|
7529
|
+
out[2] = m02;
|
|
7530
|
+
out[3] = m03;
|
|
7531
|
+
out[4] = m10;
|
|
7532
|
+
out[5] = m11;
|
|
7533
|
+
out[6] = m12;
|
|
7534
|
+
out[7] = m13;
|
|
7535
|
+
out[8] = m20;
|
|
7536
|
+
out[9] = m21;
|
|
7537
|
+
out[10] = m22;
|
|
7538
|
+
out[11] = m23;
|
|
7539
|
+
out[12] = m30;
|
|
7540
|
+
out[13] = m31;
|
|
7541
|
+
out[14] = m32;
|
|
7542
|
+
out[15] = m33;
|
|
7543
|
+
return out;
|
|
7544
|
+
}
|
|
7545
|
+
function identity(out) {
|
|
7546
|
+
out[0] = 1;
|
|
7547
|
+
out[1] = 0;
|
|
7548
|
+
out[2] = 0;
|
|
7549
|
+
out[3] = 0;
|
|
7550
|
+
out[4] = 0;
|
|
7551
|
+
out[5] = 1;
|
|
7552
|
+
out[6] = 0;
|
|
7553
|
+
out[7] = 0;
|
|
7554
|
+
out[8] = 0;
|
|
7555
|
+
out[9] = 0;
|
|
7556
|
+
out[10] = 1;
|
|
7557
|
+
out[11] = 0;
|
|
7558
|
+
out[12] = 0;
|
|
7559
|
+
out[13] = 0;
|
|
7560
|
+
out[14] = 0;
|
|
7561
|
+
out[15] = 1;
|
|
7562
|
+
return out;
|
|
7563
|
+
}
|
|
7564
|
+
function transpose(out, a) {
|
|
7565
|
+
if (out === a) {
|
|
7566
|
+
var a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7567
|
+
var a12 = a[6], a13 = a[7];
|
|
7568
|
+
var a23 = a[11];
|
|
7569
|
+
out[1] = a[4];
|
|
7570
|
+
out[2] = a[8];
|
|
7571
|
+
out[3] = a[12];
|
|
7572
|
+
out[4] = a01;
|
|
7573
|
+
out[6] = a[9];
|
|
7574
|
+
out[7] = a[13];
|
|
7575
|
+
out[8] = a02;
|
|
7576
|
+
out[9] = a12;
|
|
7577
|
+
out[11] = a[14];
|
|
7578
|
+
out[12] = a03;
|
|
7579
|
+
out[13] = a13;
|
|
7580
|
+
out[14] = a23;
|
|
7581
|
+
} else {
|
|
7582
|
+
out[0] = a[0];
|
|
7583
|
+
out[1] = a[4];
|
|
7584
|
+
out[2] = a[8];
|
|
7585
|
+
out[3] = a[12];
|
|
7586
|
+
out[4] = a[1];
|
|
7587
|
+
out[5] = a[5];
|
|
7588
|
+
out[6] = a[9];
|
|
7589
|
+
out[7] = a[13];
|
|
7590
|
+
out[8] = a[2];
|
|
7591
|
+
out[9] = a[6];
|
|
7592
|
+
out[10] = a[10];
|
|
7593
|
+
out[11] = a[14];
|
|
7594
|
+
out[12] = a[3];
|
|
7595
|
+
out[13] = a[7];
|
|
7596
|
+
out[14] = a[11];
|
|
7597
|
+
out[15] = a[15];
|
|
7598
|
+
}
|
|
7599
|
+
return out;
|
|
7600
|
+
}
|
|
7601
|
+
function invert(out, a) {
|
|
7602
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7603
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7604
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7605
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7606
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
7607
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
7608
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
7609
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
7610
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
7611
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
7612
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
7613
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
7614
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
7615
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
7616
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
7617
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
7618
|
+
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
7619
|
+
if (!det) {
|
|
7620
|
+
return null;
|
|
7621
|
+
}
|
|
7622
|
+
det = 1 / det;
|
|
7623
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
7624
|
+
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
7625
|
+
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
7626
|
+
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
|
|
7627
|
+
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
7628
|
+
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
7629
|
+
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
7630
|
+
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
|
|
7631
|
+
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
7632
|
+
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
7633
|
+
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
7634
|
+
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
|
|
7635
|
+
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
|
|
7636
|
+
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
|
|
7637
|
+
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
|
|
7638
|
+
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
|
|
7639
|
+
return out;
|
|
7640
|
+
}
|
|
7641
|
+
function adjoint(out, a) {
|
|
7642
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7643
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7644
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7645
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7646
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
7647
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
7648
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
7649
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
7650
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
7651
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
7652
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
7653
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
7654
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
7655
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
7656
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
7657
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
7658
|
+
out[0] = a11 * b11 - a12 * b10 + a13 * b09;
|
|
7659
|
+
out[1] = a02 * b10 - a01 * b11 - a03 * b09;
|
|
7660
|
+
out[2] = a31 * b05 - a32 * b04 + a33 * b03;
|
|
7661
|
+
out[3] = a22 * b04 - a21 * b05 - a23 * b03;
|
|
7662
|
+
out[4] = a12 * b08 - a10 * b11 - a13 * b07;
|
|
7663
|
+
out[5] = a00 * b11 - a02 * b08 + a03 * b07;
|
|
7664
|
+
out[6] = a32 * b02 - a30 * b05 - a33 * b01;
|
|
7665
|
+
out[7] = a20 * b05 - a22 * b02 + a23 * b01;
|
|
7666
|
+
out[8] = a10 * b10 - a11 * b08 + a13 * b06;
|
|
7667
|
+
out[9] = a01 * b08 - a00 * b10 - a03 * b06;
|
|
7668
|
+
out[10] = a30 * b04 - a31 * b02 + a33 * b00;
|
|
7669
|
+
out[11] = a21 * b02 - a20 * b04 - a23 * b00;
|
|
7670
|
+
out[12] = a11 * b07 - a10 * b09 - a12 * b06;
|
|
7671
|
+
out[13] = a00 * b09 - a01 * b07 + a02 * b06;
|
|
7672
|
+
out[14] = a31 * b01 - a30 * b03 - a32 * b00;
|
|
7673
|
+
out[15] = a20 * b03 - a21 * b01 + a22 * b00;
|
|
7674
|
+
return out;
|
|
7675
|
+
}
|
|
7676
|
+
function determinant(a) {
|
|
7677
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7678
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7679
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7680
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7681
|
+
var b0 = a00 * a11 - a01 * a10;
|
|
7682
|
+
var b1 = a00 * a12 - a02 * a10;
|
|
7683
|
+
var b2 = a01 * a12 - a02 * a11;
|
|
7684
|
+
var b3 = a20 * a31 - a21 * a30;
|
|
7685
|
+
var b4 = a20 * a32 - a22 * a30;
|
|
7686
|
+
var b5 = a21 * a32 - a22 * a31;
|
|
7687
|
+
var b6 = a00 * b5 - a01 * b4 + a02 * b3;
|
|
7688
|
+
var b7 = a10 * b5 - a11 * b4 + a12 * b3;
|
|
7689
|
+
var b8 = a20 * b2 - a21 * b1 + a22 * b0;
|
|
7690
|
+
var b9 = a30 * b2 - a31 * b1 + a32 * b0;
|
|
7691
|
+
return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
|
|
7692
|
+
}
|
|
7693
|
+
function multiply(out, a, b) {
|
|
7694
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7695
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7696
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7697
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7698
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
7699
|
+
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7700
|
+
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7701
|
+
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7702
|
+
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7703
|
+
b0 = b[4];
|
|
7704
|
+
b1 = b[5];
|
|
7705
|
+
b2 = b[6];
|
|
7706
|
+
b3 = b[7];
|
|
7707
|
+
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7708
|
+
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7709
|
+
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7710
|
+
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7711
|
+
b0 = b[8];
|
|
7712
|
+
b1 = b[9];
|
|
7713
|
+
b2 = b[10];
|
|
7714
|
+
b3 = b[11];
|
|
7715
|
+
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7716
|
+
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7717
|
+
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7718
|
+
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7719
|
+
b0 = b[12];
|
|
7720
|
+
b1 = b[13];
|
|
7721
|
+
b2 = b[14];
|
|
7722
|
+
b3 = b[15];
|
|
7723
|
+
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7724
|
+
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7725
|
+
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7726
|
+
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7727
|
+
return out;
|
|
7728
|
+
}
|
|
7729
|
+
function translate(out, a, v) {
|
|
7730
|
+
var x = v[0], y = v[1], z = v[2];
|
|
7731
|
+
var a00, a01, a02, a03;
|
|
7732
|
+
var a10, a11, a12, a13;
|
|
7733
|
+
var a20, a21, a22, a23;
|
|
7734
|
+
if (a === out) {
|
|
7735
|
+
out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
|
|
7736
|
+
out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
|
|
7737
|
+
out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
|
|
7738
|
+
out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
|
|
7739
|
+
} else {
|
|
7740
|
+
a00 = a[0];
|
|
7741
|
+
a01 = a[1];
|
|
7742
|
+
a02 = a[2];
|
|
7743
|
+
a03 = a[3];
|
|
7744
|
+
a10 = a[4];
|
|
7745
|
+
a11 = a[5];
|
|
7746
|
+
a12 = a[6];
|
|
7747
|
+
a13 = a[7];
|
|
7748
|
+
a20 = a[8];
|
|
7749
|
+
a21 = a[9];
|
|
7750
|
+
a22 = a[10];
|
|
7751
|
+
a23 = a[11];
|
|
7752
|
+
out[0] = a00;
|
|
7753
|
+
out[1] = a01;
|
|
7754
|
+
out[2] = a02;
|
|
7755
|
+
out[3] = a03;
|
|
7756
|
+
out[4] = a10;
|
|
7757
|
+
out[5] = a11;
|
|
7758
|
+
out[6] = a12;
|
|
7759
|
+
out[7] = a13;
|
|
7760
|
+
out[8] = a20;
|
|
7761
|
+
out[9] = a21;
|
|
7762
|
+
out[10] = a22;
|
|
7763
|
+
out[11] = a23;
|
|
7764
|
+
out[12] = a00 * x + a10 * y + a20 * z + a[12];
|
|
7765
|
+
out[13] = a01 * x + a11 * y + a21 * z + a[13];
|
|
7766
|
+
out[14] = a02 * x + a12 * y + a22 * z + a[14];
|
|
7767
|
+
out[15] = a03 * x + a13 * y + a23 * z + a[15];
|
|
7768
|
+
}
|
|
7769
|
+
return out;
|
|
7770
|
+
}
|
|
7771
|
+
function scale(out, a, v) {
|
|
7772
|
+
var x = v[0], y = v[1], z = v[2];
|
|
7773
|
+
out[0] = a[0] * x;
|
|
7774
|
+
out[1] = a[1] * x;
|
|
7775
|
+
out[2] = a[2] * x;
|
|
7776
|
+
out[3] = a[3] * x;
|
|
7777
|
+
out[4] = a[4] * y;
|
|
7778
|
+
out[5] = a[5] * y;
|
|
7779
|
+
out[6] = a[6] * y;
|
|
7780
|
+
out[7] = a[7] * y;
|
|
7781
|
+
out[8] = a[8] * z;
|
|
7782
|
+
out[9] = a[9] * z;
|
|
7783
|
+
out[10] = a[10] * z;
|
|
7784
|
+
out[11] = a[11] * z;
|
|
7785
|
+
out[12] = a[12];
|
|
7786
|
+
out[13] = a[13];
|
|
7787
|
+
out[14] = a[14];
|
|
7788
|
+
out[15] = a[15];
|
|
7789
|
+
return out;
|
|
7790
|
+
}
|
|
7791
|
+
function rotate(out, a, rad, axis) {
|
|
7792
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
7793
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
7794
|
+
var s, c, t;
|
|
7795
|
+
var a00, a01, a02, a03;
|
|
7796
|
+
var a10, a11, a12, a13;
|
|
7797
|
+
var a20, a21, a22, a23;
|
|
7798
|
+
var b00, b01, b02;
|
|
7799
|
+
var b10, b11, b12;
|
|
7800
|
+
var b20, b21, b22;
|
|
7801
|
+
if (len2 < EPSILON) {
|
|
7802
|
+
return null;
|
|
7803
|
+
}
|
|
7804
|
+
len2 = 1 / len2;
|
|
7805
|
+
x *= len2;
|
|
7806
|
+
y *= len2;
|
|
7807
|
+
z *= len2;
|
|
7808
|
+
s = Math.sin(rad);
|
|
7809
|
+
c = Math.cos(rad);
|
|
7810
|
+
t = 1 - c;
|
|
7811
|
+
a00 = a[0];
|
|
7812
|
+
a01 = a[1];
|
|
7813
|
+
a02 = a[2];
|
|
7814
|
+
a03 = a[3];
|
|
7815
|
+
a10 = a[4];
|
|
7816
|
+
a11 = a[5];
|
|
7817
|
+
a12 = a[6];
|
|
7818
|
+
a13 = a[7];
|
|
7819
|
+
a20 = a[8];
|
|
7820
|
+
a21 = a[9];
|
|
7821
|
+
a22 = a[10];
|
|
7822
|
+
a23 = a[11];
|
|
7823
|
+
b00 = x * x * t + c;
|
|
7824
|
+
b01 = y * x * t + z * s;
|
|
7825
|
+
b02 = z * x * t - y * s;
|
|
7826
|
+
b10 = x * y * t - z * s;
|
|
7827
|
+
b11 = y * y * t + c;
|
|
7828
|
+
b12 = z * y * t + x * s;
|
|
7829
|
+
b20 = x * z * t + y * s;
|
|
7830
|
+
b21 = y * z * t - x * s;
|
|
7831
|
+
b22 = z * z * t + c;
|
|
7832
|
+
out[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
7833
|
+
out[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
7834
|
+
out[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
7835
|
+
out[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
7836
|
+
out[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
7837
|
+
out[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
7838
|
+
out[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
7839
|
+
out[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
7840
|
+
out[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
7841
|
+
out[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
7842
|
+
out[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
7843
|
+
out[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
7844
|
+
if (a !== out) {
|
|
7845
|
+
out[12] = a[12];
|
|
7846
|
+
out[13] = a[13];
|
|
7847
|
+
out[14] = a[14];
|
|
7848
|
+
out[15] = a[15];
|
|
7849
|
+
}
|
|
7850
|
+
return out;
|
|
7851
|
+
}
|
|
7852
|
+
function rotateX(out, a, rad) {
|
|
7853
|
+
var s = Math.sin(rad);
|
|
7854
|
+
var c = Math.cos(rad);
|
|
7855
|
+
var a10 = a[4];
|
|
7856
|
+
var a11 = a[5];
|
|
7857
|
+
var a12 = a[6];
|
|
7858
|
+
var a13 = a[7];
|
|
7859
|
+
var a20 = a[8];
|
|
7860
|
+
var a21 = a[9];
|
|
7861
|
+
var a22 = a[10];
|
|
7862
|
+
var a23 = a[11];
|
|
7863
|
+
if (a !== out) {
|
|
7864
|
+
out[0] = a[0];
|
|
7865
|
+
out[1] = a[1];
|
|
7866
|
+
out[2] = a[2];
|
|
7867
|
+
out[3] = a[3];
|
|
7868
|
+
out[12] = a[12];
|
|
7869
|
+
out[13] = a[13];
|
|
7870
|
+
out[14] = a[14];
|
|
7871
|
+
out[15] = a[15];
|
|
7872
|
+
}
|
|
7873
|
+
out[4] = a10 * c + a20 * s;
|
|
7874
|
+
out[5] = a11 * c + a21 * s;
|
|
7875
|
+
out[6] = a12 * c + a22 * s;
|
|
7876
|
+
out[7] = a13 * c + a23 * s;
|
|
7877
|
+
out[8] = a20 * c - a10 * s;
|
|
7878
|
+
out[9] = a21 * c - a11 * s;
|
|
7879
|
+
out[10] = a22 * c - a12 * s;
|
|
7880
|
+
out[11] = a23 * c - a13 * s;
|
|
7881
|
+
return out;
|
|
7882
|
+
}
|
|
7883
|
+
function rotateY(out, a, rad) {
|
|
7884
|
+
var s = Math.sin(rad);
|
|
7885
|
+
var c = Math.cos(rad);
|
|
7886
|
+
var a00 = a[0];
|
|
7887
|
+
var a01 = a[1];
|
|
7888
|
+
var a02 = a[2];
|
|
7889
|
+
var a03 = a[3];
|
|
7890
|
+
var a20 = a[8];
|
|
7891
|
+
var a21 = a[9];
|
|
7892
|
+
var a22 = a[10];
|
|
7893
|
+
var a23 = a[11];
|
|
7894
|
+
if (a !== out) {
|
|
7895
|
+
out[4] = a[4];
|
|
7896
|
+
out[5] = a[5];
|
|
7897
|
+
out[6] = a[6];
|
|
7898
|
+
out[7] = a[7];
|
|
7899
|
+
out[12] = a[12];
|
|
7900
|
+
out[13] = a[13];
|
|
7901
|
+
out[14] = a[14];
|
|
7902
|
+
out[15] = a[15];
|
|
7903
|
+
}
|
|
7904
|
+
out[0] = a00 * c - a20 * s;
|
|
7905
|
+
out[1] = a01 * c - a21 * s;
|
|
7906
|
+
out[2] = a02 * c - a22 * s;
|
|
7907
|
+
out[3] = a03 * c - a23 * s;
|
|
7908
|
+
out[8] = a00 * s + a20 * c;
|
|
7909
|
+
out[9] = a01 * s + a21 * c;
|
|
7910
|
+
out[10] = a02 * s + a22 * c;
|
|
7911
|
+
out[11] = a03 * s + a23 * c;
|
|
7912
|
+
return out;
|
|
7913
|
+
}
|
|
7914
|
+
function rotateZ(out, a, rad) {
|
|
7915
|
+
var s = Math.sin(rad);
|
|
7916
|
+
var c = Math.cos(rad);
|
|
7917
|
+
var a00 = a[0];
|
|
7918
|
+
var a01 = a[1];
|
|
7919
|
+
var a02 = a[2];
|
|
7920
|
+
var a03 = a[3];
|
|
7921
|
+
var a10 = a[4];
|
|
7922
|
+
var a11 = a[5];
|
|
7923
|
+
var a12 = a[6];
|
|
7924
|
+
var a13 = a[7];
|
|
7925
|
+
if (a !== out) {
|
|
7926
|
+
out[8] = a[8];
|
|
7927
|
+
out[9] = a[9];
|
|
7928
|
+
out[10] = a[10];
|
|
7929
|
+
out[11] = a[11];
|
|
7930
|
+
out[12] = a[12];
|
|
7931
|
+
out[13] = a[13];
|
|
7932
|
+
out[14] = a[14];
|
|
7933
|
+
out[15] = a[15];
|
|
7934
|
+
}
|
|
7935
|
+
out[0] = a00 * c + a10 * s;
|
|
7936
|
+
out[1] = a01 * c + a11 * s;
|
|
7937
|
+
out[2] = a02 * c + a12 * s;
|
|
7938
|
+
out[3] = a03 * c + a13 * s;
|
|
7939
|
+
out[4] = a10 * c - a00 * s;
|
|
7940
|
+
out[5] = a11 * c - a01 * s;
|
|
7941
|
+
out[6] = a12 * c - a02 * s;
|
|
7942
|
+
out[7] = a13 * c - a03 * s;
|
|
7943
|
+
return out;
|
|
7944
|
+
}
|
|
7945
|
+
function fromTranslation(out, v) {
|
|
7946
|
+
out[0] = 1;
|
|
7947
|
+
out[1] = 0;
|
|
7948
|
+
out[2] = 0;
|
|
7949
|
+
out[3] = 0;
|
|
7950
|
+
out[4] = 0;
|
|
7951
|
+
out[5] = 1;
|
|
7952
|
+
out[6] = 0;
|
|
7953
|
+
out[7] = 0;
|
|
7954
|
+
out[8] = 0;
|
|
7955
|
+
out[9] = 0;
|
|
7956
|
+
out[10] = 1;
|
|
7957
|
+
out[11] = 0;
|
|
7958
|
+
out[12] = v[0];
|
|
7959
|
+
out[13] = v[1];
|
|
7960
|
+
out[14] = v[2];
|
|
7961
|
+
out[15] = 1;
|
|
7962
|
+
return out;
|
|
7963
|
+
}
|
|
7964
|
+
function fromScaling(out, v) {
|
|
7965
|
+
out[0] = v[0];
|
|
7966
|
+
out[1] = 0;
|
|
7967
|
+
out[2] = 0;
|
|
7968
|
+
out[3] = 0;
|
|
7969
|
+
out[4] = 0;
|
|
7970
|
+
out[5] = v[1];
|
|
7971
|
+
out[6] = 0;
|
|
7972
|
+
out[7] = 0;
|
|
7973
|
+
out[8] = 0;
|
|
7974
|
+
out[9] = 0;
|
|
7975
|
+
out[10] = v[2];
|
|
7976
|
+
out[11] = 0;
|
|
7977
|
+
out[12] = 0;
|
|
7978
|
+
out[13] = 0;
|
|
7979
|
+
out[14] = 0;
|
|
7980
|
+
out[15] = 1;
|
|
7981
|
+
return out;
|
|
7982
|
+
}
|
|
7983
|
+
function fromRotation(out, rad, axis) {
|
|
7984
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
7985
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
7986
|
+
var s, c, t;
|
|
7987
|
+
if (len2 < EPSILON) {
|
|
7988
|
+
return null;
|
|
7989
|
+
}
|
|
7990
|
+
len2 = 1 / len2;
|
|
7991
|
+
x *= len2;
|
|
7992
|
+
y *= len2;
|
|
7993
|
+
z *= len2;
|
|
7994
|
+
s = Math.sin(rad);
|
|
7995
|
+
c = Math.cos(rad);
|
|
7996
|
+
t = 1 - c;
|
|
7997
|
+
out[0] = x * x * t + c;
|
|
7998
|
+
out[1] = y * x * t + z * s;
|
|
7999
|
+
out[2] = z * x * t - y * s;
|
|
8000
|
+
out[3] = 0;
|
|
8001
|
+
out[4] = x * y * t - z * s;
|
|
8002
|
+
out[5] = y * y * t + c;
|
|
8003
|
+
out[6] = z * y * t + x * s;
|
|
8004
|
+
out[7] = 0;
|
|
8005
|
+
out[8] = x * z * t + y * s;
|
|
8006
|
+
out[9] = y * z * t - x * s;
|
|
8007
|
+
out[10] = z * z * t + c;
|
|
8008
|
+
out[11] = 0;
|
|
8009
|
+
out[12] = 0;
|
|
8010
|
+
out[13] = 0;
|
|
8011
|
+
out[14] = 0;
|
|
8012
|
+
out[15] = 1;
|
|
8013
|
+
return out;
|
|
8014
|
+
}
|
|
8015
|
+
function fromXRotation(out, rad) {
|
|
8016
|
+
var s = Math.sin(rad);
|
|
8017
|
+
var c = Math.cos(rad);
|
|
8018
|
+
out[0] = 1;
|
|
8019
|
+
out[1] = 0;
|
|
8020
|
+
out[2] = 0;
|
|
8021
|
+
out[3] = 0;
|
|
8022
|
+
out[4] = 0;
|
|
8023
|
+
out[5] = c;
|
|
8024
|
+
out[6] = s;
|
|
8025
|
+
out[7] = 0;
|
|
8026
|
+
out[8] = 0;
|
|
8027
|
+
out[9] = -s;
|
|
8028
|
+
out[10] = c;
|
|
8029
|
+
out[11] = 0;
|
|
8030
|
+
out[12] = 0;
|
|
8031
|
+
out[13] = 0;
|
|
8032
|
+
out[14] = 0;
|
|
8033
|
+
out[15] = 1;
|
|
8034
|
+
return out;
|
|
8035
|
+
}
|
|
8036
|
+
function fromYRotation(out, rad) {
|
|
8037
|
+
var s = Math.sin(rad);
|
|
8038
|
+
var c = Math.cos(rad);
|
|
8039
|
+
out[0] = c;
|
|
8040
|
+
out[1] = 0;
|
|
8041
|
+
out[2] = -s;
|
|
8042
|
+
out[3] = 0;
|
|
8043
|
+
out[4] = 0;
|
|
8044
|
+
out[5] = 1;
|
|
8045
|
+
out[6] = 0;
|
|
8046
|
+
out[7] = 0;
|
|
8047
|
+
out[8] = s;
|
|
8048
|
+
out[9] = 0;
|
|
8049
|
+
out[10] = c;
|
|
8050
|
+
out[11] = 0;
|
|
8051
|
+
out[12] = 0;
|
|
8052
|
+
out[13] = 0;
|
|
8053
|
+
out[14] = 0;
|
|
8054
|
+
out[15] = 1;
|
|
8055
|
+
return out;
|
|
8056
|
+
}
|
|
8057
|
+
function fromZRotation(out, rad) {
|
|
8058
|
+
var s = Math.sin(rad);
|
|
8059
|
+
var c = Math.cos(rad);
|
|
8060
|
+
out[0] = c;
|
|
8061
|
+
out[1] = s;
|
|
8062
|
+
out[2] = 0;
|
|
8063
|
+
out[3] = 0;
|
|
8064
|
+
out[4] = -s;
|
|
8065
|
+
out[5] = c;
|
|
8066
|
+
out[6] = 0;
|
|
8067
|
+
out[7] = 0;
|
|
8068
|
+
out[8] = 0;
|
|
8069
|
+
out[9] = 0;
|
|
8070
|
+
out[10] = 1;
|
|
8071
|
+
out[11] = 0;
|
|
8072
|
+
out[12] = 0;
|
|
8073
|
+
out[13] = 0;
|
|
8074
|
+
out[14] = 0;
|
|
8075
|
+
out[15] = 1;
|
|
8076
|
+
return out;
|
|
8077
|
+
}
|
|
8078
|
+
function fromRotationTranslation(out, q, v) {
|
|
8079
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8080
|
+
var x2 = x + x;
|
|
8081
|
+
var y2 = y + y;
|
|
8082
|
+
var z2 = z + z;
|
|
8083
|
+
var xx = x * x2;
|
|
8084
|
+
var xy = x * y2;
|
|
8085
|
+
var xz = x * z2;
|
|
8086
|
+
var yy = y * y2;
|
|
8087
|
+
var yz = y * z2;
|
|
8088
|
+
var zz = z * z2;
|
|
8089
|
+
var wx = w * x2;
|
|
8090
|
+
var wy = w * y2;
|
|
8091
|
+
var wz = w * z2;
|
|
8092
|
+
out[0] = 1 - (yy + zz);
|
|
8093
|
+
out[1] = xy + wz;
|
|
8094
|
+
out[2] = xz - wy;
|
|
8095
|
+
out[3] = 0;
|
|
8096
|
+
out[4] = xy - wz;
|
|
8097
|
+
out[5] = 1 - (xx + zz);
|
|
8098
|
+
out[6] = yz + wx;
|
|
8099
|
+
out[7] = 0;
|
|
8100
|
+
out[8] = xz + wy;
|
|
8101
|
+
out[9] = yz - wx;
|
|
8102
|
+
out[10] = 1 - (xx + yy);
|
|
8103
|
+
out[11] = 0;
|
|
8104
|
+
out[12] = v[0];
|
|
8105
|
+
out[13] = v[1];
|
|
8106
|
+
out[14] = v[2];
|
|
8107
|
+
out[15] = 1;
|
|
8108
|
+
return out;
|
|
8109
|
+
}
|
|
8110
|
+
function fromQuat2(out, a) {
|
|
8111
|
+
var translation = new ARRAY_TYPE(3);
|
|
8112
|
+
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];
|
|
8113
|
+
var magnitude = bx * bx + by * by + bz * bz + bw * bw;
|
|
8114
|
+
if (magnitude > 0) {
|
|
8115
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;
|
|
8116
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;
|
|
8117
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;
|
|
8118
|
+
} else {
|
|
8119
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
|
8120
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
|
8121
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
|
8122
|
+
}
|
|
8123
|
+
fromRotationTranslation(out, a, translation);
|
|
8124
|
+
return out;
|
|
8125
|
+
}
|
|
8126
|
+
function getTranslation(out, mat) {
|
|
8127
|
+
out[0] = mat[12];
|
|
8128
|
+
out[1] = mat[13];
|
|
8129
|
+
out[2] = mat[14];
|
|
8130
|
+
return out;
|
|
8131
|
+
}
|
|
8132
|
+
function getScaling(out, mat) {
|
|
8133
|
+
var m11 = mat[0];
|
|
8134
|
+
var m12 = mat[1];
|
|
8135
|
+
var m13 = mat[2];
|
|
8136
|
+
var m21 = mat[4];
|
|
8137
|
+
var m22 = mat[5];
|
|
8138
|
+
var m23 = mat[6];
|
|
8139
|
+
var m31 = mat[8];
|
|
8140
|
+
var m32 = mat[9];
|
|
8141
|
+
var m33 = mat[10];
|
|
8142
|
+
out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
8143
|
+
out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
8144
|
+
out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
8145
|
+
return out;
|
|
8146
|
+
}
|
|
8147
|
+
function getRotation(out, mat) {
|
|
8148
|
+
var scaling = new ARRAY_TYPE(3);
|
|
8149
|
+
getScaling(scaling, mat);
|
|
8150
|
+
var is1 = 1 / scaling[0];
|
|
8151
|
+
var is2 = 1 / scaling[1];
|
|
8152
|
+
var is3 = 1 / scaling[2];
|
|
8153
|
+
var sm11 = mat[0] * is1;
|
|
8154
|
+
var sm12 = mat[1] * is2;
|
|
8155
|
+
var sm13 = mat[2] * is3;
|
|
8156
|
+
var sm21 = mat[4] * is1;
|
|
8157
|
+
var sm22 = mat[5] * is2;
|
|
8158
|
+
var sm23 = mat[6] * is3;
|
|
8159
|
+
var sm31 = mat[8] * is1;
|
|
8160
|
+
var sm32 = mat[9] * is2;
|
|
8161
|
+
var sm33 = mat[10] * is3;
|
|
8162
|
+
var trace = sm11 + sm22 + sm33;
|
|
8163
|
+
var S = 0;
|
|
8164
|
+
if (trace > 0) {
|
|
8165
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
8166
|
+
out[3] = 0.25 * S;
|
|
8167
|
+
out[0] = (sm23 - sm32) / S;
|
|
8168
|
+
out[1] = (sm31 - sm13) / S;
|
|
8169
|
+
out[2] = (sm12 - sm21) / S;
|
|
8170
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
8171
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
8172
|
+
out[3] = (sm23 - sm32) / S;
|
|
8173
|
+
out[0] = 0.25 * S;
|
|
8174
|
+
out[1] = (sm12 + sm21) / S;
|
|
8175
|
+
out[2] = (sm31 + sm13) / S;
|
|
8176
|
+
} else if (sm22 > sm33) {
|
|
8177
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
8178
|
+
out[3] = (sm31 - sm13) / S;
|
|
8179
|
+
out[0] = (sm12 + sm21) / S;
|
|
8180
|
+
out[1] = 0.25 * S;
|
|
8181
|
+
out[2] = (sm23 + sm32) / S;
|
|
8182
|
+
} else {
|
|
8183
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
8184
|
+
out[3] = (sm12 - sm21) / S;
|
|
8185
|
+
out[0] = (sm31 + sm13) / S;
|
|
8186
|
+
out[1] = (sm23 + sm32) / S;
|
|
8187
|
+
out[2] = 0.25 * S;
|
|
8188
|
+
}
|
|
8189
|
+
return out;
|
|
8190
|
+
}
|
|
8191
|
+
function decompose(out_r, out_t, out_s, mat) {
|
|
8192
|
+
out_t[0] = mat[12];
|
|
8193
|
+
out_t[1] = mat[13];
|
|
8194
|
+
out_t[2] = mat[14];
|
|
8195
|
+
var m11 = mat[0];
|
|
8196
|
+
var m12 = mat[1];
|
|
8197
|
+
var m13 = mat[2];
|
|
8198
|
+
var m21 = mat[4];
|
|
8199
|
+
var m22 = mat[5];
|
|
8200
|
+
var m23 = mat[6];
|
|
8201
|
+
var m31 = mat[8];
|
|
8202
|
+
var m32 = mat[9];
|
|
8203
|
+
var m33 = mat[10];
|
|
8204
|
+
out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
8205
|
+
out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
8206
|
+
out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
8207
|
+
var is1 = 1 / out_s[0];
|
|
8208
|
+
var is2 = 1 / out_s[1];
|
|
8209
|
+
var is3 = 1 / out_s[2];
|
|
8210
|
+
var sm11 = m11 * is1;
|
|
8211
|
+
var sm12 = m12 * is2;
|
|
8212
|
+
var sm13 = m13 * is3;
|
|
8213
|
+
var sm21 = m21 * is1;
|
|
8214
|
+
var sm22 = m22 * is2;
|
|
8215
|
+
var sm23 = m23 * is3;
|
|
8216
|
+
var sm31 = m31 * is1;
|
|
8217
|
+
var sm32 = m32 * is2;
|
|
8218
|
+
var sm33 = m33 * is3;
|
|
8219
|
+
var trace = sm11 + sm22 + sm33;
|
|
8220
|
+
var S = 0;
|
|
8221
|
+
if (trace > 0) {
|
|
8222
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
8223
|
+
out_r[3] = 0.25 * S;
|
|
8224
|
+
out_r[0] = (sm23 - sm32) / S;
|
|
8225
|
+
out_r[1] = (sm31 - sm13) / S;
|
|
8226
|
+
out_r[2] = (sm12 - sm21) / S;
|
|
8227
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
8228
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
8229
|
+
out_r[3] = (sm23 - sm32) / S;
|
|
8230
|
+
out_r[0] = 0.25 * S;
|
|
8231
|
+
out_r[1] = (sm12 + sm21) / S;
|
|
8232
|
+
out_r[2] = (sm31 + sm13) / S;
|
|
8233
|
+
} else if (sm22 > sm33) {
|
|
8234
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
8235
|
+
out_r[3] = (sm31 - sm13) / S;
|
|
8236
|
+
out_r[0] = (sm12 + sm21) / S;
|
|
8237
|
+
out_r[1] = 0.25 * S;
|
|
8238
|
+
out_r[2] = (sm23 + sm32) / S;
|
|
8239
|
+
} else {
|
|
8240
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
8241
|
+
out_r[3] = (sm12 - sm21) / S;
|
|
8242
|
+
out_r[0] = (sm31 + sm13) / S;
|
|
8243
|
+
out_r[1] = (sm23 + sm32) / S;
|
|
8244
|
+
out_r[2] = 0.25 * S;
|
|
8245
|
+
}
|
|
8246
|
+
return out_r;
|
|
8247
|
+
}
|
|
8248
|
+
function fromRotationTranslationScale(out, q, v, s) {
|
|
8249
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8250
|
+
var x2 = x + x;
|
|
8251
|
+
var y2 = y + y;
|
|
8252
|
+
var z2 = z + z;
|
|
8253
|
+
var xx = x * x2;
|
|
8254
|
+
var xy = x * y2;
|
|
8255
|
+
var xz = x * z2;
|
|
8256
|
+
var yy = y * y2;
|
|
8257
|
+
var yz = y * z2;
|
|
8258
|
+
var zz = z * z2;
|
|
8259
|
+
var wx = w * x2;
|
|
8260
|
+
var wy = w * y2;
|
|
8261
|
+
var wz = w * z2;
|
|
8262
|
+
var sx = s[0];
|
|
8263
|
+
var sy = s[1];
|
|
8264
|
+
var sz = s[2];
|
|
8265
|
+
out[0] = (1 - (yy + zz)) * sx;
|
|
8266
|
+
out[1] = (xy + wz) * sx;
|
|
8267
|
+
out[2] = (xz - wy) * sx;
|
|
8268
|
+
out[3] = 0;
|
|
8269
|
+
out[4] = (xy - wz) * sy;
|
|
8270
|
+
out[5] = (1 - (xx + zz)) * sy;
|
|
8271
|
+
out[6] = (yz + wx) * sy;
|
|
8272
|
+
out[7] = 0;
|
|
8273
|
+
out[8] = (xz + wy) * sz;
|
|
8274
|
+
out[9] = (yz - wx) * sz;
|
|
8275
|
+
out[10] = (1 - (xx + yy)) * sz;
|
|
8276
|
+
out[11] = 0;
|
|
8277
|
+
out[12] = v[0];
|
|
8278
|
+
out[13] = v[1];
|
|
8279
|
+
out[14] = v[2];
|
|
8280
|
+
out[15] = 1;
|
|
8281
|
+
return out;
|
|
8282
|
+
}
|
|
8283
|
+
function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
|
|
8284
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8285
|
+
var x2 = x + x;
|
|
8286
|
+
var y2 = y + y;
|
|
8287
|
+
var z2 = z + z;
|
|
8288
|
+
var xx = x * x2;
|
|
8289
|
+
var xy = x * y2;
|
|
8290
|
+
var xz = x * z2;
|
|
8291
|
+
var yy = y * y2;
|
|
8292
|
+
var yz = y * z2;
|
|
8293
|
+
var zz = z * z2;
|
|
8294
|
+
var wx = w * x2;
|
|
8295
|
+
var wy = w * y2;
|
|
8296
|
+
var wz = w * z2;
|
|
8297
|
+
var sx = s[0];
|
|
8298
|
+
var sy = s[1];
|
|
8299
|
+
var sz = s[2];
|
|
8300
|
+
var ox = o[0];
|
|
8301
|
+
var oy = o[1];
|
|
8302
|
+
var oz = o[2];
|
|
8303
|
+
var out0 = (1 - (yy + zz)) * sx;
|
|
8304
|
+
var out1 = (xy + wz) * sx;
|
|
8305
|
+
var out2 = (xz - wy) * sx;
|
|
8306
|
+
var out4 = (xy - wz) * sy;
|
|
8307
|
+
var out5 = (1 - (xx + zz)) * sy;
|
|
8308
|
+
var out6 = (yz + wx) * sy;
|
|
8309
|
+
var out8 = (xz + wy) * sz;
|
|
8310
|
+
var out9 = (yz - wx) * sz;
|
|
8311
|
+
var out10 = (1 - (xx + yy)) * sz;
|
|
8312
|
+
out[0] = out0;
|
|
8313
|
+
out[1] = out1;
|
|
8314
|
+
out[2] = out2;
|
|
8315
|
+
out[3] = 0;
|
|
8316
|
+
out[4] = out4;
|
|
8317
|
+
out[5] = out5;
|
|
8318
|
+
out[6] = out6;
|
|
8319
|
+
out[7] = 0;
|
|
8320
|
+
out[8] = out8;
|
|
8321
|
+
out[9] = out9;
|
|
8322
|
+
out[10] = out10;
|
|
8323
|
+
out[11] = 0;
|
|
8324
|
+
out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);
|
|
8325
|
+
out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);
|
|
8326
|
+
out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);
|
|
8327
|
+
out[15] = 1;
|
|
8328
|
+
return out;
|
|
8329
|
+
}
|
|
8330
|
+
function fromQuat(out, q) {
|
|
8331
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8332
|
+
var x2 = x + x;
|
|
8333
|
+
var y2 = y + y;
|
|
8334
|
+
var z2 = z + z;
|
|
8335
|
+
var xx = x * x2;
|
|
8336
|
+
var yx = y * x2;
|
|
8337
|
+
var yy = y * y2;
|
|
8338
|
+
var zx = z * x2;
|
|
8339
|
+
var zy = z * y2;
|
|
8340
|
+
var zz = z * z2;
|
|
8341
|
+
var wx = w * x2;
|
|
8342
|
+
var wy = w * y2;
|
|
8343
|
+
var wz = w * z2;
|
|
8344
|
+
out[0] = 1 - yy - zz;
|
|
8345
|
+
out[1] = yx + wz;
|
|
8346
|
+
out[2] = zx - wy;
|
|
8347
|
+
out[3] = 0;
|
|
8348
|
+
out[4] = yx - wz;
|
|
8349
|
+
out[5] = 1 - xx - zz;
|
|
8350
|
+
out[6] = zy + wx;
|
|
8351
|
+
out[7] = 0;
|
|
8352
|
+
out[8] = zx + wy;
|
|
8353
|
+
out[9] = zy - wx;
|
|
8354
|
+
out[10] = 1 - xx - yy;
|
|
8355
|
+
out[11] = 0;
|
|
8356
|
+
out[12] = 0;
|
|
8357
|
+
out[13] = 0;
|
|
8358
|
+
out[14] = 0;
|
|
8359
|
+
out[15] = 1;
|
|
8360
|
+
return out;
|
|
8361
|
+
}
|
|
8362
|
+
function frustum(out, left, right, bottom, top, near, far) {
|
|
8363
|
+
var rl = 1 / (right - left);
|
|
8364
|
+
var tb = 1 / (top - bottom);
|
|
8365
|
+
var nf = 1 / (near - far);
|
|
8366
|
+
out[0] = near * 2 * rl;
|
|
8367
|
+
out[1] = 0;
|
|
8368
|
+
out[2] = 0;
|
|
8369
|
+
out[3] = 0;
|
|
8370
|
+
out[4] = 0;
|
|
8371
|
+
out[5] = near * 2 * tb;
|
|
8372
|
+
out[6] = 0;
|
|
8373
|
+
out[7] = 0;
|
|
8374
|
+
out[8] = (right + left) * rl;
|
|
8375
|
+
out[9] = (top + bottom) * tb;
|
|
8376
|
+
out[10] = (far + near) * nf;
|
|
8377
|
+
out[11] = -1;
|
|
8378
|
+
out[12] = 0;
|
|
8379
|
+
out[13] = 0;
|
|
8380
|
+
out[14] = far * near * 2 * nf;
|
|
8381
|
+
out[15] = 0;
|
|
8382
|
+
return out;
|
|
8383
|
+
}
|
|
8384
|
+
function perspectiveNO(out, fovy, aspect, near, far) {
|
|
8385
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
8386
|
+
out[0] = f / aspect;
|
|
8387
|
+
out[1] = 0;
|
|
8388
|
+
out[2] = 0;
|
|
8389
|
+
out[3] = 0;
|
|
8390
|
+
out[4] = 0;
|
|
8391
|
+
out[5] = f;
|
|
8392
|
+
out[6] = 0;
|
|
8393
|
+
out[7] = 0;
|
|
8394
|
+
out[8] = 0;
|
|
8395
|
+
out[9] = 0;
|
|
8396
|
+
out[11] = -1;
|
|
8397
|
+
out[12] = 0;
|
|
8398
|
+
out[13] = 0;
|
|
8399
|
+
out[15] = 0;
|
|
8400
|
+
if (far != null && far !== Infinity) {
|
|
8401
|
+
var nf = 1 / (near - far);
|
|
8402
|
+
out[10] = (far + near) * nf;
|
|
8403
|
+
out[14] = 2 * far * near * nf;
|
|
8404
|
+
} else {
|
|
8405
|
+
out[10] = -1;
|
|
8406
|
+
out[14] = -2 * near;
|
|
8407
|
+
}
|
|
8408
|
+
return out;
|
|
8409
|
+
}
|
|
8410
|
+
var perspective = perspectiveNO;
|
|
8411
|
+
function perspectiveZO(out, fovy, aspect, near, far) {
|
|
8412
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
8413
|
+
out[0] = f / aspect;
|
|
8414
|
+
out[1] = 0;
|
|
8415
|
+
out[2] = 0;
|
|
8416
|
+
out[3] = 0;
|
|
8417
|
+
out[4] = 0;
|
|
8418
|
+
out[5] = f;
|
|
8419
|
+
out[6] = 0;
|
|
8420
|
+
out[7] = 0;
|
|
8421
|
+
out[8] = 0;
|
|
8422
|
+
out[9] = 0;
|
|
8423
|
+
out[11] = -1;
|
|
8424
|
+
out[12] = 0;
|
|
8425
|
+
out[13] = 0;
|
|
8426
|
+
out[15] = 0;
|
|
8427
|
+
if (far != null && far !== Infinity) {
|
|
8428
|
+
var nf = 1 / (near - far);
|
|
8429
|
+
out[10] = far * nf;
|
|
8430
|
+
out[14] = far * near * nf;
|
|
8431
|
+
} else {
|
|
8432
|
+
out[10] = -1;
|
|
8433
|
+
out[14] = -near;
|
|
8434
|
+
}
|
|
8435
|
+
return out;
|
|
8436
|
+
}
|
|
8437
|
+
function perspectiveFromFieldOfView(out, fov, near, far) {
|
|
8438
|
+
var upTan = Math.tan(fov.upDegrees * Math.PI / 180);
|
|
8439
|
+
var downTan = Math.tan(fov.downDegrees * Math.PI / 180);
|
|
8440
|
+
var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180);
|
|
8441
|
+
var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180);
|
|
8442
|
+
var xScale = 2 / (leftTan + rightTan);
|
|
8443
|
+
var yScale = 2 / (upTan + downTan);
|
|
8444
|
+
out[0] = xScale;
|
|
8445
|
+
out[1] = 0;
|
|
8446
|
+
out[2] = 0;
|
|
8447
|
+
out[3] = 0;
|
|
8448
|
+
out[4] = 0;
|
|
8449
|
+
out[5] = yScale;
|
|
8450
|
+
out[6] = 0;
|
|
8451
|
+
out[7] = 0;
|
|
8452
|
+
out[8] = -((leftTan - rightTan) * xScale * 0.5);
|
|
8453
|
+
out[9] = (upTan - downTan) * yScale * 0.5;
|
|
8454
|
+
out[10] = far / (near - far);
|
|
8455
|
+
out[11] = -1;
|
|
8456
|
+
out[12] = 0;
|
|
8457
|
+
out[13] = 0;
|
|
8458
|
+
out[14] = far * near / (near - far);
|
|
8459
|
+
out[15] = 0;
|
|
8460
|
+
return out;
|
|
8461
|
+
}
|
|
8462
|
+
function orthoNO(out, left, right, bottom, top, near, far) {
|
|
8463
|
+
var lr = 1 / (left - right);
|
|
8464
|
+
var bt = 1 / (bottom - top);
|
|
8465
|
+
var nf = 1 / (near - far);
|
|
8466
|
+
out[0] = -2 * lr;
|
|
8467
|
+
out[1] = 0;
|
|
8468
|
+
out[2] = 0;
|
|
8469
|
+
out[3] = 0;
|
|
8470
|
+
out[4] = 0;
|
|
8471
|
+
out[5] = -2 * bt;
|
|
8472
|
+
out[6] = 0;
|
|
8473
|
+
out[7] = 0;
|
|
8474
|
+
out[8] = 0;
|
|
8475
|
+
out[9] = 0;
|
|
8476
|
+
out[10] = 2 * nf;
|
|
8477
|
+
out[11] = 0;
|
|
8478
|
+
out[12] = (left + right) * lr;
|
|
8479
|
+
out[13] = (top + bottom) * bt;
|
|
8480
|
+
out[14] = (far + near) * nf;
|
|
8481
|
+
out[15] = 1;
|
|
8482
|
+
return out;
|
|
8483
|
+
}
|
|
8484
|
+
var ortho = orthoNO;
|
|
8485
|
+
function orthoZO(out, left, right, bottom, top, near, far) {
|
|
8486
|
+
var lr = 1 / (left - right);
|
|
8487
|
+
var bt = 1 / (bottom - top);
|
|
8488
|
+
var nf = 1 / (near - far);
|
|
8489
|
+
out[0] = -2 * lr;
|
|
8490
|
+
out[1] = 0;
|
|
8491
|
+
out[2] = 0;
|
|
8492
|
+
out[3] = 0;
|
|
8493
|
+
out[4] = 0;
|
|
8494
|
+
out[5] = -2 * bt;
|
|
8495
|
+
out[6] = 0;
|
|
8496
|
+
out[7] = 0;
|
|
8497
|
+
out[8] = 0;
|
|
8498
|
+
out[9] = 0;
|
|
8499
|
+
out[10] = nf;
|
|
8500
|
+
out[11] = 0;
|
|
8501
|
+
out[12] = (left + right) * lr;
|
|
8502
|
+
out[13] = (top + bottom) * bt;
|
|
8503
|
+
out[14] = near * nf;
|
|
8504
|
+
out[15] = 1;
|
|
8505
|
+
return out;
|
|
8506
|
+
}
|
|
8507
|
+
function lookAt(out, eye, center, up) {
|
|
8508
|
+
var x0, x1, x2, y0, y1, y2, z0, z1, z2, len2;
|
|
8509
|
+
var eyex = eye[0];
|
|
8510
|
+
var eyey = eye[1];
|
|
8511
|
+
var eyez = eye[2];
|
|
8512
|
+
var upx = up[0];
|
|
8513
|
+
var upy = up[1];
|
|
8514
|
+
var upz = up[2];
|
|
8515
|
+
var centerx = center[0];
|
|
8516
|
+
var centery = center[1];
|
|
8517
|
+
var centerz = center[2];
|
|
8518
|
+
if (Math.abs(eyex - centerx) < EPSILON && Math.abs(eyey - centery) < EPSILON && Math.abs(eyez - centerz) < EPSILON) {
|
|
8519
|
+
return identity(out);
|
|
8520
|
+
}
|
|
8521
|
+
z0 = eyex - centerx;
|
|
8522
|
+
z1 = eyey - centery;
|
|
8523
|
+
z2 = eyez - centerz;
|
|
8524
|
+
len2 = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
8525
|
+
z0 *= len2;
|
|
8526
|
+
z1 *= len2;
|
|
8527
|
+
z2 *= len2;
|
|
8528
|
+
x0 = upy * z2 - upz * z1;
|
|
8529
|
+
x1 = upz * z0 - upx * z2;
|
|
8530
|
+
x2 = upx * z1 - upy * z0;
|
|
8531
|
+
len2 = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
8532
|
+
if (!len2) {
|
|
8533
|
+
x0 = 0;
|
|
8534
|
+
x1 = 0;
|
|
8535
|
+
x2 = 0;
|
|
8536
|
+
} else {
|
|
8537
|
+
len2 = 1 / len2;
|
|
8538
|
+
x0 *= len2;
|
|
8539
|
+
x1 *= len2;
|
|
8540
|
+
x2 *= len2;
|
|
8541
|
+
}
|
|
8542
|
+
y0 = z1 * x2 - z2 * x1;
|
|
8543
|
+
y1 = z2 * x0 - z0 * x2;
|
|
8544
|
+
y2 = z0 * x1 - z1 * x0;
|
|
8545
|
+
len2 = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
8546
|
+
if (!len2) {
|
|
8547
|
+
y0 = 0;
|
|
8548
|
+
y1 = 0;
|
|
8549
|
+
y2 = 0;
|
|
8550
|
+
} else {
|
|
8551
|
+
len2 = 1 / len2;
|
|
8552
|
+
y0 *= len2;
|
|
8553
|
+
y1 *= len2;
|
|
8554
|
+
y2 *= len2;
|
|
8555
|
+
}
|
|
8556
|
+
out[0] = x0;
|
|
8557
|
+
out[1] = y0;
|
|
8558
|
+
out[2] = z0;
|
|
8559
|
+
out[3] = 0;
|
|
8560
|
+
out[4] = x1;
|
|
8561
|
+
out[5] = y1;
|
|
8562
|
+
out[6] = z1;
|
|
8563
|
+
out[7] = 0;
|
|
8564
|
+
out[8] = x2;
|
|
8565
|
+
out[9] = y2;
|
|
8566
|
+
out[10] = z2;
|
|
8567
|
+
out[11] = 0;
|
|
8568
|
+
out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
|
|
8569
|
+
out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
|
|
8570
|
+
out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
|
|
8571
|
+
out[15] = 1;
|
|
8572
|
+
return out;
|
|
8573
|
+
}
|
|
8574
|
+
function targetTo(out, eye, target, up) {
|
|
8575
|
+
var eyex = eye[0], eyey = eye[1], eyez = eye[2], upx = up[0], upy = up[1], upz = up[2];
|
|
8576
|
+
var z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
|
|
8577
|
+
var len2 = z0 * z0 + z1 * z1 + z2 * z2;
|
|
8578
|
+
if (len2 > 0) {
|
|
8579
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8580
|
+
z0 *= len2;
|
|
8581
|
+
z1 *= len2;
|
|
8582
|
+
z2 *= len2;
|
|
8583
|
+
}
|
|
8584
|
+
var x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
|
|
8585
|
+
len2 = x0 * x0 + x1 * x1 + x2 * x2;
|
|
8586
|
+
if (len2 > 0) {
|
|
8587
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8588
|
+
x0 *= len2;
|
|
8589
|
+
x1 *= len2;
|
|
8590
|
+
x2 *= len2;
|
|
8591
|
+
}
|
|
8592
|
+
out[0] = x0;
|
|
8593
|
+
out[1] = x1;
|
|
8594
|
+
out[2] = x2;
|
|
8595
|
+
out[3] = 0;
|
|
8596
|
+
out[4] = z1 * x2 - z2 * x1;
|
|
8597
|
+
out[5] = z2 * x0 - z0 * x2;
|
|
8598
|
+
out[6] = z0 * x1 - z1 * x0;
|
|
8599
|
+
out[7] = 0;
|
|
8600
|
+
out[8] = z0;
|
|
8601
|
+
out[9] = z1;
|
|
8602
|
+
out[10] = z2;
|
|
8603
|
+
out[11] = 0;
|
|
8604
|
+
out[12] = eyex;
|
|
8605
|
+
out[13] = eyey;
|
|
8606
|
+
out[14] = eyez;
|
|
8607
|
+
out[15] = 1;
|
|
8608
|
+
return out;
|
|
8609
|
+
}
|
|
8610
|
+
function str(a) {
|
|
8611
|
+
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] + ")";
|
|
8612
|
+
}
|
|
8613
|
+
function frob(a) {
|
|
8614
|
+
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]);
|
|
8615
|
+
}
|
|
8616
|
+
function add(out, a, b) {
|
|
8617
|
+
out[0] = a[0] + b[0];
|
|
8618
|
+
out[1] = a[1] + b[1];
|
|
8619
|
+
out[2] = a[2] + b[2];
|
|
8620
|
+
out[3] = a[3] + b[3];
|
|
8621
|
+
out[4] = a[4] + b[4];
|
|
8622
|
+
out[5] = a[5] + b[5];
|
|
8623
|
+
out[6] = a[6] + b[6];
|
|
8624
|
+
out[7] = a[7] + b[7];
|
|
8625
|
+
out[8] = a[8] + b[8];
|
|
8626
|
+
out[9] = a[9] + b[9];
|
|
8627
|
+
out[10] = a[10] + b[10];
|
|
8628
|
+
out[11] = a[11] + b[11];
|
|
8629
|
+
out[12] = a[12] + b[12];
|
|
8630
|
+
out[13] = a[13] + b[13];
|
|
8631
|
+
out[14] = a[14] + b[14];
|
|
8632
|
+
out[15] = a[15] + b[15];
|
|
8633
|
+
return out;
|
|
8634
|
+
}
|
|
8635
|
+
function subtract(out, a, b) {
|
|
8636
|
+
out[0] = a[0] - b[0];
|
|
8637
|
+
out[1] = a[1] - b[1];
|
|
8638
|
+
out[2] = a[2] - b[2];
|
|
8639
|
+
out[3] = a[3] - b[3];
|
|
8640
|
+
out[4] = a[4] - b[4];
|
|
8641
|
+
out[5] = a[5] - b[5];
|
|
8642
|
+
out[6] = a[6] - b[6];
|
|
8643
|
+
out[7] = a[7] - b[7];
|
|
8644
|
+
out[8] = a[8] - b[8];
|
|
8645
|
+
out[9] = a[9] - b[9];
|
|
8646
|
+
out[10] = a[10] - b[10];
|
|
8647
|
+
out[11] = a[11] - b[11];
|
|
8648
|
+
out[12] = a[12] - b[12];
|
|
8649
|
+
out[13] = a[13] - b[13];
|
|
8650
|
+
out[14] = a[14] - b[14];
|
|
8651
|
+
out[15] = a[15] - b[15];
|
|
8652
|
+
return out;
|
|
8653
|
+
}
|
|
8654
|
+
function multiplyScalar(out, a, b) {
|
|
8655
|
+
out[0] = a[0] * b;
|
|
8656
|
+
out[1] = a[1] * b;
|
|
8657
|
+
out[2] = a[2] * b;
|
|
8658
|
+
out[3] = a[3] * b;
|
|
8659
|
+
out[4] = a[4] * b;
|
|
8660
|
+
out[5] = a[5] * b;
|
|
8661
|
+
out[6] = a[6] * b;
|
|
8662
|
+
out[7] = a[7] * b;
|
|
8663
|
+
out[8] = a[8] * b;
|
|
8664
|
+
out[9] = a[9] * b;
|
|
8665
|
+
out[10] = a[10] * b;
|
|
8666
|
+
out[11] = a[11] * b;
|
|
8667
|
+
out[12] = a[12] * b;
|
|
8668
|
+
out[13] = a[13] * b;
|
|
8669
|
+
out[14] = a[14] * b;
|
|
8670
|
+
out[15] = a[15] * b;
|
|
8671
|
+
return out;
|
|
8672
|
+
}
|
|
8673
|
+
function multiplyScalarAndAdd(out, a, b, scale3) {
|
|
8674
|
+
out[0] = a[0] + b[0] * scale3;
|
|
8675
|
+
out[1] = a[1] + b[1] * scale3;
|
|
8676
|
+
out[2] = a[2] + b[2] * scale3;
|
|
8677
|
+
out[3] = a[3] + b[3] * scale3;
|
|
8678
|
+
out[4] = a[4] + b[4] * scale3;
|
|
8679
|
+
out[5] = a[5] + b[5] * scale3;
|
|
8680
|
+
out[6] = a[6] + b[6] * scale3;
|
|
8681
|
+
out[7] = a[7] + b[7] * scale3;
|
|
8682
|
+
out[8] = a[8] + b[8] * scale3;
|
|
8683
|
+
out[9] = a[9] + b[9] * scale3;
|
|
8684
|
+
out[10] = a[10] + b[10] * scale3;
|
|
8685
|
+
out[11] = a[11] + b[11] * scale3;
|
|
8686
|
+
out[12] = a[12] + b[12] * scale3;
|
|
8687
|
+
out[13] = a[13] + b[13] * scale3;
|
|
8688
|
+
out[14] = a[14] + b[14] * scale3;
|
|
8689
|
+
out[15] = a[15] + b[15] * scale3;
|
|
8690
|
+
return out;
|
|
8691
|
+
}
|
|
8692
|
+
function exactEquals(a, b) {
|
|
8693
|
+
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];
|
|
8694
|
+
}
|
|
8695
|
+
function equals(a, b) {
|
|
8696
|
+
var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
|
|
8697
|
+
var a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
|
|
8698
|
+
var a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
|
|
8699
|
+
var a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
|
|
8700
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
8701
|
+
var b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7];
|
|
8702
|
+
var b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11];
|
|
8703
|
+
var b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
|
|
8704
|
+
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));
|
|
8705
|
+
}
|
|
8706
|
+
var mul = multiply;
|
|
8707
|
+
var sub = subtract;
|
|
8708
|
+
|
|
8709
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/vec3.js
|
|
8710
|
+
var vec3_exports = {};
|
|
8711
|
+
__export(vec3_exports, {
|
|
8712
|
+
add: () => add2,
|
|
8713
|
+
angle: () => angle,
|
|
8714
|
+
bezier: () => bezier,
|
|
8715
|
+
ceil: () => ceil,
|
|
8716
|
+
clone: () => clone2,
|
|
8717
|
+
copy: () => copy2,
|
|
8718
|
+
create: () => create2,
|
|
8719
|
+
cross: () => cross,
|
|
8720
|
+
dist: () => dist,
|
|
8721
|
+
distance: () => distance,
|
|
8722
|
+
div: () => div,
|
|
8723
|
+
divide: () => divide,
|
|
8724
|
+
dot: () => dot,
|
|
8725
|
+
equals: () => equals2,
|
|
8726
|
+
exactEquals: () => exactEquals2,
|
|
8727
|
+
floor: () => floor,
|
|
8728
|
+
forEach: () => forEach,
|
|
8729
|
+
fromValues: () => fromValues2,
|
|
8730
|
+
hermite: () => hermite,
|
|
8731
|
+
inverse: () => inverse,
|
|
8732
|
+
len: () => len,
|
|
8733
|
+
length: () => length,
|
|
8734
|
+
lerp: () => lerp2,
|
|
8735
|
+
max: () => max,
|
|
8736
|
+
min: () => min,
|
|
8737
|
+
mul: () => mul2,
|
|
8738
|
+
multiply: () => multiply2,
|
|
8739
|
+
negate: () => negate,
|
|
8740
|
+
normalize: () => normalize,
|
|
8741
|
+
random: () => random,
|
|
8742
|
+
rotateX: () => rotateX2,
|
|
8743
|
+
rotateY: () => rotateY2,
|
|
8744
|
+
rotateZ: () => rotateZ2,
|
|
8745
|
+
round: () => round2,
|
|
8746
|
+
scale: () => scale2,
|
|
8747
|
+
scaleAndAdd: () => scaleAndAdd,
|
|
8748
|
+
set: () => set2,
|
|
8749
|
+
slerp: () => slerp,
|
|
8750
|
+
sqrDist: () => sqrDist,
|
|
8751
|
+
sqrLen: () => sqrLen,
|
|
8752
|
+
squaredDistance: () => squaredDistance,
|
|
8753
|
+
squaredLength: () => squaredLength,
|
|
8754
|
+
str: () => str2,
|
|
8755
|
+
sub: () => sub2,
|
|
8756
|
+
subtract: () => subtract2,
|
|
8757
|
+
transformMat3: () => transformMat3,
|
|
8758
|
+
transformMat4: () => transformMat4,
|
|
8759
|
+
transformQuat: () => transformQuat,
|
|
8760
|
+
zero: () => zero
|
|
8761
|
+
});
|
|
8762
|
+
function create2() {
|
|
8763
|
+
var out = new ARRAY_TYPE(3);
|
|
8764
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
8765
|
+
out[0] = 0;
|
|
8766
|
+
out[1] = 0;
|
|
8767
|
+
out[2] = 0;
|
|
8768
|
+
}
|
|
8769
|
+
return out;
|
|
8770
|
+
}
|
|
8771
|
+
function clone2(a) {
|
|
8772
|
+
var out = new ARRAY_TYPE(3);
|
|
8773
|
+
out[0] = a[0];
|
|
8774
|
+
out[1] = a[1];
|
|
8775
|
+
out[2] = a[2];
|
|
8776
|
+
return out;
|
|
8777
|
+
}
|
|
8778
|
+
function length(a) {
|
|
8779
|
+
var x = a[0];
|
|
8780
|
+
var y = a[1];
|
|
8781
|
+
var z = a[2];
|
|
8782
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
8783
|
+
}
|
|
8784
|
+
function fromValues2(x, y, z) {
|
|
8785
|
+
var out = new ARRAY_TYPE(3);
|
|
8786
|
+
out[0] = x;
|
|
8787
|
+
out[1] = y;
|
|
8788
|
+
out[2] = z;
|
|
8789
|
+
return out;
|
|
8790
|
+
}
|
|
8791
|
+
function copy2(out, a) {
|
|
8792
|
+
out[0] = a[0];
|
|
8793
|
+
out[1] = a[1];
|
|
8794
|
+
out[2] = a[2];
|
|
8795
|
+
return out;
|
|
8796
|
+
}
|
|
8797
|
+
function set2(out, x, y, z) {
|
|
8798
|
+
out[0] = x;
|
|
8799
|
+
out[1] = y;
|
|
8800
|
+
out[2] = z;
|
|
8801
|
+
return out;
|
|
8802
|
+
}
|
|
8803
|
+
function add2(out, a, b) {
|
|
8804
|
+
out[0] = a[0] + b[0];
|
|
8805
|
+
out[1] = a[1] + b[1];
|
|
8806
|
+
out[2] = a[2] + b[2];
|
|
8807
|
+
return out;
|
|
8808
|
+
}
|
|
8809
|
+
function subtract2(out, a, b) {
|
|
8810
|
+
out[0] = a[0] - b[0];
|
|
8811
|
+
out[1] = a[1] - b[1];
|
|
8812
|
+
out[2] = a[2] - b[2];
|
|
8813
|
+
return out;
|
|
8814
|
+
}
|
|
8815
|
+
function multiply2(out, a, b) {
|
|
8816
|
+
out[0] = a[0] * b[0];
|
|
8817
|
+
out[1] = a[1] * b[1];
|
|
8818
|
+
out[2] = a[2] * b[2];
|
|
8819
|
+
return out;
|
|
8820
|
+
}
|
|
8821
|
+
function divide(out, a, b) {
|
|
8822
|
+
out[0] = a[0] / b[0];
|
|
8823
|
+
out[1] = a[1] / b[1];
|
|
8824
|
+
out[2] = a[2] / b[2];
|
|
8825
|
+
return out;
|
|
8826
|
+
}
|
|
8827
|
+
function ceil(out, a) {
|
|
8828
|
+
out[0] = Math.ceil(a[0]);
|
|
8829
|
+
out[1] = Math.ceil(a[1]);
|
|
8830
|
+
out[2] = Math.ceil(a[2]);
|
|
8831
|
+
return out;
|
|
8832
|
+
}
|
|
8833
|
+
function floor(out, a) {
|
|
8834
|
+
out[0] = Math.floor(a[0]);
|
|
8835
|
+
out[1] = Math.floor(a[1]);
|
|
8836
|
+
out[2] = Math.floor(a[2]);
|
|
8837
|
+
return out;
|
|
8838
|
+
}
|
|
8839
|
+
function min(out, a, b) {
|
|
8840
|
+
out[0] = Math.min(a[0], b[0]);
|
|
8841
|
+
out[1] = Math.min(a[1], b[1]);
|
|
8842
|
+
out[2] = Math.min(a[2], b[2]);
|
|
8843
|
+
return out;
|
|
8844
|
+
}
|
|
8845
|
+
function max(out, a, b) {
|
|
8846
|
+
out[0] = Math.max(a[0], b[0]);
|
|
8847
|
+
out[1] = Math.max(a[1], b[1]);
|
|
8848
|
+
out[2] = Math.max(a[2], b[2]);
|
|
8849
|
+
return out;
|
|
8850
|
+
}
|
|
8851
|
+
function round2(out, a) {
|
|
8852
|
+
out[0] = round(a[0]);
|
|
8853
|
+
out[1] = round(a[1]);
|
|
8854
|
+
out[2] = round(a[2]);
|
|
8855
|
+
return out;
|
|
8856
|
+
}
|
|
8857
|
+
function scale2(out, a, b) {
|
|
8858
|
+
out[0] = a[0] * b;
|
|
8859
|
+
out[1] = a[1] * b;
|
|
8860
|
+
out[2] = a[2] * b;
|
|
8861
|
+
return out;
|
|
8862
|
+
}
|
|
8863
|
+
function scaleAndAdd(out, a, b, scale3) {
|
|
8864
|
+
out[0] = a[0] + b[0] * scale3;
|
|
8865
|
+
out[1] = a[1] + b[1] * scale3;
|
|
8866
|
+
out[2] = a[2] + b[2] * scale3;
|
|
8867
|
+
return out;
|
|
8868
|
+
}
|
|
8869
|
+
function distance(a, b) {
|
|
8870
|
+
var x = b[0] - a[0];
|
|
8871
|
+
var y = b[1] - a[1];
|
|
8872
|
+
var z = b[2] - a[2];
|
|
8873
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
8874
|
+
}
|
|
8875
|
+
function squaredDistance(a, b) {
|
|
8876
|
+
var x = b[0] - a[0];
|
|
8877
|
+
var y = b[1] - a[1];
|
|
8878
|
+
var z = b[2] - a[2];
|
|
8879
|
+
return x * x + y * y + z * z;
|
|
8880
|
+
}
|
|
8881
|
+
function squaredLength(a) {
|
|
8882
|
+
var x = a[0];
|
|
8883
|
+
var y = a[1];
|
|
8884
|
+
var z = a[2];
|
|
8885
|
+
return x * x + y * y + z * z;
|
|
8886
|
+
}
|
|
8887
|
+
function negate(out, a) {
|
|
8888
|
+
out[0] = -a[0];
|
|
8889
|
+
out[1] = -a[1];
|
|
8890
|
+
out[2] = -a[2];
|
|
8891
|
+
return out;
|
|
8892
|
+
}
|
|
8893
|
+
function inverse(out, a) {
|
|
8894
|
+
out[0] = 1 / a[0];
|
|
8895
|
+
out[1] = 1 / a[1];
|
|
8896
|
+
out[2] = 1 / a[2];
|
|
8897
|
+
return out;
|
|
8898
|
+
}
|
|
8899
|
+
function normalize(out, a) {
|
|
8900
|
+
var x = a[0];
|
|
8901
|
+
var y = a[1];
|
|
8902
|
+
var z = a[2];
|
|
8903
|
+
var len2 = x * x + y * y + z * z;
|
|
8904
|
+
if (len2 > 0) {
|
|
8905
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8906
|
+
}
|
|
8907
|
+
out[0] = a[0] * len2;
|
|
8908
|
+
out[1] = a[1] * len2;
|
|
8909
|
+
out[2] = a[2] * len2;
|
|
8910
|
+
return out;
|
|
8911
|
+
}
|
|
8912
|
+
function dot(a, b) {
|
|
8913
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
8914
|
+
}
|
|
8915
|
+
function cross(out, a, b) {
|
|
8916
|
+
var ax = a[0], ay = a[1], az = a[2];
|
|
8917
|
+
var bx = b[0], by = b[1], bz = b[2];
|
|
8918
|
+
out[0] = ay * bz - az * by;
|
|
8919
|
+
out[1] = az * bx - ax * bz;
|
|
8920
|
+
out[2] = ax * by - ay * bx;
|
|
8921
|
+
return out;
|
|
8922
|
+
}
|
|
8923
|
+
function lerp2(out, a, b, t) {
|
|
8924
|
+
var ax = a[0];
|
|
8925
|
+
var ay = a[1];
|
|
8926
|
+
var az = a[2];
|
|
8927
|
+
out[0] = ax + t * (b[0] - ax);
|
|
8928
|
+
out[1] = ay + t * (b[1] - ay);
|
|
8929
|
+
out[2] = az + t * (b[2] - az);
|
|
8930
|
+
return out;
|
|
8931
|
+
}
|
|
8932
|
+
function slerp(out, a, b, t) {
|
|
8933
|
+
var angle2 = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
|
8934
|
+
var sinTotal = Math.sin(angle2);
|
|
8935
|
+
var ratioA = Math.sin((1 - t) * angle2) / sinTotal;
|
|
8936
|
+
var ratioB = Math.sin(t * angle2) / sinTotal;
|
|
8937
|
+
out[0] = ratioA * a[0] + ratioB * b[0];
|
|
8938
|
+
out[1] = ratioA * a[1] + ratioB * b[1];
|
|
8939
|
+
out[2] = ratioA * a[2] + ratioB * b[2];
|
|
8940
|
+
return out;
|
|
8941
|
+
}
|
|
8942
|
+
function hermite(out, a, b, c, d, t) {
|
|
8943
|
+
var factorTimes2 = t * t;
|
|
8944
|
+
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
|
8945
|
+
var factor2 = factorTimes2 * (t - 2) + t;
|
|
8946
|
+
var factor3 = factorTimes2 * (t - 1);
|
|
8947
|
+
var factor4 = factorTimes2 * (3 - 2 * t);
|
|
8948
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
8949
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
8950
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
8951
|
+
return out;
|
|
8952
|
+
}
|
|
8953
|
+
function bezier(out, a, b, c, d, t) {
|
|
8954
|
+
var inverseFactor = 1 - t;
|
|
8955
|
+
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
|
8956
|
+
var factorTimes2 = t * t;
|
|
8957
|
+
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
|
8958
|
+
var factor2 = 3 * t * inverseFactorTimesTwo;
|
|
8959
|
+
var factor3 = 3 * factorTimes2 * inverseFactor;
|
|
8960
|
+
var factor4 = factorTimes2 * t;
|
|
8961
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
8962
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
8963
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
8964
|
+
return out;
|
|
8965
|
+
}
|
|
8966
|
+
function random(out, scale3) {
|
|
8967
|
+
scale3 = scale3 === void 0 ? 1 : scale3;
|
|
8968
|
+
var r = RANDOM() * 2 * Math.PI;
|
|
8969
|
+
var z = RANDOM() * 2 - 1;
|
|
8970
|
+
var zScale = Math.sqrt(1 - z * z) * scale3;
|
|
8971
|
+
out[0] = Math.cos(r) * zScale;
|
|
8972
|
+
out[1] = Math.sin(r) * zScale;
|
|
8973
|
+
out[2] = z * scale3;
|
|
8974
|
+
return out;
|
|
8975
|
+
}
|
|
8976
|
+
function transformMat4(out, a, m) {
|
|
8977
|
+
var x = a[0], y = a[1], z = a[2];
|
|
8978
|
+
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
8979
|
+
w = w || 1;
|
|
8980
|
+
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
8981
|
+
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
8982
|
+
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
|
8983
|
+
return out;
|
|
8984
|
+
}
|
|
8985
|
+
function transformMat3(out, a, m) {
|
|
8986
|
+
var x = a[0], y = a[1], z = a[2];
|
|
8987
|
+
out[0] = x * m[0] + y * m[3] + z * m[6];
|
|
8988
|
+
out[1] = x * m[1] + y * m[4] + z * m[7];
|
|
8989
|
+
out[2] = x * m[2] + y * m[5] + z * m[8];
|
|
8990
|
+
return out;
|
|
8991
|
+
}
|
|
8992
|
+
function transformQuat(out, a, q) {
|
|
8993
|
+
var qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
8994
|
+
var vx = a[0], vy = a[1], vz = a[2];
|
|
8995
|
+
var tx = qy * vz - qz * vy;
|
|
8996
|
+
var ty = qz * vx - qx * vz;
|
|
8997
|
+
var tz = qx * vy - qy * vx;
|
|
8998
|
+
tx = tx + tx;
|
|
8999
|
+
ty = ty + ty;
|
|
9000
|
+
tz = tz + tz;
|
|
9001
|
+
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
|
9002
|
+
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
|
9003
|
+
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
|
9004
|
+
return out;
|
|
9005
|
+
}
|
|
9006
|
+
function rotateX2(out, a, b, rad) {
|
|
9007
|
+
var p = [], r = [];
|
|
9008
|
+
p[0] = a[0] - b[0];
|
|
9009
|
+
p[1] = a[1] - b[1];
|
|
9010
|
+
p[2] = a[2] - b[2];
|
|
9011
|
+
r[0] = p[0];
|
|
9012
|
+
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
|
9013
|
+
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
|
9014
|
+
out[0] = r[0] + b[0];
|
|
9015
|
+
out[1] = r[1] + b[1];
|
|
9016
|
+
out[2] = r[2] + b[2];
|
|
9017
|
+
return out;
|
|
9018
|
+
}
|
|
9019
|
+
function rotateY2(out, a, b, rad) {
|
|
9020
|
+
var p = [], r = [];
|
|
9021
|
+
p[0] = a[0] - b[0];
|
|
9022
|
+
p[1] = a[1] - b[1];
|
|
9023
|
+
p[2] = a[2] - b[2];
|
|
9024
|
+
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
|
9025
|
+
r[1] = p[1];
|
|
9026
|
+
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
|
9027
|
+
out[0] = r[0] + b[0];
|
|
9028
|
+
out[1] = r[1] + b[1];
|
|
9029
|
+
out[2] = r[2] + b[2];
|
|
9030
|
+
return out;
|
|
9031
|
+
}
|
|
9032
|
+
function rotateZ2(out, a, b, rad) {
|
|
9033
|
+
var p = [], r = [];
|
|
9034
|
+
p[0] = a[0] - b[0];
|
|
9035
|
+
p[1] = a[1] - b[1];
|
|
9036
|
+
p[2] = a[2] - b[2];
|
|
9037
|
+
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
|
9038
|
+
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
|
9039
|
+
r[2] = p[2];
|
|
9040
|
+
out[0] = r[0] + b[0];
|
|
9041
|
+
out[1] = r[1] + b[1];
|
|
9042
|
+
out[2] = r[2] + b[2];
|
|
9043
|
+
return out;
|
|
9044
|
+
}
|
|
9045
|
+
function angle(a, b) {
|
|
9046
|
+
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;
|
|
9047
|
+
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
|
9048
|
+
}
|
|
9049
|
+
function zero(out) {
|
|
9050
|
+
out[0] = 0;
|
|
9051
|
+
out[1] = 0;
|
|
9052
|
+
out[2] = 0;
|
|
9053
|
+
return out;
|
|
9054
|
+
}
|
|
9055
|
+
function str2(a) {
|
|
9056
|
+
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
|
9057
|
+
}
|
|
9058
|
+
function exactEquals2(a, b) {
|
|
9059
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
|
9060
|
+
}
|
|
9061
|
+
function equals2(a, b) {
|
|
9062
|
+
var a0 = a[0], a1 = a[1], a2 = a[2];
|
|
9063
|
+
var b0 = b[0], b1 = b[1], b2 = b[2];
|
|
9064
|
+
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));
|
|
9065
|
+
}
|
|
9066
|
+
var sub2 = subtract2;
|
|
9067
|
+
var mul2 = multiply2;
|
|
9068
|
+
var div = divide;
|
|
9069
|
+
var dist = distance;
|
|
9070
|
+
var sqrDist = squaredDistance;
|
|
9071
|
+
var len = length;
|
|
9072
|
+
var sqrLen = squaredLength;
|
|
9073
|
+
var forEach = (function() {
|
|
9074
|
+
var vec = create2();
|
|
9075
|
+
return function(a, stride, offset, count, fn, arg) {
|
|
9076
|
+
var i, l;
|
|
9077
|
+
if (!stride) {
|
|
9078
|
+
stride = 3;
|
|
9079
|
+
}
|
|
9080
|
+
if (!offset) {
|
|
9081
|
+
offset = 0;
|
|
9082
|
+
}
|
|
9083
|
+
if (count) {
|
|
9084
|
+
l = Math.min(count * stride + offset, a.length);
|
|
9085
|
+
} else {
|
|
9086
|
+
l = a.length;
|
|
9087
|
+
}
|
|
9088
|
+
for (i = offset; i < l; i += stride) {
|
|
9089
|
+
vec[0] = a[i];
|
|
9090
|
+
vec[1] = a[i + 1];
|
|
9091
|
+
vec[2] = a[i + 2];
|
|
9092
|
+
fn(vec, vec, arg);
|
|
9093
|
+
a[i] = vec[0];
|
|
9094
|
+
a[i + 1] = vec[1];
|
|
9095
|
+
a[i + 2] = vec[2];
|
|
9096
|
+
}
|
|
9097
|
+
return a;
|
|
9098
|
+
};
|
|
9099
|
+
})();
|
|
9100
|
+
|
|
7378
9101
|
// src/render/camera.ts
|
|
7379
|
-
var import_gl_matrix = require("gl-matrix");
|
|
7380
9102
|
var Camera = class {
|
|
7381
9103
|
constructor() {
|
|
7382
|
-
this._position =
|
|
7383
|
-
this._angles =
|
|
9104
|
+
this._position = vec3_exports.create();
|
|
9105
|
+
this._angles = vec3_exports.create();
|
|
7384
9106
|
// pitch, yaw, roll
|
|
7385
|
-
this._bobAngles =
|
|
7386
|
-
this._bobOffset =
|
|
7387
|
-
this._kickAngles =
|
|
9107
|
+
this._bobAngles = vec3_exports.create();
|
|
9108
|
+
this._bobOffset = vec3_exports.create();
|
|
9109
|
+
this._kickAngles = vec3_exports.create();
|
|
7388
9110
|
this._rollAngle = 0;
|
|
7389
9111
|
this._fov = 90;
|
|
7390
9112
|
this._aspect = 1;
|
|
7391
9113
|
this._near = 0.1;
|
|
7392
9114
|
this._far = 1e3;
|
|
7393
|
-
this._viewMatrix =
|
|
7394
|
-
this._projectionMatrix =
|
|
7395
|
-
this._viewProjectionMatrix =
|
|
9115
|
+
this._viewMatrix = mat4_exports.create();
|
|
9116
|
+
this._projectionMatrix = mat4_exports.create();
|
|
9117
|
+
this._viewProjectionMatrix = mat4_exports.create();
|
|
7396
9118
|
this._dirty = true;
|
|
7397
9119
|
}
|
|
7398
9120
|
get position() {
|
|
7399
9121
|
return this._position;
|
|
7400
9122
|
}
|
|
7401
9123
|
set position(value) {
|
|
7402
|
-
if (!
|
|
7403
|
-
|
|
9124
|
+
if (!vec3_exports.equals(this._position, value)) {
|
|
9125
|
+
vec3_exports.copy(this._position, value);
|
|
7404
9126
|
this._dirty = true;
|
|
7405
9127
|
this.triggerMoveEvent();
|
|
7406
9128
|
}
|
|
@@ -7409,8 +9131,8 @@ var Camera = class {
|
|
|
7409
9131
|
return this._angles;
|
|
7410
9132
|
}
|
|
7411
9133
|
set angles(value) {
|
|
7412
|
-
if (!
|
|
7413
|
-
|
|
9134
|
+
if (!vec3_exports.equals(this._angles, value)) {
|
|
9135
|
+
vec3_exports.copy(this._angles, value);
|
|
7414
9136
|
this._dirty = true;
|
|
7415
9137
|
this.triggerMoveEvent();
|
|
7416
9138
|
}
|
|
@@ -7419,21 +9141,21 @@ var Camera = class {
|
|
|
7419
9141
|
return this._bobAngles;
|
|
7420
9142
|
}
|
|
7421
9143
|
set bobAngles(value) {
|
|
7422
|
-
|
|
9144
|
+
vec3_exports.copy(this._bobAngles, value);
|
|
7423
9145
|
this._dirty = true;
|
|
7424
9146
|
}
|
|
7425
9147
|
get kickAngles() {
|
|
7426
9148
|
return this._kickAngles;
|
|
7427
9149
|
}
|
|
7428
9150
|
set kickAngles(value) {
|
|
7429
|
-
|
|
9151
|
+
vec3_exports.copy(this._kickAngles, value);
|
|
7430
9152
|
this._dirty = true;
|
|
7431
9153
|
}
|
|
7432
9154
|
get bobOffset() {
|
|
7433
9155
|
return this._bobOffset;
|
|
7434
9156
|
}
|
|
7435
9157
|
set bobOffset(value) {
|
|
7436
|
-
|
|
9158
|
+
vec3_exports.copy(this._bobOffset, value);
|
|
7437
9159
|
this._dirty = true;
|
|
7438
9160
|
}
|
|
7439
9161
|
get rollAngle() {
|
|
@@ -7459,17 +9181,17 @@ var Camera = class {
|
|
|
7459
9181
|
}
|
|
7460
9182
|
// API Methods
|
|
7461
9183
|
setPosition(x, y, z) {
|
|
7462
|
-
const newPos =
|
|
7463
|
-
if (!
|
|
7464
|
-
|
|
9184
|
+
const newPos = vec3_exports.fromValues(x, y, z);
|
|
9185
|
+
if (!vec3_exports.equals(this._position, newPos)) {
|
|
9186
|
+
vec3_exports.copy(this._position, newPos);
|
|
7465
9187
|
this._dirty = true;
|
|
7466
9188
|
this.triggerMoveEvent();
|
|
7467
9189
|
}
|
|
7468
9190
|
}
|
|
7469
9191
|
setRotation(pitch, yaw, roll) {
|
|
7470
|
-
const newAngles =
|
|
7471
|
-
if (!
|
|
7472
|
-
|
|
9192
|
+
const newAngles = vec3_exports.fromValues(pitch, yaw, roll);
|
|
9193
|
+
if (!vec3_exports.equals(this._angles, newAngles)) {
|
|
9194
|
+
vec3_exports.copy(this._angles, newAngles);
|
|
7473
9195
|
this._dirty = true;
|
|
7474
9196
|
this.triggerMoveEvent();
|
|
7475
9197
|
}
|
|
@@ -7481,10 +9203,10 @@ var Camera = class {
|
|
|
7481
9203
|
this.aspect = aspect;
|
|
7482
9204
|
}
|
|
7483
9205
|
lookAt(target) {
|
|
7484
|
-
const direction =
|
|
7485
|
-
|
|
7486
|
-
const
|
|
7487
|
-
if (
|
|
9206
|
+
const direction = vec3_exports.create();
|
|
9207
|
+
vec3_exports.subtract(direction, target, this._position);
|
|
9208
|
+
const len2 = vec3_exports.length(direction);
|
|
9209
|
+
if (len2 < 1e-3) return;
|
|
7488
9210
|
const yaw = Math.atan2(direction[1], direction[0]) * RAD2DEG;
|
|
7489
9211
|
const hyp = Math.hypot(direction[0], direction[1]);
|
|
7490
9212
|
const pitch = -Math.atan2(direction[2], hyp) * RAD2DEG;
|
|
@@ -7493,8 +9215,8 @@ var Camera = class {
|
|
|
7493
9215
|
triggerMoveEvent() {
|
|
7494
9216
|
if (this.onCameraMove) {
|
|
7495
9217
|
this.onCameraMove({
|
|
7496
|
-
position:
|
|
7497
|
-
angles:
|
|
9218
|
+
position: vec3_exports.clone(this._position),
|
|
9219
|
+
angles: vec3_exports.clone(this._angles)
|
|
7498
9220
|
});
|
|
7499
9221
|
}
|
|
7500
9222
|
}
|
|
@@ -7511,8 +9233,8 @@ var Camera = class {
|
|
|
7511
9233
|
return this._viewProjectionMatrix;
|
|
7512
9234
|
}
|
|
7513
9235
|
getViewmodelProjectionMatrix(fov) {
|
|
7514
|
-
const projectionMatrix =
|
|
7515
|
-
|
|
9236
|
+
const projectionMatrix = mat4_exports.create();
|
|
9237
|
+
mat4_exports.perspective(
|
|
7516
9238
|
projectionMatrix,
|
|
7517
9239
|
fov * DEG2RAD,
|
|
7518
9240
|
this._aspect,
|
|
@@ -7524,19 +9246,19 @@ var Camera = class {
|
|
|
7524
9246
|
screenToWorldRay(screenX, screenY) {
|
|
7525
9247
|
const ndcX = screenX * 2 - 1;
|
|
7526
9248
|
const ndcY = 1 - screenY * 2;
|
|
7527
|
-
const clipStart =
|
|
7528
|
-
const clipEnd =
|
|
7529
|
-
const invViewProj =
|
|
7530
|
-
|
|
7531
|
-
const worldStart =
|
|
7532
|
-
const worldEnd =
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
const direction =
|
|
7536
|
-
|
|
7537
|
-
|
|
9249
|
+
const clipStart = vec3_exports.fromValues(ndcX, ndcY, -1);
|
|
9250
|
+
const clipEnd = vec3_exports.fromValues(ndcX, ndcY, 1);
|
|
9251
|
+
const invViewProj = mat4_exports.create();
|
|
9252
|
+
mat4_exports.invert(invViewProj, this.viewProjectionMatrix);
|
|
9253
|
+
const worldStart = vec3_exports.create();
|
|
9254
|
+
const worldEnd = vec3_exports.create();
|
|
9255
|
+
vec3_exports.transformMat4(worldStart, clipStart, invViewProj);
|
|
9256
|
+
vec3_exports.transformMat4(worldEnd, clipEnd, invViewProj);
|
|
9257
|
+
const direction = vec3_exports.create();
|
|
9258
|
+
vec3_exports.subtract(direction, worldEnd, worldStart);
|
|
9259
|
+
vec3_exports.normalize(direction, direction);
|
|
7538
9260
|
return {
|
|
7539
|
-
origin:
|
|
9261
|
+
origin: vec3_exports.clone(this._position),
|
|
7540
9262
|
direction
|
|
7541
9263
|
};
|
|
7542
9264
|
}
|
|
@@ -7544,14 +9266,14 @@ var Camera = class {
|
|
|
7544
9266
|
if (!this._dirty) {
|
|
7545
9267
|
return;
|
|
7546
9268
|
}
|
|
7547
|
-
|
|
9269
|
+
mat4_exports.perspective(
|
|
7548
9270
|
this._projectionMatrix,
|
|
7549
9271
|
this._fov * DEG2RAD,
|
|
7550
9272
|
this._aspect,
|
|
7551
9273
|
this._near,
|
|
7552
9274
|
this._far
|
|
7553
9275
|
);
|
|
7554
|
-
const quakeToGl =
|
|
9276
|
+
const quakeToGl = mat4_exports.fromValues(
|
|
7555
9277
|
0,
|
|
7556
9278
|
0,
|
|
7557
9279
|
-1,
|
|
@@ -7579,18 +9301,18 @@ var Camera = class {
|
|
|
7579
9301
|
const pitchRad = pitch * DEG2RAD;
|
|
7580
9302
|
const yawRad = yaw * DEG2RAD;
|
|
7581
9303
|
const rollRad = roll * DEG2RAD;
|
|
7582
|
-
const rotationQuake =
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
const rotationGl =
|
|
7588
|
-
|
|
7589
|
-
const positionWithOffset =
|
|
7590
|
-
const negativePosition =
|
|
7591
|
-
const rotatedPosQuake =
|
|
7592
|
-
|
|
7593
|
-
const translationGl =
|
|
9304
|
+
const rotationQuake = mat4_exports.create();
|
|
9305
|
+
mat4_exports.identity(rotationQuake);
|
|
9306
|
+
mat4_exports.rotateZ(rotationQuake, rotationQuake, -yawRad);
|
|
9307
|
+
mat4_exports.rotateY(rotationQuake, rotationQuake, -pitchRad);
|
|
9308
|
+
mat4_exports.rotateX(rotationQuake, rotationQuake, -rollRad);
|
|
9309
|
+
const rotationGl = mat4_exports.create();
|
|
9310
|
+
mat4_exports.multiply(rotationGl, quakeToGl, rotationQuake);
|
|
9311
|
+
const positionWithOffset = vec3_exports.add(vec3_exports.create(), this._position, this._bobOffset);
|
|
9312
|
+
const negativePosition = vec3_exports.negate(vec3_exports.create(), positionWithOffset);
|
|
9313
|
+
const rotatedPosQuake = vec3_exports.create();
|
|
9314
|
+
vec3_exports.transformMat4(rotatedPosQuake, negativePosition, rotationQuake);
|
|
9315
|
+
const translationGl = vec3_exports.fromValues(
|
|
7594
9316
|
rotatedPosQuake[1] ? -rotatedPosQuake[1] : 0,
|
|
7595
9317
|
// Y in Quake -> -X in WebGL
|
|
7596
9318
|
rotatedPosQuake[2] || 0,
|
|
@@ -7598,11 +9320,11 @@ var Camera = class {
|
|
|
7598
9320
|
rotatedPosQuake[0] ? -rotatedPosQuake[0] : 0
|
|
7599
9321
|
// X in Quake -> -Z in WebGL
|
|
7600
9322
|
);
|
|
7601
|
-
|
|
9323
|
+
mat4_exports.copy(this._viewMatrix, rotationGl);
|
|
7602
9324
|
this._viewMatrix[12] = translationGl[0];
|
|
7603
9325
|
this._viewMatrix[13] = translationGl[1];
|
|
7604
9326
|
this._viewMatrix[14] = translationGl[2];
|
|
7605
|
-
|
|
9327
|
+
mat4_exports.multiply(
|
|
7606
9328
|
this._viewProjectionMatrix,
|
|
7607
9329
|
this._projectionMatrix,
|
|
7608
9330
|
this._viewMatrix
|
|
@@ -7615,11 +9337,11 @@ var Camera = class {
|
|
|
7615
9337
|
var DEFAULT_AMBIENT = [0.2, 0.2, 0.2];
|
|
7616
9338
|
var DEFAULT_DIRECTION = { x: 0, y: 0, z: 1 };
|
|
7617
9339
|
var DEFAULT_DIRECTION_COLOR = [0.8, 0.8, 0.8];
|
|
7618
|
-
function
|
|
9340
|
+
function lerp3(a, b, t) {
|
|
7619
9341
|
return a + (b - a) * t;
|
|
7620
9342
|
}
|
|
7621
9343
|
function lerpVec32(a, b, t) {
|
|
7622
|
-
return { x:
|
|
9344
|
+
return { x: lerp3(a.x, b.x, t), y: lerp3(a.y, b.y, t), z: lerp3(a.z, b.z, t) };
|
|
7623
9345
|
}
|
|
7624
9346
|
function clamp012(v) {
|
|
7625
9347
|
if (v < 0) return 0;
|
|
@@ -7666,8 +9388,8 @@ function evaluateLighting(normal, position, lighting) {
|
|
|
7666
9388
|
const radiusSq = light.radius * light.radius;
|
|
7667
9389
|
if (distSq < radiusSq && radiusSq > 0) {
|
|
7668
9390
|
const attenuation = 1 - Math.sqrt(distSq) / light.radius;
|
|
7669
|
-
const
|
|
7670
|
-
const lightDotN =
|
|
9391
|
+
const dist2 = Math.sqrt(distSq);
|
|
9392
|
+
const lightDotN = dist2 > 0 ? clamp012(-(dx * n.x + dy * n.y + dz * n.z) / dist2) : 0;
|
|
7671
9393
|
const amount = clamp012(attenuation * lightDotN);
|
|
7672
9394
|
r += light.color[0] * amount;
|
|
7673
9395
|
g += light.color[1] * amount;
|
|
@@ -8341,11 +10063,11 @@ function spawnBlood(context) {
|
|
|
8341
10063
|
function spawnTeleportFlash(context) {
|
|
8342
10064
|
const { system, origin } = context;
|
|
8343
10065
|
for (let i = 0; i < 30; i += 1) {
|
|
8344
|
-
const
|
|
10066
|
+
const angle2 = system.rng.frandom() * Math.PI * 2;
|
|
8345
10067
|
const radius = 8 + system.rng.frandom() * 8;
|
|
8346
10068
|
system.spawn({
|
|
8347
10069
|
position: origin,
|
|
8348
|
-
velocity: { x: Math.cos(
|
|
10070
|
+
velocity: { x: Math.cos(angle2) * radius, y: Math.sin(angle2) * radius, z: 100 + system.rng.frandom() * 80 },
|
|
8349
10071
|
color: [0.4, 0.6, 1, 0.9],
|
|
8350
10072
|
size: 4,
|
|
8351
10073
|
lifetime: 0.5,
|
|
@@ -8448,11 +10170,11 @@ function spawnRailTrail(context) {
|
|
|
8448
10170
|
const dx = end.x - start.x;
|
|
8449
10171
|
const dy = end.y - start.y;
|
|
8450
10172
|
const dz = end.z - start.z;
|
|
8451
|
-
const
|
|
8452
|
-
if (
|
|
8453
|
-
const dir = { x: dx /
|
|
10173
|
+
const dist2 = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
10174
|
+
if (dist2 < 1) return;
|
|
10175
|
+
const dir = { x: dx / dist2, y: dy / dist2, z: dz / dist2 };
|
|
8454
10176
|
const step = 8;
|
|
8455
|
-
for (let d = 0; d <
|
|
10177
|
+
for (let d = 0; d < dist2; d += step) {
|
|
8456
10178
|
const x = start.x + dir.x * d;
|
|
8457
10179
|
const y = start.y + dir.y * d;
|
|
8458
10180
|
const z = start.z + dir.z * d;
|
|
@@ -8592,20 +10314,20 @@ var DemoReader = class {
|
|
|
8592
10314
|
let scanOffset = 0;
|
|
8593
10315
|
this.messageOffsets = [];
|
|
8594
10316
|
while (scanOffset + 4 <= this.buffer.byteLength) {
|
|
8595
|
-
const
|
|
8596
|
-
if (
|
|
10317
|
+
const length2 = this.view.getInt32(scanOffset, true);
|
|
10318
|
+
if (length2 === -1) {
|
|
8597
10319
|
break;
|
|
8598
10320
|
}
|
|
8599
|
-
if (
|
|
8600
|
-
console.warn(`DemoReader: Invalid block length ${
|
|
10321
|
+
if (length2 < 0 || length2 > 2097152) {
|
|
10322
|
+
console.warn(`DemoReader: Invalid block length ${length2} at offset ${scanOffset} during scan`);
|
|
8601
10323
|
break;
|
|
8602
10324
|
}
|
|
8603
|
-
if (scanOffset + 4 +
|
|
10325
|
+
if (scanOffset + 4 + length2 > this.buffer.byteLength) {
|
|
8604
10326
|
console.warn(`DemoReader: Incomplete block at offset ${scanOffset} during scan`);
|
|
8605
10327
|
break;
|
|
8606
10328
|
}
|
|
8607
10329
|
this.messageOffsets.push(scanOffset);
|
|
8608
|
-
scanOffset += 4 +
|
|
10330
|
+
scanOffset += 4 + length2;
|
|
8609
10331
|
}
|
|
8610
10332
|
}
|
|
8611
10333
|
/**
|
|
@@ -8623,18 +10345,18 @@ var DemoReader = class {
|
|
|
8623
10345
|
if (this.offset + 4 > this.buffer.byteLength) {
|
|
8624
10346
|
return null;
|
|
8625
10347
|
}
|
|
8626
|
-
const
|
|
8627
|
-
if (
|
|
10348
|
+
const length2 = this.view.getInt32(this.offset, true);
|
|
10349
|
+
if (length2 === -1) {
|
|
8628
10350
|
return null;
|
|
8629
10351
|
}
|
|
8630
|
-
if (
|
|
10352
|
+
if (length2 < 0 || this.offset + 4 + length2 > this.buffer.byteLength) {
|
|
8631
10353
|
return null;
|
|
8632
10354
|
}
|
|
8633
10355
|
this.offset += 4;
|
|
8634
|
-
const blockData = this.buffer.slice(this.offset, this.offset +
|
|
8635
|
-
this.offset +=
|
|
10356
|
+
const blockData = this.buffer.slice(this.offset, this.offset + length2);
|
|
10357
|
+
this.offset += length2;
|
|
8636
10358
|
return {
|
|
8637
|
-
length,
|
|
10359
|
+
length: length2,
|
|
8638
10360
|
data: new BinaryStream(blockData)
|
|
8639
10361
|
};
|
|
8640
10362
|
}
|
|
@@ -8671,14 +10393,14 @@ var DemoReader = class {
|
|
|
8671
10393
|
const blockInfos = [];
|
|
8672
10394
|
let tempOffset = this.offset;
|
|
8673
10395
|
while (tempOffset + 4 <= this.buffer.byteLength) {
|
|
8674
|
-
const
|
|
8675
|
-
if (
|
|
8676
|
-
if (
|
|
10396
|
+
const length2 = this.view.getInt32(tempOffset, true);
|
|
10397
|
+
if (length2 === -1) break;
|
|
10398
|
+
if (length2 < 0 || tempOffset + 4 + length2 > this.buffer.byteLength) {
|
|
8677
10399
|
break;
|
|
8678
10400
|
}
|
|
8679
|
-
blockInfos.push({ offset: tempOffset + 4, length });
|
|
8680
|
-
totalLength +=
|
|
8681
|
-
tempOffset += 4 +
|
|
10401
|
+
blockInfos.push({ offset: tempOffset + 4, length: length2 });
|
|
10402
|
+
totalLength += length2;
|
|
10403
|
+
tempOffset += 4 + length2;
|
|
8682
10404
|
}
|
|
8683
10405
|
const result = new Uint8Array(totalLength);
|
|
8684
10406
|
let resultOffset = 0;
|
|
@@ -8735,9 +10457,9 @@ var Z_BINARY = 0;
|
|
|
8735
10457
|
var Z_TEXT = 1;
|
|
8736
10458
|
var Z_UNKNOWN$1 = 2;
|
|
8737
10459
|
function zero$1(buf) {
|
|
8738
|
-
let
|
|
8739
|
-
while (--
|
|
8740
|
-
buf[
|
|
10460
|
+
let len2 = buf.length;
|
|
10461
|
+
while (--len2 >= 0) {
|
|
10462
|
+
buf[len2] = 0;
|
|
8741
10463
|
}
|
|
8742
10464
|
}
|
|
8743
10465
|
var STORED_BLOCK = 0;
|
|
@@ -8800,22 +10522,22 @@ function TreeDesc(dyn_tree, stat_desc) {
|
|
|
8800
10522
|
this.max_code = 0;
|
|
8801
10523
|
this.stat_desc = stat_desc;
|
|
8802
10524
|
}
|
|
8803
|
-
var d_code = (
|
|
8804
|
-
return
|
|
10525
|
+
var d_code = (dist2) => {
|
|
10526
|
+
return dist2 < 256 ? _dist_code[dist2] : _dist_code[256 + (dist2 >>> 7)];
|
|
8805
10527
|
};
|
|
8806
10528
|
var put_short = (s, w) => {
|
|
8807
10529
|
s.pending_buf[s.pending++] = w & 255;
|
|
8808
10530
|
s.pending_buf[s.pending++] = w >>> 8 & 255;
|
|
8809
10531
|
};
|
|
8810
|
-
var send_bits = (s, value,
|
|
8811
|
-
if (s.bi_valid > Buf_size -
|
|
10532
|
+
var send_bits = (s, value, length2) => {
|
|
10533
|
+
if (s.bi_valid > Buf_size - length2) {
|
|
8812
10534
|
s.bi_buf |= value << s.bi_valid & 65535;
|
|
8813
10535
|
put_short(s, s.bi_buf);
|
|
8814
10536
|
s.bi_buf = value >> Buf_size - s.bi_valid;
|
|
8815
|
-
s.bi_valid +=
|
|
10537
|
+
s.bi_valid += length2 - Buf_size;
|
|
8816
10538
|
} else {
|
|
8817
10539
|
s.bi_buf |= value << s.bi_valid & 65535;
|
|
8818
|
-
s.bi_valid +=
|
|
10540
|
+
s.bi_valid += length2;
|
|
8819
10541
|
}
|
|
8820
10542
|
};
|
|
8821
10543
|
var send_code = (s, c, tree) => {
|
|
@@ -8826,13 +10548,13 @@ var send_code = (s, c, tree) => {
|
|
|
8826
10548
|
/*.Len*/
|
|
8827
10549
|
);
|
|
8828
10550
|
};
|
|
8829
|
-
var bi_reverse = (code,
|
|
10551
|
+
var bi_reverse = (code, len2) => {
|
|
8830
10552
|
let res = 0;
|
|
8831
10553
|
do {
|
|
8832
10554
|
res |= code & 1;
|
|
8833
10555
|
code >>>= 1;
|
|
8834
10556
|
res <<= 1;
|
|
8835
|
-
} while (--
|
|
10557
|
+
} while (--len2 > 0);
|
|
8836
10558
|
return res >>> 1;
|
|
8837
10559
|
};
|
|
8838
10560
|
var bi_flush = (s) => {
|
|
@@ -8924,40 +10646,40 @@ var gen_codes = (tree, max_code, bl_count) => {
|
|
|
8924
10646
|
next_code[bits] = code;
|
|
8925
10647
|
}
|
|
8926
10648
|
for (n = 0; n <= max_code; n++) {
|
|
8927
|
-
let
|
|
8928
|
-
if (
|
|
10649
|
+
let len2 = tree[n * 2 + 1];
|
|
10650
|
+
if (len2 === 0) {
|
|
8929
10651
|
continue;
|
|
8930
10652
|
}
|
|
8931
|
-
tree[n * 2] = bi_reverse(next_code[
|
|
10653
|
+
tree[n * 2] = bi_reverse(next_code[len2]++, len2);
|
|
8932
10654
|
}
|
|
8933
10655
|
};
|
|
8934
10656
|
var tr_static_init = () => {
|
|
8935
10657
|
let n;
|
|
8936
10658
|
let bits;
|
|
8937
|
-
let
|
|
10659
|
+
let length2;
|
|
8938
10660
|
let code;
|
|
8939
|
-
let
|
|
10661
|
+
let dist2;
|
|
8940
10662
|
const bl_count = new Array(MAX_BITS$1 + 1);
|
|
8941
|
-
|
|
10663
|
+
length2 = 0;
|
|
8942
10664
|
for (code = 0; code < LENGTH_CODES$1 - 1; code++) {
|
|
8943
|
-
base_length[code] =
|
|
10665
|
+
base_length[code] = length2;
|
|
8944
10666
|
for (n = 0; n < 1 << extra_lbits[code]; n++) {
|
|
8945
|
-
_length_code[
|
|
10667
|
+
_length_code[length2++] = code;
|
|
8946
10668
|
}
|
|
8947
10669
|
}
|
|
8948
|
-
_length_code[
|
|
8949
|
-
|
|
10670
|
+
_length_code[length2 - 1] = code;
|
|
10671
|
+
dist2 = 0;
|
|
8950
10672
|
for (code = 0; code < 16; code++) {
|
|
8951
|
-
base_dist[code] =
|
|
10673
|
+
base_dist[code] = dist2;
|
|
8952
10674
|
for (n = 0; n < 1 << extra_dbits[code]; n++) {
|
|
8953
|
-
_dist_code[
|
|
10675
|
+
_dist_code[dist2++] = code;
|
|
8954
10676
|
}
|
|
8955
10677
|
}
|
|
8956
|
-
|
|
10678
|
+
dist2 >>= 7;
|
|
8957
10679
|
for (; code < D_CODES$1; code++) {
|
|
8958
|
-
base_dist[code] =
|
|
10680
|
+
base_dist[code] = dist2 << 7;
|
|
8959
10681
|
for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
|
|
8960
|
-
_dist_code[256 +
|
|
10682
|
+
_dist_code[256 + dist2++] = code;
|
|
8961
10683
|
}
|
|
8962
10684
|
}
|
|
8963
10685
|
for (bits = 0; bits <= MAX_BITS$1; bits++) {
|
|
@@ -9039,17 +10761,17 @@ var pqdownheap = (s, tree, k) => {
|
|
|
9039
10761
|
s.heap[k] = v;
|
|
9040
10762
|
};
|
|
9041
10763
|
var compress_block = (s, ltree, dtree) => {
|
|
9042
|
-
let
|
|
10764
|
+
let dist2;
|
|
9043
10765
|
let lc;
|
|
9044
10766
|
let sx = 0;
|
|
9045
10767
|
let code;
|
|
9046
10768
|
let extra;
|
|
9047
10769
|
if (s.sym_next !== 0) {
|
|
9048
10770
|
do {
|
|
9049
|
-
|
|
9050
|
-
|
|
10771
|
+
dist2 = s.pending_buf[s.sym_buf + sx++] & 255;
|
|
10772
|
+
dist2 += (s.pending_buf[s.sym_buf + sx++] & 255) << 8;
|
|
9051
10773
|
lc = s.pending_buf[s.sym_buf + sx++];
|
|
9052
|
-
if (
|
|
10774
|
+
if (dist2 === 0) {
|
|
9053
10775
|
send_code(s, lc, ltree);
|
|
9054
10776
|
} else {
|
|
9055
10777
|
code = _length_code[lc];
|
|
@@ -9059,13 +10781,13 @@ var compress_block = (s, ltree, dtree) => {
|
|
|
9059
10781
|
lc -= base_length[code];
|
|
9060
10782
|
send_bits(s, lc, extra);
|
|
9061
10783
|
}
|
|
9062
|
-
|
|
9063
|
-
code = d_code(
|
|
10784
|
+
dist2--;
|
|
10785
|
+
code = d_code(dist2);
|
|
9064
10786
|
send_code(s, code, dtree);
|
|
9065
10787
|
extra = extra_dbits[code];
|
|
9066
10788
|
if (extra !== 0) {
|
|
9067
|
-
|
|
9068
|
-
send_bits(s,
|
|
10789
|
+
dist2 -= base_dist[code];
|
|
10790
|
+
send_bits(s, dist2, extra);
|
|
9069
10791
|
}
|
|
9070
10792
|
}
|
|
9071
10793
|
} while (sx < s.sym_next);
|
|
@@ -9342,17 +11064,17 @@ var _tr_flush_block$1 = (s, buf, stored_len, last) => {
|
|
|
9342
11064
|
bi_windup(s);
|
|
9343
11065
|
}
|
|
9344
11066
|
};
|
|
9345
|
-
var _tr_tally$1 = (s,
|
|
9346
|
-
s.pending_buf[s.sym_buf + s.sym_next++] =
|
|
9347
|
-
s.pending_buf[s.sym_buf + s.sym_next++] =
|
|
11067
|
+
var _tr_tally$1 = (s, dist2, lc) => {
|
|
11068
|
+
s.pending_buf[s.sym_buf + s.sym_next++] = dist2;
|
|
11069
|
+
s.pending_buf[s.sym_buf + s.sym_next++] = dist2 >> 8;
|
|
9348
11070
|
s.pending_buf[s.sym_buf + s.sym_next++] = lc;
|
|
9349
|
-
if (
|
|
11071
|
+
if (dist2 === 0) {
|
|
9350
11072
|
s.dyn_ltree[lc * 2]++;
|
|
9351
11073
|
} else {
|
|
9352
11074
|
s.matches++;
|
|
9353
|
-
|
|
11075
|
+
dist2--;
|
|
9354
11076
|
s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]++;
|
|
9355
|
-
s.dyn_dtree[d_code(
|
|
11077
|
+
s.dyn_dtree[d_code(dist2) * 2]++;
|
|
9356
11078
|
}
|
|
9357
11079
|
return s.sym_next === s.sym_end;
|
|
9358
11080
|
};
|
|
@@ -9368,11 +11090,11 @@ var trees = {
|
|
|
9368
11090
|
_tr_tally: _tr_tally_1,
|
|
9369
11091
|
_tr_align: _tr_align_1
|
|
9370
11092
|
};
|
|
9371
|
-
var adler32 = (adler, buf,
|
|
11093
|
+
var adler32 = (adler, buf, len2, pos) => {
|
|
9372
11094
|
let s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;
|
|
9373
|
-
while (
|
|
9374
|
-
n =
|
|
9375
|
-
|
|
11095
|
+
while (len2 !== 0) {
|
|
11096
|
+
n = len2 > 2e3 ? 2e3 : len2;
|
|
11097
|
+
len2 -= n;
|
|
9376
11098
|
do {
|
|
9377
11099
|
s1 = s1 + buf[pos++] | 0;
|
|
9378
11100
|
s2 = s2 + s1 | 0;
|
|
@@ -9395,9 +11117,9 @@ var makeTable = () => {
|
|
|
9395
11117
|
return table;
|
|
9396
11118
|
};
|
|
9397
11119
|
var crcTable = new Uint32Array(makeTable());
|
|
9398
|
-
var crc322 = (crc, buf,
|
|
11120
|
+
var crc322 = (crc, buf, len2, pos) => {
|
|
9399
11121
|
const t = crcTable;
|
|
9400
|
-
const end = pos +
|
|
11122
|
+
const end = pos + len2;
|
|
9401
11123
|
crc ^= -1;
|
|
9402
11124
|
for (let i = pos; i < end; i++) {
|
|
9403
11125
|
crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];
|
|
@@ -9520,10 +11242,10 @@ var err = (strm, errorCode) => {
|
|
|
9520
11242
|
var rank = (f) => {
|
|
9521
11243
|
return f * 2 - (f > 4 ? 9 : 0);
|
|
9522
11244
|
};
|
|
9523
|
-
var
|
|
9524
|
-
let
|
|
9525
|
-
while (--
|
|
9526
|
-
buf[
|
|
11245
|
+
var zero2 = (buf) => {
|
|
11246
|
+
let len2 = buf.length;
|
|
11247
|
+
while (--len2 >= 0) {
|
|
11248
|
+
buf[len2] = 0;
|
|
9527
11249
|
}
|
|
9528
11250
|
};
|
|
9529
11251
|
var slide_hash = (s) => {
|
|
@@ -9547,19 +11269,19 @@ var HASH_ZLIB = (s, prev, data) => (prev << s.hash_shift ^ data) & s.hash_mask;
|
|
|
9547
11269
|
var HASH = HASH_ZLIB;
|
|
9548
11270
|
var flush_pending = (strm) => {
|
|
9549
11271
|
const s = strm.state;
|
|
9550
|
-
let
|
|
9551
|
-
if (
|
|
9552
|
-
|
|
11272
|
+
let len2 = s.pending;
|
|
11273
|
+
if (len2 > strm.avail_out) {
|
|
11274
|
+
len2 = strm.avail_out;
|
|
9553
11275
|
}
|
|
9554
|
-
if (
|
|
11276
|
+
if (len2 === 0) {
|
|
9555
11277
|
return;
|
|
9556
11278
|
}
|
|
9557
|
-
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out +
|
|
9558
|
-
strm.next_out +=
|
|
9559
|
-
s.pending_out +=
|
|
9560
|
-
strm.total_out +=
|
|
9561
|
-
strm.avail_out -=
|
|
9562
|
-
s.pending -=
|
|
11279
|
+
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len2), strm.next_out);
|
|
11280
|
+
strm.next_out += len2;
|
|
11281
|
+
s.pending_out += len2;
|
|
11282
|
+
strm.total_out += len2;
|
|
11283
|
+
strm.avail_out -= len2;
|
|
11284
|
+
s.pending -= len2;
|
|
9563
11285
|
if (s.pending === 0) {
|
|
9564
11286
|
s.pending_out = 0;
|
|
9565
11287
|
}
|
|
@@ -9577,29 +11299,29 @@ var putShortMSB = (s, b) => {
|
|
|
9577
11299
|
s.pending_buf[s.pending++] = b & 255;
|
|
9578
11300
|
};
|
|
9579
11301
|
var read_buf = (strm, buf, start, size) => {
|
|
9580
|
-
let
|
|
9581
|
-
if (
|
|
9582
|
-
|
|
11302
|
+
let len2 = strm.avail_in;
|
|
11303
|
+
if (len2 > size) {
|
|
11304
|
+
len2 = size;
|
|
9583
11305
|
}
|
|
9584
|
-
if (
|
|
11306
|
+
if (len2 === 0) {
|
|
9585
11307
|
return 0;
|
|
9586
11308
|
}
|
|
9587
|
-
strm.avail_in -=
|
|
9588
|
-
buf.set(strm.input.subarray(strm.next_in, strm.next_in +
|
|
11309
|
+
strm.avail_in -= len2;
|
|
11310
|
+
buf.set(strm.input.subarray(strm.next_in, strm.next_in + len2), start);
|
|
9589
11311
|
if (strm.state.wrap === 1) {
|
|
9590
|
-
strm.adler = adler32_1(strm.adler, buf,
|
|
11312
|
+
strm.adler = adler32_1(strm.adler, buf, len2, start);
|
|
9591
11313
|
} else if (strm.state.wrap === 2) {
|
|
9592
|
-
strm.adler = crc32_1(strm.adler, buf,
|
|
11314
|
+
strm.adler = crc32_1(strm.adler, buf, len2, start);
|
|
9593
11315
|
}
|
|
9594
|
-
strm.next_in +=
|
|
9595
|
-
strm.total_in +=
|
|
9596
|
-
return
|
|
11316
|
+
strm.next_in += len2;
|
|
11317
|
+
strm.total_in += len2;
|
|
11318
|
+
return len2;
|
|
9597
11319
|
};
|
|
9598
11320
|
var longest_match = (s, cur_match) => {
|
|
9599
11321
|
let chain_length = s.max_chain_length;
|
|
9600
11322
|
let scan = s.strstart;
|
|
9601
11323
|
let match;
|
|
9602
|
-
let
|
|
11324
|
+
let len2;
|
|
9603
11325
|
let best_len = s.prev_length;
|
|
9604
11326
|
let nice_match = s.nice_match;
|
|
9605
11327
|
const limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;
|
|
@@ -9624,12 +11346,12 @@ var longest_match = (s, cur_match) => {
|
|
|
9624
11346
|
match++;
|
|
9625
11347
|
do {
|
|
9626
11348
|
} while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);
|
|
9627
|
-
|
|
11349
|
+
len2 = MAX_MATCH - (strend - scan);
|
|
9628
11350
|
scan = strend - MAX_MATCH;
|
|
9629
|
-
if (
|
|
11351
|
+
if (len2 > best_len) {
|
|
9630
11352
|
s.match_start = cur_match;
|
|
9631
|
-
best_len =
|
|
9632
|
-
if (
|
|
11353
|
+
best_len = len2;
|
|
11354
|
+
if (len2 >= nice_match) {
|
|
9633
11355
|
break;
|
|
9634
11356
|
}
|
|
9635
11357
|
scan_end1 = _win[scan + best_len - 1];
|
|
@@ -9643,7 +11365,7 @@ var longest_match = (s, cur_match) => {
|
|
|
9643
11365
|
};
|
|
9644
11366
|
var fill_window = (s) => {
|
|
9645
11367
|
const _w_size = s.w_size;
|
|
9646
|
-
let n, more,
|
|
11368
|
+
let n, more, str3;
|
|
9647
11369
|
do {
|
|
9648
11370
|
more = s.window_size - s.lookahead - s.strstart;
|
|
9649
11371
|
if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
|
|
@@ -9663,14 +11385,14 @@ var fill_window = (s) => {
|
|
|
9663
11385
|
n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
|
|
9664
11386
|
s.lookahead += n;
|
|
9665
11387
|
if (s.lookahead + s.insert >= MIN_MATCH) {
|
|
9666
|
-
|
|
9667
|
-
s.ins_h = s.window[
|
|
9668
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
11388
|
+
str3 = s.strstart - s.insert;
|
|
11389
|
+
s.ins_h = s.window[str3];
|
|
11390
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + 1]);
|
|
9669
11391
|
while (s.insert) {
|
|
9670
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
9671
|
-
s.prev[
|
|
9672
|
-
s.head[s.ins_h] =
|
|
9673
|
-
|
|
11392
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + MIN_MATCH - 1]);
|
|
11393
|
+
s.prev[str3 & s.w_mask] = s.head[s.ins_h];
|
|
11394
|
+
s.head[s.ins_h] = str3;
|
|
11395
|
+
str3++;
|
|
9674
11396
|
s.insert--;
|
|
9675
11397
|
if (s.lookahead + s.insert < MIN_MATCH) {
|
|
9676
11398
|
break;
|
|
@@ -9681,48 +11403,48 @@ var fill_window = (s) => {
|
|
|
9681
11403
|
};
|
|
9682
11404
|
var deflate_stored = (s, flush) => {
|
|
9683
11405
|
let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;
|
|
9684
|
-
let
|
|
11406
|
+
let len2, left, have, last = 0;
|
|
9685
11407
|
let used = s.strm.avail_in;
|
|
9686
11408
|
do {
|
|
9687
|
-
|
|
11409
|
+
len2 = 65535;
|
|
9688
11410
|
have = s.bi_valid + 42 >> 3;
|
|
9689
11411
|
if (s.strm.avail_out < have) {
|
|
9690
11412
|
break;
|
|
9691
11413
|
}
|
|
9692
11414
|
have = s.strm.avail_out - have;
|
|
9693
11415
|
left = s.strstart - s.block_start;
|
|
9694
|
-
if (
|
|
9695
|
-
|
|
11416
|
+
if (len2 > left + s.strm.avail_in) {
|
|
11417
|
+
len2 = left + s.strm.avail_in;
|
|
9696
11418
|
}
|
|
9697
|
-
if (
|
|
9698
|
-
|
|
11419
|
+
if (len2 > have) {
|
|
11420
|
+
len2 = have;
|
|
9699
11421
|
}
|
|
9700
|
-
if (
|
|
11422
|
+
if (len2 < min_block && (len2 === 0 && flush !== Z_FINISH$3 || flush === Z_NO_FLUSH$2 || len2 !== left + s.strm.avail_in)) {
|
|
9701
11423
|
break;
|
|
9702
11424
|
}
|
|
9703
|
-
last = flush === Z_FINISH$3 &&
|
|
11425
|
+
last = flush === Z_FINISH$3 && len2 === left + s.strm.avail_in ? 1 : 0;
|
|
9704
11426
|
_tr_stored_block(s, 0, 0, last);
|
|
9705
|
-
s.pending_buf[s.pending - 4] =
|
|
9706
|
-
s.pending_buf[s.pending - 3] =
|
|
9707
|
-
s.pending_buf[s.pending - 2] = ~
|
|
9708
|
-
s.pending_buf[s.pending - 1] = ~
|
|
11427
|
+
s.pending_buf[s.pending - 4] = len2;
|
|
11428
|
+
s.pending_buf[s.pending - 3] = len2 >> 8;
|
|
11429
|
+
s.pending_buf[s.pending - 2] = ~len2;
|
|
11430
|
+
s.pending_buf[s.pending - 1] = ~len2 >> 8;
|
|
9709
11431
|
flush_pending(s.strm);
|
|
9710
11432
|
if (left) {
|
|
9711
|
-
if (left >
|
|
9712
|
-
left =
|
|
11433
|
+
if (left > len2) {
|
|
11434
|
+
left = len2;
|
|
9713
11435
|
}
|
|
9714
11436
|
s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);
|
|
9715
11437
|
s.strm.next_out += left;
|
|
9716
11438
|
s.strm.avail_out -= left;
|
|
9717
11439
|
s.strm.total_out += left;
|
|
9718
11440
|
s.block_start += left;
|
|
9719
|
-
|
|
11441
|
+
len2 -= left;
|
|
9720
11442
|
}
|
|
9721
|
-
if (
|
|
9722
|
-
read_buf(s.strm, s.strm.output, s.strm.next_out,
|
|
9723
|
-
s.strm.next_out +=
|
|
9724
|
-
s.strm.avail_out -=
|
|
9725
|
-
s.strm.total_out +=
|
|
11443
|
+
if (len2) {
|
|
11444
|
+
read_buf(s.strm, s.strm.output, s.strm.next_out, len2);
|
|
11445
|
+
s.strm.next_out += len2;
|
|
11446
|
+
s.strm.avail_out -= len2;
|
|
11447
|
+
s.strm.total_out += len2;
|
|
9726
11448
|
}
|
|
9727
11449
|
} while (last === 0);
|
|
9728
11450
|
used -= s.strm.avail_in;
|
|
@@ -9787,10 +11509,10 @@ var deflate_stored = (s, flush) => {
|
|
|
9787
11509
|
min_block = have > s.w_size ? s.w_size : have;
|
|
9788
11510
|
left = s.strstart - s.block_start;
|
|
9789
11511
|
if (left >= min_block || (left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 && s.strm.avail_in === 0 && left <= have) {
|
|
9790
|
-
|
|
9791
|
-
last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&
|
|
9792
|
-
_tr_stored_block(s, s.block_start,
|
|
9793
|
-
s.block_start +=
|
|
11512
|
+
len2 = left > have ? have : left;
|
|
11513
|
+
last = flush === Z_FINISH$3 && s.strm.avail_in === 0 && len2 === left ? 1 : 0;
|
|
11514
|
+
_tr_stored_block(s, s.block_start, len2, last);
|
|
11515
|
+
s.block_start += len2;
|
|
9794
11516
|
flush_pending(s.strm);
|
|
9795
11517
|
}
|
|
9796
11518
|
return last ? BS_FINISH_STARTED : BS_NEED_MORE;
|
|
@@ -10082,7 +11804,7 @@ var configuration_table = [
|
|
|
10082
11804
|
];
|
|
10083
11805
|
var lm_init = (s) => {
|
|
10084
11806
|
s.window_size = 2 * s.w_size;
|
|
10085
|
-
|
|
11807
|
+
zero2(s.head);
|
|
10086
11808
|
s.max_lazy_match = configuration_table[s.level].max_lazy;
|
|
10087
11809
|
s.good_match = configuration_table[s.level].good_length;
|
|
10088
11810
|
s.nice_match = configuration_table[s.level].nice_length;
|
|
@@ -10136,19 +11858,19 @@ function DeflateState() {
|
|
|
10136
11858
|
this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);
|
|
10137
11859
|
this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);
|
|
10138
11860
|
this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);
|
|
10139
|
-
|
|
10140
|
-
|
|
10141
|
-
|
|
11861
|
+
zero2(this.dyn_ltree);
|
|
11862
|
+
zero2(this.dyn_dtree);
|
|
11863
|
+
zero2(this.bl_tree);
|
|
10142
11864
|
this.l_desc = null;
|
|
10143
11865
|
this.d_desc = null;
|
|
10144
11866
|
this.bl_desc = null;
|
|
10145
11867
|
this.bl_count = new Uint16Array(MAX_BITS + 1);
|
|
10146
11868
|
this.heap = new Uint16Array(2 * L_CODES + 1);
|
|
10147
|
-
|
|
11869
|
+
zero2(this.heap);
|
|
10148
11870
|
this.heap_len = 0;
|
|
10149
11871
|
this.heap_max = 0;
|
|
10150
11872
|
this.depth = new Uint16Array(2 * L_CODES + 1);
|
|
10151
|
-
|
|
11873
|
+
zero2(this.depth);
|
|
10152
11874
|
this.sym_buf = 0;
|
|
10153
11875
|
this.lit_bufsize = 0;
|
|
10154
11876
|
this.sym_next = 0;
|
|
@@ -10359,20 +12081,20 @@ var deflate$2 = (strm, flush) => {
|
|
|
10359
12081
|
let beg = s.pending;
|
|
10360
12082
|
let left = (s.gzhead.extra.length & 65535) - s.gzindex;
|
|
10361
12083
|
while (s.pending + left > s.pending_buf_size) {
|
|
10362
|
-
let
|
|
10363
|
-
s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex +
|
|
12084
|
+
let copy3 = s.pending_buf_size - s.pending;
|
|
12085
|
+
s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy3), s.pending);
|
|
10364
12086
|
s.pending = s.pending_buf_size;
|
|
10365
12087
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
10366
12088
|
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
10367
12089
|
}
|
|
10368
|
-
s.gzindex +=
|
|
12090
|
+
s.gzindex += copy3;
|
|
10369
12091
|
flush_pending(strm);
|
|
10370
12092
|
if (s.pending !== 0) {
|
|
10371
12093
|
s.last_flush = -1;
|
|
10372
12094
|
return Z_OK$3;
|
|
10373
12095
|
}
|
|
10374
12096
|
beg = 0;
|
|
10375
|
-
left -=
|
|
12097
|
+
left -= copy3;
|
|
10376
12098
|
}
|
|
10377
12099
|
let gzhead_extra = new Uint8Array(s.gzhead.extra);
|
|
10378
12100
|
s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);
|
|
@@ -10480,7 +12202,7 @@ var deflate$2 = (strm, flush) => {
|
|
|
10480
12202
|
} else if (flush !== Z_BLOCK$1) {
|
|
10481
12203
|
_tr_stored_block(s, 0, 0, false);
|
|
10482
12204
|
if (flush === Z_FULL_FLUSH$1) {
|
|
10483
|
-
|
|
12205
|
+
zero2(s.head);
|
|
10484
12206
|
if (s.lookahead === 0) {
|
|
10485
12207
|
s.strstart = 0;
|
|
10486
12208
|
s.block_start = 0;
|
|
@@ -10544,7 +12266,7 @@ var deflateSetDictionary = (strm, dictionary) => {
|
|
|
10544
12266
|
s.wrap = 0;
|
|
10545
12267
|
if (dictLength >= s.w_size) {
|
|
10546
12268
|
if (wrap === 0) {
|
|
10547
|
-
|
|
12269
|
+
zero2(s.head);
|
|
10548
12270
|
s.strstart = 0;
|
|
10549
12271
|
s.block_start = 0;
|
|
10550
12272
|
s.insert = 0;
|
|
@@ -10562,15 +12284,15 @@ var deflateSetDictionary = (strm, dictionary) => {
|
|
|
10562
12284
|
strm.input = dictionary;
|
|
10563
12285
|
fill_window(s);
|
|
10564
12286
|
while (s.lookahead >= MIN_MATCH) {
|
|
10565
|
-
let
|
|
12287
|
+
let str3 = s.strstart;
|
|
10566
12288
|
let n = s.lookahead - (MIN_MATCH - 1);
|
|
10567
12289
|
do {
|
|
10568
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
10569
|
-
s.prev[
|
|
10570
|
-
s.head[s.ins_h] =
|
|
10571
|
-
|
|
12290
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + MIN_MATCH - 1]);
|
|
12291
|
+
s.prev[str3 & s.w_mask] = s.head[s.ins_h];
|
|
12292
|
+
s.head[s.ins_h] = str3;
|
|
12293
|
+
str3++;
|
|
10572
12294
|
} while (--n);
|
|
10573
|
-
s.strstart =
|
|
12295
|
+
s.strstart = str3;
|
|
10574
12296
|
s.lookahead = MIN_MATCH - 1;
|
|
10575
12297
|
fill_window(s);
|
|
10576
12298
|
}
|
|
@@ -10628,11 +12350,11 @@ var assign = function(obj) {
|
|
|
10628
12350
|
return obj;
|
|
10629
12351
|
};
|
|
10630
12352
|
var flattenChunks = (chunks) => {
|
|
10631
|
-
let
|
|
12353
|
+
let len2 = 0;
|
|
10632
12354
|
for (let i = 0, l = chunks.length; i < l; i++) {
|
|
10633
|
-
|
|
12355
|
+
len2 += chunks[i].length;
|
|
10634
12356
|
}
|
|
10635
|
-
const result = new Uint8Array(
|
|
12357
|
+
const result = new Uint8Array(len2);
|
|
10636
12358
|
for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {
|
|
10637
12359
|
let chunk = chunks[i];
|
|
10638
12360
|
result.set(chunk, pos);
|
|
@@ -10655,15 +12377,15 @@ for (let q = 0; q < 256; q++) {
|
|
|
10655
12377
|
_utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
|
|
10656
12378
|
}
|
|
10657
12379
|
_utf8len[254] = _utf8len[254] = 1;
|
|
10658
|
-
var string2buf = (
|
|
12380
|
+
var string2buf = (str3) => {
|
|
10659
12381
|
if (typeof TextEncoder === "function" && TextEncoder.prototype.encode) {
|
|
10660
|
-
return new TextEncoder().encode(
|
|
12382
|
+
return new TextEncoder().encode(str3);
|
|
10661
12383
|
}
|
|
10662
|
-
let buf, c, c2, m_pos, i, str_len =
|
|
12384
|
+
let buf, c, c2, m_pos, i, str_len = str3.length, buf_len = 0;
|
|
10663
12385
|
for (m_pos = 0; m_pos < str_len; m_pos++) {
|
|
10664
|
-
c =
|
|
12386
|
+
c = str3.charCodeAt(m_pos);
|
|
10665
12387
|
if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
|
|
10666
|
-
c2 =
|
|
12388
|
+
c2 = str3.charCodeAt(m_pos + 1);
|
|
10667
12389
|
if ((c2 & 64512) === 56320) {
|
|
10668
12390
|
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
|
|
10669
12391
|
m_pos++;
|
|
@@ -10673,9 +12395,9 @@ var string2buf = (str) => {
|
|
|
10673
12395
|
}
|
|
10674
12396
|
buf = new Uint8Array(buf_len);
|
|
10675
12397
|
for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
|
|
10676
|
-
c =
|
|
12398
|
+
c = str3.charCodeAt(m_pos);
|
|
10677
12399
|
if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
|
|
10678
|
-
c2 =
|
|
12400
|
+
c2 = str3.charCodeAt(m_pos + 1);
|
|
10679
12401
|
if ((c2 & 64512) === 56320) {
|
|
10680
12402
|
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
|
|
10681
12403
|
m_pos++;
|
|
@@ -10699,26 +12421,26 @@ var string2buf = (str) => {
|
|
|
10699
12421
|
}
|
|
10700
12422
|
return buf;
|
|
10701
12423
|
};
|
|
10702
|
-
var buf2binstring = (buf,
|
|
10703
|
-
if (
|
|
12424
|
+
var buf2binstring = (buf, len2) => {
|
|
12425
|
+
if (len2 < 65534) {
|
|
10704
12426
|
if (buf.subarray && STR_APPLY_UIA_OK) {
|
|
10705
|
-
return String.fromCharCode.apply(null, buf.length ===
|
|
12427
|
+
return String.fromCharCode.apply(null, buf.length === len2 ? buf : buf.subarray(0, len2));
|
|
10706
12428
|
}
|
|
10707
12429
|
}
|
|
10708
12430
|
let result = "";
|
|
10709
|
-
for (let i = 0; i <
|
|
12431
|
+
for (let i = 0; i < len2; i++) {
|
|
10710
12432
|
result += String.fromCharCode(buf[i]);
|
|
10711
12433
|
}
|
|
10712
12434
|
return result;
|
|
10713
12435
|
};
|
|
10714
|
-
var buf2string = (buf,
|
|
10715
|
-
const
|
|
12436
|
+
var buf2string = (buf, max2) => {
|
|
12437
|
+
const len2 = max2 || buf.length;
|
|
10716
12438
|
if (typeof TextDecoder === "function" && TextDecoder.prototype.decode) {
|
|
10717
|
-
return new TextDecoder().decode(buf.subarray(0,
|
|
12439
|
+
return new TextDecoder().decode(buf.subarray(0, max2));
|
|
10718
12440
|
}
|
|
10719
12441
|
let i, out;
|
|
10720
|
-
const utf16buf = new Array(
|
|
10721
|
-
for (out = 0, i = 0; i <
|
|
12442
|
+
const utf16buf = new Array(len2 * 2);
|
|
12443
|
+
for (out = 0, i = 0; i < len2; ) {
|
|
10722
12444
|
let c = buf[i++];
|
|
10723
12445
|
if (c < 128) {
|
|
10724
12446
|
utf16buf[out++] = c;
|
|
@@ -10731,7 +12453,7 @@ var buf2string = (buf, max) => {
|
|
|
10731
12453
|
continue;
|
|
10732
12454
|
}
|
|
10733
12455
|
c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7;
|
|
10734
|
-
while (c_len > 1 && i <
|
|
12456
|
+
while (c_len > 1 && i < len2) {
|
|
10735
12457
|
c = c << 6 | buf[i++] & 63;
|
|
10736
12458
|
c_len--;
|
|
10737
12459
|
}
|
|
@@ -10749,22 +12471,22 @@ var buf2string = (buf, max) => {
|
|
|
10749
12471
|
}
|
|
10750
12472
|
return buf2binstring(utf16buf, out);
|
|
10751
12473
|
};
|
|
10752
|
-
var utf8border = (buf,
|
|
10753
|
-
|
|
10754
|
-
if (
|
|
10755
|
-
|
|
12474
|
+
var utf8border = (buf, max2) => {
|
|
12475
|
+
max2 = max2 || buf.length;
|
|
12476
|
+
if (max2 > buf.length) {
|
|
12477
|
+
max2 = buf.length;
|
|
10756
12478
|
}
|
|
10757
|
-
let pos =
|
|
12479
|
+
let pos = max2 - 1;
|
|
10758
12480
|
while (pos >= 0 && (buf[pos] & 192) === 128) {
|
|
10759
12481
|
pos--;
|
|
10760
12482
|
}
|
|
10761
12483
|
if (pos < 0) {
|
|
10762
|
-
return
|
|
12484
|
+
return max2;
|
|
10763
12485
|
}
|
|
10764
12486
|
if (pos === 0) {
|
|
10765
|
-
return
|
|
12487
|
+
return max2;
|
|
10766
12488
|
}
|
|
10767
|
-
return pos + _utf8len[buf[pos]] >
|
|
12489
|
+
return pos + _utf8len[buf[pos]] > max2 ? pos : max2;
|
|
10768
12490
|
};
|
|
10769
12491
|
var strings = {
|
|
10770
12492
|
string2buf,
|
|
@@ -10963,8 +12685,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10963
12685
|
let dmask;
|
|
10964
12686
|
let here;
|
|
10965
12687
|
let op;
|
|
10966
|
-
let
|
|
10967
|
-
let
|
|
12688
|
+
let len2;
|
|
12689
|
+
let dist2;
|
|
10968
12690
|
let from;
|
|
10969
12691
|
let from_source;
|
|
10970
12692
|
let input, output;
|
|
@@ -11005,14 +12727,14 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11005
12727
|
if (op === 0) {
|
|
11006
12728
|
output[_out++] = here & 65535;
|
|
11007
12729
|
} else if (op & 16) {
|
|
11008
|
-
|
|
12730
|
+
len2 = here & 65535;
|
|
11009
12731
|
op &= 15;
|
|
11010
12732
|
if (op) {
|
|
11011
12733
|
if (bits < op) {
|
|
11012
12734
|
hold += input[_in++] << bits;
|
|
11013
12735
|
bits += 8;
|
|
11014
12736
|
}
|
|
11015
|
-
|
|
12737
|
+
len2 += hold & (1 << op) - 1;
|
|
11016
12738
|
hold >>>= op;
|
|
11017
12739
|
bits -= op;
|
|
11018
12740
|
}
|
|
@@ -11030,7 +12752,7 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11030
12752
|
bits -= op;
|
|
11031
12753
|
op = here >>> 16 & 255;
|
|
11032
12754
|
if (op & 16) {
|
|
11033
|
-
|
|
12755
|
+
dist2 = here & 65535;
|
|
11034
12756
|
op &= 15;
|
|
11035
12757
|
if (bits < op) {
|
|
11036
12758
|
hold += input[_in++] << bits;
|
|
@@ -11040,8 +12762,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11040
12762
|
bits += 8;
|
|
11041
12763
|
}
|
|
11042
12764
|
}
|
|
11043
|
-
|
|
11044
|
-
if (
|
|
12765
|
+
dist2 += hold & (1 << op) - 1;
|
|
12766
|
+
if (dist2 > dmax) {
|
|
11045
12767
|
strm.msg = "invalid distance too far back";
|
|
11046
12768
|
state.mode = BAD$1;
|
|
11047
12769
|
break top;
|
|
@@ -11049,8 +12771,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11049
12771
|
hold >>>= op;
|
|
11050
12772
|
bits -= op;
|
|
11051
12773
|
op = _out - beg;
|
|
11052
|
-
if (
|
|
11053
|
-
op =
|
|
12774
|
+
if (dist2 > op) {
|
|
12775
|
+
op = dist2 - op;
|
|
11054
12776
|
if (op > whave) {
|
|
11055
12777
|
if (state.sane) {
|
|
11056
12778
|
strm.msg = "invalid distance too far back";
|
|
@@ -11062,67 +12784,67 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11062
12784
|
from_source = s_window;
|
|
11063
12785
|
if (wnext === 0) {
|
|
11064
12786
|
from += wsize - op;
|
|
11065
|
-
if (op <
|
|
11066
|
-
|
|
12787
|
+
if (op < len2) {
|
|
12788
|
+
len2 -= op;
|
|
11067
12789
|
do {
|
|
11068
12790
|
output[_out++] = s_window[from++];
|
|
11069
12791
|
} while (--op);
|
|
11070
|
-
from = _out -
|
|
12792
|
+
from = _out - dist2;
|
|
11071
12793
|
from_source = output;
|
|
11072
12794
|
}
|
|
11073
12795
|
} else if (wnext < op) {
|
|
11074
12796
|
from += wsize + wnext - op;
|
|
11075
12797
|
op -= wnext;
|
|
11076
|
-
if (op <
|
|
11077
|
-
|
|
12798
|
+
if (op < len2) {
|
|
12799
|
+
len2 -= op;
|
|
11078
12800
|
do {
|
|
11079
12801
|
output[_out++] = s_window[from++];
|
|
11080
12802
|
} while (--op);
|
|
11081
12803
|
from = 0;
|
|
11082
|
-
if (wnext <
|
|
12804
|
+
if (wnext < len2) {
|
|
11083
12805
|
op = wnext;
|
|
11084
|
-
|
|
12806
|
+
len2 -= op;
|
|
11085
12807
|
do {
|
|
11086
12808
|
output[_out++] = s_window[from++];
|
|
11087
12809
|
} while (--op);
|
|
11088
|
-
from = _out -
|
|
12810
|
+
from = _out - dist2;
|
|
11089
12811
|
from_source = output;
|
|
11090
12812
|
}
|
|
11091
12813
|
}
|
|
11092
12814
|
} else {
|
|
11093
12815
|
from += wnext - op;
|
|
11094
|
-
if (op <
|
|
11095
|
-
|
|
12816
|
+
if (op < len2) {
|
|
12817
|
+
len2 -= op;
|
|
11096
12818
|
do {
|
|
11097
12819
|
output[_out++] = s_window[from++];
|
|
11098
12820
|
} while (--op);
|
|
11099
|
-
from = _out -
|
|
12821
|
+
from = _out - dist2;
|
|
11100
12822
|
from_source = output;
|
|
11101
12823
|
}
|
|
11102
12824
|
}
|
|
11103
|
-
while (
|
|
12825
|
+
while (len2 > 2) {
|
|
11104
12826
|
output[_out++] = from_source[from++];
|
|
11105
12827
|
output[_out++] = from_source[from++];
|
|
11106
12828
|
output[_out++] = from_source[from++];
|
|
11107
|
-
|
|
12829
|
+
len2 -= 3;
|
|
11108
12830
|
}
|
|
11109
|
-
if (
|
|
12831
|
+
if (len2) {
|
|
11110
12832
|
output[_out++] = from_source[from++];
|
|
11111
|
-
if (
|
|
12833
|
+
if (len2 > 1) {
|
|
11112
12834
|
output[_out++] = from_source[from++];
|
|
11113
12835
|
}
|
|
11114
12836
|
}
|
|
11115
12837
|
} else {
|
|
11116
|
-
from = _out -
|
|
12838
|
+
from = _out - dist2;
|
|
11117
12839
|
do {
|
|
11118
12840
|
output[_out++] = output[from++];
|
|
11119
12841
|
output[_out++] = output[from++];
|
|
11120
12842
|
output[_out++] = output[from++];
|
|
11121
|
-
|
|
11122
|
-
} while (
|
|
11123
|
-
if (
|
|
12843
|
+
len2 -= 3;
|
|
12844
|
+
} while (len2 > 2);
|
|
12845
|
+
if (len2) {
|
|
11124
12846
|
output[_out++] = output[from++];
|
|
11125
|
-
if (
|
|
12847
|
+
if (len2 > 1) {
|
|
11126
12848
|
output[_out++] = output[from++];
|
|
11127
12849
|
}
|
|
11128
12850
|
}
|
|
@@ -11151,9 +12873,9 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
11151
12873
|
break;
|
|
11152
12874
|
}
|
|
11153
12875
|
} while (_in < last && _out < end);
|
|
11154
|
-
|
|
11155
|
-
_in -=
|
|
11156
|
-
bits -=
|
|
12876
|
+
len2 = bits >> 3;
|
|
12877
|
+
_in -= len2;
|
|
12878
|
+
bits -= len2 << 3;
|
|
11157
12879
|
hold &= (1 << bits) - 1;
|
|
11158
12880
|
strm.next_in = _in;
|
|
11159
12881
|
strm.next_out = _out;
|
|
@@ -11309,9 +13031,9 @@ var dext = new Uint8Array([
|
|
|
11309
13031
|
]);
|
|
11310
13032
|
var inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) => {
|
|
11311
13033
|
const bits = opts.bits;
|
|
11312
|
-
let
|
|
13034
|
+
let len2 = 0;
|
|
11313
13035
|
let sym = 0;
|
|
11314
|
-
let
|
|
13036
|
+
let min2 = 0, max2 = 0;
|
|
11315
13037
|
let root = 0;
|
|
11316
13038
|
let curr = 0;
|
|
11317
13039
|
let drop = 0;
|
|
@@ -11329,49 +13051,49 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11329
13051
|
const offs = new Uint16Array(MAXBITS + 1);
|
|
11330
13052
|
let extra = null;
|
|
11331
13053
|
let here_bits, here_op, here_val;
|
|
11332
|
-
for (
|
|
11333
|
-
count[
|
|
13054
|
+
for (len2 = 0; len2 <= MAXBITS; len2++) {
|
|
13055
|
+
count[len2] = 0;
|
|
11334
13056
|
}
|
|
11335
13057
|
for (sym = 0; sym < codes; sym++) {
|
|
11336
13058
|
count[lens[lens_index + sym]]++;
|
|
11337
13059
|
}
|
|
11338
13060
|
root = bits;
|
|
11339
|
-
for (
|
|
11340
|
-
if (count[
|
|
13061
|
+
for (max2 = MAXBITS; max2 >= 1; max2--) {
|
|
13062
|
+
if (count[max2] !== 0) {
|
|
11341
13063
|
break;
|
|
11342
13064
|
}
|
|
11343
13065
|
}
|
|
11344
|
-
if (root >
|
|
11345
|
-
root =
|
|
13066
|
+
if (root > max2) {
|
|
13067
|
+
root = max2;
|
|
11346
13068
|
}
|
|
11347
|
-
if (
|
|
13069
|
+
if (max2 === 0) {
|
|
11348
13070
|
table[table_index++] = 1 << 24 | 64 << 16 | 0;
|
|
11349
13071
|
table[table_index++] = 1 << 24 | 64 << 16 | 0;
|
|
11350
13072
|
opts.bits = 1;
|
|
11351
13073
|
return 0;
|
|
11352
13074
|
}
|
|
11353
|
-
for (
|
|
11354
|
-
if (count[
|
|
13075
|
+
for (min2 = 1; min2 < max2; min2++) {
|
|
13076
|
+
if (count[min2] !== 0) {
|
|
11355
13077
|
break;
|
|
11356
13078
|
}
|
|
11357
13079
|
}
|
|
11358
|
-
if (root <
|
|
11359
|
-
root =
|
|
13080
|
+
if (root < min2) {
|
|
13081
|
+
root = min2;
|
|
11360
13082
|
}
|
|
11361
13083
|
left = 1;
|
|
11362
|
-
for (
|
|
13084
|
+
for (len2 = 1; len2 <= MAXBITS; len2++) {
|
|
11363
13085
|
left <<= 1;
|
|
11364
|
-
left -= count[
|
|
13086
|
+
left -= count[len2];
|
|
11365
13087
|
if (left < 0) {
|
|
11366
13088
|
return -1;
|
|
11367
13089
|
}
|
|
11368
13090
|
}
|
|
11369
|
-
if (left > 0 && (type === CODES$1 ||
|
|
13091
|
+
if (left > 0 && (type === CODES$1 || max2 !== 1)) {
|
|
11370
13092
|
return -1;
|
|
11371
13093
|
}
|
|
11372
13094
|
offs[1] = 0;
|
|
11373
|
-
for (
|
|
11374
|
-
offs[
|
|
13095
|
+
for (len2 = 1; len2 < MAXBITS; len2++) {
|
|
13096
|
+
offs[len2 + 1] = offs[len2] + count[len2];
|
|
11375
13097
|
}
|
|
11376
13098
|
for (sym = 0; sym < codes; sym++) {
|
|
11377
13099
|
if (lens[lens_index + sym] !== 0) {
|
|
@@ -11392,7 +13114,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11392
13114
|
}
|
|
11393
13115
|
huff = 0;
|
|
11394
13116
|
sym = 0;
|
|
11395
|
-
|
|
13117
|
+
len2 = min2;
|
|
11396
13118
|
next = table_index;
|
|
11397
13119
|
curr = root;
|
|
11398
13120
|
drop = 0;
|
|
@@ -11403,7 +13125,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11403
13125
|
return 1;
|
|
11404
13126
|
}
|
|
11405
13127
|
for (; ; ) {
|
|
11406
|
-
here_bits =
|
|
13128
|
+
here_bits = len2 - drop;
|
|
11407
13129
|
if (work[sym] + 1 < match) {
|
|
11408
13130
|
here_op = 0;
|
|
11409
13131
|
here_val = work[sym];
|
|
@@ -11414,14 +13136,14 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11414
13136
|
here_op = 32 + 64;
|
|
11415
13137
|
here_val = 0;
|
|
11416
13138
|
}
|
|
11417
|
-
incr = 1 <<
|
|
13139
|
+
incr = 1 << len2 - drop;
|
|
11418
13140
|
fill = 1 << curr;
|
|
11419
|
-
|
|
13141
|
+
min2 = fill;
|
|
11420
13142
|
do {
|
|
11421
13143
|
fill -= incr;
|
|
11422
13144
|
table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
|
|
11423
13145
|
} while (fill !== 0);
|
|
11424
|
-
incr = 1 <<
|
|
13146
|
+
incr = 1 << len2 - 1;
|
|
11425
13147
|
while (huff & incr) {
|
|
11426
13148
|
incr >>= 1;
|
|
11427
13149
|
}
|
|
@@ -11432,20 +13154,20 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11432
13154
|
huff = 0;
|
|
11433
13155
|
}
|
|
11434
13156
|
sym++;
|
|
11435
|
-
if (--count[
|
|
11436
|
-
if (
|
|
13157
|
+
if (--count[len2] === 0) {
|
|
13158
|
+
if (len2 === max2) {
|
|
11437
13159
|
break;
|
|
11438
13160
|
}
|
|
11439
|
-
|
|
13161
|
+
len2 = lens[lens_index + work[sym]];
|
|
11440
13162
|
}
|
|
11441
|
-
if (
|
|
13163
|
+
if (len2 > root && (huff & mask) !== low) {
|
|
11442
13164
|
if (drop === 0) {
|
|
11443
13165
|
drop = root;
|
|
11444
13166
|
}
|
|
11445
|
-
next +=
|
|
11446
|
-
curr =
|
|
13167
|
+
next += min2;
|
|
13168
|
+
curr = len2 - drop;
|
|
11447
13169
|
left = 1 << curr;
|
|
11448
|
-
while (curr + drop <
|
|
13170
|
+
while (curr + drop < max2) {
|
|
11449
13171
|
left -= count[curr + drop];
|
|
11450
13172
|
if (left <= 0) {
|
|
11451
13173
|
break;
|
|
@@ -11462,7 +13184,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11462
13184
|
}
|
|
11463
13185
|
}
|
|
11464
13186
|
if (huff !== 0) {
|
|
11465
|
-
table[next + huff] =
|
|
13187
|
+
table[next + huff] = len2 - drop << 24 | 64 << 16 | 0;
|
|
11466
13188
|
}
|
|
11467
13189
|
opts.bits = root;
|
|
11468
13190
|
return 0;
|
|
@@ -11681,8 +13403,8 @@ var fixedtables = (state) => {
|
|
|
11681
13403
|
state.distcode = distfix;
|
|
11682
13404
|
state.distbits = 5;
|
|
11683
13405
|
};
|
|
11684
|
-
var updatewindow = (strm, src, end,
|
|
11685
|
-
let
|
|
13406
|
+
var updatewindow = (strm, src, end, copy3) => {
|
|
13407
|
+
let dist2;
|
|
11686
13408
|
const state = strm.state;
|
|
11687
13409
|
if (state.window === null) {
|
|
11688
13410
|
state.wsize = 1 << state.wbits;
|
|
@@ -11690,28 +13412,28 @@ var updatewindow = (strm, src, end, copy) => {
|
|
|
11690
13412
|
state.whave = 0;
|
|
11691
13413
|
state.window = new Uint8Array(state.wsize);
|
|
11692
13414
|
}
|
|
11693
|
-
if (
|
|
13415
|
+
if (copy3 >= state.wsize) {
|
|
11694
13416
|
state.window.set(src.subarray(end - state.wsize, end), 0);
|
|
11695
13417
|
state.wnext = 0;
|
|
11696
13418
|
state.whave = state.wsize;
|
|
11697
13419
|
} else {
|
|
11698
|
-
|
|
11699
|
-
if (
|
|
11700
|
-
|
|
11701
|
-
}
|
|
11702
|
-
state.window.set(src.subarray(end -
|
|
11703
|
-
|
|
11704
|
-
if (
|
|
11705
|
-
state.window.set(src.subarray(end -
|
|
11706
|
-
state.wnext =
|
|
13420
|
+
dist2 = state.wsize - state.wnext;
|
|
13421
|
+
if (dist2 > copy3) {
|
|
13422
|
+
dist2 = copy3;
|
|
13423
|
+
}
|
|
13424
|
+
state.window.set(src.subarray(end - copy3, end - copy3 + dist2), state.wnext);
|
|
13425
|
+
copy3 -= dist2;
|
|
13426
|
+
if (copy3) {
|
|
13427
|
+
state.window.set(src.subarray(end - copy3, end), 0);
|
|
13428
|
+
state.wnext = copy3;
|
|
11707
13429
|
state.whave = state.wsize;
|
|
11708
13430
|
} else {
|
|
11709
|
-
state.wnext +=
|
|
13431
|
+
state.wnext += dist2;
|
|
11710
13432
|
if (state.wnext === state.wsize) {
|
|
11711
13433
|
state.wnext = 0;
|
|
11712
13434
|
}
|
|
11713
13435
|
if (state.whave < state.wsize) {
|
|
11714
|
-
state.whave +=
|
|
13436
|
+
state.whave += dist2;
|
|
11715
13437
|
}
|
|
11716
13438
|
}
|
|
11717
13439
|
}
|
|
@@ -11726,13 +13448,13 @@ var inflate$2 = (strm, flush) => {
|
|
|
11726
13448
|
let hold;
|
|
11727
13449
|
let bits;
|
|
11728
13450
|
let _in, _out;
|
|
11729
|
-
let
|
|
13451
|
+
let copy3;
|
|
11730
13452
|
let from;
|
|
11731
13453
|
let from_source;
|
|
11732
13454
|
let here = 0;
|
|
11733
13455
|
let here_bits, here_op, here_val;
|
|
11734
13456
|
let last_bits, last_op, last_val;
|
|
11735
|
-
let
|
|
13457
|
+
let len2;
|
|
11736
13458
|
let ret;
|
|
11737
13459
|
const hbuf = new Uint8Array(4);
|
|
11738
13460
|
let opts;
|
|
@@ -11804,11 +13526,11 @@ var inflate$2 = (strm, flush) => {
|
|
|
11804
13526
|
}
|
|
11805
13527
|
hold >>>= 4;
|
|
11806
13528
|
bits -= 4;
|
|
11807
|
-
|
|
13529
|
+
len2 = (hold & 15) + 8;
|
|
11808
13530
|
if (state.wbits === 0) {
|
|
11809
|
-
state.wbits =
|
|
13531
|
+
state.wbits = len2;
|
|
11810
13532
|
}
|
|
11811
|
-
if (
|
|
13533
|
+
if (len2 > 15 || len2 > state.wbits) {
|
|
11812
13534
|
strm.msg = "invalid window size";
|
|
11813
13535
|
state.mode = BAD;
|
|
11814
13536
|
break;
|
|
@@ -11925,13 +13647,13 @@ var inflate$2 = (strm, flush) => {
|
|
|
11925
13647
|
/* falls through */
|
|
11926
13648
|
case EXTRA:
|
|
11927
13649
|
if (state.flags & 1024) {
|
|
11928
|
-
|
|
11929
|
-
if (
|
|
11930
|
-
|
|
13650
|
+
copy3 = state.length;
|
|
13651
|
+
if (copy3 > have) {
|
|
13652
|
+
copy3 = have;
|
|
11931
13653
|
}
|
|
11932
|
-
if (
|
|
13654
|
+
if (copy3) {
|
|
11933
13655
|
if (state.head) {
|
|
11934
|
-
|
|
13656
|
+
len2 = state.head.extra_len - state.length;
|
|
11935
13657
|
if (!state.head.extra) {
|
|
11936
13658
|
state.head.extra = new Uint8Array(state.head.extra_len);
|
|
11937
13659
|
}
|
|
@@ -11940,18 +13662,18 @@ var inflate$2 = (strm, flush) => {
|
|
|
11940
13662
|
next,
|
|
11941
13663
|
// extra field is limited to 65536 bytes
|
|
11942
13664
|
// - no need for additional size check
|
|
11943
|
-
next +
|
|
13665
|
+
next + copy3
|
|
11944
13666
|
),
|
|
11945
13667
|
/*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
|
|
11946
|
-
|
|
13668
|
+
len2
|
|
11947
13669
|
);
|
|
11948
13670
|
}
|
|
11949
13671
|
if (state.flags & 512 && state.wrap & 4) {
|
|
11950
|
-
state.check = crc32_1(state.check, input,
|
|
13672
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
11951
13673
|
}
|
|
11952
|
-
have -=
|
|
11953
|
-
next +=
|
|
11954
|
-
state.length -=
|
|
13674
|
+
have -= copy3;
|
|
13675
|
+
next += copy3;
|
|
13676
|
+
state.length -= copy3;
|
|
11955
13677
|
}
|
|
11956
13678
|
if (state.length) {
|
|
11957
13679
|
break inf_leave;
|
|
@@ -11965,19 +13687,19 @@ var inflate$2 = (strm, flush) => {
|
|
|
11965
13687
|
if (have === 0) {
|
|
11966
13688
|
break inf_leave;
|
|
11967
13689
|
}
|
|
11968
|
-
|
|
13690
|
+
copy3 = 0;
|
|
11969
13691
|
do {
|
|
11970
|
-
|
|
11971
|
-
if (state.head &&
|
|
11972
|
-
state.head.name += String.fromCharCode(
|
|
13692
|
+
len2 = input[next + copy3++];
|
|
13693
|
+
if (state.head && len2 && state.length < 65536) {
|
|
13694
|
+
state.head.name += String.fromCharCode(len2);
|
|
11973
13695
|
}
|
|
11974
|
-
} while (
|
|
13696
|
+
} while (len2 && copy3 < have);
|
|
11975
13697
|
if (state.flags & 512 && state.wrap & 4) {
|
|
11976
|
-
state.check = crc32_1(state.check, input,
|
|
13698
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
11977
13699
|
}
|
|
11978
|
-
have -=
|
|
11979
|
-
next +=
|
|
11980
|
-
if (
|
|
13700
|
+
have -= copy3;
|
|
13701
|
+
next += copy3;
|
|
13702
|
+
if (len2) {
|
|
11981
13703
|
break inf_leave;
|
|
11982
13704
|
}
|
|
11983
13705
|
} else if (state.head) {
|
|
@@ -11991,19 +13713,19 @@ var inflate$2 = (strm, flush) => {
|
|
|
11991
13713
|
if (have === 0) {
|
|
11992
13714
|
break inf_leave;
|
|
11993
13715
|
}
|
|
11994
|
-
|
|
13716
|
+
copy3 = 0;
|
|
11995
13717
|
do {
|
|
11996
|
-
|
|
11997
|
-
if (state.head &&
|
|
11998
|
-
state.head.comment += String.fromCharCode(
|
|
13718
|
+
len2 = input[next + copy3++];
|
|
13719
|
+
if (state.head && len2 && state.length < 65536) {
|
|
13720
|
+
state.head.comment += String.fromCharCode(len2);
|
|
11999
13721
|
}
|
|
12000
|
-
} while (
|
|
13722
|
+
} while (len2 && copy3 < have);
|
|
12001
13723
|
if (state.flags & 512 && state.wrap & 4) {
|
|
12002
|
-
state.check = crc32_1(state.check, input,
|
|
13724
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
12003
13725
|
}
|
|
12004
|
-
have -=
|
|
12005
|
-
next +=
|
|
12006
|
-
if (
|
|
13726
|
+
have -= copy3;
|
|
13727
|
+
next += copy3;
|
|
13728
|
+
if (len2) {
|
|
12007
13729
|
break inf_leave;
|
|
12008
13730
|
}
|
|
12009
13731
|
} else if (state.head) {
|
|
@@ -12137,23 +13859,23 @@ var inflate$2 = (strm, flush) => {
|
|
|
12137
13859
|
state.mode = COPY;
|
|
12138
13860
|
/* falls through */
|
|
12139
13861
|
case COPY:
|
|
12140
|
-
|
|
12141
|
-
if (
|
|
12142
|
-
if (
|
|
12143
|
-
|
|
13862
|
+
copy3 = state.length;
|
|
13863
|
+
if (copy3) {
|
|
13864
|
+
if (copy3 > have) {
|
|
13865
|
+
copy3 = have;
|
|
12144
13866
|
}
|
|
12145
|
-
if (
|
|
12146
|
-
|
|
13867
|
+
if (copy3 > left) {
|
|
13868
|
+
copy3 = left;
|
|
12147
13869
|
}
|
|
12148
|
-
if (
|
|
13870
|
+
if (copy3 === 0) {
|
|
12149
13871
|
break inf_leave;
|
|
12150
13872
|
}
|
|
12151
|
-
output.set(input.subarray(next, next +
|
|
12152
|
-
have -=
|
|
12153
|
-
next +=
|
|
12154
|
-
left -=
|
|
12155
|
-
put +=
|
|
12156
|
-
state.length -=
|
|
13873
|
+
output.set(input.subarray(next, next + copy3), put);
|
|
13874
|
+
have -= copy3;
|
|
13875
|
+
next += copy3;
|
|
13876
|
+
left -= copy3;
|
|
13877
|
+
put += copy3;
|
|
13878
|
+
state.length -= copy3;
|
|
12157
13879
|
break;
|
|
12158
13880
|
}
|
|
12159
13881
|
state.mode = TYPE;
|
|
@@ -12253,8 +13975,8 @@ var inflate$2 = (strm, flush) => {
|
|
|
12253
13975
|
state.mode = BAD;
|
|
12254
13976
|
break;
|
|
12255
13977
|
}
|
|
12256
|
-
|
|
12257
|
-
|
|
13978
|
+
len2 = state.lens[state.have - 1];
|
|
13979
|
+
copy3 = 3 + (hold & 3);
|
|
12258
13980
|
hold >>>= 2;
|
|
12259
13981
|
bits -= 2;
|
|
12260
13982
|
} else if (here_val === 17) {
|
|
@@ -12269,8 +13991,8 @@ var inflate$2 = (strm, flush) => {
|
|
|
12269
13991
|
}
|
|
12270
13992
|
hold >>>= here_bits;
|
|
12271
13993
|
bits -= here_bits;
|
|
12272
|
-
|
|
12273
|
-
|
|
13994
|
+
len2 = 0;
|
|
13995
|
+
copy3 = 3 + (hold & 7);
|
|
12274
13996
|
hold >>>= 3;
|
|
12275
13997
|
bits -= 3;
|
|
12276
13998
|
} else {
|
|
@@ -12285,18 +14007,18 @@ var inflate$2 = (strm, flush) => {
|
|
|
12285
14007
|
}
|
|
12286
14008
|
hold >>>= here_bits;
|
|
12287
14009
|
bits -= here_bits;
|
|
12288
|
-
|
|
12289
|
-
|
|
14010
|
+
len2 = 0;
|
|
14011
|
+
copy3 = 11 + (hold & 127);
|
|
12290
14012
|
hold >>>= 7;
|
|
12291
14013
|
bits -= 7;
|
|
12292
14014
|
}
|
|
12293
|
-
if (state.have +
|
|
14015
|
+
if (state.have + copy3 > state.nlen + state.ndist) {
|
|
12294
14016
|
strm.msg = "invalid bit length repeat";
|
|
12295
14017
|
state.mode = BAD;
|
|
12296
14018
|
break;
|
|
12297
14019
|
}
|
|
12298
|
-
while (
|
|
12299
|
-
state.lens[state.have++] =
|
|
14020
|
+
while (copy3--) {
|
|
14021
|
+
state.lens[state.have++] = len2;
|
|
12300
14022
|
}
|
|
12301
14023
|
}
|
|
12302
14024
|
}
|
|
@@ -12514,39 +14236,39 @@ var inflate$2 = (strm, flush) => {
|
|
|
12514
14236
|
if (left === 0) {
|
|
12515
14237
|
break inf_leave;
|
|
12516
14238
|
}
|
|
12517
|
-
|
|
12518
|
-
if (state.offset >
|
|
12519
|
-
|
|
12520
|
-
if (
|
|
14239
|
+
copy3 = _out - left;
|
|
14240
|
+
if (state.offset > copy3) {
|
|
14241
|
+
copy3 = state.offset - copy3;
|
|
14242
|
+
if (copy3 > state.whave) {
|
|
12521
14243
|
if (state.sane) {
|
|
12522
14244
|
strm.msg = "invalid distance too far back";
|
|
12523
14245
|
state.mode = BAD;
|
|
12524
14246
|
break;
|
|
12525
14247
|
}
|
|
12526
14248
|
}
|
|
12527
|
-
if (
|
|
12528
|
-
|
|
12529
|
-
from = state.wsize -
|
|
14249
|
+
if (copy3 > state.wnext) {
|
|
14250
|
+
copy3 -= state.wnext;
|
|
14251
|
+
from = state.wsize - copy3;
|
|
12530
14252
|
} else {
|
|
12531
|
-
from = state.wnext -
|
|
14253
|
+
from = state.wnext - copy3;
|
|
12532
14254
|
}
|
|
12533
|
-
if (
|
|
12534
|
-
|
|
14255
|
+
if (copy3 > state.length) {
|
|
14256
|
+
copy3 = state.length;
|
|
12535
14257
|
}
|
|
12536
14258
|
from_source = state.window;
|
|
12537
14259
|
} else {
|
|
12538
14260
|
from_source = output;
|
|
12539
14261
|
from = put - state.offset;
|
|
12540
|
-
|
|
14262
|
+
copy3 = state.length;
|
|
12541
14263
|
}
|
|
12542
|
-
if (
|
|
12543
|
-
|
|
14264
|
+
if (copy3 > left) {
|
|
14265
|
+
copy3 = left;
|
|
12544
14266
|
}
|
|
12545
|
-
left -=
|
|
12546
|
-
state.length -=
|
|
14267
|
+
left -= copy3;
|
|
14268
|
+
state.length -= copy3;
|
|
12547
14269
|
do {
|
|
12548
14270
|
output[put++] = from_source[from++];
|
|
12549
|
-
} while (--
|
|
14271
|
+
} while (--copy3);
|
|
12550
14272
|
if (state.length === 0) {
|
|
12551
14273
|
state.mode = LEN;
|
|
12552
14274
|
}
|
|
@@ -13010,18 +14732,18 @@ var _StreamingBuffer = class _StreamingBuffer {
|
|
|
13010
14732
|
_StreamingBuffer.MAX_STRING_LENGTH,
|
|
13011
14733
|
this.writeOffset - this.readOffset
|
|
13012
14734
|
);
|
|
13013
|
-
let
|
|
13014
|
-
while (
|
|
13015
|
-
|
|
14735
|
+
let length2 = 0;
|
|
14736
|
+
while (length2 < maxLength && this.buffer[this.readOffset + length2] !== 0) {
|
|
14737
|
+
length2++;
|
|
13016
14738
|
}
|
|
13017
|
-
if (
|
|
14739
|
+
if (length2 >= maxLength) {
|
|
13018
14740
|
if (this.writeOffset - this.readOffset <= maxLength) {
|
|
13019
14741
|
throw new Error("Buffer underflow");
|
|
13020
14742
|
}
|
|
13021
14743
|
throw new Error("String exceeds max length");
|
|
13022
14744
|
}
|
|
13023
|
-
const bytes = this.buffer.slice(this.readOffset, this.readOffset +
|
|
13024
|
-
this.readOffset +=
|
|
14745
|
+
const bytes = this.buffer.slice(this.readOffset, this.readOffset + length2);
|
|
14746
|
+
this.readOffset += length2 + 1;
|
|
13025
14747
|
return new TextDecoder("latin1").decode(bytes);
|
|
13026
14748
|
}
|
|
13027
14749
|
/**
|
|
@@ -13487,8 +15209,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13487
15209
|
}
|
|
13488
15210
|
parsePrint() {
|
|
13489
15211
|
const id = this.stream.readByte();
|
|
13490
|
-
const
|
|
13491
|
-
if (this.handler) this.handler.onPrint(id,
|
|
15212
|
+
const str3 = this.stream.readString();
|
|
15213
|
+
if (this.handler) this.handler.onPrint(id, str3);
|
|
13492
15214
|
}
|
|
13493
15215
|
parseStuffText() {
|
|
13494
15216
|
const text = this.stream.readString();
|
|
@@ -13532,8 +15254,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13532
15254
|
}
|
|
13533
15255
|
parseConfigString() {
|
|
13534
15256
|
const index = this.stream.readShort();
|
|
13535
|
-
const
|
|
13536
|
-
if (this.handler) this.handler.onConfigString(index,
|
|
15257
|
+
const str3 = this.stream.readString();
|
|
15258
|
+
if (this.handler) this.handler.onConfigString(index, str3);
|
|
13537
15259
|
}
|
|
13538
15260
|
parseSplitClient() {
|
|
13539
15261
|
const clientNum = this.stream.readByte();
|
|
@@ -13548,8 +15270,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13548
15270
|
const blastStream = new BinaryStream(decompressed.buffer);
|
|
13549
15271
|
while (blastStream.hasMore()) {
|
|
13550
15272
|
const index = blastStream.readUShort();
|
|
13551
|
-
const
|
|
13552
|
-
if (this.handler) this.handler.onConfigString(index,
|
|
15273
|
+
const str3 = blastStream.readString();
|
|
15274
|
+
if (this.handler) this.handler.onConfigString(index, str3);
|
|
13553
15275
|
}
|
|
13554
15276
|
} catch (e) {
|
|
13555
15277
|
console.error("svc_configblast error", e);
|
|
@@ -14111,10 +15833,10 @@ var DemoAnalyzer = class {
|
|
|
14111
15833
|
frameDuration = 1 / tickRate;
|
|
14112
15834
|
}
|
|
14113
15835
|
},
|
|
14114
|
-
onConfigString: (index,
|
|
14115
|
-
this.configStrings.set(index,
|
|
15836
|
+
onConfigString: (index, str3) => {
|
|
15837
|
+
this.configStrings.set(index, str3);
|
|
14116
15838
|
if (index === 0) {
|
|
14117
|
-
this.parseServerInfo(
|
|
15839
|
+
this.parseServerInfo(str3);
|
|
14118
15840
|
}
|
|
14119
15841
|
},
|
|
14120
15842
|
onSpawnBaseline: (entity) => {
|
|
@@ -14267,8 +15989,8 @@ var DemoAnalyzer = class {
|
|
|
14267
15989
|
recordEvent(event) {
|
|
14268
15990
|
this.events.push(event);
|
|
14269
15991
|
}
|
|
14270
|
-
parseServerInfo(
|
|
14271
|
-
const parts =
|
|
15992
|
+
parseServerInfo(str3) {
|
|
15993
|
+
const parts = str3.split("\\");
|
|
14272
15994
|
for (let i = 1; i < parts.length; i += 2) {
|
|
14273
15995
|
if (i + 1 < parts.length) {
|
|
14274
15996
|
this.serverInfo[parts[i]] = parts[i + 1];
|
|
@@ -14879,8 +16601,8 @@ var DemoPlaybackController = class {
|
|
|
14879
16601
|
getCameraMode() {
|
|
14880
16602
|
return this.cameraMode;
|
|
14881
16603
|
}
|
|
14882
|
-
setThirdPersonDistance(
|
|
14883
|
-
this.thirdPersonDistance =
|
|
16604
|
+
setThirdPersonDistance(distance2) {
|
|
16605
|
+
this.thirdPersonDistance = distance2;
|
|
14884
16606
|
}
|
|
14885
16607
|
setThirdPersonOffset(offset) {
|
|
14886
16608
|
this.thirdPersonOffset = offset;
|
|
@@ -15060,9 +16782,9 @@ var DemoValidator = class {
|
|
|
15060
16782
|
return { valid: false, error: "File too small to be a valid demo" };
|
|
15061
16783
|
}
|
|
15062
16784
|
const view = new DataView(buffer);
|
|
15063
|
-
const
|
|
15064
|
-
if (
|
|
15065
|
-
return { valid: false, error: `Invalid first block length: ${
|
|
16785
|
+
const length2 = view.getInt32(0, true);
|
|
16786
|
+
if (length2 <= 0 || length2 > buffer.byteLength - 4) {
|
|
16787
|
+
return { valid: false, error: `Invalid first block length: ${length2}` };
|
|
15066
16788
|
}
|
|
15067
16789
|
const firstCmd = view.getUint8(4);
|
|
15068
16790
|
if (firstCmd !== ServerCommand.serverdata) {
|
|
@@ -15072,7 +16794,7 @@ var DemoValidator = class {
|
|
|
15072
16794
|
};
|
|
15073
16795
|
}
|
|
15074
16796
|
let version = -1;
|
|
15075
|
-
if (
|
|
16797
|
+
if (length2 >= 5) {
|
|
15076
16798
|
version = view.getInt32(5, true);
|
|
15077
16799
|
}
|
|
15078
16800
|
return { valid: true, version };
|
|
@@ -15157,10 +16879,10 @@ var MessageWriter = class {
|
|
|
15157
16879
|
this.writer.writeShort(playerNum);
|
|
15158
16880
|
this.writer.writeString(levelName);
|
|
15159
16881
|
}
|
|
15160
|
-
writeConfigString(index,
|
|
16882
|
+
writeConfigString(index, str3, protocolVersion = 0) {
|
|
15161
16883
|
this.writeCommand(ServerCommand.configstring, protocolVersion);
|
|
15162
16884
|
this.writer.writeShort(index);
|
|
15163
|
-
this.writer.writeString(
|
|
16885
|
+
this.writer.writeString(str3);
|
|
15164
16886
|
}
|
|
15165
16887
|
writeSpawnBaseline(entity, protocolVersion) {
|
|
15166
16888
|
this.writeCommand(ServerCommand.spawnbaseline, protocolVersion);
|
|
@@ -15660,8 +17382,8 @@ var DemoClipper = class {
|
|
|
15660
17382
|
onServerData: (protocol, serverCount, attractLoop, gameDir, playerNum, levelName, tickRate, demoType) => {
|
|
15661
17383
|
state.serverData = { protocol, serverCount, attractLoop, gameDir, playerNum, levelName, tickRate, demoType };
|
|
15662
17384
|
},
|
|
15663
|
-
onConfigString: (index,
|
|
15664
|
-
state.configStrings.set(index,
|
|
17385
|
+
onConfigString: (index, str3) => {
|
|
17386
|
+
state.configStrings.set(index, str3);
|
|
15665
17387
|
},
|
|
15666
17388
|
onSpawnBaseline: (entity) => {
|
|
15667
17389
|
state.entityBaselines.set(entity.number, { ...entity });
|
|
@@ -15758,8 +17480,8 @@ var DemoClipper = class {
|
|
|
15758
17480
|
serverData.levelName
|
|
15759
17481
|
);
|
|
15760
17482
|
}
|
|
15761
|
-
for (const [index,
|
|
15762
|
-
headerWriter.writeConfigString(index,
|
|
17483
|
+
for (const [index, str3] of worldState.configStrings) {
|
|
17484
|
+
headerWriter.writeConfigString(index, str3, serverData.protocol);
|
|
15763
17485
|
}
|
|
15764
17486
|
for (const entity of worldState.entityBaselines.values()) {
|
|
15765
17487
|
headerWriter.writeSpawnBaseline(entity, serverData.protocol);
|
|
@@ -15794,7 +17516,7 @@ var DemoClipper = class {
|
|
|
15794
17516
|
const passthroughHandler = {
|
|
15795
17517
|
onServerData: () => {
|
|
15796
17518
|
},
|
|
15797
|
-
onConfigString: (idx,
|
|
17519
|
+
onConfigString: (idx, str3) => blockWriter.writeConfigString(idx, str3, serverData.protocol),
|
|
15798
17520
|
onSpawnBaseline: (ent) => blockWriter.writeSpawnBaseline(ent, serverData.protocol),
|
|
15799
17521
|
onCenterPrint: (msg) => blockWriter.writeCenterPrint(msg, serverData.protocol),
|
|
15800
17522
|
onStuffText: (txt) => blockWriter.writeStuffText(txt, serverData.protocol),
|
|
@@ -15974,7 +17696,7 @@ function drawLine(buffer, width, height, x0, y0, x1, y1, r, g, b, a) {
|
|
|
15974
17696
|
}
|
|
15975
17697
|
}
|
|
15976
17698
|
}
|
|
15977
|
-
function projectPoint(v, width, height, center,
|
|
17699
|
+
function projectPoint(v, width, height, center, scale3) {
|
|
15978
17700
|
const cosY = 0.707;
|
|
15979
17701
|
const sinY = 0.707;
|
|
15980
17702
|
const x1 = (v.x - center.x) * cosY - (v.y - center.y) * sinY;
|
|
@@ -15984,8 +17706,8 @@ function projectPoint(v, width, height, center, scale) {
|
|
|
15984
17706
|
const sinX = 0.5;
|
|
15985
17707
|
const y2 = y1 * cosX - z1 * sinX;
|
|
15986
17708
|
const z2 = y1 * sinX + z1 * cosX;
|
|
15987
|
-
const screenX = width / 2 + x1 *
|
|
15988
|
-
const screenY = height / 2 - z2 *
|
|
17709
|
+
const screenX = width / 2 + x1 * scale3;
|
|
17710
|
+
const screenY = height / 2 - z2 * scale3;
|
|
15989
17711
|
return { x: screenX, y: screenY };
|
|
15990
17712
|
}
|
|
15991
17713
|
var AssetPreviewGenerator = class {
|
|
@@ -16056,35 +17778,35 @@ var AssetPreviewGenerator = class {
|
|
|
16056
17778
|
return null;
|
|
16057
17779
|
}
|
|
16058
17780
|
if (vertices.length === 0) return null;
|
|
16059
|
-
const
|
|
16060
|
-
const
|
|
17781
|
+
const min2 = { x: Infinity, y: Infinity, z: Infinity };
|
|
17782
|
+
const max2 = { x: -Infinity, y: -Infinity, z: -Infinity };
|
|
16061
17783
|
for (const v of vertices) {
|
|
16062
|
-
|
|
16063
|
-
|
|
16064
|
-
|
|
16065
|
-
|
|
16066
|
-
|
|
16067
|
-
|
|
17784
|
+
min2.x = Math.min(min2.x, v.x);
|
|
17785
|
+
min2.y = Math.min(min2.y, v.y);
|
|
17786
|
+
min2.z = Math.min(min2.z, v.z);
|
|
17787
|
+
max2.x = Math.max(max2.x, v.x);
|
|
17788
|
+
max2.y = Math.max(max2.y, v.y);
|
|
17789
|
+
max2.z = Math.max(max2.z, v.z);
|
|
16068
17790
|
}
|
|
16069
17791
|
const center = {
|
|
16070
|
-
x: (
|
|
16071
|
-
y: (
|
|
16072
|
-
z: (
|
|
17792
|
+
x: (min2.x + max2.x) / 2,
|
|
17793
|
+
y: (min2.y + max2.y) / 2,
|
|
17794
|
+
z: (min2.z + max2.z) / 2
|
|
16073
17795
|
};
|
|
16074
|
-
const sizeX =
|
|
16075
|
-
const sizeY =
|
|
16076
|
-
const sizeZ =
|
|
17796
|
+
const sizeX = max2.x - min2.x;
|
|
17797
|
+
const sizeY = max2.y - min2.y;
|
|
17798
|
+
const sizeZ = max2.z - min2.z;
|
|
16077
17799
|
const maxDim = Math.max(sizeX, sizeY, sizeZ);
|
|
16078
17800
|
const safeMaxDim = Math.max(maxDim, 1e-3);
|
|
16079
|
-
const
|
|
17801
|
+
const scale3 = size * 0.8 / safeMaxDim;
|
|
16080
17802
|
const buffer = new Uint8ClampedArray(size * size * 4);
|
|
16081
17803
|
for (let i = 0; i < indices.length; i += 2) {
|
|
16082
17804
|
const idx0 = indices[i];
|
|
16083
17805
|
const idx1 = indices[i + 1];
|
|
16084
17806
|
const v0 = vertices[idx0];
|
|
16085
17807
|
const v1 = vertices[idx1];
|
|
16086
|
-
const p0 = projectPoint(v0, size, size, center,
|
|
16087
|
-
const p1 = projectPoint(v1, size, size, center,
|
|
17808
|
+
const p0 = projectPoint(v0, size, size, center, scale3);
|
|
17809
|
+
const p1 = projectPoint(v1, size, size, center, scale3);
|
|
16088
17810
|
drawLine(buffer, size, size, p0.x, p0.y, p1.x, p1.y, 0, 255, 0, 255);
|
|
16089
17811
|
}
|
|
16090
17812
|
return new ImageData(buffer, size, size);
|
|
@@ -16179,19 +17901,19 @@ var MapAnalyzer = class {
|
|
|
16179
17901
|
function parseEntLump(text) {
|
|
16180
17902
|
const entities = [];
|
|
16181
17903
|
let cursor = 0;
|
|
16182
|
-
const
|
|
17904
|
+
const length2 = text.length;
|
|
16183
17905
|
function skipWhitespace() {
|
|
16184
|
-
while (cursor <
|
|
17906
|
+
while (cursor < length2 && /\s/.test(text[cursor])) {
|
|
16185
17907
|
cursor++;
|
|
16186
17908
|
}
|
|
16187
17909
|
}
|
|
16188
17910
|
function readToken() {
|
|
16189
17911
|
skipWhitespace();
|
|
16190
|
-
if (cursor >=
|
|
17912
|
+
if (cursor >= length2) return null;
|
|
16191
17913
|
if (text[cursor] === '"') {
|
|
16192
17914
|
cursor++;
|
|
16193
17915
|
const start = cursor;
|
|
16194
|
-
while (cursor <
|
|
17916
|
+
while (cursor < length2 && text[cursor] !== '"') {
|
|
16195
17917
|
if (text[cursor] === "\n") {
|
|
16196
17918
|
}
|
|
16197
17919
|
cursor++;
|
|
@@ -16203,19 +17925,19 @@ function parseEntLump(text) {
|
|
|
16203
17925
|
return text[cursor++];
|
|
16204
17926
|
} else {
|
|
16205
17927
|
if (text.startsWith("//", cursor)) {
|
|
16206
|
-
while (cursor <
|
|
17928
|
+
while (cursor < length2 && text[cursor] !== "\n") {
|
|
16207
17929
|
cursor++;
|
|
16208
17930
|
}
|
|
16209
17931
|
return readToken();
|
|
16210
17932
|
}
|
|
16211
17933
|
const start = cursor;
|
|
16212
|
-
while (cursor <
|
|
17934
|
+
while (cursor < length2 && !/\s/.test(text[cursor]) && text[cursor] !== "}" && text[cursor] !== "{") {
|
|
16213
17935
|
cursor++;
|
|
16214
17936
|
}
|
|
16215
17937
|
return text.substring(start, cursor);
|
|
16216
17938
|
}
|
|
16217
17939
|
}
|
|
16218
|
-
while (cursor <
|
|
17940
|
+
while (cursor < length2) {
|
|
16219
17941
|
const token = readToken();
|
|
16220
17942
|
if (token === null) break;
|
|
16221
17943
|
if (token === "{") {
|