quake2ts 0.0.556 → 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/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
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
1
7
|
// src/loop.ts
|
|
2
8
|
var DEFAULT_FIXED_DELTA_MS = 25;
|
|
3
9
|
var DEFAULT_MAX_SUBSTEPS = 5;
|
|
@@ -182,10 +188,10 @@ var CommandRegistry = class {
|
|
|
182
188
|
};
|
|
183
189
|
|
|
184
190
|
// ../shared/dist/esm/index.js
|
|
185
|
-
var
|
|
186
|
-
var
|
|
191
|
+
var __defProp2 = Object.defineProperty;
|
|
192
|
+
var __export2 = (target, all) => {
|
|
187
193
|
for (var name in all)
|
|
188
|
-
|
|
194
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
189
195
|
};
|
|
190
196
|
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
191
197
|
var DEG_TO_RAD = Math.PI / 180;
|
|
@@ -205,8 +211,8 @@ function lengthVec3(a) {
|
|
|
205
211
|
return Math.sqrt(lengthSquaredVec3(a));
|
|
206
212
|
}
|
|
207
213
|
function normalizeVec3(a) {
|
|
208
|
-
const
|
|
209
|
-
return
|
|
214
|
+
const len2 = lengthVec3(a);
|
|
215
|
+
return len2 === 0 ? a : scaleVec3(a, 1 / len2);
|
|
210
216
|
}
|
|
211
217
|
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
212
218
|
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
@@ -544,7 +550,7 @@ var CS_ITEMS = ConfigStringIndex.Items;
|
|
|
544
550
|
var CS_PLAYERS = ConfigStringIndex.Players;
|
|
545
551
|
var CS_GENERAL = ConfigStringIndex.General;
|
|
546
552
|
var replay_exports = {};
|
|
547
|
-
|
|
553
|
+
__export2(replay_exports, {
|
|
548
554
|
addReplayFrame: () => addReplayFrame,
|
|
549
555
|
createReplaySession: () => createReplaySession,
|
|
550
556
|
deserializeReplay: () => deserializeReplay,
|
|
@@ -812,26 +818,26 @@ var BinaryStream = class {
|
|
|
812
818
|
return value;
|
|
813
819
|
}
|
|
814
820
|
readString() {
|
|
815
|
-
let
|
|
821
|
+
let str3 = "";
|
|
816
822
|
while (this.offset < this.length) {
|
|
817
823
|
const charCode = this.readChar();
|
|
818
824
|
if (charCode === -1 || charCode === 0) {
|
|
819
825
|
break;
|
|
820
826
|
}
|
|
821
|
-
|
|
827
|
+
str3 += String.fromCharCode(charCode);
|
|
822
828
|
}
|
|
823
|
-
return
|
|
829
|
+
return str3;
|
|
824
830
|
}
|
|
825
831
|
readStringLine() {
|
|
826
|
-
let
|
|
832
|
+
let str3 = "";
|
|
827
833
|
while (this.offset < this.length) {
|
|
828
834
|
const charCode = this.readChar();
|
|
829
835
|
if (charCode === -1 || charCode === 0 || charCode === 10) {
|
|
830
836
|
break;
|
|
831
837
|
}
|
|
832
|
-
|
|
838
|
+
str3 += String.fromCharCode(charCode);
|
|
833
839
|
}
|
|
834
|
-
return
|
|
840
|
+
return str3;
|
|
835
841
|
}
|
|
836
842
|
readCoord() {
|
|
837
843
|
return this.readShort() * (1 / 8);
|
|
@@ -842,12 +848,12 @@ var BinaryStream = class {
|
|
|
842
848
|
readAngle16() {
|
|
843
849
|
return this.readShort() * 360 / 65536;
|
|
844
850
|
}
|
|
845
|
-
readData(
|
|
846
|
-
if (this.offset +
|
|
847
|
-
throw new Error(`Read out of bounds: ${this.offset +
|
|
851
|
+
readData(length2) {
|
|
852
|
+
if (this.offset + length2 > this.length) {
|
|
853
|
+
throw new Error(`Read out of bounds: ${this.offset + length2} (length: ${this.length})`);
|
|
848
854
|
}
|
|
849
|
-
const data = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset,
|
|
850
|
-
this.offset +=
|
|
855
|
+
const data = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, length2);
|
|
856
|
+
this.offset += length2;
|
|
851
857
|
return new Uint8Array(data);
|
|
852
858
|
}
|
|
853
859
|
readPos(out) {
|
|
@@ -924,13 +930,13 @@ var BinaryWriter = class {
|
|
|
924
930
|
this.offset += 4;
|
|
925
931
|
}
|
|
926
932
|
writeString(value) {
|
|
927
|
-
const
|
|
928
|
-
this.ensureSpace(
|
|
929
|
-
for (let i = 0; i <
|
|
933
|
+
const len2 = value.length;
|
|
934
|
+
this.ensureSpace(len2 + 1);
|
|
935
|
+
for (let i = 0; i < len2; i++) {
|
|
930
936
|
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
931
937
|
}
|
|
932
|
-
this.view.setUint8(this.offset +
|
|
933
|
-
this.offset +=
|
|
938
|
+
this.view.setUint8(this.offset + len2, 0);
|
|
939
|
+
this.offset += len2 + 1;
|
|
934
940
|
}
|
|
935
941
|
writeCoord(value) {
|
|
936
942
|
this.writeShort(Math.trunc(value * 8));
|
|
@@ -955,9 +961,9 @@ var BinaryWriter = class {
|
|
|
955
961
|
}
|
|
956
962
|
for (let i = 0; i < ANORMS.length; i++) {
|
|
957
963
|
const norm = ANORMS[i];
|
|
958
|
-
const
|
|
959
|
-
if (
|
|
960
|
-
maxDot =
|
|
964
|
+
const dot2 = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
|
|
965
|
+
if (dot2 > maxDot) {
|
|
966
|
+
maxDot = dot2;
|
|
961
967
|
bestIndex = i;
|
|
962
968
|
}
|
|
963
969
|
}
|
|
@@ -1238,12 +1244,12 @@ var _NetChan = class _NetChan2 {
|
|
|
1238
1244
|
* Writes a string to the reliable message buffer
|
|
1239
1245
|
*/
|
|
1240
1246
|
writeReliableString(value) {
|
|
1241
|
-
const
|
|
1242
|
-
if (this.reliableLength +
|
|
1247
|
+
const len2 = value.length + 1;
|
|
1248
|
+
if (this.reliableLength + len2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1243
1249
|
throw new Error("NetChan reliable buffer overflow");
|
|
1244
1250
|
}
|
|
1245
1251
|
this.reliableMessage.writeString(value);
|
|
1246
|
-
this.reliableLength +=
|
|
1252
|
+
this.reliableLength += len2;
|
|
1247
1253
|
}
|
|
1248
1254
|
/**
|
|
1249
1255
|
* Returns the current reliable data buffer
|
|
@@ -2600,9 +2606,9 @@ var BspLoader = class {
|
|
|
2600
2606
|
}
|
|
2601
2607
|
async load(path) {
|
|
2602
2608
|
const buffer = await this.vfs.readFile(path);
|
|
2603
|
-
const
|
|
2604
|
-
|
|
2605
|
-
return parseBsp(
|
|
2609
|
+
const copy3 = new Uint8Array(buffer.byteLength);
|
|
2610
|
+
copy3.set(buffer);
|
|
2611
|
+
return parseBsp(copy3.buffer);
|
|
2606
2612
|
}
|
|
2607
2613
|
};
|
|
2608
2614
|
function parseBsp(buffer) {
|
|
@@ -2621,11 +2627,11 @@ function parseBsp(buffer) {
|
|
|
2621
2627
|
const lumps = /* @__PURE__ */ new Map();
|
|
2622
2628
|
for (let i = 0; i < HEADER_LUMPS; i += 1) {
|
|
2623
2629
|
const offset = view.getInt32(8 + i * 8, true);
|
|
2624
|
-
const
|
|
2625
|
-
if (offset < 0 ||
|
|
2630
|
+
const length2 = view.getInt32(12 + i * 8, true);
|
|
2631
|
+
if (offset < 0 || length2 < 0 || offset + length2 > buffer.byteLength) {
|
|
2626
2632
|
throw new BspParseError(`Invalid lump bounds for index ${i}`);
|
|
2627
2633
|
}
|
|
2628
|
-
lumps.set(i, { offset, length });
|
|
2634
|
+
lumps.set(i, { offset, length: length2 });
|
|
2629
2635
|
}
|
|
2630
2636
|
const header = { version, lumps };
|
|
2631
2637
|
const entities = parseEntities(buffer, lumps.get(0 /* Entities */));
|
|
@@ -2675,10 +2681,10 @@ function parseBsp(buffer) {
|
|
|
2675
2681
|
continue;
|
|
2676
2682
|
}
|
|
2677
2683
|
const model = models[modelIndex];
|
|
2678
|
-
const
|
|
2679
|
-
if (
|
|
2680
|
-
minDistance =
|
|
2681
|
-
closest = { entity, model, distance:
|
|
2684
|
+
const dist2 = intersectRayAabb(ray.origin, ray.direction, model.mins, model.maxs);
|
|
2685
|
+
if (dist2 !== null && dist2 < minDistance) {
|
|
2686
|
+
minDistance = dist2;
|
|
2687
|
+
closest = { entity, model, distance: dist2 };
|
|
2682
2688
|
}
|
|
2683
2689
|
}
|
|
2684
2690
|
return closest;
|
|
@@ -2756,9 +2762,9 @@ function parsePlanes(buffer, info) {
|
|
|
2756
2762
|
const planes = [];
|
|
2757
2763
|
for (let i = 0; i < count; i += 1) {
|
|
2758
2764
|
const normal = [view.getFloat32(i * 20, true), view.getFloat32(i * 20 + 4, true), view.getFloat32(i * 20 + 8, true)];
|
|
2759
|
-
const
|
|
2765
|
+
const dist2 = view.getFloat32(i * 20 + 12, true);
|
|
2760
2766
|
const type = view.getInt32(i * 20 + 16, true);
|
|
2761
|
-
planes.push({ normal, dist, type });
|
|
2767
|
+
planes.push({ normal, dist: dist2, type });
|
|
2762
2768
|
}
|
|
2763
2769
|
return planes;
|
|
2764
2770
|
}
|
|
@@ -3049,11 +3055,11 @@ function createFaceLightmap(face, lightMaps, info) {
|
|
|
3049
3055
|
return void 0;
|
|
3050
3056
|
}
|
|
3051
3057
|
const available = lightMaps.byteLength - face.lightOffset;
|
|
3052
|
-
const
|
|
3053
|
-
if (
|
|
3058
|
+
const length2 = Math.min(info?.length ?? available, available);
|
|
3059
|
+
if (length2 <= 0) {
|
|
3054
3060
|
return void 0;
|
|
3055
3061
|
}
|
|
3056
|
-
return lightMaps.subarray(face.lightOffset, face.lightOffset +
|
|
3062
|
+
return lightMaps.subarray(face.lightOffset, face.lightOffset + length2);
|
|
3057
3063
|
}
|
|
3058
3064
|
|
|
3059
3065
|
// src/assets/md2.ts
|
|
@@ -3236,9 +3242,9 @@ var Md2Loader = class {
|
|
|
3236
3242
|
return this.cache.get(path);
|
|
3237
3243
|
}
|
|
3238
3244
|
const bytes = await this.vfs.readFile(path);
|
|
3239
|
-
const
|
|
3240
|
-
|
|
3241
|
-
const model = parseMd2(
|
|
3245
|
+
const copy3 = new Uint8Array(bytes.byteLength);
|
|
3246
|
+
copy3.set(bytes);
|
|
3247
|
+
const model = parseMd2(copy3.buffer);
|
|
3242
3248
|
this.cache.set(path, model);
|
|
3243
3249
|
return model;
|
|
3244
3250
|
}
|
|
@@ -3255,9 +3261,9 @@ function readCString2(view, offset, maxLength) {
|
|
|
3255
3261
|
}
|
|
3256
3262
|
return String.fromCharCode(...chars);
|
|
3257
3263
|
}
|
|
3258
|
-
function validateSection(buffer, offset,
|
|
3259
|
-
if (
|
|
3260
|
-
if (offset < HEADER_SIZE4 || offset +
|
|
3264
|
+
function validateSection(buffer, offset, length2, label) {
|
|
3265
|
+
if (length2 === 0) return;
|
|
3266
|
+
if (offset < HEADER_SIZE4 || offset + length2 > buffer.byteLength) {
|
|
3261
3267
|
throw new Md2ParseError(`${label} section is out of bounds`);
|
|
3262
3268
|
}
|
|
3263
3269
|
}
|
|
@@ -3355,8 +3361,8 @@ function parseFrames(buffer, header) {
|
|
|
3355
3361
|
for (let i = 0; i < header.numFrames; i += 1) {
|
|
3356
3362
|
const base = header.offsetFrames + i * header.frameSize;
|
|
3357
3363
|
const view = new DataView(buffer, base, header.frameSize);
|
|
3358
|
-
const
|
|
3359
|
-
const
|
|
3364
|
+
const scale3 = { x: view.getFloat32(0, true), y: view.getFloat32(4, true), z: view.getFloat32(8, true) };
|
|
3365
|
+
const translate2 = {
|
|
3360
3366
|
x: view.getFloat32(12, true),
|
|
3361
3367
|
y: view.getFloat32(16, true),
|
|
3362
3368
|
z: view.getFloat32(20, true)
|
|
@@ -3367,9 +3373,9 @@ function parseFrames(buffer, header) {
|
|
|
3367
3373
|
let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
|
|
3368
3374
|
for (let v = 0; v < header.numVertices; v += 1) {
|
|
3369
3375
|
const offset = 40 + v * 4;
|
|
3370
|
-
const x = view.getUint8(offset) *
|
|
3371
|
-
const y = view.getUint8(offset + 1) *
|
|
3372
|
-
const z = view.getUint8(offset + 2) *
|
|
3376
|
+
const x = view.getUint8(offset) * scale3.x + translate2.x;
|
|
3377
|
+
const y = view.getUint8(offset + 1) * scale3.y + translate2.y;
|
|
3378
|
+
const z = view.getUint8(offset + 2) * scale3.z + translate2.z;
|
|
3373
3379
|
if (x < minX) minX = x;
|
|
3374
3380
|
if (y < minY) minY = y;
|
|
3375
3381
|
if (z < minZ) minZ = z;
|
|
@@ -3468,8 +3474,8 @@ var Md3ParseError = class extends Error {
|
|
|
3468
3474
|
this.name = "Md3ParseError";
|
|
3469
3475
|
}
|
|
3470
3476
|
};
|
|
3471
|
-
function readString(view, offset,
|
|
3472
|
-
const bytes = new Uint8Array(view.buffer, view.byteOffset + offset,
|
|
3477
|
+
function readString(view, offset, length2) {
|
|
3478
|
+
const bytes = new Uint8Array(view.buffer, view.byteOffset + offset, length2);
|
|
3473
3479
|
const decoded = new TextDecoder("utf-8").decode(bytes);
|
|
3474
3480
|
return decoded.replace(/\0.*$/, "").trim();
|
|
3475
3481
|
}
|
|
@@ -3759,9 +3765,9 @@ var SpriteLoader = class {
|
|
|
3759
3765
|
}
|
|
3760
3766
|
async load(path) {
|
|
3761
3767
|
const bytes = await this.vfs.readFile(path);
|
|
3762
|
-
const
|
|
3763
|
-
|
|
3764
|
-
return parseSprite(
|
|
3768
|
+
const copy3 = new Uint8Array(bytes.byteLength);
|
|
3769
|
+
copy3.set(bytes);
|
|
3770
|
+
return parseSprite(copy3.buffer);
|
|
3765
3771
|
}
|
|
3766
3772
|
};
|
|
3767
3773
|
|
|
@@ -3789,8 +3795,8 @@ function computeFrameBlend(state) {
|
|
|
3789
3795
|
const baseFrame = Math.floor(normalizedPosition);
|
|
3790
3796
|
const frame0 = state.sequence.start + baseFrame;
|
|
3791
3797
|
const frame1 = baseFrame + 1 >= totalFrames ? loop ? state.sequence.start : state.sequence.end : frame0 + 1;
|
|
3792
|
-
const
|
|
3793
|
-
return { frame0, frame1, lerp:
|
|
3798
|
+
const lerp4 = !loop && baseFrame >= totalFrames - 1 ? 0 : normalizedPosition - baseFrame;
|
|
3799
|
+
return { frame0, frame1, lerp: lerp4 };
|
|
3794
3800
|
}
|
|
3795
3801
|
function createAnimationState(sequence) {
|
|
3796
3802
|
return { sequence, time: 0 };
|
|
@@ -4105,8 +4111,8 @@ var WavParseError = class extends Error {
|
|
|
4105
4111
|
this.name = "WavParseError";
|
|
4106
4112
|
}
|
|
4107
4113
|
};
|
|
4108
|
-
function readString2(view, offset,
|
|
4109
|
-
return new TextDecoder("ascii").decode(new Uint8Array(view.buffer, view.byteOffset + offset,
|
|
4114
|
+
function readString2(view, offset, length2) {
|
|
4115
|
+
return new TextDecoder("ascii").decode(new Uint8Array(view.buffer, view.byteOffset + offset, length2));
|
|
4110
4116
|
}
|
|
4111
4117
|
function parseWav(buffer) {
|
|
4112
4118
|
if (buffer.byteLength < 44) {
|
|
@@ -4850,8 +4856,8 @@ var SoundPrecache = class {
|
|
|
4850
4856
|
continue;
|
|
4851
4857
|
}
|
|
4852
4858
|
const bytes = await this.vfs.readFile(path);
|
|
4853
|
-
const
|
|
4854
|
-
const buffer = await this.decodeAudio(context,
|
|
4859
|
+
const copy3 = bytes.slice().buffer;
|
|
4860
|
+
const buffer = await this.decodeAudio(context, copy3);
|
|
4855
4861
|
this.registry.register(path, buffer);
|
|
4856
4862
|
report.loaded.push(path);
|
|
4857
4863
|
} catch (error) {
|
|
@@ -5180,22 +5186,22 @@ var AudioSystem = class {
|
|
|
5180
5186
|
active.gain.gain.value = active.baseGain * occlusionScale * playbackRateMute;
|
|
5181
5187
|
}
|
|
5182
5188
|
applyOcclusion(active, occlusion) {
|
|
5183
|
-
const
|
|
5189
|
+
const scale3 = clamp01(occlusion?.gainScale ?? 1);
|
|
5184
5190
|
const playbackRateMute = Math.abs(this.playbackRate - 1) < 1e-3 ? 1 : 0;
|
|
5185
|
-
active.gain.gain.value = active.baseGain *
|
|
5191
|
+
active.gain.gain.value = active.baseGain * scale3 * playbackRateMute;
|
|
5186
5192
|
if (active.occlusion?.filter) {
|
|
5187
5193
|
const cutoff = occlusion?.lowpassHz ?? 2e4;
|
|
5188
5194
|
active.occlusion.filter.frequency.value = clamp(cutoff, 10, 2e4);
|
|
5189
5195
|
}
|
|
5190
5196
|
if (active.occlusion) {
|
|
5191
|
-
active.occlusion.scale =
|
|
5197
|
+
active.occlusion.scale = scale3;
|
|
5192
5198
|
active.occlusion.lowpassHz = occlusion?.lowpassHz;
|
|
5193
5199
|
} else if (occlusion) {
|
|
5194
|
-
active.occlusion = { scale, lowpassHz: occlusion.lowpassHz };
|
|
5200
|
+
active.occlusion = { scale: scale3, lowpassHz: occlusion.lowpassHz };
|
|
5195
5201
|
}
|
|
5196
5202
|
}
|
|
5197
5203
|
};
|
|
5198
|
-
var clamp = (value,
|
|
5204
|
+
var clamp = (value, min2, max2) => Math.min(max2, Math.max(min2, value));
|
|
5199
5205
|
var clamp01 = (value) => clamp(value, 0, 1);
|
|
5200
5206
|
|
|
5201
5207
|
// src/audio/occlusion.ts
|
|
@@ -5203,9 +5209,9 @@ var AudioOcclusion = class {
|
|
|
5203
5209
|
constructor(trace) {
|
|
5204
5210
|
this.trace = trace;
|
|
5205
5211
|
this.resolve = (listener, source, attenuation) => {
|
|
5206
|
-
const
|
|
5212
|
+
const dist2 = lengthVec3(subtractVec3(source, listener.origin));
|
|
5207
5213
|
const maxDist = calculateMaxAudibleDistance(attenuation);
|
|
5208
|
-
const clampedDist = Math.min(
|
|
5214
|
+
const clampedDist = Math.min(dist2, maxDist);
|
|
5209
5215
|
const distanceFactor = clampedDist / Math.max(1, maxDist);
|
|
5210
5216
|
const distanceCutoff = 2e4 * (1 - distanceFactor * 0.9);
|
|
5211
5217
|
const tr = this.trace(listener.origin, source, void 0, void 0);
|
|
@@ -5976,15 +5982,15 @@ function buildBspGeometry(gl, surfaces, map, options = {}) {
|
|
|
5976
5982
|
|
|
5977
5983
|
// src/render/culling.ts
|
|
5978
5984
|
function normalizePlane(plane) {
|
|
5979
|
-
const { normal, distance } = plane;
|
|
5980
|
-
const
|
|
5981
|
-
if (
|
|
5985
|
+
const { normal, distance: distance2 } = plane;
|
|
5986
|
+
const length2 = Math.sqrt(normal.x * normal.x + normal.y * normal.y + normal.z * normal.z);
|
|
5987
|
+
if (length2 === 0) {
|
|
5982
5988
|
return plane;
|
|
5983
5989
|
}
|
|
5984
|
-
const inv = 1 /
|
|
5990
|
+
const inv = 1 / length2;
|
|
5985
5991
|
return {
|
|
5986
5992
|
normal: { x: normal.x * inv, y: normal.y * inv, z: normal.z * inv },
|
|
5987
|
-
distance:
|
|
5993
|
+
distance: distance2 * inv
|
|
5988
5994
|
};
|
|
5989
5995
|
}
|
|
5990
5996
|
function extractFrustumPlanes(matrix) {
|
|
@@ -6074,8 +6080,8 @@ function findLeafForPoint(map, point) {
|
|
|
6074
6080
|
while (nodeIndex >= 0) {
|
|
6075
6081
|
const node = map.nodes[nodeIndex];
|
|
6076
6082
|
const plane = map.planes[node.planeIndex];
|
|
6077
|
-
const
|
|
6078
|
-
const side =
|
|
6083
|
+
const dist2 = distanceToPlane(plane, point);
|
|
6084
|
+
const side = dist2 >= 0 ? 0 : 1;
|
|
6079
6085
|
const child = node.children[side];
|
|
6080
6086
|
if (childIsLeaf(child)) {
|
|
6081
6087
|
return childLeafIndex(child);
|
|
@@ -6092,14 +6098,14 @@ function collectFacesFromLeaf(map, leafIndex) {
|
|
|
6092
6098
|
}
|
|
6093
6099
|
return faces;
|
|
6094
6100
|
}
|
|
6095
|
-
function traverse(map, nodeIndex, camera,
|
|
6101
|
+
function traverse(map, nodeIndex, camera, frustum2, viewCluster, visibleFaces, visitedFaces) {
|
|
6096
6102
|
if (childIsLeaf(nodeIndex)) {
|
|
6097
6103
|
const leafIndex = childLeafIndex(nodeIndex);
|
|
6098
6104
|
const leaf = map.leafs[leafIndex];
|
|
6099
6105
|
if (!isClusterVisible(map.visibility, viewCluster, leaf.cluster)) {
|
|
6100
6106
|
return;
|
|
6101
6107
|
}
|
|
6102
|
-
if (!leafIntersectsFrustum(leaf,
|
|
6108
|
+
if (!leafIntersectsFrustum(leaf, frustum2)) {
|
|
6103
6109
|
return;
|
|
6104
6110
|
}
|
|
6105
6111
|
const center = {
|
|
@@ -6122,24 +6128,24 @@ function traverse(map, nodeIndex, camera, frustum, viewCluster, visibleFaces, vi
|
|
|
6122
6128
|
}
|
|
6123
6129
|
const node = map.nodes[nodeIndex];
|
|
6124
6130
|
const plane = map.planes[node.planeIndex];
|
|
6125
|
-
const
|
|
6126
|
-
const nearChild =
|
|
6127
|
-
const farChild =
|
|
6131
|
+
const dist2 = distanceToPlane(plane, camera);
|
|
6132
|
+
const nearChild = dist2 >= 0 ? node.children[0] : node.children[1];
|
|
6133
|
+
const farChild = dist2 >= 0 ? node.children[1] : node.children[0];
|
|
6128
6134
|
if (boxIntersectsFrustum(
|
|
6129
6135
|
{ x: node.mins[0], y: node.mins[1], z: node.mins[2] },
|
|
6130
6136
|
{ x: node.maxs[0], y: node.maxs[1], z: node.maxs[2] },
|
|
6131
|
-
|
|
6137
|
+
frustum2
|
|
6132
6138
|
)) {
|
|
6133
|
-
traverse(map, nearChild, camera,
|
|
6134
|
-
traverse(map, farChild, camera,
|
|
6139
|
+
traverse(map, nearChild, camera, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6140
|
+
traverse(map, farChild, camera, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6135
6141
|
}
|
|
6136
6142
|
}
|
|
6137
|
-
function gatherVisibleFaces(map, cameraPosition,
|
|
6143
|
+
function gatherVisibleFaces(map, cameraPosition, frustum2) {
|
|
6138
6144
|
const viewLeaf = findLeafForPoint(map, cameraPosition);
|
|
6139
6145
|
const viewCluster = viewLeaf >= 0 ? map.leafs[viewLeaf].cluster : -1;
|
|
6140
6146
|
const visibleFaces = [];
|
|
6141
6147
|
const visitedFaces = /* @__PURE__ */ new Set();
|
|
6142
|
-
traverse(map, 0, cameraPosition,
|
|
6148
|
+
traverse(map, 0, cameraPosition, frustum2, viewCluster, visibleFaces, visitedFaces);
|
|
6143
6149
|
return visibleFaces;
|
|
6144
6150
|
}
|
|
6145
6151
|
|
|
@@ -6984,7 +6990,7 @@ function buildMd2Geometry(model) {
|
|
|
6984
6990
|
return { vertices, indices: new Uint16Array(indices) };
|
|
6985
6991
|
}
|
|
6986
6992
|
function buildMd2VertexData(model, geometry, blend) {
|
|
6987
|
-
const { frame0, frame1, lerp:
|
|
6993
|
+
const { frame0, frame1, lerp: lerp4 } = blend;
|
|
6988
6994
|
const frameA = model.frames[frame0];
|
|
6989
6995
|
const frameB = model.frames[frame1];
|
|
6990
6996
|
if (!frameA || !frameB) {
|
|
@@ -6997,8 +7003,8 @@ function buildMd2VertexData(model, geometry, blend) {
|
|
|
6997
7003
|
if (!vA || !vB) {
|
|
6998
7004
|
throw new Error("MD2 vertex index out of range for frame");
|
|
6999
7005
|
}
|
|
7000
|
-
const position = lerpVec3(vA.position, vB.position,
|
|
7001
|
-
const normal = normalizeVec32(lerpVec3(vA.normal, vB.normal,
|
|
7006
|
+
const position = lerpVec3(vA.position, vB.position, lerp4);
|
|
7007
|
+
const normal = normalizeVec32(lerpVec3(vA.normal, vB.normal, lerp4));
|
|
7002
7008
|
const base = index * 8;
|
|
7003
7009
|
data[base] = position.x;
|
|
7004
7010
|
data[base + 1] = position.y;
|
|
@@ -7154,32 +7160,1754 @@ var Md2Pipeline = class {
|
|
|
7154
7160
|
}
|
|
7155
7161
|
};
|
|
7156
7162
|
|
|
7163
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/common.js
|
|
7164
|
+
var EPSILON = 1e-6;
|
|
7165
|
+
var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
|
7166
|
+
var RANDOM = Math.random;
|
|
7167
|
+
function round(a) {
|
|
7168
|
+
if (a >= 0) return Math.round(a);
|
|
7169
|
+
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
|
7170
|
+
}
|
|
7171
|
+
var degree = Math.PI / 180;
|
|
7172
|
+
var radian = 180 / Math.PI;
|
|
7173
|
+
|
|
7174
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/mat4.js
|
|
7175
|
+
var mat4_exports = {};
|
|
7176
|
+
__export(mat4_exports, {
|
|
7177
|
+
add: () => add,
|
|
7178
|
+
adjoint: () => adjoint,
|
|
7179
|
+
clone: () => clone,
|
|
7180
|
+
copy: () => copy,
|
|
7181
|
+
create: () => create,
|
|
7182
|
+
decompose: () => decompose,
|
|
7183
|
+
determinant: () => determinant,
|
|
7184
|
+
equals: () => equals,
|
|
7185
|
+
exactEquals: () => exactEquals,
|
|
7186
|
+
frob: () => frob,
|
|
7187
|
+
fromQuat: () => fromQuat,
|
|
7188
|
+
fromQuat2: () => fromQuat2,
|
|
7189
|
+
fromRotation: () => fromRotation,
|
|
7190
|
+
fromRotationTranslation: () => fromRotationTranslation,
|
|
7191
|
+
fromRotationTranslationScale: () => fromRotationTranslationScale,
|
|
7192
|
+
fromRotationTranslationScaleOrigin: () => fromRotationTranslationScaleOrigin,
|
|
7193
|
+
fromScaling: () => fromScaling,
|
|
7194
|
+
fromTranslation: () => fromTranslation,
|
|
7195
|
+
fromValues: () => fromValues,
|
|
7196
|
+
fromXRotation: () => fromXRotation,
|
|
7197
|
+
fromYRotation: () => fromYRotation,
|
|
7198
|
+
fromZRotation: () => fromZRotation,
|
|
7199
|
+
frustum: () => frustum,
|
|
7200
|
+
getRotation: () => getRotation,
|
|
7201
|
+
getScaling: () => getScaling,
|
|
7202
|
+
getTranslation: () => getTranslation,
|
|
7203
|
+
identity: () => identity,
|
|
7204
|
+
invert: () => invert,
|
|
7205
|
+
lookAt: () => lookAt,
|
|
7206
|
+
mul: () => mul,
|
|
7207
|
+
multiply: () => multiply,
|
|
7208
|
+
multiplyScalar: () => multiplyScalar,
|
|
7209
|
+
multiplyScalarAndAdd: () => multiplyScalarAndAdd,
|
|
7210
|
+
ortho: () => ortho,
|
|
7211
|
+
orthoNO: () => orthoNO,
|
|
7212
|
+
orthoZO: () => orthoZO,
|
|
7213
|
+
perspective: () => perspective,
|
|
7214
|
+
perspectiveFromFieldOfView: () => perspectiveFromFieldOfView,
|
|
7215
|
+
perspectiveNO: () => perspectiveNO,
|
|
7216
|
+
perspectiveZO: () => perspectiveZO,
|
|
7217
|
+
rotate: () => rotate,
|
|
7218
|
+
rotateX: () => rotateX,
|
|
7219
|
+
rotateY: () => rotateY,
|
|
7220
|
+
rotateZ: () => rotateZ,
|
|
7221
|
+
scale: () => scale,
|
|
7222
|
+
set: () => set,
|
|
7223
|
+
str: () => str,
|
|
7224
|
+
sub: () => sub,
|
|
7225
|
+
subtract: () => subtract,
|
|
7226
|
+
targetTo: () => targetTo,
|
|
7227
|
+
translate: () => translate,
|
|
7228
|
+
transpose: () => transpose
|
|
7229
|
+
});
|
|
7230
|
+
function create() {
|
|
7231
|
+
var out = new ARRAY_TYPE(16);
|
|
7232
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
7233
|
+
out[1] = 0;
|
|
7234
|
+
out[2] = 0;
|
|
7235
|
+
out[3] = 0;
|
|
7236
|
+
out[4] = 0;
|
|
7237
|
+
out[6] = 0;
|
|
7238
|
+
out[7] = 0;
|
|
7239
|
+
out[8] = 0;
|
|
7240
|
+
out[9] = 0;
|
|
7241
|
+
out[11] = 0;
|
|
7242
|
+
out[12] = 0;
|
|
7243
|
+
out[13] = 0;
|
|
7244
|
+
out[14] = 0;
|
|
7245
|
+
}
|
|
7246
|
+
out[0] = 1;
|
|
7247
|
+
out[5] = 1;
|
|
7248
|
+
out[10] = 1;
|
|
7249
|
+
out[15] = 1;
|
|
7250
|
+
return out;
|
|
7251
|
+
}
|
|
7252
|
+
function clone(a) {
|
|
7253
|
+
var out = new ARRAY_TYPE(16);
|
|
7254
|
+
out[0] = a[0];
|
|
7255
|
+
out[1] = a[1];
|
|
7256
|
+
out[2] = a[2];
|
|
7257
|
+
out[3] = a[3];
|
|
7258
|
+
out[4] = a[4];
|
|
7259
|
+
out[5] = a[5];
|
|
7260
|
+
out[6] = a[6];
|
|
7261
|
+
out[7] = a[7];
|
|
7262
|
+
out[8] = a[8];
|
|
7263
|
+
out[9] = a[9];
|
|
7264
|
+
out[10] = a[10];
|
|
7265
|
+
out[11] = a[11];
|
|
7266
|
+
out[12] = a[12];
|
|
7267
|
+
out[13] = a[13];
|
|
7268
|
+
out[14] = a[14];
|
|
7269
|
+
out[15] = a[15];
|
|
7270
|
+
return out;
|
|
7271
|
+
}
|
|
7272
|
+
function copy(out, a) {
|
|
7273
|
+
out[0] = a[0];
|
|
7274
|
+
out[1] = a[1];
|
|
7275
|
+
out[2] = a[2];
|
|
7276
|
+
out[3] = a[3];
|
|
7277
|
+
out[4] = a[4];
|
|
7278
|
+
out[5] = a[5];
|
|
7279
|
+
out[6] = a[6];
|
|
7280
|
+
out[7] = a[7];
|
|
7281
|
+
out[8] = a[8];
|
|
7282
|
+
out[9] = a[9];
|
|
7283
|
+
out[10] = a[10];
|
|
7284
|
+
out[11] = a[11];
|
|
7285
|
+
out[12] = a[12];
|
|
7286
|
+
out[13] = a[13];
|
|
7287
|
+
out[14] = a[14];
|
|
7288
|
+
out[15] = a[15];
|
|
7289
|
+
return out;
|
|
7290
|
+
}
|
|
7291
|
+
function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
7292
|
+
var out = new ARRAY_TYPE(16);
|
|
7293
|
+
out[0] = m00;
|
|
7294
|
+
out[1] = m01;
|
|
7295
|
+
out[2] = m02;
|
|
7296
|
+
out[3] = m03;
|
|
7297
|
+
out[4] = m10;
|
|
7298
|
+
out[5] = m11;
|
|
7299
|
+
out[6] = m12;
|
|
7300
|
+
out[7] = m13;
|
|
7301
|
+
out[8] = m20;
|
|
7302
|
+
out[9] = m21;
|
|
7303
|
+
out[10] = m22;
|
|
7304
|
+
out[11] = m23;
|
|
7305
|
+
out[12] = m30;
|
|
7306
|
+
out[13] = m31;
|
|
7307
|
+
out[14] = m32;
|
|
7308
|
+
out[15] = m33;
|
|
7309
|
+
return out;
|
|
7310
|
+
}
|
|
7311
|
+
function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
|
|
7312
|
+
out[0] = m00;
|
|
7313
|
+
out[1] = m01;
|
|
7314
|
+
out[2] = m02;
|
|
7315
|
+
out[3] = m03;
|
|
7316
|
+
out[4] = m10;
|
|
7317
|
+
out[5] = m11;
|
|
7318
|
+
out[6] = m12;
|
|
7319
|
+
out[7] = m13;
|
|
7320
|
+
out[8] = m20;
|
|
7321
|
+
out[9] = m21;
|
|
7322
|
+
out[10] = m22;
|
|
7323
|
+
out[11] = m23;
|
|
7324
|
+
out[12] = m30;
|
|
7325
|
+
out[13] = m31;
|
|
7326
|
+
out[14] = m32;
|
|
7327
|
+
out[15] = m33;
|
|
7328
|
+
return out;
|
|
7329
|
+
}
|
|
7330
|
+
function identity(out) {
|
|
7331
|
+
out[0] = 1;
|
|
7332
|
+
out[1] = 0;
|
|
7333
|
+
out[2] = 0;
|
|
7334
|
+
out[3] = 0;
|
|
7335
|
+
out[4] = 0;
|
|
7336
|
+
out[5] = 1;
|
|
7337
|
+
out[6] = 0;
|
|
7338
|
+
out[7] = 0;
|
|
7339
|
+
out[8] = 0;
|
|
7340
|
+
out[9] = 0;
|
|
7341
|
+
out[10] = 1;
|
|
7342
|
+
out[11] = 0;
|
|
7343
|
+
out[12] = 0;
|
|
7344
|
+
out[13] = 0;
|
|
7345
|
+
out[14] = 0;
|
|
7346
|
+
out[15] = 1;
|
|
7347
|
+
return out;
|
|
7348
|
+
}
|
|
7349
|
+
function transpose(out, a) {
|
|
7350
|
+
if (out === a) {
|
|
7351
|
+
var a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7352
|
+
var a12 = a[6], a13 = a[7];
|
|
7353
|
+
var a23 = a[11];
|
|
7354
|
+
out[1] = a[4];
|
|
7355
|
+
out[2] = a[8];
|
|
7356
|
+
out[3] = a[12];
|
|
7357
|
+
out[4] = a01;
|
|
7358
|
+
out[6] = a[9];
|
|
7359
|
+
out[7] = a[13];
|
|
7360
|
+
out[8] = a02;
|
|
7361
|
+
out[9] = a12;
|
|
7362
|
+
out[11] = a[14];
|
|
7363
|
+
out[12] = a03;
|
|
7364
|
+
out[13] = a13;
|
|
7365
|
+
out[14] = a23;
|
|
7366
|
+
} else {
|
|
7367
|
+
out[0] = a[0];
|
|
7368
|
+
out[1] = a[4];
|
|
7369
|
+
out[2] = a[8];
|
|
7370
|
+
out[3] = a[12];
|
|
7371
|
+
out[4] = a[1];
|
|
7372
|
+
out[5] = a[5];
|
|
7373
|
+
out[6] = a[9];
|
|
7374
|
+
out[7] = a[13];
|
|
7375
|
+
out[8] = a[2];
|
|
7376
|
+
out[9] = a[6];
|
|
7377
|
+
out[10] = a[10];
|
|
7378
|
+
out[11] = a[14];
|
|
7379
|
+
out[12] = a[3];
|
|
7380
|
+
out[13] = a[7];
|
|
7381
|
+
out[14] = a[11];
|
|
7382
|
+
out[15] = a[15];
|
|
7383
|
+
}
|
|
7384
|
+
return out;
|
|
7385
|
+
}
|
|
7386
|
+
function invert(out, a) {
|
|
7387
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7388
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7389
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7390
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7391
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
7392
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
7393
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
7394
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
7395
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
7396
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
7397
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
7398
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
7399
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
7400
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
7401
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
7402
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
7403
|
+
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
7404
|
+
if (!det) {
|
|
7405
|
+
return null;
|
|
7406
|
+
}
|
|
7407
|
+
det = 1 / det;
|
|
7408
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
7409
|
+
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
7410
|
+
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
7411
|
+
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
|
|
7412
|
+
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
7413
|
+
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
7414
|
+
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
7415
|
+
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
|
|
7416
|
+
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
7417
|
+
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
7418
|
+
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
7419
|
+
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
|
|
7420
|
+
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
|
|
7421
|
+
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
|
|
7422
|
+
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
|
|
7423
|
+
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
|
|
7424
|
+
return out;
|
|
7425
|
+
}
|
|
7426
|
+
function adjoint(out, a) {
|
|
7427
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7428
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7429
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7430
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7431
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
7432
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
7433
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
7434
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
7435
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
7436
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
7437
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
7438
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
7439
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
7440
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
7441
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
7442
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
7443
|
+
out[0] = a11 * b11 - a12 * b10 + a13 * b09;
|
|
7444
|
+
out[1] = a02 * b10 - a01 * b11 - a03 * b09;
|
|
7445
|
+
out[2] = a31 * b05 - a32 * b04 + a33 * b03;
|
|
7446
|
+
out[3] = a22 * b04 - a21 * b05 - a23 * b03;
|
|
7447
|
+
out[4] = a12 * b08 - a10 * b11 - a13 * b07;
|
|
7448
|
+
out[5] = a00 * b11 - a02 * b08 + a03 * b07;
|
|
7449
|
+
out[6] = a32 * b02 - a30 * b05 - a33 * b01;
|
|
7450
|
+
out[7] = a20 * b05 - a22 * b02 + a23 * b01;
|
|
7451
|
+
out[8] = a10 * b10 - a11 * b08 + a13 * b06;
|
|
7452
|
+
out[9] = a01 * b08 - a00 * b10 - a03 * b06;
|
|
7453
|
+
out[10] = a30 * b04 - a31 * b02 + a33 * b00;
|
|
7454
|
+
out[11] = a21 * b02 - a20 * b04 - a23 * b00;
|
|
7455
|
+
out[12] = a11 * b07 - a10 * b09 - a12 * b06;
|
|
7456
|
+
out[13] = a00 * b09 - a01 * b07 + a02 * b06;
|
|
7457
|
+
out[14] = a31 * b01 - a30 * b03 - a32 * b00;
|
|
7458
|
+
out[15] = a20 * b03 - a21 * b01 + a22 * b00;
|
|
7459
|
+
return out;
|
|
7460
|
+
}
|
|
7461
|
+
function determinant(a) {
|
|
7462
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7463
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7464
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7465
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7466
|
+
var b0 = a00 * a11 - a01 * a10;
|
|
7467
|
+
var b1 = a00 * a12 - a02 * a10;
|
|
7468
|
+
var b2 = a01 * a12 - a02 * a11;
|
|
7469
|
+
var b3 = a20 * a31 - a21 * a30;
|
|
7470
|
+
var b4 = a20 * a32 - a22 * a30;
|
|
7471
|
+
var b5 = a21 * a32 - a22 * a31;
|
|
7472
|
+
var b6 = a00 * b5 - a01 * b4 + a02 * b3;
|
|
7473
|
+
var b7 = a10 * b5 - a11 * b4 + a12 * b3;
|
|
7474
|
+
var b8 = a20 * b2 - a21 * b1 + a22 * b0;
|
|
7475
|
+
var b9 = a30 * b2 - a31 * b1 + a32 * b0;
|
|
7476
|
+
return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
|
|
7477
|
+
}
|
|
7478
|
+
function multiply(out, a, b) {
|
|
7479
|
+
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
7480
|
+
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
7481
|
+
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
7482
|
+
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
7483
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
7484
|
+
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7485
|
+
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7486
|
+
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7487
|
+
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7488
|
+
b0 = b[4];
|
|
7489
|
+
b1 = b[5];
|
|
7490
|
+
b2 = b[6];
|
|
7491
|
+
b3 = b[7];
|
|
7492
|
+
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7493
|
+
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7494
|
+
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7495
|
+
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7496
|
+
b0 = b[8];
|
|
7497
|
+
b1 = b[9];
|
|
7498
|
+
b2 = b[10];
|
|
7499
|
+
b3 = b[11];
|
|
7500
|
+
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7501
|
+
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7502
|
+
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7503
|
+
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7504
|
+
b0 = b[12];
|
|
7505
|
+
b1 = b[13];
|
|
7506
|
+
b2 = b[14];
|
|
7507
|
+
b3 = b[15];
|
|
7508
|
+
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
7509
|
+
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
7510
|
+
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
7511
|
+
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
7512
|
+
return out;
|
|
7513
|
+
}
|
|
7514
|
+
function translate(out, a, v) {
|
|
7515
|
+
var x = v[0], y = v[1], z = v[2];
|
|
7516
|
+
var a00, a01, a02, a03;
|
|
7517
|
+
var a10, a11, a12, a13;
|
|
7518
|
+
var a20, a21, a22, a23;
|
|
7519
|
+
if (a === out) {
|
|
7520
|
+
out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
|
|
7521
|
+
out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
|
|
7522
|
+
out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
|
|
7523
|
+
out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
|
|
7524
|
+
} else {
|
|
7525
|
+
a00 = a[0];
|
|
7526
|
+
a01 = a[1];
|
|
7527
|
+
a02 = a[2];
|
|
7528
|
+
a03 = a[3];
|
|
7529
|
+
a10 = a[4];
|
|
7530
|
+
a11 = a[5];
|
|
7531
|
+
a12 = a[6];
|
|
7532
|
+
a13 = a[7];
|
|
7533
|
+
a20 = a[8];
|
|
7534
|
+
a21 = a[9];
|
|
7535
|
+
a22 = a[10];
|
|
7536
|
+
a23 = a[11];
|
|
7537
|
+
out[0] = a00;
|
|
7538
|
+
out[1] = a01;
|
|
7539
|
+
out[2] = a02;
|
|
7540
|
+
out[3] = a03;
|
|
7541
|
+
out[4] = a10;
|
|
7542
|
+
out[5] = a11;
|
|
7543
|
+
out[6] = a12;
|
|
7544
|
+
out[7] = a13;
|
|
7545
|
+
out[8] = a20;
|
|
7546
|
+
out[9] = a21;
|
|
7547
|
+
out[10] = a22;
|
|
7548
|
+
out[11] = a23;
|
|
7549
|
+
out[12] = a00 * x + a10 * y + a20 * z + a[12];
|
|
7550
|
+
out[13] = a01 * x + a11 * y + a21 * z + a[13];
|
|
7551
|
+
out[14] = a02 * x + a12 * y + a22 * z + a[14];
|
|
7552
|
+
out[15] = a03 * x + a13 * y + a23 * z + a[15];
|
|
7553
|
+
}
|
|
7554
|
+
return out;
|
|
7555
|
+
}
|
|
7556
|
+
function scale(out, a, v) {
|
|
7557
|
+
var x = v[0], y = v[1], z = v[2];
|
|
7558
|
+
out[0] = a[0] * x;
|
|
7559
|
+
out[1] = a[1] * x;
|
|
7560
|
+
out[2] = a[2] * x;
|
|
7561
|
+
out[3] = a[3] * x;
|
|
7562
|
+
out[4] = a[4] * y;
|
|
7563
|
+
out[5] = a[5] * y;
|
|
7564
|
+
out[6] = a[6] * y;
|
|
7565
|
+
out[7] = a[7] * y;
|
|
7566
|
+
out[8] = a[8] * z;
|
|
7567
|
+
out[9] = a[9] * z;
|
|
7568
|
+
out[10] = a[10] * z;
|
|
7569
|
+
out[11] = a[11] * z;
|
|
7570
|
+
out[12] = a[12];
|
|
7571
|
+
out[13] = a[13];
|
|
7572
|
+
out[14] = a[14];
|
|
7573
|
+
out[15] = a[15];
|
|
7574
|
+
return out;
|
|
7575
|
+
}
|
|
7576
|
+
function rotate(out, a, rad, axis) {
|
|
7577
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
7578
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
7579
|
+
var s, c, t;
|
|
7580
|
+
var a00, a01, a02, a03;
|
|
7581
|
+
var a10, a11, a12, a13;
|
|
7582
|
+
var a20, a21, a22, a23;
|
|
7583
|
+
var b00, b01, b02;
|
|
7584
|
+
var b10, b11, b12;
|
|
7585
|
+
var b20, b21, b22;
|
|
7586
|
+
if (len2 < EPSILON) {
|
|
7587
|
+
return null;
|
|
7588
|
+
}
|
|
7589
|
+
len2 = 1 / len2;
|
|
7590
|
+
x *= len2;
|
|
7591
|
+
y *= len2;
|
|
7592
|
+
z *= len2;
|
|
7593
|
+
s = Math.sin(rad);
|
|
7594
|
+
c = Math.cos(rad);
|
|
7595
|
+
t = 1 - c;
|
|
7596
|
+
a00 = a[0];
|
|
7597
|
+
a01 = a[1];
|
|
7598
|
+
a02 = a[2];
|
|
7599
|
+
a03 = a[3];
|
|
7600
|
+
a10 = a[4];
|
|
7601
|
+
a11 = a[5];
|
|
7602
|
+
a12 = a[6];
|
|
7603
|
+
a13 = a[7];
|
|
7604
|
+
a20 = a[8];
|
|
7605
|
+
a21 = a[9];
|
|
7606
|
+
a22 = a[10];
|
|
7607
|
+
a23 = a[11];
|
|
7608
|
+
b00 = x * x * t + c;
|
|
7609
|
+
b01 = y * x * t + z * s;
|
|
7610
|
+
b02 = z * x * t - y * s;
|
|
7611
|
+
b10 = x * y * t - z * s;
|
|
7612
|
+
b11 = y * y * t + c;
|
|
7613
|
+
b12 = z * y * t + x * s;
|
|
7614
|
+
b20 = x * z * t + y * s;
|
|
7615
|
+
b21 = y * z * t - x * s;
|
|
7616
|
+
b22 = z * z * t + c;
|
|
7617
|
+
out[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
7618
|
+
out[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
7619
|
+
out[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
7620
|
+
out[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
7621
|
+
out[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
7622
|
+
out[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
7623
|
+
out[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
7624
|
+
out[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
7625
|
+
out[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
7626
|
+
out[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
7627
|
+
out[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
7628
|
+
out[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
7629
|
+
if (a !== out) {
|
|
7630
|
+
out[12] = a[12];
|
|
7631
|
+
out[13] = a[13];
|
|
7632
|
+
out[14] = a[14];
|
|
7633
|
+
out[15] = a[15];
|
|
7634
|
+
}
|
|
7635
|
+
return out;
|
|
7636
|
+
}
|
|
7637
|
+
function rotateX(out, a, rad) {
|
|
7638
|
+
var s = Math.sin(rad);
|
|
7639
|
+
var c = Math.cos(rad);
|
|
7640
|
+
var a10 = a[4];
|
|
7641
|
+
var a11 = a[5];
|
|
7642
|
+
var a12 = a[6];
|
|
7643
|
+
var a13 = a[7];
|
|
7644
|
+
var a20 = a[8];
|
|
7645
|
+
var a21 = a[9];
|
|
7646
|
+
var a22 = a[10];
|
|
7647
|
+
var a23 = a[11];
|
|
7648
|
+
if (a !== out) {
|
|
7649
|
+
out[0] = a[0];
|
|
7650
|
+
out[1] = a[1];
|
|
7651
|
+
out[2] = a[2];
|
|
7652
|
+
out[3] = a[3];
|
|
7653
|
+
out[12] = a[12];
|
|
7654
|
+
out[13] = a[13];
|
|
7655
|
+
out[14] = a[14];
|
|
7656
|
+
out[15] = a[15];
|
|
7657
|
+
}
|
|
7658
|
+
out[4] = a10 * c + a20 * s;
|
|
7659
|
+
out[5] = a11 * c + a21 * s;
|
|
7660
|
+
out[6] = a12 * c + a22 * s;
|
|
7661
|
+
out[7] = a13 * c + a23 * s;
|
|
7662
|
+
out[8] = a20 * c - a10 * s;
|
|
7663
|
+
out[9] = a21 * c - a11 * s;
|
|
7664
|
+
out[10] = a22 * c - a12 * s;
|
|
7665
|
+
out[11] = a23 * c - a13 * s;
|
|
7666
|
+
return out;
|
|
7667
|
+
}
|
|
7668
|
+
function rotateY(out, a, rad) {
|
|
7669
|
+
var s = Math.sin(rad);
|
|
7670
|
+
var c = Math.cos(rad);
|
|
7671
|
+
var a00 = a[0];
|
|
7672
|
+
var a01 = a[1];
|
|
7673
|
+
var a02 = a[2];
|
|
7674
|
+
var a03 = a[3];
|
|
7675
|
+
var a20 = a[8];
|
|
7676
|
+
var a21 = a[9];
|
|
7677
|
+
var a22 = a[10];
|
|
7678
|
+
var a23 = a[11];
|
|
7679
|
+
if (a !== out) {
|
|
7680
|
+
out[4] = a[4];
|
|
7681
|
+
out[5] = a[5];
|
|
7682
|
+
out[6] = a[6];
|
|
7683
|
+
out[7] = a[7];
|
|
7684
|
+
out[12] = a[12];
|
|
7685
|
+
out[13] = a[13];
|
|
7686
|
+
out[14] = a[14];
|
|
7687
|
+
out[15] = a[15];
|
|
7688
|
+
}
|
|
7689
|
+
out[0] = a00 * c - a20 * s;
|
|
7690
|
+
out[1] = a01 * c - a21 * s;
|
|
7691
|
+
out[2] = a02 * c - a22 * s;
|
|
7692
|
+
out[3] = a03 * c - a23 * s;
|
|
7693
|
+
out[8] = a00 * s + a20 * c;
|
|
7694
|
+
out[9] = a01 * s + a21 * c;
|
|
7695
|
+
out[10] = a02 * s + a22 * c;
|
|
7696
|
+
out[11] = a03 * s + a23 * c;
|
|
7697
|
+
return out;
|
|
7698
|
+
}
|
|
7699
|
+
function rotateZ(out, a, rad) {
|
|
7700
|
+
var s = Math.sin(rad);
|
|
7701
|
+
var c = Math.cos(rad);
|
|
7702
|
+
var a00 = a[0];
|
|
7703
|
+
var a01 = a[1];
|
|
7704
|
+
var a02 = a[2];
|
|
7705
|
+
var a03 = a[3];
|
|
7706
|
+
var a10 = a[4];
|
|
7707
|
+
var a11 = a[5];
|
|
7708
|
+
var a12 = a[6];
|
|
7709
|
+
var a13 = a[7];
|
|
7710
|
+
if (a !== out) {
|
|
7711
|
+
out[8] = a[8];
|
|
7712
|
+
out[9] = a[9];
|
|
7713
|
+
out[10] = a[10];
|
|
7714
|
+
out[11] = a[11];
|
|
7715
|
+
out[12] = a[12];
|
|
7716
|
+
out[13] = a[13];
|
|
7717
|
+
out[14] = a[14];
|
|
7718
|
+
out[15] = a[15];
|
|
7719
|
+
}
|
|
7720
|
+
out[0] = a00 * c + a10 * s;
|
|
7721
|
+
out[1] = a01 * c + a11 * s;
|
|
7722
|
+
out[2] = a02 * c + a12 * s;
|
|
7723
|
+
out[3] = a03 * c + a13 * s;
|
|
7724
|
+
out[4] = a10 * c - a00 * s;
|
|
7725
|
+
out[5] = a11 * c - a01 * s;
|
|
7726
|
+
out[6] = a12 * c - a02 * s;
|
|
7727
|
+
out[7] = a13 * c - a03 * s;
|
|
7728
|
+
return out;
|
|
7729
|
+
}
|
|
7730
|
+
function fromTranslation(out, v) {
|
|
7731
|
+
out[0] = 1;
|
|
7732
|
+
out[1] = 0;
|
|
7733
|
+
out[2] = 0;
|
|
7734
|
+
out[3] = 0;
|
|
7735
|
+
out[4] = 0;
|
|
7736
|
+
out[5] = 1;
|
|
7737
|
+
out[6] = 0;
|
|
7738
|
+
out[7] = 0;
|
|
7739
|
+
out[8] = 0;
|
|
7740
|
+
out[9] = 0;
|
|
7741
|
+
out[10] = 1;
|
|
7742
|
+
out[11] = 0;
|
|
7743
|
+
out[12] = v[0];
|
|
7744
|
+
out[13] = v[1];
|
|
7745
|
+
out[14] = v[2];
|
|
7746
|
+
out[15] = 1;
|
|
7747
|
+
return out;
|
|
7748
|
+
}
|
|
7749
|
+
function fromScaling(out, v) {
|
|
7750
|
+
out[0] = v[0];
|
|
7751
|
+
out[1] = 0;
|
|
7752
|
+
out[2] = 0;
|
|
7753
|
+
out[3] = 0;
|
|
7754
|
+
out[4] = 0;
|
|
7755
|
+
out[5] = v[1];
|
|
7756
|
+
out[6] = 0;
|
|
7757
|
+
out[7] = 0;
|
|
7758
|
+
out[8] = 0;
|
|
7759
|
+
out[9] = 0;
|
|
7760
|
+
out[10] = v[2];
|
|
7761
|
+
out[11] = 0;
|
|
7762
|
+
out[12] = 0;
|
|
7763
|
+
out[13] = 0;
|
|
7764
|
+
out[14] = 0;
|
|
7765
|
+
out[15] = 1;
|
|
7766
|
+
return out;
|
|
7767
|
+
}
|
|
7768
|
+
function fromRotation(out, rad, axis) {
|
|
7769
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
7770
|
+
var len2 = Math.sqrt(x * x + y * y + z * z);
|
|
7771
|
+
var s, c, t;
|
|
7772
|
+
if (len2 < EPSILON) {
|
|
7773
|
+
return null;
|
|
7774
|
+
}
|
|
7775
|
+
len2 = 1 / len2;
|
|
7776
|
+
x *= len2;
|
|
7777
|
+
y *= len2;
|
|
7778
|
+
z *= len2;
|
|
7779
|
+
s = Math.sin(rad);
|
|
7780
|
+
c = Math.cos(rad);
|
|
7781
|
+
t = 1 - c;
|
|
7782
|
+
out[0] = x * x * t + c;
|
|
7783
|
+
out[1] = y * x * t + z * s;
|
|
7784
|
+
out[2] = z * x * t - y * s;
|
|
7785
|
+
out[3] = 0;
|
|
7786
|
+
out[4] = x * y * t - z * s;
|
|
7787
|
+
out[5] = y * y * t + c;
|
|
7788
|
+
out[6] = z * y * t + x * s;
|
|
7789
|
+
out[7] = 0;
|
|
7790
|
+
out[8] = x * z * t + y * s;
|
|
7791
|
+
out[9] = y * z * t - x * s;
|
|
7792
|
+
out[10] = z * z * t + c;
|
|
7793
|
+
out[11] = 0;
|
|
7794
|
+
out[12] = 0;
|
|
7795
|
+
out[13] = 0;
|
|
7796
|
+
out[14] = 0;
|
|
7797
|
+
out[15] = 1;
|
|
7798
|
+
return out;
|
|
7799
|
+
}
|
|
7800
|
+
function fromXRotation(out, rad) {
|
|
7801
|
+
var s = Math.sin(rad);
|
|
7802
|
+
var c = Math.cos(rad);
|
|
7803
|
+
out[0] = 1;
|
|
7804
|
+
out[1] = 0;
|
|
7805
|
+
out[2] = 0;
|
|
7806
|
+
out[3] = 0;
|
|
7807
|
+
out[4] = 0;
|
|
7808
|
+
out[5] = c;
|
|
7809
|
+
out[6] = s;
|
|
7810
|
+
out[7] = 0;
|
|
7811
|
+
out[8] = 0;
|
|
7812
|
+
out[9] = -s;
|
|
7813
|
+
out[10] = c;
|
|
7814
|
+
out[11] = 0;
|
|
7815
|
+
out[12] = 0;
|
|
7816
|
+
out[13] = 0;
|
|
7817
|
+
out[14] = 0;
|
|
7818
|
+
out[15] = 1;
|
|
7819
|
+
return out;
|
|
7820
|
+
}
|
|
7821
|
+
function fromYRotation(out, rad) {
|
|
7822
|
+
var s = Math.sin(rad);
|
|
7823
|
+
var c = Math.cos(rad);
|
|
7824
|
+
out[0] = c;
|
|
7825
|
+
out[1] = 0;
|
|
7826
|
+
out[2] = -s;
|
|
7827
|
+
out[3] = 0;
|
|
7828
|
+
out[4] = 0;
|
|
7829
|
+
out[5] = 1;
|
|
7830
|
+
out[6] = 0;
|
|
7831
|
+
out[7] = 0;
|
|
7832
|
+
out[8] = s;
|
|
7833
|
+
out[9] = 0;
|
|
7834
|
+
out[10] = c;
|
|
7835
|
+
out[11] = 0;
|
|
7836
|
+
out[12] = 0;
|
|
7837
|
+
out[13] = 0;
|
|
7838
|
+
out[14] = 0;
|
|
7839
|
+
out[15] = 1;
|
|
7840
|
+
return out;
|
|
7841
|
+
}
|
|
7842
|
+
function fromZRotation(out, rad) {
|
|
7843
|
+
var s = Math.sin(rad);
|
|
7844
|
+
var c = Math.cos(rad);
|
|
7845
|
+
out[0] = c;
|
|
7846
|
+
out[1] = s;
|
|
7847
|
+
out[2] = 0;
|
|
7848
|
+
out[3] = 0;
|
|
7849
|
+
out[4] = -s;
|
|
7850
|
+
out[5] = c;
|
|
7851
|
+
out[6] = 0;
|
|
7852
|
+
out[7] = 0;
|
|
7853
|
+
out[8] = 0;
|
|
7854
|
+
out[9] = 0;
|
|
7855
|
+
out[10] = 1;
|
|
7856
|
+
out[11] = 0;
|
|
7857
|
+
out[12] = 0;
|
|
7858
|
+
out[13] = 0;
|
|
7859
|
+
out[14] = 0;
|
|
7860
|
+
out[15] = 1;
|
|
7861
|
+
return out;
|
|
7862
|
+
}
|
|
7863
|
+
function fromRotationTranslation(out, q, v) {
|
|
7864
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
7865
|
+
var x2 = x + x;
|
|
7866
|
+
var y2 = y + y;
|
|
7867
|
+
var z2 = z + z;
|
|
7868
|
+
var xx = x * x2;
|
|
7869
|
+
var xy = x * y2;
|
|
7870
|
+
var xz = x * z2;
|
|
7871
|
+
var yy = y * y2;
|
|
7872
|
+
var yz = y * z2;
|
|
7873
|
+
var zz = z * z2;
|
|
7874
|
+
var wx = w * x2;
|
|
7875
|
+
var wy = w * y2;
|
|
7876
|
+
var wz = w * z2;
|
|
7877
|
+
out[0] = 1 - (yy + zz);
|
|
7878
|
+
out[1] = xy + wz;
|
|
7879
|
+
out[2] = xz - wy;
|
|
7880
|
+
out[3] = 0;
|
|
7881
|
+
out[4] = xy - wz;
|
|
7882
|
+
out[5] = 1 - (xx + zz);
|
|
7883
|
+
out[6] = yz + wx;
|
|
7884
|
+
out[7] = 0;
|
|
7885
|
+
out[8] = xz + wy;
|
|
7886
|
+
out[9] = yz - wx;
|
|
7887
|
+
out[10] = 1 - (xx + yy);
|
|
7888
|
+
out[11] = 0;
|
|
7889
|
+
out[12] = v[0];
|
|
7890
|
+
out[13] = v[1];
|
|
7891
|
+
out[14] = v[2];
|
|
7892
|
+
out[15] = 1;
|
|
7893
|
+
return out;
|
|
7894
|
+
}
|
|
7895
|
+
function fromQuat2(out, a) {
|
|
7896
|
+
var translation = new ARRAY_TYPE(3);
|
|
7897
|
+
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];
|
|
7898
|
+
var magnitude = bx * bx + by * by + bz * bz + bw * bw;
|
|
7899
|
+
if (magnitude > 0) {
|
|
7900
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;
|
|
7901
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;
|
|
7902
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;
|
|
7903
|
+
} else {
|
|
7904
|
+
translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
|
7905
|
+
translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
|
7906
|
+
translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
|
7907
|
+
}
|
|
7908
|
+
fromRotationTranslation(out, a, translation);
|
|
7909
|
+
return out;
|
|
7910
|
+
}
|
|
7911
|
+
function getTranslation(out, mat) {
|
|
7912
|
+
out[0] = mat[12];
|
|
7913
|
+
out[1] = mat[13];
|
|
7914
|
+
out[2] = mat[14];
|
|
7915
|
+
return out;
|
|
7916
|
+
}
|
|
7917
|
+
function getScaling(out, mat) {
|
|
7918
|
+
var m11 = mat[0];
|
|
7919
|
+
var m12 = mat[1];
|
|
7920
|
+
var m13 = mat[2];
|
|
7921
|
+
var m21 = mat[4];
|
|
7922
|
+
var m22 = mat[5];
|
|
7923
|
+
var m23 = mat[6];
|
|
7924
|
+
var m31 = mat[8];
|
|
7925
|
+
var m32 = mat[9];
|
|
7926
|
+
var m33 = mat[10];
|
|
7927
|
+
out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
7928
|
+
out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
7929
|
+
out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
7930
|
+
return out;
|
|
7931
|
+
}
|
|
7932
|
+
function getRotation(out, mat) {
|
|
7933
|
+
var scaling = new ARRAY_TYPE(3);
|
|
7934
|
+
getScaling(scaling, mat);
|
|
7935
|
+
var is1 = 1 / scaling[0];
|
|
7936
|
+
var is2 = 1 / scaling[1];
|
|
7937
|
+
var is3 = 1 / scaling[2];
|
|
7938
|
+
var sm11 = mat[0] * is1;
|
|
7939
|
+
var sm12 = mat[1] * is2;
|
|
7940
|
+
var sm13 = mat[2] * is3;
|
|
7941
|
+
var sm21 = mat[4] * is1;
|
|
7942
|
+
var sm22 = mat[5] * is2;
|
|
7943
|
+
var sm23 = mat[6] * is3;
|
|
7944
|
+
var sm31 = mat[8] * is1;
|
|
7945
|
+
var sm32 = mat[9] * is2;
|
|
7946
|
+
var sm33 = mat[10] * is3;
|
|
7947
|
+
var trace = sm11 + sm22 + sm33;
|
|
7948
|
+
var S = 0;
|
|
7949
|
+
if (trace > 0) {
|
|
7950
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
7951
|
+
out[3] = 0.25 * S;
|
|
7952
|
+
out[0] = (sm23 - sm32) / S;
|
|
7953
|
+
out[1] = (sm31 - sm13) / S;
|
|
7954
|
+
out[2] = (sm12 - sm21) / S;
|
|
7955
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
7956
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
7957
|
+
out[3] = (sm23 - sm32) / S;
|
|
7958
|
+
out[0] = 0.25 * S;
|
|
7959
|
+
out[1] = (sm12 + sm21) / S;
|
|
7960
|
+
out[2] = (sm31 + sm13) / S;
|
|
7961
|
+
} else if (sm22 > sm33) {
|
|
7962
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
7963
|
+
out[3] = (sm31 - sm13) / S;
|
|
7964
|
+
out[0] = (sm12 + sm21) / S;
|
|
7965
|
+
out[1] = 0.25 * S;
|
|
7966
|
+
out[2] = (sm23 + sm32) / S;
|
|
7967
|
+
} else {
|
|
7968
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
7969
|
+
out[3] = (sm12 - sm21) / S;
|
|
7970
|
+
out[0] = (sm31 + sm13) / S;
|
|
7971
|
+
out[1] = (sm23 + sm32) / S;
|
|
7972
|
+
out[2] = 0.25 * S;
|
|
7973
|
+
}
|
|
7974
|
+
return out;
|
|
7975
|
+
}
|
|
7976
|
+
function decompose(out_r, out_t, out_s, mat) {
|
|
7977
|
+
out_t[0] = mat[12];
|
|
7978
|
+
out_t[1] = mat[13];
|
|
7979
|
+
out_t[2] = mat[14];
|
|
7980
|
+
var m11 = mat[0];
|
|
7981
|
+
var m12 = mat[1];
|
|
7982
|
+
var m13 = mat[2];
|
|
7983
|
+
var m21 = mat[4];
|
|
7984
|
+
var m22 = mat[5];
|
|
7985
|
+
var m23 = mat[6];
|
|
7986
|
+
var m31 = mat[8];
|
|
7987
|
+
var m32 = mat[9];
|
|
7988
|
+
var m33 = mat[10];
|
|
7989
|
+
out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);
|
|
7990
|
+
out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);
|
|
7991
|
+
out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);
|
|
7992
|
+
var is1 = 1 / out_s[0];
|
|
7993
|
+
var is2 = 1 / out_s[1];
|
|
7994
|
+
var is3 = 1 / out_s[2];
|
|
7995
|
+
var sm11 = m11 * is1;
|
|
7996
|
+
var sm12 = m12 * is2;
|
|
7997
|
+
var sm13 = m13 * is3;
|
|
7998
|
+
var sm21 = m21 * is1;
|
|
7999
|
+
var sm22 = m22 * is2;
|
|
8000
|
+
var sm23 = m23 * is3;
|
|
8001
|
+
var sm31 = m31 * is1;
|
|
8002
|
+
var sm32 = m32 * is2;
|
|
8003
|
+
var sm33 = m33 * is3;
|
|
8004
|
+
var trace = sm11 + sm22 + sm33;
|
|
8005
|
+
var S = 0;
|
|
8006
|
+
if (trace > 0) {
|
|
8007
|
+
S = Math.sqrt(trace + 1) * 2;
|
|
8008
|
+
out_r[3] = 0.25 * S;
|
|
8009
|
+
out_r[0] = (sm23 - sm32) / S;
|
|
8010
|
+
out_r[1] = (sm31 - sm13) / S;
|
|
8011
|
+
out_r[2] = (sm12 - sm21) / S;
|
|
8012
|
+
} else if (sm11 > sm22 && sm11 > sm33) {
|
|
8013
|
+
S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
|
|
8014
|
+
out_r[3] = (sm23 - sm32) / S;
|
|
8015
|
+
out_r[0] = 0.25 * S;
|
|
8016
|
+
out_r[1] = (sm12 + sm21) / S;
|
|
8017
|
+
out_r[2] = (sm31 + sm13) / S;
|
|
8018
|
+
} else if (sm22 > sm33) {
|
|
8019
|
+
S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
|
|
8020
|
+
out_r[3] = (sm31 - sm13) / S;
|
|
8021
|
+
out_r[0] = (sm12 + sm21) / S;
|
|
8022
|
+
out_r[1] = 0.25 * S;
|
|
8023
|
+
out_r[2] = (sm23 + sm32) / S;
|
|
8024
|
+
} else {
|
|
8025
|
+
S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
|
|
8026
|
+
out_r[3] = (sm12 - sm21) / S;
|
|
8027
|
+
out_r[0] = (sm31 + sm13) / S;
|
|
8028
|
+
out_r[1] = (sm23 + sm32) / S;
|
|
8029
|
+
out_r[2] = 0.25 * S;
|
|
8030
|
+
}
|
|
8031
|
+
return out_r;
|
|
8032
|
+
}
|
|
8033
|
+
function fromRotationTranslationScale(out, q, v, s) {
|
|
8034
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8035
|
+
var x2 = x + x;
|
|
8036
|
+
var y2 = y + y;
|
|
8037
|
+
var z2 = z + z;
|
|
8038
|
+
var xx = x * x2;
|
|
8039
|
+
var xy = x * y2;
|
|
8040
|
+
var xz = x * z2;
|
|
8041
|
+
var yy = y * y2;
|
|
8042
|
+
var yz = y * z2;
|
|
8043
|
+
var zz = z * z2;
|
|
8044
|
+
var wx = w * x2;
|
|
8045
|
+
var wy = w * y2;
|
|
8046
|
+
var wz = w * z2;
|
|
8047
|
+
var sx = s[0];
|
|
8048
|
+
var sy = s[1];
|
|
8049
|
+
var sz = s[2];
|
|
8050
|
+
out[0] = (1 - (yy + zz)) * sx;
|
|
8051
|
+
out[1] = (xy + wz) * sx;
|
|
8052
|
+
out[2] = (xz - wy) * sx;
|
|
8053
|
+
out[3] = 0;
|
|
8054
|
+
out[4] = (xy - wz) * sy;
|
|
8055
|
+
out[5] = (1 - (xx + zz)) * sy;
|
|
8056
|
+
out[6] = (yz + wx) * sy;
|
|
8057
|
+
out[7] = 0;
|
|
8058
|
+
out[8] = (xz + wy) * sz;
|
|
8059
|
+
out[9] = (yz - wx) * sz;
|
|
8060
|
+
out[10] = (1 - (xx + yy)) * sz;
|
|
8061
|
+
out[11] = 0;
|
|
8062
|
+
out[12] = v[0];
|
|
8063
|
+
out[13] = v[1];
|
|
8064
|
+
out[14] = v[2];
|
|
8065
|
+
out[15] = 1;
|
|
8066
|
+
return out;
|
|
8067
|
+
}
|
|
8068
|
+
function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
|
|
8069
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8070
|
+
var x2 = x + x;
|
|
8071
|
+
var y2 = y + y;
|
|
8072
|
+
var z2 = z + z;
|
|
8073
|
+
var xx = x * x2;
|
|
8074
|
+
var xy = x * y2;
|
|
8075
|
+
var xz = x * z2;
|
|
8076
|
+
var yy = y * y2;
|
|
8077
|
+
var yz = y * z2;
|
|
8078
|
+
var zz = z * z2;
|
|
8079
|
+
var wx = w * x2;
|
|
8080
|
+
var wy = w * y2;
|
|
8081
|
+
var wz = w * z2;
|
|
8082
|
+
var sx = s[0];
|
|
8083
|
+
var sy = s[1];
|
|
8084
|
+
var sz = s[2];
|
|
8085
|
+
var ox = o[0];
|
|
8086
|
+
var oy = o[1];
|
|
8087
|
+
var oz = o[2];
|
|
8088
|
+
var out0 = (1 - (yy + zz)) * sx;
|
|
8089
|
+
var out1 = (xy + wz) * sx;
|
|
8090
|
+
var out2 = (xz - wy) * sx;
|
|
8091
|
+
var out4 = (xy - wz) * sy;
|
|
8092
|
+
var out5 = (1 - (xx + zz)) * sy;
|
|
8093
|
+
var out6 = (yz + wx) * sy;
|
|
8094
|
+
var out8 = (xz + wy) * sz;
|
|
8095
|
+
var out9 = (yz - wx) * sz;
|
|
8096
|
+
var out10 = (1 - (xx + yy)) * sz;
|
|
8097
|
+
out[0] = out0;
|
|
8098
|
+
out[1] = out1;
|
|
8099
|
+
out[2] = out2;
|
|
8100
|
+
out[3] = 0;
|
|
8101
|
+
out[4] = out4;
|
|
8102
|
+
out[5] = out5;
|
|
8103
|
+
out[6] = out6;
|
|
8104
|
+
out[7] = 0;
|
|
8105
|
+
out[8] = out8;
|
|
8106
|
+
out[9] = out9;
|
|
8107
|
+
out[10] = out10;
|
|
8108
|
+
out[11] = 0;
|
|
8109
|
+
out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);
|
|
8110
|
+
out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);
|
|
8111
|
+
out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);
|
|
8112
|
+
out[15] = 1;
|
|
8113
|
+
return out;
|
|
8114
|
+
}
|
|
8115
|
+
function fromQuat(out, q) {
|
|
8116
|
+
var x = q[0], y = q[1], z = q[2], w = q[3];
|
|
8117
|
+
var x2 = x + x;
|
|
8118
|
+
var y2 = y + y;
|
|
8119
|
+
var z2 = z + z;
|
|
8120
|
+
var xx = x * x2;
|
|
8121
|
+
var yx = y * x2;
|
|
8122
|
+
var yy = y * y2;
|
|
8123
|
+
var zx = z * x2;
|
|
8124
|
+
var zy = z * y2;
|
|
8125
|
+
var zz = z * z2;
|
|
8126
|
+
var wx = w * x2;
|
|
8127
|
+
var wy = w * y2;
|
|
8128
|
+
var wz = w * z2;
|
|
8129
|
+
out[0] = 1 - yy - zz;
|
|
8130
|
+
out[1] = yx + wz;
|
|
8131
|
+
out[2] = zx - wy;
|
|
8132
|
+
out[3] = 0;
|
|
8133
|
+
out[4] = yx - wz;
|
|
8134
|
+
out[5] = 1 - xx - zz;
|
|
8135
|
+
out[6] = zy + wx;
|
|
8136
|
+
out[7] = 0;
|
|
8137
|
+
out[8] = zx + wy;
|
|
8138
|
+
out[9] = zy - wx;
|
|
8139
|
+
out[10] = 1 - xx - yy;
|
|
8140
|
+
out[11] = 0;
|
|
8141
|
+
out[12] = 0;
|
|
8142
|
+
out[13] = 0;
|
|
8143
|
+
out[14] = 0;
|
|
8144
|
+
out[15] = 1;
|
|
8145
|
+
return out;
|
|
8146
|
+
}
|
|
8147
|
+
function frustum(out, left, right, bottom, top, near, far) {
|
|
8148
|
+
var rl = 1 / (right - left);
|
|
8149
|
+
var tb = 1 / (top - bottom);
|
|
8150
|
+
var nf = 1 / (near - far);
|
|
8151
|
+
out[0] = near * 2 * rl;
|
|
8152
|
+
out[1] = 0;
|
|
8153
|
+
out[2] = 0;
|
|
8154
|
+
out[3] = 0;
|
|
8155
|
+
out[4] = 0;
|
|
8156
|
+
out[5] = near * 2 * tb;
|
|
8157
|
+
out[6] = 0;
|
|
8158
|
+
out[7] = 0;
|
|
8159
|
+
out[8] = (right + left) * rl;
|
|
8160
|
+
out[9] = (top + bottom) * tb;
|
|
8161
|
+
out[10] = (far + near) * nf;
|
|
8162
|
+
out[11] = -1;
|
|
8163
|
+
out[12] = 0;
|
|
8164
|
+
out[13] = 0;
|
|
8165
|
+
out[14] = far * near * 2 * nf;
|
|
8166
|
+
out[15] = 0;
|
|
8167
|
+
return out;
|
|
8168
|
+
}
|
|
8169
|
+
function perspectiveNO(out, fovy, aspect, near, far) {
|
|
8170
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
8171
|
+
out[0] = f / aspect;
|
|
8172
|
+
out[1] = 0;
|
|
8173
|
+
out[2] = 0;
|
|
8174
|
+
out[3] = 0;
|
|
8175
|
+
out[4] = 0;
|
|
8176
|
+
out[5] = f;
|
|
8177
|
+
out[6] = 0;
|
|
8178
|
+
out[7] = 0;
|
|
8179
|
+
out[8] = 0;
|
|
8180
|
+
out[9] = 0;
|
|
8181
|
+
out[11] = -1;
|
|
8182
|
+
out[12] = 0;
|
|
8183
|
+
out[13] = 0;
|
|
8184
|
+
out[15] = 0;
|
|
8185
|
+
if (far != null && far !== Infinity) {
|
|
8186
|
+
var nf = 1 / (near - far);
|
|
8187
|
+
out[10] = (far + near) * nf;
|
|
8188
|
+
out[14] = 2 * far * near * nf;
|
|
8189
|
+
} else {
|
|
8190
|
+
out[10] = -1;
|
|
8191
|
+
out[14] = -2 * near;
|
|
8192
|
+
}
|
|
8193
|
+
return out;
|
|
8194
|
+
}
|
|
8195
|
+
var perspective = perspectiveNO;
|
|
8196
|
+
function perspectiveZO(out, fovy, aspect, near, far) {
|
|
8197
|
+
var f = 1 / Math.tan(fovy / 2);
|
|
8198
|
+
out[0] = f / aspect;
|
|
8199
|
+
out[1] = 0;
|
|
8200
|
+
out[2] = 0;
|
|
8201
|
+
out[3] = 0;
|
|
8202
|
+
out[4] = 0;
|
|
8203
|
+
out[5] = f;
|
|
8204
|
+
out[6] = 0;
|
|
8205
|
+
out[7] = 0;
|
|
8206
|
+
out[8] = 0;
|
|
8207
|
+
out[9] = 0;
|
|
8208
|
+
out[11] = -1;
|
|
8209
|
+
out[12] = 0;
|
|
8210
|
+
out[13] = 0;
|
|
8211
|
+
out[15] = 0;
|
|
8212
|
+
if (far != null && far !== Infinity) {
|
|
8213
|
+
var nf = 1 / (near - far);
|
|
8214
|
+
out[10] = far * nf;
|
|
8215
|
+
out[14] = far * near * nf;
|
|
8216
|
+
} else {
|
|
8217
|
+
out[10] = -1;
|
|
8218
|
+
out[14] = -near;
|
|
8219
|
+
}
|
|
8220
|
+
return out;
|
|
8221
|
+
}
|
|
8222
|
+
function perspectiveFromFieldOfView(out, fov, near, far) {
|
|
8223
|
+
var upTan = Math.tan(fov.upDegrees * Math.PI / 180);
|
|
8224
|
+
var downTan = Math.tan(fov.downDegrees * Math.PI / 180);
|
|
8225
|
+
var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180);
|
|
8226
|
+
var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180);
|
|
8227
|
+
var xScale = 2 / (leftTan + rightTan);
|
|
8228
|
+
var yScale = 2 / (upTan + downTan);
|
|
8229
|
+
out[0] = xScale;
|
|
8230
|
+
out[1] = 0;
|
|
8231
|
+
out[2] = 0;
|
|
8232
|
+
out[3] = 0;
|
|
8233
|
+
out[4] = 0;
|
|
8234
|
+
out[5] = yScale;
|
|
8235
|
+
out[6] = 0;
|
|
8236
|
+
out[7] = 0;
|
|
8237
|
+
out[8] = -((leftTan - rightTan) * xScale * 0.5);
|
|
8238
|
+
out[9] = (upTan - downTan) * yScale * 0.5;
|
|
8239
|
+
out[10] = far / (near - far);
|
|
8240
|
+
out[11] = -1;
|
|
8241
|
+
out[12] = 0;
|
|
8242
|
+
out[13] = 0;
|
|
8243
|
+
out[14] = far * near / (near - far);
|
|
8244
|
+
out[15] = 0;
|
|
8245
|
+
return out;
|
|
8246
|
+
}
|
|
8247
|
+
function orthoNO(out, left, right, bottom, top, near, far) {
|
|
8248
|
+
var lr = 1 / (left - right);
|
|
8249
|
+
var bt = 1 / (bottom - top);
|
|
8250
|
+
var nf = 1 / (near - far);
|
|
8251
|
+
out[0] = -2 * lr;
|
|
8252
|
+
out[1] = 0;
|
|
8253
|
+
out[2] = 0;
|
|
8254
|
+
out[3] = 0;
|
|
8255
|
+
out[4] = 0;
|
|
8256
|
+
out[5] = -2 * bt;
|
|
8257
|
+
out[6] = 0;
|
|
8258
|
+
out[7] = 0;
|
|
8259
|
+
out[8] = 0;
|
|
8260
|
+
out[9] = 0;
|
|
8261
|
+
out[10] = 2 * nf;
|
|
8262
|
+
out[11] = 0;
|
|
8263
|
+
out[12] = (left + right) * lr;
|
|
8264
|
+
out[13] = (top + bottom) * bt;
|
|
8265
|
+
out[14] = (far + near) * nf;
|
|
8266
|
+
out[15] = 1;
|
|
8267
|
+
return out;
|
|
8268
|
+
}
|
|
8269
|
+
var ortho = orthoNO;
|
|
8270
|
+
function orthoZO(out, left, right, bottom, top, near, far) {
|
|
8271
|
+
var lr = 1 / (left - right);
|
|
8272
|
+
var bt = 1 / (bottom - top);
|
|
8273
|
+
var nf = 1 / (near - far);
|
|
8274
|
+
out[0] = -2 * lr;
|
|
8275
|
+
out[1] = 0;
|
|
8276
|
+
out[2] = 0;
|
|
8277
|
+
out[3] = 0;
|
|
8278
|
+
out[4] = 0;
|
|
8279
|
+
out[5] = -2 * bt;
|
|
8280
|
+
out[6] = 0;
|
|
8281
|
+
out[7] = 0;
|
|
8282
|
+
out[8] = 0;
|
|
8283
|
+
out[9] = 0;
|
|
8284
|
+
out[10] = nf;
|
|
8285
|
+
out[11] = 0;
|
|
8286
|
+
out[12] = (left + right) * lr;
|
|
8287
|
+
out[13] = (top + bottom) * bt;
|
|
8288
|
+
out[14] = near * nf;
|
|
8289
|
+
out[15] = 1;
|
|
8290
|
+
return out;
|
|
8291
|
+
}
|
|
8292
|
+
function lookAt(out, eye, center, up) {
|
|
8293
|
+
var x0, x1, x2, y0, y1, y2, z0, z1, z2, len2;
|
|
8294
|
+
var eyex = eye[0];
|
|
8295
|
+
var eyey = eye[1];
|
|
8296
|
+
var eyez = eye[2];
|
|
8297
|
+
var upx = up[0];
|
|
8298
|
+
var upy = up[1];
|
|
8299
|
+
var upz = up[2];
|
|
8300
|
+
var centerx = center[0];
|
|
8301
|
+
var centery = center[1];
|
|
8302
|
+
var centerz = center[2];
|
|
8303
|
+
if (Math.abs(eyex - centerx) < EPSILON && Math.abs(eyey - centery) < EPSILON && Math.abs(eyez - centerz) < EPSILON) {
|
|
8304
|
+
return identity(out);
|
|
8305
|
+
}
|
|
8306
|
+
z0 = eyex - centerx;
|
|
8307
|
+
z1 = eyey - centery;
|
|
8308
|
+
z2 = eyez - centerz;
|
|
8309
|
+
len2 = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
8310
|
+
z0 *= len2;
|
|
8311
|
+
z1 *= len2;
|
|
8312
|
+
z2 *= len2;
|
|
8313
|
+
x0 = upy * z2 - upz * z1;
|
|
8314
|
+
x1 = upz * z0 - upx * z2;
|
|
8315
|
+
x2 = upx * z1 - upy * z0;
|
|
8316
|
+
len2 = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
8317
|
+
if (!len2) {
|
|
8318
|
+
x0 = 0;
|
|
8319
|
+
x1 = 0;
|
|
8320
|
+
x2 = 0;
|
|
8321
|
+
} else {
|
|
8322
|
+
len2 = 1 / len2;
|
|
8323
|
+
x0 *= len2;
|
|
8324
|
+
x1 *= len2;
|
|
8325
|
+
x2 *= len2;
|
|
8326
|
+
}
|
|
8327
|
+
y0 = z1 * x2 - z2 * x1;
|
|
8328
|
+
y1 = z2 * x0 - z0 * x2;
|
|
8329
|
+
y2 = z0 * x1 - z1 * x0;
|
|
8330
|
+
len2 = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
8331
|
+
if (!len2) {
|
|
8332
|
+
y0 = 0;
|
|
8333
|
+
y1 = 0;
|
|
8334
|
+
y2 = 0;
|
|
8335
|
+
} else {
|
|
8336
|
+
len2 = 1 / len2;
|
|
8337
|
+
y0 *= len2;
|
|
8338
|
+
y1 *= len2;
|
|
8339
|
+
y2 *= len2;
|
|
8340
|
+
}
|
|
8341
|
+
out[0] = x0;
|
|
8342
|
+
out[1] = y0;
|
|
8343
|
+
out[2] = z0;
|
|
8344
|
+
out[3] = 0;
|
|
8345
|
+
out[4] = x1;
|
|
8346
|
+
out[5] = y1;
|
|
8347
|
+
out[6] = z1;
|
|
8348
|
+
out[7] = 0;
|
|
8349
|
+
out[8] = x2;
|
|
8350
|
+
out[9] = y2;
|
|
8351
|
+
out[10] = z2;
|
|
8352
|
+
out[11] = 0;
|
|
8353
|
+
out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
|
|
8354
|
+
out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
|
|
8355
|
+
out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
|
|
8356
|
+
out[15] = 1;
|
|
8357
|
+
return out;
|
|
8358
|
+
}
|
|
8359
|
+
function targetTo(out, eye, target, up) {
|
|
8360
|
+
var eyex = eye[0], eyey = eye[1], eyez = eye[2], upx = up[0], upy = up[1], upz = up[2];
|
|
8361
|
+
var z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
|
|
8362
|
+
var len2 = z0 * z0 + z1 * z1 + z2 * z2;
|
|
8363
|
+
if (len2 > 0) {
|
|
8364
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8365
|
+
z0 *= len2;
|
|
8366
|
+
z1 *= len2;
|
|
8367
|
+
z2 *= len2;
|
|
8368
|
+
}
|
|
8369
|
+
var x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
|
|
8370
|
+
len2 = x0 * x0 + x1 * x1 + x2 * x2;
|
|
8371
|
+
if (len2 > 0) {
|
|
8372
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8373
|
+
x0 *= len2;
|
|
8374
|
+
x1 *= len2;
|
|
8375
|
+
x2 *= len2;
|
|
8376
|
+
}
|
|
8377
|
+
out[0] = x0;
|
|
8378
|
+
out[1] = x1;
|
|
8379
|
+
out[2] = x2;
|
|
8380
|
+
out[3] = 0;
|
|
8381
|
+
out[4] = z1 * x2 - z2 * x1;
|
|
8382
|
+
out[5] = z2 * x0 - z0 * x2;
|
|
8383
|
+
out[6] = z0 * x1 - z1 * x0;
|
|
8384
|
+
out[7] = 0;
|
|
8385
|
+
out[8] = z0;
|
|
8386
|
+
out[9] = z1;
|
|
8387
|
+
out[10] = z2;
|
|
8388
|
+
out[11] = 0;
|
|
8389
|
+
out[12] = eyex;
|
|
8390
|
+
out[13] = eyey;
|
|
8391
|
+
out[14] = eyez;
|
|
8392
|
+
out[15] = 1;
|
|
8393
|
+
return out;
|
|
8394
|
+
}
|
|
8395
|
+
function str(a) {
|
|
8396
|
+
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] + ")";
|
|
8397
|
+
}
|
|
8398
|
+
function frob(a) {
|
|
8399
|
+
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]);
|
|
8400
|
+
}
|
|
8401
|
+
function add(out, a, b) {
|
|
8402
|
+
out[0] = a[0] + b[0];
|
|
8403
|
+
out[1] = a[1] + b[1];
|
|
8404
|
+
out[2] = a[2] + b[2];
|
|
8405
|
+
out[3] = a[3] + b[3];
|
|
8406
|
+
out[4] = a[4] + b[4];
|
|
8407
|
+
out[5] = a[5] + b[5];
|
|
8408
|
+
out[6] = a[6] + b[6];
|
|
8409
|
+
out[7] = a[7] + b[7];
|
|
8410
|
+
out[8] = a[8] + b[8];
|
|
8411
|
+
out[9] = a[9] + b[9];
|
|
8412
|
+
out[10] = a[10] + b[10];
|
|
8413
|
+
out[11] = a[11] + b[11];
|
|
8414
|
+
out[12] = a[12] + b[12];
|
|
8415
|
+
out[13] = a[13] + b[13];
|
|
8416
|
+
out[14] = a[14] + b[14];
|
|
8417
|
+
out[15] = a[15] + b[15];
|
|
8418
|
+
return out;
|
|
8419
|
+
}
|
|
8420
|
+
function subtract(out, a, b) {
|
|
8421
|
+
out[0] = a[0] - b[0];
|
|
8422
|
+
out[1] = a[1] - b[1];
|
|
8423
|
+
out[2] = a[2] - b[2];
|
|
8424
|
+
out[3] = a[3] - b[3];
|
|
8425
|
+
out[4] = a[4] - b[4];
|
|
8426
|
+
out[5] = a[5] - b[5];
|
|
8427
|
+
out[6] = a[6] - b[6];
|
|
8428
|
+
out[7] = a[7] - b[7];
|
|
8429
|
+
out[8] = a[8] - b[8];
|
|
8430
|
+
out[9] = a[9] - b[9];
|
|
8431
|
+
out[10] = a[10] - b[10];
|
|
8432
|
+
out[11] = a[11] - b[11];
|
|
8433
|
+
out[12] = a[12] - b[12];
|
|
8434
|
+
out[13] = a[13] - b[13];
|
|
8435
|
+
out[14] = a[14] - b[14];
|
|
8436
|
+
out[15] = a[15] - b[15];
|
|
8437
|
+
return out;
|
|
8438
|
+
}
|
|
8439
|
+
function multiplyScalar(out, a, b) {
|
|
8440
|
+
out[0] = a[0] * b;
|
|
8441
|
+
out[1] = a[1] * b;
|
|
8442
|
+
out[2] = a[2] * b;
|
|
8443
|
+
out[3] = a[3] * b;
|
|
8444
|
+
out[4] = a[4] * b;
|
|
8445
|
+
out[5] = a[5] * b;
|
|
8446
|
+
out[6] = a[6] * b;
|
|
8447
|
+
out[7] = a[7] * b;
|
|
8448
|
+
out[8] = a[8] * b;
|
|
8449
|
+
out[9] = a[9] * b;
|
|
8450
|
+
out[10] = a[10] * b;
|
|
8451
|
+
out[11] = a[11] * b;
|
|
8452
|
+
out[12] = a[12] * b;
|
|
8453
|
+
out[13] = a[13] * b;
|
|
8454
|
+
out[14] = a[14] * b;
|
|
8455
|
+
out[15] = a[15] * b;
|
|
8456
|
+
return out;
|
|
8457
|
+
}
|
|
8458
|
+
function multiplyScalarAndAdd(out, a, b, scale3) {
|
|
8459
|
+
out[0] = a[0] + b[0] * scale3;
|
|
8460
|
+
out[1] = a[1] + b[1] * scale3;
|
|
8461
|
+
out[2] = a[2] + b[2] * scale3;
|
|
8462
|
+
out[3] = a[3] + b[3] * scale3;
|
|
8463
|
+
out[4] = a[4] + b[4] * scale3;
|
|
8464
|
+
out[5] = a[5] + b[5] * scale3;
|
|
8465
|
+
out[6] = a[6] + b[6] * scale3;
|
|
8466
|
+
out[7] = a[7] + b[7] * scale3;
|
|
8467
|
+
out[8] = a[8] + b[8] * scale3;
|
|
8468
|
+
out[9] = a[9] + b[9] * scale3;
|
|
8469
|
+
out[10] = a[10] + b[10] * scale3;
|
|
8470
|
+
out[11] = a[11] + b[11] * scale3;
|
|
8471
|
+
out[12] = a[12] + b[12] * scale3;
|
|
8472
|
+
out[13] = a[13] + b[13] * scale3;
|
|
8473
|
+
out[14] = a[14] + b[14] * scale3;
|
|
8474
|
+
out[15] = a[15] + b[15] * scale3;
|
|
8475
|
+
return out;
|
|
8476
|
+
}
|
|
8477
|
+
function exactEquals(a, b) {
|
|
8478
|
+
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];
|
|
8479
|
+
}
|
|
8480
|
+
function equals(a, b) {
|
|
8481
|
+
var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
|
|
8482
|
+
var a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
|
|
8483
|
+
var a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
|
|
8484
|
+
var a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
|
|
8485
|
+
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
8486
|
+
var b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7];
|
|
8487
|
+
var b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11];
|
|
8488
|
+
var b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
|
|
8489
|
+
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));
|
|
8490
|
+
}
|
|
8491
|
+
var mul = multiply;
|
|
8492
|
+
var sub = subtract;
|
|
8493
|
+
|
|
8494
|
+
// ../../node_modules/.pnpm/gl-matrix@3.4.4/node_modules/gl-matrix/esm/vec3.js
|
|
8495
|
+
var vec3_exports = {};
|
|
8496
|
+
__export(vec3_exports, {
|
|
8497
|
+
add: () => add2,
|
|
8498
|
+
angle: () => angle,
|
|
8499
|
+
bezier: () => bezier,
|
|
8500
|
+
ceil: () => ceil,
|
|
8501
|
+
clone: () => clone2,
|
|
8502
|
+
copy: () => copy2,
|
|
8503
|
+
create: () => create2,
|
|
8504
|
+
cross: () => cross,
|
|
8505
|
+
dist: () => dist,
|
|
8506
|
+
distance: () => distance,
|
|
8507
|
+
div: () => div,
|
|
8508
|
+
divide: () => divide,
|
|
8509
|
+
dot: () => dot,
|
|
8510
|
+
equals: () => equals2,
|
|
8511
|
+
exactEquals: () => exactEquals2,
|
|
8512
|
+
floor: () => floor,
|
|
8513
|
+
forEach: () => forEach,
|
|
8514
|
+
fromValues: () => fromValues2,
|
|
8515
|
+
hermite: () => hermite,
|
|
8516
|
+
inverse: () => inverse,
|
|
8517
|
+
len: () => len,
|
|
8518
|
+
length: () => length,
|
|
8519
|
+
lerp: () => lerp2,
|
|
8520
|
+
max: () => max,
|
|
8521
|
+
min: () => min,
|
|
8522
|
+
mul: () => mul2,
|
|
8523
|
+
multiply: () => multiply2,
|
|
8524
|
+
negate: () => negate,
|
|
8525
|
+
normalize: () => normalize,
|
|
8526
|
+
random: () => random,
|
|
8527
|
+
rotateX: () => rotateX2,
|
|
8528
|
+
rotateY: () => rotateY2,
|
|
8529
|
+
rotateZ: () => rotateZ2,
|
|
8530
|
+
round: () => round2,
|
|
8531
|
+
scale: () => scale2,
|
|
8532
|
+
scaleAndAdd: () => scaleAndAdd,
|
|
8533
|
+
set: () => set2,
|
|
8534
|
+
slerp: () => slerp,
|
|
8535
|
+
sqrDist: () => sqrDist,
|
|
8536
|
+
sqrLen: () => sqrLen,
|
|
8537
|
+
squaredDistance: () => squaredDistance,
|
|
8538
|
+
squaredLength: () => squaredLength,
|
|
8539
|
+
str: () => str2,
|
|
8540
|
+
sub: () => sub2,
|
|
8541
|
+
subtract: () => subtract2,
|
|
8542
|
+
transformMat3: () => transformMat3,
|
|
8543
|
+
transformMat4: () => transformMat4,
|
|
8544
|
+
transformQuat: () => transformQuat,
|
|
8545
|
+
zero: () => zero
|
|
8546
|
+
});
|
|
8547
|
+
function create2() {
|
|
8548
|
+
var out = new ARRAY_TYPE(3);
|
|
8549
|
+
if (ARRAY_TYPE != Float32Array) {
|
|
8550
|
+
out[0] = 0;
|
|
8551
|
+
out[1] = 0;
|
|
8552
|
+
out[2] = 0;
|
|
8553
|
+
}
|
|
8554
|
+
return out;
|
|
8555
|
+
}
|
|
8556
|
+
function clone2(a) {
|
|
8557
|
+
var out = new ARRAY_TYPE(3);
|
|
8558
|
+
out[0] = a[0];
|
|
8559
|
+
out[1] = a[1];
|
|
8560
|
+
out[2] = a[2];
|
|
8561
|
+
return out;
|
|
8562
|
+
}
|
|
8563
|
+
function length(a) {
|
|
8564
|
+
var x = a[0];
|
|
8565
|
+
var y = a[1];
|
|
8566
|
+
var z = a[2];
|
|
8567
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
8568
|
+
}
|
|
8569
|
+
function fromValues2(x, y, z) {
|
|
8570
|
+
var out = new ARRAY_TYPE(3);
|
|
8571
|
+
out[0] = x;
|
|
8572
|
+
out[1] = y;
|
|
8573
|
+
out[2] = z;
|
|
8574
|
+
return out;
|
|
8575
|
+
}
|
|
8576
|
+
function copy2(out, a) {
|
|
8577
|
+
out[0] = a[0];
|
|
8578
|
+
out[1] = a[1];
|
|
8579
|
+
out[2] = a[2];
|
|
8580
|
+
return out;
|
|
8581
|
+
}
|
|
8582
|
+
function set2(out, x, y, z) {
|
|
8583
|
+
out[0] = x;
|
|
8584
|
+
out[1] = y;
|
|
8585
|
+
out[2] = z;
|
|
8586
|
+
return out;
|
|
8587
|
+
}
|
|
8588
|
+
function add2(out, a, b) {
|
|
8589
|
+
out[0] = a[0] + b[0];
|
|
8590
|
+
out[1] = a[1] + b[1];
|
|
8591
|
+
out[2] = a[2] + b[2];
|
|
8592
|
+
return out;
|
|
8593
|
+
}
|
|
8594
|
+
function subtract2(out, a, b) {
|
|
8595
|
+
out[0] = a[0] - b[0];
|
|
8596
|
+
out[1] = a[1] - b[1];
|
|
8597
|
+
out[2] = a[2] - b[2];
|
|
8598
|
+
return out;
|
|
8599
|
+
}
|
|
8600
|
+
function multiply2(out, a, b) {
|
|
8601
|
+
out[0] = a[0] * b[0];
|
|
8602
|
+
out[1] = a[1] * b[1];
|
|
8603
|
+
out[2] = a[2] * b[2];
|
|
8604
|
+
return out;
|
|
8605
|
+
}
|
|
8606
|
+
function divide(out, a, b) {
|
|
8607
|
+
out[0] = a[0] / b[0];
|
|
8608
|
+
out[1] = a[1] / b[1];
|
|
8609
|
+
out[2] = a[2] / b[2];
|
|
8610
|
+
return out;
|
|
8611
|
+
}
|
|
8612
|
+
function ceil(out, a) {
|
|
8613
|
+
out[0] = Math.ceil(a[0]);
|
|
8614
|
+
out[1] = Math.ceil(a[1]);
|
|
8615
|
+
out[2] = Math.ceil(a[2]);
|
|
8616
|
+
return out;
|
|
8617
|
+
}
|
|
8618
|
+
function floor(out, a) {
|
|
8619
|
+
out[0] = Math.floor(a[0]);
|
|
8620
|
+
out[1] = Math.floor(a[1]);
|
|
8621
|
+
out[2] = Math.floor(a[2]);
|
|
8622
|
+
return out;
|
|
8623
|
+
}
|
|
8624
|
+
function min(out, a, b) {
|
|
8625
|
+
out[0] = Math.min(a[0], b[0]);
|
|
8626
|
+
out[1] = Math.min(a[1], b[1]);
|
|
8627
|
+
out[2] = Math.min(a[2], b[2]);
|
|
8628
|
+
return out;
|
|
8629
|
+
}
|
|
8630
|
+
function max(out, a, b) {
|
|
8631
|
+
out[0] = Math.max(a[0], b[0]);
|
|
8632
|
+
out[1] = Math.max(a[1], b[1]);
|
|
8633
|
+
out[2] = Math.max(a[2], b[2]);
|
|
8634
|
+
return out;
|
|
8635
|
+
}
|
|
8636
|
+
function round2(out, a) {
|
|
8637
|
+
out[0] = round(a[0]);
|
|
8638
|
+
out[1] = round(a[1]);
|
|
8639
|
+
out[2] = round(a[2]);
|
|
8640
|
+
return out;
|
|
8641
|
+
}
|
|
8642
|
+
function scale2(out, a, b) {
|
|
8643
|
+
out[0] = a[0] * b;
|
|
8644
|
+
out[1] = a[1] * b;
|
|
8645
|
+
out[2] = a[2] * b;
|
|
8646
|
+
return out;
|
|
8647
|
+
}
|
|
8648
|
+
function scaleAndAdd(out, a, b, scale3) {
|
|
8649
|
+
out[0] = a[0] + b[0] * scale3;
|
|
8650
|
+
out[1] = a[1] + b[1] * scale3;
|
|
8651
|
+
out[2] = a[2] + b[2] * scale3;
|
|
8652
|
+
return out;
|
|
8653
|
+
}
|
|
8654
|
+
function distance(a, b) {
|
|
8655
|
+
var x = b[0] - a[0];
|
|
8656
|
+
var y = b[1] - a[1];
|
|
8657
|
+
var z = b[2] - a[2];
|
|
8658
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
8659
|
+
}
|
|
8660
|
+
function squaredDistance(a, b) {
|
|
8661
|
+
var x = b[0] - a[0];
|
|
8662
|
+
var y = b[1] - a[1];
|
|
8663
|
+
var z = b[2] - a[2];
|
|
8664
|
+
return x * x + y * y + z * z;
|
|
8665
|
+
}
|
|
8666
|
+
function squaredLength(a) {
|
|
8667
|
+
var x = a[0];
|
|
8668
|
+
var y = a[1];
|
|
8669
|
+
var z = a[2];
|
|
8670
|
+
return x * x + y * y + z * z;
|
|
8671
|
+
}
|
|
8672
|
+
function negate(out, a) {
|
|
8673
|
+
out[0] = -a[0];
|
|
8674
|
+
out[1] = -a[1];
|
|
8675
|
+
out[2] = -a[2];
|
|
8676
|
+
return out;
|
|
8677
|
+
}
|
|
8678
|
+
function inverse(out, a) {
|
|
8679
|
+
out[0] = 1 / a[0];
|
|
8680
|
+
out[1] = 1 / a[1];
|
|
8681
|
+
out[2] = 1 / a[2];
|
|
8682
|
+
return out;
|
|
8683
|
+
}
|
|
8684
|
+
function normalize(out, a) {
|
|
8685
|
+
var x = a[0];
|
|
8686
|
+
var y = a[1];
|
|
8687
|
+
var z = a[2];
|
|
8688
|
+
var len2 = x * x + y * y + z * z;
|
|
8689
|
+
if (len2 > 0) {
|
|
8690
|
+
len2 = 1 / Math.sqrt(len2);
|
|
8691
|
+
}
|
|
8692
|
+
out[0] = a[0] * len2;
|
|
8693
|
+
out[1] = a[1] * len2;
|
|
8694
|
+
out[2] = a[2] * len2;
|
|
8695
|
+
return out;
|
|
8696
|
+
}
|
|
8697
|
+
function dot(a, b) {
|
|
8698
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
8699
|
+
}
|
|
8700
|
+
function cross(out, a, b) {
|
|
8701
|
+
var ax = a[0], ay = a[1], az = a[2];
|
|
8702
|
+
var bx = b[0], by = b[1], bz = b[2];
|
|
8703
|
+
out[0] = ay * bz - az * by;
|
|
8704
|
+
out[1] = az * bx - ax * bz;
|
|
8705
|
+
out[2] = ax * by - ay * bx;
|
|
8706
|
+
return out;
|
|
8707
|
+
}
|
|
8708
|
+
function lerp2(out, a, b, t) {
|
|
8709
|
+
var ax = a[0];
|
|
8710
|
+
var ay = a[1];
|
|
8711
|
+
var az = a[2];
|
|
8712
|
+
out[0] = ax + t * (b[0] - ax);
|
|
8713
|
+
out[1] = ay + t * (b[1] - ay);
|
|
8714
|
+
out[2] = az + t * (b[2] - az);
|
|
8715
|
+
return out;
|
|
8716
|
+
}
|
|
8717
|
+
function slerp(out, a, b, t) {
|
|
8718
|
+
var angle2 = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
|
8719
|
+
var sinTotal = Math.sin(angle2);
|
|
8720
|
+
var ratioA = Math.sin((1 - t) * angle2) / sinTotal;
|
|
8721
|
+
var ratioB = Math.sin(t * angle2) / sinTotal;
|
|
8722
|
+
out[0] = ratioA * a[0] + ratioB * b[0];
|
|
8723
|
+
out[1] = ratioA * a[1] + ratioB * b[1];
|
|
8724
|
+
out[2] = ratioA * a[2] + ratioB * b[2];
|
|
8725
|
+
return out;
|
|
8726
|
+
}
|
|
8727
|
+
function hermite(out, a, b, c, d, t) {
|
|
8728
|
+
var factorTimes2 = t * t;
|
|
8729
|
+
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
|
8730
|
+
var factor2 = factorTimes2 * (t - 2) + t;
|
|
8731
|
+
var factor3 = factorTimes2 * (t - 1);
|
|
8732
|
+
var factor4 = factorTimes2 * (3 - 2 * t);
|
|
8733
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
8734
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
8735
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
8736
|
+
return out;
|
|
8737
|
+
}
|
|
8738
|
+
function bezier(out, a, b, c, d, t) {
|
|
8739
|
+
var inverseFactor = 1 - t;
|
|
8740
|
+
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
|
8741
|
+
var factorTimes2 = t * t;
|
|
8742
|
+
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
|
8743
|
+
var factor2 = 3 * t * inverseFactorTimesTwo;
|
|
8744
|
+
var factor3 = 3 * factorTimes2 * inverseFactor;
|
|
8745
|
+
var factor4 = factorTimes2 * t;
|
|
8746
|
+
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
|
8747
|
+
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
|
8748
|
+
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
|
8749
|
+
return out;
|
|
8750
|
+
}
|
|
8751
|
+
function random(out, scale3) {
|
|
8752
|
+
scale3 = scale3 === void 0 ? 1 : scale3;
|
|
8753
|
+
var r = RANDOM() * 2 * Math.PI;
|
|
8754
|
+
var z = RANDOM() * 2 - 1;
|
|
8755
|
+
var zScale = Math.sqrt(1 - z * z) * scale3;
|
|
8756
|
+
out[0] = Math.cos(r) * zScale;
|
|
8757
|
+
out[1] = Math.sin(r) * zScale;
|
|
8758
|
+
out[2] = z * scale3;
|
|
8759
|
+
return out;
|
|
8760
|
+
}
|
|
8761
|
+
function transformMat4(out, a, m) {
|
|
8762
|
+
var x = a[0], y = a[1], z = a[2];
|
|
8763
|
+
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
8764
|
+
w = w || 1;
|
|
8765
|
+
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
8766
|
+
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
8767
|
+
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
|
8768
|
+
return out;
|
|
8769
|
+
}
|
|
8770
|
+
function transformMat3(out, a, m) {
|
|
8771
|
+
var x = a[0], y = a[1], z = a[2];
|
|
8772
|
+
out[0] = x * m[0] + y * m[3] + z * m[6];
|
|
8773
|
+
out[1] = x * m[1] + y * m[4] + z * m[7];
|
|
8774
|
+
out[2] = x * m[2] + y * m[5] + z * m[8];
|
|
8775
|
+
return out;
|
|
8776
|
+
}
|
|
8777
|
+
function transformQuat(out, a, q) {
|
|
8778
|
+
var qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
8779
|
+
var vx = a[0], vy = a[1], vz = a[2];
|
|
8780
|
+
var tx = qy * vz - qz * vy;
|
|
8781
|
+
var ty = qz * vx - qx * vz;
|
|
8782
|
+
var tz = qx * vy - qy * vx;
|
|
8783
|
+
tx = tx + tx;
|
|
8784
|
+
ty = ty + ty;
|
|
8785
|
+
tz = tz + tz;
|
|
8786
|
+
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
|
8787
|
+
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
|
8788
|
+
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
|
8789
|
+
return out;
|
|
8790
|
+
}
|
|
8791
|
+
function rotateX2(out, a, b, rad) {
|
|
8792
|
+
var p = [], r = [];
|
|
8793
|
+
p[0] = a[0] - b[0];
|
|
8794
|
+
p[1] = a[1] - b[1];
|
|
8795
|
+
p[2] = a[2] - b[2];
|
|
8796
|
+
r[0] = p[0];
|
|
8797
|
+
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
|
8798
|
+
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
|
8799
|
+
out[0] = r[0] + b[0];
|
|
8800
|
+
out[1] = r[1] + b[1];
|
|
8801
|
+
out[2] = r[2] + b[2];
|
|
8802
|
+
return out;
|
|
8803
|
+
}
|
|
8804
|
+
function rotateY2(out, a, b, rad) {
|
|
8805
|
+
var p = [], r = [];
|
|
8806
|
+
p[0] = a[0] - b[0];
|
|
8807
|
+
p[1] = a[1] - b[1];
|
|
8808
|
+
p[2] = a[2] - b[2];
|
|
8809
|
+
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
|
8810
|
+
r[1] = p[1];
|
|
8811
|
+
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
|
8812
|
+
out[0] = r[0] + b[0];
|
|
8813
|
+
out[1] = r[1] + b[1];
|
|
8814
|
+
out[2] = r[2] + b[2];
|
|
8815
|
+
return out;
|
|
8816
|
+
}
|
|
8817
|
+
function rotateZ2(out, a, b, rad) {
|
|
8818
|
+
var p = [], r = [];
|
|
8819
|
+
p[0] = a[0] - b[0];
|
|
8820
|
+
p[1] = a[1] - b[1];
|
|
8821
|
+
p[2] = a[2] - b[2];
|
|
8822
|
+
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
|
8823
|
+
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
|
8824
|
+
r[2] = p[2];
|
|
8825
|
+
out[0] = r[0] + b[0];
|
|
8826
|
+
out[1] = r[1] + b[1];
|
|
8827
|
+
out[2] = r[2] + b[2];
|
|
8828
|
+
return out;
|
|
8829
|
+
}
|
|
8830
|
+
function angle(a, b) {
|
|
8831
|
+
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;
|
|
8832
|
+
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
|
8833
|
+
}
|
|
8834
|
+
function zero(out) {
|
|
8835
|
+
out[0] = 0;
|
|
8836
|
+
out[1] = 0;
|
|
8837
|
+
out[2] = 0;
|
|
8838
|
+
return out;
|
|
8839
|
+
}
|
|
8840
|
+
function str2(a) {
|
|
8841
|
+
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
|
8842
|
+
}
|
|
8843
|
+
function exactEquals2(a, b) {
|
|
8844
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
|
8845
|
+
}
|
|
8846
|
+
function equals2(a, b) {
|
|
8847
|
+
var a0 = a[0], a1 = a[1], a2 = a[2];
|
|
8848
|
+
var b0 = b[0], b1 = b[1], b2 = b[2];
|
|
8849
|
+
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));
|
|
8850
|
+
}
|
|
8851
|
+
var sub2 = subtract2;
|
|
8852
|
+
var mul2 = multiply2;
|
|
8853
|
+
var div = divide;
|
|
8854
|
+
var dist = distance;
|
|
8855
|
+
var sqrDist = squaredDistance;
|
|
8856
|
+
var len = length;
|
|
8857
|
+
var sqrLen = squaredLength;
|
|
8858
|
+
var forEach = (function() {
|
|
8859
|
+
var vec = create2();
|
|
8860
|
+
return function(a, stride, offset, count, fn, arg) {
|
|
8861
|
+
var i, l;
|
|
8862
|
+
if (!stride) {
|
|
8863
|
+
stride = 3;
|
|
8864
|
+
}
|
|
8865
|
+
if (!offset) {
|
|
8866
|
+
offset = 0;
|
|
8867
|
+
}
|
|
8868
|
+
if (count) {
|
|
8869
|
+
l = Math.min(count * stride + offset, a.length);
|
|
8870
|
+
} else {
|
|
8871
|
+
l = a.length;
|
|
8872
|
+
}
|
|
8873
|
+
for (i = offset; i < l; i += stride) {
|
|
8874
|
+
vec[0] = a[i];
|
|
8875
|
+
vec[1] = a[i + 1];
|
|
8876
|
+
vec[2] = a[i + 2];
|
|
8877
|
+
fn(vec, vec, arg);
|
|
8878
|
+
a[i] = vec[0];
|
|
8879
|
+
a[i + 1] = vec[1];
|
|
8880
|
+
a[i + 2] = vec[2];
|
|
8881
|
+
}
|
|
8882
|
+
return a;
|
|
8883
|
+
};
|
|
8884
|
+
})();
|
|
8885
|
+
|
|
7157
8886
|
// src/render/camera.ts
|
|
7158
|
-
import { mat4, vec3 } from "gl-matrix";
|
|
7159
8887
|
var Camera = class {
|
|
7160
8888
|
constructor() {
|
|
7161
|
-
this._position =
|
|
7162
|
-
this._angles =
|
|
8889
|
+
this._position = vec3_exports.create();
|
|
8890
|
+
this._angles = vec3_exports.create();
|
|
7163
8891
|
// pitch, yaw, roll
|
|
7164
|
-
this._bobAngles =
|
|
7165
|
-
this._bobOffset =
|
|
7166
|
-
this._kickAngles =
|
|
8892
|
+
this._bobAngles = vec3_exports.create();
|
|
8893
|
+
this._bobOffset = vec3_exports.create();
|
|
8894
|
+
this._kickAngles = vec3_exports.create();
|
|
7167
8895
|
this._rollAngle = 0;
|
|
7168
8896
|
this._fov = 90;
|
|
7169
8897
|
this._aspect = 1;
|
|
7170
8898
|
this._near = 0.1;
|
|
7171
8899
|
this._far = 1e3;
|
|
7172
|
-
this._viewMatrix =
|
|
7173
|
-
this._projectionMatrix =
|
|
7174
|
-
this._viewProjectionMatrix =
|
|
8900
|
+
this._viewMatrix = mat4_exports.create();
|
|
8901
|
+
this._projectionMatrix = mat4_exports.create();
|
|
8902
|
+
this._viewProjectionMatrix = mat4_exports.create();
|
|
7175
8903
|
this._dirty = true;
|
|
7176
8904
|
}
|
|
7177
8905
|
get position() {
|
|
7178
8906
|
return this._position;
|
|
7179
8907
|
}
|
|
7180
8908
|
set position(value) {
|
|
7181
|
-
if (!
|
|
7182
|
-
|
|
8909
|
+
if (!vec3_exports.equals(this._position, value)) {
|
|
8910
|
+
vec3_exports.copy(this._position, value);
|
|
7183
8911
|
this._dirty = true;
|
|
7184
8912
|
this.triggerMoveEvent();
|
|
7185
8913
|
}
|
|
@@ -7188,8 +8916,8 @@ var Camera = class {
|
|
|
7188
8916
|
return this._angles;
|
|
7189
8917
|
}
|
|
7190
8918
|
set angles(value) {
|
|
7191
|
-
if (!
|
|
7192
|
-
|
|
8919
|
+
if (!vec3_exports.equals(this._angles, value)) {
|
|
8920
|
+
vec3_exports.copy(this._angles, value);
|
|
7193
8921
|
this._dirty = true;
|
|
7194
8922
|
this.triggerMoveEvent();
|
|
7195
8923
|
}
|
|
@@ -7198,21 +8926,21 @@ var Camera = class {
|
|
|
7198
8926
|
return this._bobAngles;
|
|
7199
8927
|
}
|
|
7200
8928
|
set bobAngles(value) {
|
|
7201
|
-
|
|
8929
|
+
vec3_exports.copy(this._bobAngles, value);
|
|
7202
8930
|
this._dirty = true;
|
|
7203
8931
|
}
|
|
7204
8932
|
get kickAngles() {
|
|
7205
8933
|
return this._kickAngles;
|
|
7206
8934
|
}
|
|
7207
8935
|
set kickAngles(value) {
|
|
7208
|
-
|
|
8936
|
+
vec3_exports.copy(this._kickAngles, value);
|
|
7209
8937
|
this._dirty = true;
|
|
7210
8938
|
}
|
|
7211
8939
|
get bobOffset() {
|
|
7212
8940
|
return this._bobOffset;
|
|
7213
8941
|
}
|
|
7214
8942
|
set bobOffset(value) {
|
|
7215
|
-
|
|
8943
|
+
vec3_exports.copy(this._bobOffset, value);
|
|
7216
8944
|
this._dirty = true;
|
|
7217
8945
|
}
|
|
7218
8946
|
get rollAngle() {
|
|
@@ -7238,17 +8966,17 @@ var Camera = class {
|
|
|
7238
8966
|
}
|
|
7239
8967
|
// API Methods
|
|
7240
8968
|
setPosition(x, y, z) {
|
|
7241
|
-
const newPos =
|
|
7242
|
-
if (!
|
|
7243
|
-
|
|
8969
|
+
const newPos = vec3_exports.fromValues(x, y, z);
|
|
8970
|
+
if (!vec3_exports.equals(this._position, newPos)) {
|
|
8971
|
+
vec3_exports.copy(this._position, newPos);
|
|
7244
8972
|
this._dirty = true;
|
|
7245
8973
|
this.triggerMoveEvent();
|
|
7246
8974
|
}
|
|
7247
8975
|
}
|
|
7248
8976
|
setRotation(pitch, yaw, roll) {
|
|
7249
|
-
const newAngles =
|
|
7250
|
-
if (!
|
|
7251
|
-
|
|
8977
|
+
const newAngles = vec3_exports.fromValues(pitch, yaw, roll);
|
|
8978
|
+
if (!vec3_exports.equals(this._angles, newAngles)) {
|
|
8979
|
+
vec3_exports.copy(this._angles, newAngles);
|
|
7252
8980
|
this._dirty = true;
|
|
7253
8981
|
this.triggerMoveEvent();
|
|
7254
8982
|
}
|
|
@@ -7260,10 +8988,10 @@ var Camera = class {
|
|
|
7260
8988
|
this.aspect = aspect;
|
|
7261
8989
|
}
|
|
7262
8990
|
lookAt(target) {
|
|
7263
|
-
const direction =
|
|
7264
|
-
|
|
7265
|
-
const
|
|
7266
|
-
if (
|
|
8991
|
+
const direction = vec3_exports.create();
|
|
8992
|
+
vec3_exports.subtract(direction, target, this._position);
|
|
8993
|
+
const len2 = vec3_exports.length(direction);
|
|
8994
|
+
if (len2 < 1e-3) return;
|
|
7267
8995
|
const yaw = Math.atan2(direction[1], direction[0]) * RAD2DEG;
|
|
7268
8996
|
const hyp = Math.hypot(direction[0], direction[1]);
|
|
7269
8997
|
const pitch = -Math.atan2(direction[2], hyp) * RAD2DEG;
|
|
@@ -7272,8 +9000,8 @@ var Camera = class {
|
|
|
7272
9000
|
triggerMoveEvent() {
|
|
7273
9001
|
if (this.onCameraMove) {
|
|
7274
9002
|
this.onCameraMove({
|
|
7275
|
-
position:
|
|
7276
|
-
angles:
|
|
9003
|
+
position: vec3_exports.clone(this._position),
|
|
9004
|
+
angles: vec3_exports.clone(this._angles)
|
|
7277
9005
|
});
|
|
7278
9006
|
}
|
|
7279
9007
|
}
|
|
@@ -7290,8 +9018,8 @@ var Camera = class {
|
|
|
7290
9018
|
return this._viewProjectionMatrix;
|
|
7291
9019
|
}
|
|
7292
9020
|
getViewmodelProjectionMatrix(fov) {
|
|
7293
|
-
const projectionMatrix =
|
|
7294
|
-
|
|
9021
|
+
const projectionMatrix = mat4_exports.create();
|
|
9022
|
+
mat4_exports.perspective(
|
|
7295
9023
|
projectionMatrix,
|
|
7296
9024
|
fov * DEG2RAD,
|
|
7297
9025
|
this._aspect,
|
|
@@ -7303,19 +9031,19 @@ var Camera = class {
|
|
|
7303
9031
|
screenToWorldRay(screenX, screenY) {
|
|
7304
9032
|
const ndcX = screenX * 2 - 1;
|
|
7305
9033
|
const ndcY = 1 - screenY * 2;
|
|
7306
|
-
const clipStart =
|
|
7307
|
-
const clipEnd =
|
|
7308
|
-
const invViewProj =
|
|
7309
|
-
|
|
7310
|
-
const worldStart =
|
|
7311
|
-
const worldEnd =
|
|
7312
|
-
|
|
7313
|
-
|
|
7314
|
-
const direction =
|
|
7315
|
-
|
|
7316
|
-
|
|
9034
|
+
const clipStart = vec3_exports.fromValues(ndcX, ndcY, -1);
|
|
9035
|
+
const clipEnd = vec3_exports.fromValues(ndcX, ndcY, 1);
|
|
9036
|
+
const invViewProj = mat4_exports.create();
|
|
9037
|
+
mat4_exports.invert(invViewProj, this.viewProjectionMatrix);
|
|
9038
|
+
const worldStart = vec3_exports.create();
|
|
9039
|
+
const worldEnd = vec3_exports.create();
|
|
9040
|
+
vec3_exports.transformMat4(worldStart, clipStart, invViewProj);
|
|
9041
|
+
vec3_exports.transformMat4(worldEnd, clipEnd, invViewProj);
|
|
9042
|
+
const direction = vec3_exports.create();
|
|
9043
|
+
vec3_exports.subtract(direction, worldEnd, worldStart);
|
|
9044
|
+
vec3_exports.normalize(direction, direction);
|
|
7317
9045
|
return {
|
|
7318
|
-
origin:
|
|
9046
|
+
origin: vec3_exports.clone(this._position),
|
|
7319
9047
|
direction
|
|
7320
9048
|
};
|
|
7321
9049
|
}
|
|
@@ -7323,14 +9051,14 @@ var Camera = class {
|
|
|
7323
9051
|
if (!this._dirty) {
|
|
7324
9052
|
return;
|
|
7325
9053
|
}
|
|
7326
|
-
|
|
9054
|
+
mat4_exports.perspective(
|
|
7327
9055
|
this._projectionMatrix,
|
|
7328
9056
|
this._fov * DEG2RAD,
|
|
7329
9057
|
this._aspect,
|
|
7330
9058
|
this._near,
|
|
7331
9059
|
this._far
|
|
7332
9060
|
);
|
|
7333
|
-
const quakeToGl =
|
|
9061
|
+
const quakeToGl = mat4_exports.fromValues(
|
|
7334
9062
|
0,
|
|
7335
9063
|
0,
|
|
7336
9064
|
-1,
|
|
@@ -7358,18 +9086,18 @@ var Camera = class {
|
|
|
7358
9086
|
const pitchRad = pitch * DEG2RAD;
|
|
7359
9087
|
const yawRad = yaw * DEG2RAD;
|
|
7360
9088
|
const rollRad = roll * DEG2RAD;
|
|
7361
|
-
const rotationQuake =
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7365
|
-
|
|
7366
|
-
const rotationGl =
|
|
7367
|
-
|
|
7368
|
-
const positionWithOffset =
|
|
7369
|
-
const negativePosition =
|
|
7370
|
-
const rotatedPosQuake =
|
|
7371
|
-
|
|
7372
|
-
const translationGl =
|
|
9089
|
+
const rotationQuake = mat4_exports.create();
|
|
9090
|
+
mat4_exports.identity(rotationQuake);
|
|
9091
|
+
mat4_exports.rotateZ(rotationQuake, rotationQuake, -yawRad);
|
|
9092
|
+
mat4_exports.rotateY(rotationQuake, rotationQuake, -pitchRad);
|
|
9093
|
+
mat4_exports.rotateX(rotationQuake, rotationQuake, -rollRad);
|
|
9094
|
+
const rotationGl = mat4_exports.create();
|
|
9095
|
+
mat4_exports.multiply(rotationGl, quakeToGl, rotationQuake);
|
|
9096
|
+
const positionWithOffset = vec3_exports.add(vec3_exports.create(), this._position, this._bobOffset);
|
|
9097
|
+
const negativePosition = vec3_exports.negate(vec3_exports.create(), positionWithOffset);
|
|
9098
|
+
const rotatedPosQuake = vec3_exports.create();
|
|
9099
|
+
vec3_exports.transformMat4(rotatedPosQuake, negativePosition, rotationQuake);
|
|
9100
|
+
const translationGl = vec3_exports.fromValues(
|
|
7373
9101
|
rotatedPosQuake[1] ? -rotatedPosQuake[1] : 0,
|
|
7374
9102
|
// Y in Quake -> -X in WebGL
|
|
7375
9103
|
rotatedPosQuake[2] || 0,
|
|
@@ -7377,11 +9105,11 @@ var Camera = class {
|
|
|
7377
9105
|
rotatedPosQuake[0] ? -rotatedPosQuake[0] : 0
|
|
7378
9106
|
// X in Quake -> -Z in WebGL
|
|
7379
9107
|
);
|
|
7380
|
-
|
|
9108
|
+
mat4_exports.copy(this._viewMatrix, rotationGl);
|
|
7381
9109
|
this._viewMatrix[12] = translationGl[0];
|
|
7382
9110
|
this._viewMatrix[13] = translationGl[1];
|
|
7383
9111
|
this._viewMatrix[14] = translationGl[2];
|
|
7384
|
-
|
|
9112
|
+
mat4_exports.multiply(
|
|
7385
9113
|
this._viewProjectionMatrix,
|
|
7386
9114
|
this._projectionMatrix,
|
|
7387
9115
|
this._viewMatrix
|
|
@@ -7394,11 +9122,11 @@ var Camera = class {
|
|
|
7394
9122
|
var DEFAULT_AMBIENT = [0.2, 0.2, 0.2];
|
|
7395
9123
|
var DEFAULT_DIRECTION = { x: 0, y: 0, z: 1 };
|
|
7396
9124
|
var DEFAULT_DIRECTION_COLOR = [0.8, 0.8, 0.8];
|
|
7397
|
-
function
|
|
9125
|
+
function lerp3(a, b, t) {
|
|
7398
9126
|
return a + (b - a) * t;
|
|
7399
9127
|
}
|
|
7400
9128
|
function lerpVec32(a, b, t) {
|
|
7401
|
-
return { x:
|
|
9129
|
+
return { x: lerp3(a.x, b.x, t), y: lerp3(a.y, b.y, t), z: lerp3(a.z, b.z, t) };
|
|
7402
9130
|
}
|
|
7403
9131
|
function clamp012(v) {
|
|
7404
9132
|
if (v < 0) return 0;
|
|
@@ -7445,8 +9173,8 @@ function evaluateLighting(normal, position, lighting) {
|
|
|
7445
9173
|
const radiusSq = light.radius * light.radius;
|
|
7446
9174
|
if (distSq < radiusSq && radiusSq > 0) {
|
|
7447
9175
|
const attenuation = 1 - Math.sqrt(distSq) / light.radius;
|
|
7448
|
-
const
|
|
7449
|
-
const lightDotN =
|
|
9176
|
+
const dist2 = Math.sqrt(distSq);
|
|
9177
|
+
const lightDotN = dist2 > 0 ? clamp012(-(dx * n.x + dy * n.y + dz * n.z) / dist2) : 0;
|
|
7450
9178
|
const amount = clamp012(attenuation * lightDotN);
|
|
7451
9179
|
r += light.color[0] * amount;
|
|
7452
9180
|
g += light.color[1] * amount;
|
|
@@ -8120,11 +9848,11 @@ function spawnBlood(context) {
|
|
|
8120
9848
|
function spawnTeleportFlash(context) {
|
|
8121
9849
|
const { system, origin } = context;
|
|
8122
9850
|
for (let i = 0; i < 30; i += 1) {
|
|
8123
|
-
const
|
|
9851
|
+
const angle2 = system.rng.frandom() * Math.PI * 2;
|
|
8124
9852
|
const radius = 8 + system.rng.frandom() * 8;
|
|
8125
9853
|
system.spawn({
|
|
8126
9854
|
position: origin,
|
|
8127
|
-
velocity: { x: Math.cos(
|
|
9855
|
+
velocity: { x: Math.cos(angle2) * radius, y: Math.sin(angle2) * radius, z: 100 + system.rng.frandom() * 80 },
|
|
8128
9856
|
color: [0.4, 0.6, 1, 0.9],
|
|
8129
9857
|
size: 4,
|
|
8130
9858
|
lifetime: 0.5,
|
|
@@ -8227,11 +9955,11 @@ function spawnRailTrail(context) {
|
|
|
8227
9955
|
const dx = end.x - start.x;
|
|
8228
9956
|
const dy = end.y - start.y;
|
|
8229
9957
|
const dz = end.z - start.z;
|
|
8230
|
-
const
|
|
8231
|
-
if (
|
|
8232
|
-
const dir = { x: dx /
|
|
9958
|
+
const dist2 = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
9959
|
+
if (dist2 < 1) return;
|
|
9960
|
+
const dir = { x: dx / dist2, y: dy / dist2, z: dz / dist2 };
|
|
8233
9961
|
const step = 8;
|
|
8234
|
-
for (let d = 0; d <
|
|
9962
|
+
for (let d = 0; d < dist2; d += step) {
|
|
8235
9963
|
const x = start.x + dir.x * d;
|
|
8236
9964
|
const y = start.y + dir.y * d;
|
|
8237
9965
|
const z = start.z + dir.z * d;
|
|
@@ -8371,20 +10099,20 @@ var DemoReader = class {
|
|
|
8371
10099
|
let scanOffset = 0;
|
|
8372
10100
|
this.messageOffsets = [];
|
|
8373
10101
|
while (scanOffset + 4 <= this.buffer.byteLength) {
|
|
8374
|
-
const
|
|
8375
|
-
if (
|
|
10102
|
+
const length2 = this.view.getInt32(scanOffset, true);
|
|
10103
|
+
if (length2 === -1) {
|
|
8376
10104
|
break;
|
|
8377
10105
|
}
|
|
8378
|
-
if (
|
|
8379
|
-
console.warn(`DemoReader: Invalid block length ${
|
|
10106
|
+
if (length2 < 0 || length2 > 2097152) {
|
|
10107
|
+
console.warn(`DemoReader: Invalid block length ${length2} at offset ${scanOffset} during scan`);
|
|
8380
10108
|
break;
|
|
8381
10109
|
}
|
|
8382
|
-
if (scanOffset + 4 +
|
|
10110
|
+
if (scanOffset + 4 + length2 > this.buffer.byteLength) {
|
|
8383
10111
|
console.warn(`DemoReader: Incomplete block at offset ${scanOffset} during scan`);
|
|
8384
10112
|
break;
|
|
8385
10113
|
}
|
|
8386
10114
|
this.messageOffsets.push(scanOffset);
|
|
8387
|
-
scanOffset += 4 +
|
|
10115
|
+
scanOffset += 4 + length2;
|
|
8388
10116
|
}
|
|
8389
10117
|
}
|
|
8390
10118
|
/**
|
|
@@ -8402,18 +10130,18 @@ var DemoReader = class {
|
|
|
8402
10130
|
if (this.offset + 4 > this.buffer.byteLength) {
|
|
8403
10131
|
return null;
|
|
8404
10132
|
}
|
|
8405
|
-
const
|
|
8406
|
-
if (
|
|
10133
|
+
const length2 = this.view.getInt32(this.offset, true);
|
|
10134
|
+
if (length2 === -1) {
|
|
8407
10135
|
return null;
|
|
8408
10136
|
}
|
|
8409
|
-
if (
|
|
10137
|
+
if (length2 < 0 || this.offset + 4 + length2 > this.buffer.byteLength) {
|
|
8410
10138
|
return null;
|
|
8411
10139
|
}
|
|
8412
10140
|
this.offset += 4;
|
|
8413
|
-
const blockData = this.buffer.slice(this.offset, this.offset +
|
|
8414
|
-
this.offset +=
|
|
10141
|
+
const blockData = this.buffer.slice(this.offset, this.offset + length2);
|
|
10142
|
+
this.offset += length2;
|
|
8415
10143
|
return {
|
|
8416
|
-
length,
|
|
10144
|
+
length: length2,
|
|
8417
10145
|
data: new BinaryStream(blockData)
|
|
8418
10146
|
};
|
|
8419
10147
|
}
|
|
@@ -8450,14 +10178,14 @@ var DemoReader = class {
|
|
|
8450
10178
|
const blockInfos = [];
|
|
8451
10179
|
let tempOffset = this.offset;
|
|
8452
10180
|
while (tempOffset + 4 <= this.buffer.byteLength) {
|
|
8453
|
-
const
|
|
8454
|
-
if (
|
|
8455
|
-
if (
|
|
10181
|
+
const length2 = this.view.getInt32(tempOffset, true);
|
|
10182
|
+
if (length2 === -1) break;
|
|
10183
|
+
if (length2 < 0 || tempOffset + 4 + length2 > this.buffer.byteLength) {
|
|
8456
10184
|
break;
|
|
8457
10185
|
}
|
|
8458
|
-
blockInfos.push({ offset: tempOffset + 4, length });
|
|
8459
|
-
totalLength +=
|
|
8460
|
-
tempOffset += 4 +
|
|
10186
|
+
blockInfos.push({ offset: tempOffset + 4, length: length2 });
|
|
10187
|
+
totalLength += length2;
|
|
10188
|
+
tempOffset += 4 + length2;
|
|
8461
10189
|
}
|
|
8462
10190
|
const result = new Uint8Array(totalLength);
|
|
8463
10191
|
let resultOffset = 0;
|
|
@@ -8514,9 +10242,9 @@ var Z_BINARY = 0;
|
|
|
8514
10242
|
var Z_TEXT = 1;
|
|
8515
10243
|
var Z_UNKNOWN$1 = 2;
|
|
8516
10244
|
function zero$1(buf) {
|
|
8517
|
-
let
|
|
8518
|
-
while (--
|
|
8519
|
-
buf[
|
|
10245
|
+
let len2 = buf.length;
|
|
10246
|
+
while (--len2 >= 0) {
|
|
10247
|
+
buf[len2] = 0;
|
|
8520
10248
|
}
|
|
8521
10249
|
}
|
|
8522
10250
|
var STORED_BLOCK = 0;
|
|
@@ -8579,22 +10307,22 @@ function TreeDesc(dyn_tree, stat_desc) {
|
|
|
8579
10307
|
this.max_code = 0;
|
|
8580
10308
|
this.stat_desc = stat_desc;
|
|
8581
10309
|
}
|
|
8582
|
-
var d_code = (
|
|
8583
|
-
return
|
|
10310
|
+
var d_code = (dist2) => {
|
|
10311
|
+
return dist2 < 256 ? _dist_code[dist2] : _dist_code[256 + (dist2 >>> 7)];
|
|
8584
10312
|
};
|
|
8585
10313
|
var put_short = (s, w) => {
|
|
8586
10314
|
s.pending_buf[s.pending++] = w & 255;
|
|
8587
10315
|
s.pending_buf[s.pending++] = w >>> 8 & 255;
|
|
8588
10316
|
};
|
|
8589
|
-
var send_bits = (s, value,
|
|
8590
|
-
if (s.bi_valid > Buf_size -
|
|
10317
|
+
var send_bits = (s, value, length2) => {
|
|
10318
|
+
if (s.bi_valid > Buf_size - length2) {
|
|
8591
10319
|
s.bi_buf |= value << s.bi_valid & 65535;
|
|
8592
10320
|
put_short(s, s.bi_buf);
|
|
8593
10321
|
s.bi_buf = value >> Buf_size - s.bi_valid;
|
|
8594
|
-
s.bi_valid +=
|
|
10322
|
+
s.bi_valid += length2 - Buf_size;
|
|
8595
10323
|
} else {
|
|
8596
10324
|
s.bi_buf |= value << s.bi_valid & 65535;
|
|
8597
|
-
s.bi_valid +=
|
|
10325
|
+
s.bi_valid += length2;
|
|
8598
10326
|
}
|
|
8599
10327
|
};
|
|
8600
10328
|
var send_code = (s, c, tree) => {
|
|
@@ -8605,13 +10333,13 @@ var send_code = (s, c, tree) => {
|
|
|
8605
10333
|
/*.Len*/
|
|
8606
10334
|
);
|
|
8607
10335
|
};
|
|
8608
|
-
var bi_reverse = (code,
|
|
10336
|
+
var bi_reverse = (code, len2) => {
|
|
8609
10337
|
let res = 0;
|
|
8610
10338
|
do {
|
|
8611
10339
|
res |= code & 1;
|
|
8612
10340
|
code >>>= 1;
|
|
8613
10341
|
res <<= 1;
|
|
8614
|
-
} while (--
|
|
10342
|
+
} while (--len2 > 0);
|
|
8615
10343
|
return res >>> 1;
|
|
8616
10344
|
};
|
|
8617
10345
|
var bi_flush = (s) => {
|
|
@@ -8703,40 +10431,40 @@ var gen_codes = (tree, max_code, bl_count) => {
|
|
|
8703
10431
|
next_code[bits] = code;
|
|
8704
10432
|
}
|
|
8705
10433
|
for (n = 0; n <= max_code; n++) {
|
|
8706
|
-
let
|
|
8707
|
-
if (
|
|
10434
|
+
let len2 = tree[n * 2 + 1];
|
|
10435
|
+
if (len2 === 0) {
|
|
8708
10436
|
continue;
|
|
8709
10437
|
}
|
|
8710
|
-
tree[n * 2] = bi_reverse(next_code[
|
|
10438
|
+
tree[n * 2] = bi_reverse(next_code[len2]++, len2);
|
|
8711
10439
|
}
|
|
8712
10440
|
};
|
|
8713
10441
|
var tr_static_init = () => {
|
|
8714
10442
|
let n;
|
|
8715
10443
|
let bits;
|
|
8716
|
-
let
|
|
10444
|
+
let length2;
|
|
8717
10445
|
let code;
|
|
8718
|
-
let
|
|
10446
|
+
let dist2;
|
|
8719
10447
|
const bl_count = new Array(MAX_BITS$1 + 1);
|
|
8720
|
-
|
|
10448
|
+
length2 = 0;
|
|
8721
10449
|
for (code = 0; code < LENGTH_CODES$1 - 1; code++) {
|
|
8722
|
-
base_length[code] =
|
|
10450
|
+
base_length[code] = length2;
|
|
8723
10451
|
for (n = 0; n < 1 << extra_lbits[code]; n++) {
|
|
8724
|
-
_length_code[
|
|
10452
|
+
_length_code[length2++] = code;
|
|
8725
10453
|
}
|
|
8726
10454
|
}
|
|
8727
|
-
_length_code[
|
|
8728
|
-
|
|
10455
|
+
_length_code[length2 - 1] = code;
|
|
10456
|
+
dist2 = 0;
|
|
8729
10457
|
for (code = 0; code < 16; code++) {
|
|
8730
|
-
base_dist[code] =
|
|
10458
|
+
base_dist[code] = dist2;
|
|
8731
10459
|
for (n = 0; n < 1 << extra_dbits[code]; n++) {
|
|
8732
|
-
_dist_code[
|
|
10460
|
+
_dist_code[dist2++] = code;
|
|
8733
10461
|
}
|
|
8734
10462
|
}
|
|
8735
|
-
|
|
10463
|
+
dist2 >>= 7;
|
|
8736
10464
|
for (; code < D_CODES$1; code++) {
|
|
8737
|
-
base_dist[code] =
|
|
10465
|
+
base_dist[code] = dist2 << 7;
|
|
8738
10466
|
for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
|
|
8739
|
-
_dist_code[256 +
|
|
10467
|
+
_dist_code[256 + dist2++] = code;
|
|
8740
10468
|
}
|
|
8741
10469
|
}
|
|
8742
10470
|
for (bits = 0; bits <= MAX_BITS$1; bits++) {
|
|
@@ -8818,17 +10546,17 @@ var pqdownheap = (s, tree, k) => {
|
|
|
8818
10546
|
s.heap[k] = v;
|
|
8819
10547
|
};
|
|
8820
10548
|
var compress_block = (s, ltree, dtree) => {
|
|
8821
|
-
let
|
|
10549
|
+
let dist2;
|
|
8822
10550
|
let lc;
|
|
8823
10551
|
let sx = 0;
|
|
8824
10552
|
let code;
|
|
8825
10553
|
let extra;
|
|
8826
10554
|
if (s.sym_next !== 0) {
|
|
8827
10555
|
do {
|
|
8828
|
-
|
|
8829
|
-
|
|
10556
|
+
dist2 = s.pending_buf[s.sym_buf + sx++] & 255;
|
|
10557
|
+
dist2 += (s.pending_buf[s.sym_buf + sx++] & 255) << 8;
|
|
8830
10558
|
lc = s.pending_buf[s.sym_buf + sx++];
|
|
8831
|
-
if (
|
|
10559
|
+
if (dist2 === 0) {
|
|
8832
10560
|
send_code(s, lc, ltree);
|
|
8833
10561
|
} else {
|
|
8834
10562
|
code = _length_code[lc];
|
|
@@ -8838,13 +10566,13 @@ var compress_block = (s, ltree, dtree) => {
|
|
|
8838
10566
|
lc -= base_length[code];
|
|
8839
10567
|
send_bits(s, lc, extra);
|
|
8840
10568
|
}
|
|
8841
|
-
|
|
8842
|
-
code = d_code(
|
|
10569
|
+
dist2--;
|
|
10570
|
+
code = d_code(dist2);
|
|
8843
10571
|
send_code(s, code, dtree);
|
|
8844
10572
|
extra = extra_dbits[code];
|
|
8845
10573
|
if (extra !== 0) {
|
|
8846
|
-
|
|
8847
|
-
send_bits(s,
|
|
10574
|
+
dist2 -= base_dist[code];
|
|
10575
|
+
send_bits(s, dist2, extra);
|
|
8848
10576
|
}
|
|
8849
10577
|
}
|
|
8850
10578
|
} while (sx < s.sym_next);
|
|
@@ -9121,17 +10849,17 @@ var _tr_flush_block$1 = (s, buf, stored_len, last) => {
|
|
|
9121
10849
|
bi_windup(s);
|
|
9122
10850
|
}
|
|
9123
10851
|
};
|
|
9124
|
-
var _tr_tally$1 = (s,
|
|
9125
|
-
s.pending_buf[s.sym_buf + s.sym_next++] =
|
|
9126
|
-
s.pending_buf[s.sym_buf + s.sym_next++] =
|
|
10852
|
+
var _tr_tally$1 = (s, dist2, lc) => {
|
|
10853
|
+
s.pending_buf[s.sym_buf + s.sym_next++] = dist2;
|
|
10854
|
+
s.pending_buf[s.sym_buf + s.sym_next++] = dist2 >> 8;
|
|
9127
10855
|
s.pending_buf[s.sym_buf + s.sym_next++] = lc;
|
|
9128
|
-
if (
|
|
10856
|
+
if (dist2 === 0) {
|
|
9129
10857
|
s.dyn_ltree[lc * 2]++;
|
|
9130
10858
|
} else {
|
|
9131
10859
|
s.matches++;
|
|
9132
|
-
|
|
10860
|
+
dist2--;
|
|
9133
10861
|
s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]++;
|
|
9134
|
-
s.dyn_dtree[d_code(
|
|
10862
|
+
s.dyn_dtree[d_code(dist2) * 2]++;
|
|
9135
10863
|
}
|
|
9136
10864
|
return s.sym_next === s.sym_end;
|
|
9137
10865
|
};
|
|
@@ -9147,11 +10875,11 @@ var trees = {
|
|
|
9147
10875
|
_tr_tally: _tr_tally_1,
|
|
9148
10876
|
_tr_align: _tr_align_1
|
|
9149
10877
|
};
|
|
9150
|
-
var adler32 = (adler, buf,
|
|
10878
|
+
var adler32 = (adler, buf, len2, pos) => {
|
|
9151
10879
|
let s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;
|
|
9152
|
-
while (
|
|
9153
|
-
n =
|
|
9154
|
-
|
|
10880
|
+
while (len2 !== 0) {
|
|
10881
|
+
n = len2 > 2e3 ? 2e3 : len2;
|
|
10882
|
+
len2 -= n;
|
|
9155
10883
|
do {
|
|
9156
10884
|
s1 = s1 + buf[pos++] | 0;
|
|
9157
10885
|
s2 = s2 + s1 | 0;
|
|
@@ -9174,9 +10902,9 @@ var makeTable = () => {
|
|
|
9174
10902
|
return table;
|
|
9175
10903
|
};
|
|
9176
10904
|
var crcTable = new Uint32Array(makeTable());
|
|
9177
|
-
var crc322 = (crc, buf,
|
|
10905
|
+
var crc322 = (crc, buf, len2, pos) => {
|
|
9178
10906
|
const t = crcTable;
|
|
9179
|
-
const end = pos +
|
|
10907
|
+
const end = pos + len2;
|
|
9180
10908
|
crc ^= -1;
|
|
9181
10909
|
for (let i = pos; i < end; i++) {
|
|
9182
10910
|
crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];
|
|
@@ -9299,10 +11027,10 @@ var err = (strm, errorCode) => {
|
|
|
9299
11027
|
var rank = (f) => {
|
|
9300
11028
|
return f * 2 - (f > 4 ? 9 : 0);
|
|
9301
11029
|
};
|
|
9302
|
-
var
|
|
9303
|
-
let
|
|
9304
|
-
while (--
|
|
9305
|
-
buf[
|
|
11030
|
+
var zero2 = (buf) => {
|
|
11031
|
+
let len2 = buf.length;
|
|
11032
|
+
while (--len2 >= 0) {
|
|
11033
|
+
buf[len2] = 0;
|
|
9306
11034
|
}
|
|
9307
11035
|
};
|
|
9308
11036
|
var slide_hash = (s) => {
|
|
@@ -9326,19 +11054,19 @@ var HASH_ZLIB = (s, prev, data) => (prev << s.hash_shift ^ data) & s.hash_mask;
|
|
|
9326
11054
|
var HASH = HASH_ZLIB;
|
|
9327
11055
|
var flush_pending = (strm) => {
|
|
9328
11056
|
const s = strm.state;
|
|
9329
|
-
let
|
|
9330
|
-
if (
|
|
9331
|
-
|
|
11057
|
+
let len2 = s.pending;
|
|
11058
|
+
if (len2 > strm.avail_out) {
|
|
11059
|
+
len2 = strm.avail_out;
|
|
9332
11060
|
}
|
|
9333
|
-
if (
|
|
11061
|
+
if (len2 === 0) {
|
|
9334
11062
|
return;
|
|
9335
11063
|
}
|
|
9336
|
-
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out +
|
|
9337
|
-
strm.next_out +=
|
|
9338
|
-
s.pending_out +=
|
|
9339
|
-
strm.total_out +=
|
|
9340
|
-
strm.avail_out -=
|
|
9341
|
-
s.pending -=
|
|
11064
|
+
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len2), strm.next_out);
|
|
11065
|
+
strm.next_out += len2;
|
|
11066
|
+
s.pending_out += len2;
|
|
11067
|
+
strm.total_out += len2;
|
|
11068
|
+
strm.avail_out -= len2;
|
|
11069
|
+
s.pending -= len2;
|
|
9342
11070
|
if (s.pending === 0) {
|
|
9343
11071
|
s.pending_out = 0;
|
|
9344
11072
|
}
|
|
@@ -9356,29 +11084,29 @@ var putShortMSB = (s, b) => {
|
|
|
9356
11084
|
s.pending_buf[s.pending++] = b & 255;
|
|
9357
11085
|
};
|
|
9358
11086
|
var read_buf = (strm, buf, start, size) => {
|
|
9359
|
-
let
|
|
9360
|
-
if (
|
|
9361
|
-
|
|
11087
|
+
let len2 = strm.avail_in;
|
|
11088
|
+
if (len2 > size) {
|
|
11089
|
+
len2 = size;
|
|
9362
11090
|
}
|
|
9363
|
-
if (
|
|
11091
|
+
if (len2 === 0) {
|
|
9364
11092
|
return 0;
|
|
9365
11093
|
}
|
|
9366
|
-
strm.avail_in -=
|
|
9367
|
-
buf.set(strm.input.subarray(strm.next_in, strm.next_in +
|
|
11094
|
+
strm.avail_in -= len2;
|
|
11095
|
+
buf.set(strm.input.subarray(strm.next_in, strm.next_in + len2), start);
|
|
9368
11096
|
if (strm.state.wrap === 1) {
|
|
9369
|
-
strm.adler = adler32_1(strm.adler, buf,
|
|
11097
|
+
strm.adler = adler32_1(strm.adler, buf, len2, start);
|
|
9370
11098
|
} else if (strm.state.wrap === 2) {
|
|
9371
|
-
strm.adler = crc32_1(strm.adler, buf,
|
|
11099
|
+
strm.adler = crc32_1(strm.adler, buf, len2, start);
|
|
9372
11100
|
}
|
|
9373
|
-
strm.next_in +=
|
|
9374
|
-
strm.total_in +=
|
|
9375
|
-
return
|
|
11101
|
+
strm.next_in += len2;
|
|
11102
|
+
strm.total_in += len2;
|
|
11103
|
+
return len2;
|
|
9376
11104
|
};
|
|
9377
11105
|
var longest_match = (s, cur_match) => {
|
|
9378
11106
|
let chain_length = s.max_chain_length;
|
|
9379
11107
|
let scan = s.strstart;
|
|
9380
11108
|
let match;
|
|
9381
|
-
let
|
|
11109
|
+
let len2;
|
|
9382
11110
|
let best_len = s.prev_length;
|
|
9383
11111
|
let nice_match = s.nice_match;
|
|
9384
11112
|
const limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;
|
|
@@ -9403,12 +11131,12 @@ var longest_match = (s, cur_match) => {
|
|
|
9403
11131
|
match++;
|
|
9404
11132
|
do {
|
|
9405
11133
|
} 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);
|
|
9406
|
-
|
|
11134
|
+
len2 = MAX_MATCH - (strend - scan);
|
|
9407
11135
|
scan = strend - MAX_MATCH;
|
|
9408
|
-
if (
|
|
11136
|
+
if (len2 > best_len) {
|
|
9409
11137
|
s.match_start = cur_match;
|
|
9410
|
-
best_len =
|
|
9411
|
-
if (
|
|
11138
|
+
best_len = len2;
|
|
11139
|
+
if (len2 >= nice_match) {
|
|
9412
11140
|
break;
|
|
9413
11141
|
}
|
|
9414
11142
|
scan_end1 = _win[scan + best_len - 1];
|
|
@@ -9422,7 +11150,7 @@ var longest_match = (s, cur_match) => {
|
|
|
9422
11150
|
};
|
|
9423
11151
|
var fill_window = (s) => {
|
|
9424
11152
|
const _w_size = s.w_size;
|
|
9425
|
-
let n, more,
|
|
11153
|
+
let n, more, str3;
|
|
9426
11154
|
do {
|
|
9427
11155
|
more = s.window_size - s.lookahead - s.strstart;
|
|
9428
11156
|
if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
|
|
@@ -9442,14 +11170,14 @@ var fill_window = (s) => {
|
|
|
9442
11170
|
n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
|
|
9443
11171
|
s.lookahead += n;
|
|
9444
11172
|
if (s.lookahead + s.insert >= MIN_MATCH) {
|
|
9445
|
-
|
|
9446
|
-
s.ins_h = s.window[
|
|
9447
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
11173
|
+
str3 = s.strstart - s.insert;
|
|
11174
|
+
s.ins_h = s.window[str3];
|
|
11175
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + 1]);
|
|
9448
11176
|
while (s.insert) {
|
|
9449
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
9450
|
-
s.prev[
|
|
9451
|
-
s.head[s.ins_h] =
|
|
9452
|
-
|
|
11177
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + MIN_MATCH - 1]);
|
|
11178
|
+
s.prev[str3 & s.w_mask] = s.head[s.ins_h];
|
|
11179
|
+
s.head[s.ins_h] = str3;
|
|
11180
|
+
str3++;
|
|
9453
11181
|
s.insert--;
|
|
9454
11182
|
if (s.lookahead + s.insert < MIN_MATCH) {
|
|
9455
11183
|
break;
|
|
@@ -9460,48 +11188,48 @@ var fill_window = (s) => {
|
|
|
9460
11188
|
};
|
|
9461
11189
|
var deflate_stored = (s, flush) => {
|
|
9462
11190
|
let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;
|
|
9463
|
-
let
|
|
11191
|
+
let len2, left, have, last = 0;
|
|
9464
11192
|
let used = s.strm.avail_in;
|
|
9465
11193
|
do {
|
|
9466
|
-
|
|
11194
|
+
len2 = 65535;
|
|
9467
11195
|
have = s.bi_valid + 42 >> 3;
|
|
9468
11196
|
if (s.strm.avail_out < have) {
|
|
9469
11197
|
break;
|
|
9470
11198
|
}
|
|
9471
11199
|
have = s.strm.avail_out - have;
|
|
9472
11200
|
left = s.strstart - s.block_start;
|
|
9473
|
-
if (
|
|
9474
|
-
|
|
11201
|
+
if (len2 > left + s.strm.avail_in) {
|
|
11202
|
+
len2 = left + s.strm.avail_in;
|
|
9475
11203
|
}
|
|
9476
|
-
if (
|
|
9477
|
-
|
|
11204
|
+
if (len2 > have) {
|
|
11205
|
+
len2 = have;
|
|
9478
11206
|
}
|
|
9479
|
-
if (
|
|
11207
|
+
if (len2 < min_block && (len2 === 0 && flush !== Z_FINISH$3 || flush === Z_NO_FLUSH$2 || len2 !== left + s.strm.avail_in)) {
|
|
9480
11208
|
break;
|
|
9481
11209
|
}
|
|
9482
|
-
last = flush === Z_FINISH$3 &&
|
|
11210
|
+
last = flush === Z_FINISH$3 && len2 === left + s.strm.avail_in ? 1 : 0;
|
|
9483
11211
|
_tr_stored_block(s, 0, 0, last);
|
|
9484
|
-
s.pending_buf[s.pending - 4] =
|
|
9485
|
-
s.pending_buf[s.pending - 3] =
|
|
9486
|
-
s.pending_buf[s.pending - 2] = ~
|
|
9487
|
-
s.pending_buf[s.pending - 1] = ~
|
|
11212
|
+
s.pending_buf[s.pending - 4] = len2;
|
|
11213
|
+
s.pending_buf[s.pending - 3] = len2 >> 8;
|
|
11214
|
+
s.pending_buf[s.pending - 2] = ~len2;
|
|
11215
|
+
s.pending_buf[s.pending - 1] = ~len2 >> 8;
|
|
9488
11216
|
flush_pending(s.strm);
|
|
9489
11217
|
if (left) {
|
|
9490
|
-
if (left >
|
|
9491
|
-
left =
|
|
11218
|
+
if (left > len2) {
|
|
11219
|
+
left = len2;
|
|
9492
11220
|
}
|
|
9493
11221
|
s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);
|
|
9494
11222
|
s.strm.next_out += left;
|
|
9495
11223
|
s.strm.avail_out -= left;
|
|
9496
11224
|
s.strm.total_out += left;
|
|
9497
11225
|
s.block_start += left;
|
|
9498
|
-
|
|
11226
|
+
len2 -= left;
|
|
9499
11227
|
}
|
|
9500
|
-
if (
|
|
9501
|
-
read_buf(s.strm, s.strm.output, s.strm.next_out,
|
|
9502
|
-
s.strm.next_out +=
|
|
9503
|
-
s.strm.avail_out -=
|
|
9504
|
-
s.strm.total_out +=
|
|
11228
|
+
if (len2) {
|
|
11229
|
+
read_buf(s.strm, s.strm.output, s.strm.next_out, len2);
|
|
11230
|
+
s.strm.next_out += len2;
|
|
11231
|
+
s.strm.avail_out -= len2;
|
|
11232
|
+
s.strm.total_out += len2;
|
|
9505
11233
|
}
|
|
9506
11234
|
} while (last === 0);
|
|
9507
11235
|
used -= s.strm.avail_in;
|
|
@@ -9566,10 +11294,10 @@ var deflate_stored = (s, flush) => {
|
|
|
9566
11294
|
min_block = have > s.w_size ? s.w_size : have;
|
|
9567
11295
|
left = s.strstart - s.block_start;
|
|
9568
11296
|
if (left >= min_block || (left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 && s.strm.avail_in === 0 && left <= have) {
|
|
9569
|
-
|
|
9570
|
-
last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&
|
|
9571
|
-
_tr_stored_block(s, s.block_start,
|
|
9572
|
-
s.block_start +=
|
|
11297
|
+
len2 = left > have ? have : left;
|
|
11298
|
+
last = flush === Z_FINISH$3 && s.strm.avail_in === 0 && len2 === left ? 1 : 0;
|
|
11299
|
+
_tr_stored_block(s, s.block_start, len2, last);
|
|
11300
|
+
s.block_start += len2;
|
|
9573
11301
|
flush_pending(s.strm);
|
|
9574
11302
|
}
|
|
9575
11303
|
return last ? BS_FINISH_STARTED : BS_NEED_MORE;
|
|
@@ -9861,7 +11589,7 @@ var configuration_table = [
|
|
|
9861
11589
|
];
|
|
9862
11590
|
var lm_init = (s) => {
|
|
9863
11591
|
s.window_size = 2 * s.w_size;
|
|
9864
|
-
|
|
11592
|
+
zero2(s.head);
|
|
9865
11593
|
s.max_lazy_match = configuration_table[s.level].max_lazy;
|
|
9866
11594
|
s.good_match = configuration_table[s.level].good_length;
|
|
9867
11595
|
s.nice_match = configuration_table[s.level].nice_length;
|
|
@@ -9915,19 +11643,19 @@ function DeflateState() {
|
|
|
9915
11643
|
this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);
|
|
9916
11644
|
this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);
|
|
9917
11645
|
this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);
|
|
9918
|
-
|
|
9919
|
-
|
|
9920
|
-
|
|
11646
|
+
zero2(this.dyn_ltree);
|
|
11647
|
+
zero2(this.dyn_dtree);
|
|
11648
|
+
zero2(this.bl_tree);
|
|
9921
11649
|
this.l_desc = null;
|
|
9922
11650
|
this.d_desc = null;
|
|
9923
11651
|
this.bl_desc = null;
|
|
9924
11652
|
this.bl_count = new Uint16Array(MAX_BITS + 1);
|
|
9925
11653
|
this.heap = new Uint16Array(2 * L_CODES + 1);
|
|
9926
|
-
|
|
11654
|
+
zero2(this.heap);
|
|
9927
11655
|
this.heap_len = 0;
|
|
9928
11656
|
this.heap_max = 0;
|
|
9929
11657
|
this.depth = new Uint16Array(2 * L_CODES + 1);
|
|
9930
|
-
|
|
11658
|
+
zero2(this.depth);
|
|
9931
11659
|
this.sym_buf = 0;
|
|
9932
11660
|
this.lit_bufsize = 0;
|
|
9933
11661
|
this.sym_next = 0;
|
|
@@ -10138,20 +11866,20 @@ var deflate$2 = (strm, flush) => {
|
|
|
10138
11866
|
let beg = s.pending;
|
|
10139
11867
|
let left = (s.gzhead.extra.length & 65535) - s.gzindex;
|
|
10140
11868
|
while (s.pending + left > s.pending_buf_size) {
|
|
10141
|
-
let
|
|
10142
|
-
s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex +
|
|
11869
|
+
let copy3 = s.pending_buf_size - s.pending;
|
|
11870
|
+
s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy3), s.pending);
|
|
10143
11871
|
s.pending = s.pending_buf_size;
|
|
10144
11872
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
10145
11873
|
strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
10146
11874
|
}
|
|
10147
|
-
s.gzindex +=
|
|
11875
|
+
s.gzindex += copy3;
|
|
10148
11876
|
flush_pending(strm);
|
|
10149
11877
|
if (s.pending !== 0) {
|
|
10150
11878
|
s.last_flush = -1;
|
|
10151
11879
|
return Z_OK$3;
|
|
10152
11880
|
}
|
|
10153
11881
|
beg = 0;
|
|
10154
|
-
left -=
|
|
11882
|
+
left -= copy3;
|
|
10155
11883
|
}
|
|
10156
11884
|
let gzhead_extra = new Uint8Array(s.gzhead.extra);
|
|
10157
11885
|
s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);
|
|
@@ -10259,7 +11987,7 @@ var deflate$2 = (strm, flush) => {
|
|
|
10259
11987
|
} else if (flush !== Z_BLOCK$1) {
|
|
10260
11988
|
_tr_stored_block(s, 0, 0, false);
|
|
10261
11989
|
if (flush === Z_FULL_FLUSH$1) {
|
|
10262
|
-
|
|
11990
|
+
zero2(s.head);
|
|
10263
11991
|
if (s.lookahead === 0) {
|
|
10264
11992
|
s.strstart = 0;
|
|
10265
11993
|
s.block_start = 0;
|
|
@@ -10323,7 +12051,7 @@ var deflateSetDictionary = (strm, dictionary) => {
|
|
|
10323
12051
|
s.wrap = 0;
|
|
10324
12052
|
if (dictLength >= s.w_size) {
|
|
10325
12053
|
if (wrap === 0) {
|
|
10326
|
-
|
|
12054
|
+
zero2(s.head);
|
|
10327
12055
|
s.strstart = 0;
|
|
10328
12056
|
s.block_start = 0;
|
|
10329
12057
|
s.insert = 0;
|
|
@@ -10341,15 +12069,15 @@ var deflateSetDictionary = (strm, dictionary) => {
|
|
|
10341
12069
|
strm.input = dictionary;
|
|
10342
12070
|
fill_window(s);
|
|
10343
12071
|
while (s.lookahead >= MIN_MATCH) {
|
|
10344
|
-
let
|
|
12072
|
+
let str3 = s.strstart;
|
|
10345
12073
|
let n = s.lookahead - (MIN_MATCH - 1);
|
|
10346
12074
|
do {
|
|
10347
|
-
s.ins_h = HASH(s, s.ins_h, s.window[
|
|
10348
|
-
s.prev[
|
|
10349
|
-
s.head[s.ins_h] =
|
|
10350
|
-
|
|
12075
|
+
s.ins_h = HASH(s, s.ins_h, s.window[str3 + MIN_MATCH - 1]);
|
|
12076
|
+
s.prev[str3 & s.w_mask] = s.head[s.ins_h];
|
|
12077
|
+
s.head[s.ins_h] = str3;
|
|
12078
|
+
str3++;
|
|
10351
12079
|
} while (--n);
|
|
10352
|
-
s.strstart =
|
|
12080
|
+
s.strstart = str3;
|
|
10353
12081
|
s.lookahead = MIN_MATCH - 1;
|
|
10354
12082
|
fill_window(s);
|
|
10355
12083
|
}
|
|
@@ -10407,11 +12135,11 @@ var assign = function(obj) {
|
|
|
10407
12135
|
return obj;
|
|
10408
12136
|
};
|
|
10409
12137
|
var flattenChunks = (chunks) => {
|
|
10410
|
-
let
|
|
12138
|
+
let len2 = 0;
|
|
10411
12139
|
for (let i = 0, l = chunks.length; i < l; i++) {
|
|
10412
|
-
|
|
12140
|
+
len2 += chunks[i].length;
|
|
10413
12141
|
}
|
|
10414
|
-
const result = new Uint8Array(
|
|
12142
|
+
const result = new Uint8Array(len2);
|
|
10415
12143
|
for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {
|
|
10416
12144
|
let chunk = chunks[i];
|
|
10417
12145
|
result.set(chunk, pos);
|
|
@@ -10434,15 +12162,15 @@ for (let q = 0; q < 256; q++) {
|
|
|
10434
12162
|
_utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
|
|
10435
12163
|
}
|
|
10436
12164
|
_utf8len[254] = _utf8len[254] = 1;
|
|
10437
|
-
var string2buf = (
|
|
12165
|
+
var string2buf = (str3) => {
|
|
10438
12166
|
if (typeof TextEncoder === "function" && TextEncoder.prototype.encode) {
|
|
10439
|
-
return new TextEncoder().encode(
|
|
12167
|
+
return new TextEncoder().encode(str3);
|
|
10440
12168
|
}
|
|
10441
|
-
let buf, c, c2, m_pos, i, str_len =
|
|
12169
|
+
let buf, c, c2, m_pos, i, str_len = str3.length, buf_len = 0;
|
|
10442
12170
|
for (m_pos = 0; m_pos < str_len; m_pos++) {
|
|
10443
|
-
c =
|
|
12171
|
+
c = str3.charCodeAt(m_pos);
|
|
10444
12172
|
if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
|
|
10445
|
-
c2 =
|
|
12173
|
+
c2 = str3.charCodeAt(m_pos + 1);
|
|
10446
12174
|
if ((c2 & 64512) === 56320) {
|
|
10447
12175
|
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
|
|
10448
12176
|
m_pos++;
|
|
@@ -10452,9 +12180,9 @@ var string2buf = (str) => {
|
|
|
10452
12180
|
}
|
|
10453
12181
|
buf = new Uint8Array(buf_len);
|
|
10454
12182
|
for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
|
|
10455
|
-
c =
|
|
12183
|
+
c = str3.charCodeAt(m_pos);
|
|
10456
12184
|
if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
|
|
10457
|
-
c2 =
|
|
12185
|
+
c2 = str3.charCodeAt(m_pos + 1);
|
|
10458
12186
|
if ((c2 & 64512) === 56320) {
|
|
10459
12187
|
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
|
|
10460
12188
|
m_pos++;
|
|
@@ -10478,26 +12206,26 @@ var string2buf = (str) => {
|
|
|
10478
12206
|
}
|
|
10479
12207
|
return buf;
|
|
10480
12208
|
};
|
|
10481
|
-
var buf2binstring = (buf,
|
|
10482
|
-
if (
|
|
12209
|
+
var buf2binstring = (buf, len2) => {
|
|
12210
|
+
if (len2 < 65534) {
|
|
10483
12211
|
if (buf.subarray && STR_APPLY_UIA_OK) {
|
|
10484
|
-
return String.fromCharCode.apply(null, buf.length ===
|
|
12212
|
+
return String.fromCharCode.apply(null, buf.length === len2 ? buf : buf.subarray(0, len2));
|
|
10485
12213
|
}
|
|
10486
12214
|
}
|
|
10487
12215
|
let result = "";
|
|
10488
|
-
for (let i = 0; i <
|
|
12216
|
+
for (let i = 0; i < len2; i++) {
|
|
10489
12217
|
result += String.fromCharCode(buf[i]);
|
|
10490
12218
|
}
|
|
10491
12219
|
return result;
|
|
10492
12220
|
};
|
|
10493
|
-
var buf2string = (buf,
|
|
10494
|
-
const
|
|
12221
|
+
var buf2string = (buf, max2) => {
|
|
12222
|
+
const len2 = max2 || buf.length;
|
|
10495
12223
|
if (typeof TextDecoder === "function" && TextDecoder.prototype.decode) {
|
|
10496
|
-
return new TextDecoder().decode(buf.subarray(0,
|
|
12224
|
+
return new TextDecoder().decode(buf.subarray(0, max2));
|
|
10497
12225
|
}
|
|
10498
12226
|
let i, out;
|
|
10499
|
-
const utf16buf = new Array(
|
|
10500
|
-
for (out = 0, i = 0; i <
|
|
12227
|
+
const utf16buf = new Array(len2 * 2);
|
|
12228
|
+
for (out = 0, i = 0; i < len2; ) {
|
|
10501
12229
|
let c = buf[i++];
|
|
10502
12230
|
if (c < 128) {
|
|
10503
12231
|
utf16buf[out++] = c;
|
|
@@ -10510,7 +12238,7 @@ var buf2string = (buf, max) => {
|
|
|
10510
12238
|
continue;
|
|
10511
12239
|
}
|
|
10512
12240
|
c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7;
|
|
10513
|
-
while (c_len > 1 && i <
|
|
12241
|
+
while (c_len > 1 && i < len2) {
|
|
10514
12242
|
c = c << 6 | buf[i++] & 63;
|
|
10515
12243
|
c_len--;
|
|
10516
12244
|
}
|
|
@@ -10528,22 +12256,22 @@ var buf2string = (buf, max) => {
|
|
|
10528
12256
|
}
|
|
10529
12257
|
return buf2binstring(utf16buf, out);
|
|
10530
12258
|
};
|
|
10531
|
-
var utf8border = (buf,
|
|
10532
|
-
|
|
10533
|
-
if (
|
|
10534
|
-
|
|
12259
|
+
var utf8border = (buf, max2) => {
|
|
12260
|
+
max2 = max2 || buf.length;
|
|
12261
|
+
if (max2 > buf.length) {
|
|
12262
|
+
max2 = buf.length;
|
|
10535
12263
|
}
|
|
10536
|
-
let pos =
|
|
12264
|
+
let pos = max2 - 1;
|
|
10537
12265
|
while (pos >= 0 && (buf[pos] & 192) === 128) {
|
|
10538
12266
|
pos--;
|
|
10539
12267
|
}
|
|
10540
12268
|
if (pos < 0) {
|
|
10541
|
-
return
|
|
12269
|
+
return max2;
|
|
10542
12270
|
}
|
|
10543
12271
|
if (pos === 0) {
|
|
10544
|
-
return
|
|
12272
|
+
return max2;
|
|
10545
12273
|
}
|
|
10546
|
-
return pos + _utf8len[buf[pos]] >
|
|
12274
|
+
return pos + _utf8len[buf[pos]] > max2 ? pos : max2;
|
|
10547
12275
|
};
|
|
10548
12276
|
var strings = {
|
|
10549
12277
|
string2buf,
|
|
@@ -10742,8 +12470,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10742
12470
|
let dmask;
|
|
10743
12471
|
let here;
|
|
10744
12472
|
let op;
|
|
10745
|
-
let
|
|
10746
|
-
let
|
|
12473
|
+
let len2;
|
|
12474
|
+
let dist2;
|
|
10747
12475
|
let from;
|
|
10748
12476
|
let from_source;
|
|
10749
12477
|
let input, output;
|
|
@@ -10784,14 +12512,14 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10784
12512
|
if (op === 0) {
|
|
10785
12513
|
output[_out++] = here & 65535;
|
|
10786
12514
|
} else if (op & 16) {
|
|
10787
|
-
|
|
12515
|
+
len2 = here & 65535;
|
|
10788
12516
|
op &= 15;
|
|
10789
12517
|
if (op) {
|
|
10790
12518
|
if (bits < op) {
|
|
10791
12519
|
hold += input[_in++] << bits;
|
|
10792
12520
|
bits += 8;
|
|
10793
12521
|
}
|
|
10794
|
-
|
|
12522
|
+
len2 += hold & (1 << op) - 1;
|
|
10795
12523
|
hold >>>= op;
|
|
10796
12524
|
bits -= op;
|
|
10797
12525
|
}
|
|
@@ -10809,7 +12537,7 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10809
12537
|
bits -= op;
|
|
10810
12538
|
op = here >>> 16 & 255;
|
|
10811
12539
|
if (op & 16) {
|
|
10812
|
-
|
|
12540
|
+
dist2 = here & 65535;
|
|
10813
12541
|
op &= 15;
|
|
10814
12542
|
if (bits < op) {
|
|
10815
12543
|
hold += input[_in++] << bits;
|
|
@@ -10819,8 +12547,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10819
12547
|
bits += 8;
|
|
10820
12548
|
}
|
|
10821
12549
|
}
|
|
10822
|
-
|
|
10823
|
-
if (
|
|
12550
|
+
dist2 += hold & (1 << op) - 1;
|
|
12551
|
+
if (dist2 > dmax) {
|
|
10824
12552
|
strm.msg = "invalid distance too far back";
|
|
10825
12553
|
state.mode = BAD$1;
|
|
10826
12554
|
break top;
|
|
@@ -10828,8 +12556,8 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10828
12556
|
hold >>>= op;
|
|
10829
12557
|
bits -= op;
|
|
10830
12558
|
op = _out - beg;
|
|
10831
|
-
if (
|
|
10832
|
-
op =
|
|
12559
|
+
if (dist2 > op) {
|
|
12560
|
+
op = dist2 - op;
|
|
10833
12561
|
if (op > whave) {
|
|
10834
12562
|
if (state.sane) {
|
|
10835
12563
|
strm.msg = "invalid distance too far back";
|
|
@@ -10841,67 +12569,67 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10841
12569
|
from_source = s_window;
|
|
10842
12570
|
if (wnext === 0) {
|
|
10843
12571
|
from += wsize - op;
|
|
10844
|
-
if (op <
|
|
10845
|
-
|
|
12572
|
+
if (op < len2) {
|
|
12573
|
+
len2 -= op;
|
|
10846
12574
|
do {
|
|
10847
12575
|
output[_out++] = s_window[from++];
|
|
10848
12576
|
} while (--op);
|
|
10849
|
-
from = _out -
|
|
12577
|
+
from = _out - dist2;
|
|
10850
12578
|
from_source = output;
|
|
10851
12579
|
}
|
|
10852
12580
|
} else if (wnext < op) {
|
|
10853
12581
|
from += wsize + wnext - op;
|
|
10854
12582
|
op -= wnext;
|
|
10855
|
-
if (op <
|
|
10856
|
-
|
|
12583
|
+
if (op < len2) {
|
|
12584
|
+
len2 -= op;
|
|
10857
12585
|
do {
|
|
10858
12586
|
output[_out++] = s_window[from++];
|
|
10859
12587
|
} while (--op);
|
|
10860
12588
|
from = 0;
|
|
10861
|
-
if (wnext <
|
|
12589
|
+
if (wnext < len2) {
|
|
10862
12590
|
op = wnext;
|
|
10863
|
-
|
|
12591
|
+
len2 -= op;
|
|
10864
12592
|
do {
|
|
10865
12593
|
output[_out++] = s_window[from++];
|
|
10866
12594
|
} while (--op);
|
|
10867
|
-
from = _out -
|
|
12595
|
+
from = _out - dist2;
|
|
10868
12596
|
from_source = output;
|
|
10869
12597
|
}
|
|
10870
12598
|
}
|
|
10871
12599
|
} else {
|
|
10872
12600
|
from += wnext - op;
|
|
10873
|
-
if (op <
|
|
10874
|
-
|
|
12601
|
+
if (op < len2) {
|
|
12602
|
+
len2 -= op;
|
|
10875
12603
|
do {
|
|
10876
12604
|
output[_out++] = s_window[from++];
|
|
10877
12605
|
} while (--op);
|
|
10878
|
-
from = _out -
|
|
12606
|
+
from = _out - dist2;
|
|
10879
12607
|
from_source = output;
|
|
10880
12608
|
}
|
|
10881
12609
|
}
|
|
10882
|
-
while (
|
|
12610
|
+
while (len2 > 2) {
|
|
10883
12611
|
output[_out++] = from_source[from++];
|
|
10884
12612
|
output[_out++] = from_source[from++];
|
|
10885
12613
|
output[_out++] = from_source[from++];
|
|
10886
|
-
|
|
12614
|
+
len2 -= 3;
|
|
10887
12615
|
}
|
|
10888
|
-
if (
|
|
12616
|
+
if (len2) {
|
|
10889
12617
|
output[_out++] = from_source[from++];
|
|
10890
|
-
if (
|
|
12618
|
+
if (len2 > 1) {
|
|
10891
12619
|
output[_out++] = from_source[from++];
|
|
10892
12620
|
}
|
|
10893
12621
|
}
|
|
10894
12622
|
} else {
|
|
10895
|
-
from = _out -
|
|
12623
|
+
from = _out - dist2;
|
|
10896
12624
|
do {
|
|
10897
12625
|
output[_out++] = output[from++];
|
|
10898
12626
|
output[_out++] = output[from++];
|
|
10899
12627
|
output[_out++] = output[from++];
|
|
10900
|
-
|
|
10901
|
-
} while (
|
|
10902
|
-
if (
|
|
12628
|
+
len2 -= 3;
|
|
12629
|
+
} while (len2 > 2);
|
|
12630
|
+
if (len2) {
|
|
10903
12631
|
output[_out++] = output[from++];
|
|
10904
|
-
if (
|
|
12632
|
+
if (len2 > 1) {
|
|
10905
12633
|
output[_out++] = output[from++];
|
|
10906
12634
|
}
|
|
10907
12635
|
}
|
|
@@ -10930,9 +12658,9 @@ var inffast = function inflate_fast(strm, start) {
|
|
|
10930
12658
|
break;
|
|
10931
12659
|
}
|
|
10932
12660
|
} while (_in < last && _out < end);
|
|
10933
|
-
|
|
10934
|
-
_in -=
|
|
10935
|
-
bits -=
|
|
12661
|
+
len2 = bits >> 3;
|
|
12662
|
+
_in -= len2;
|
|
12663
|
+
bits -= len2 << 3;
|
|
10936
12664
|
hold &= (1 << bits) - 1;
|
|
10937
12665
|
strm.next_in = _in;
|
|
10938
12666
|
strm.next_out = _out;
|
|
@@ -11088,9 +12816,9 @@ var dext = new Uint8Array([
|
|
|
11088
12816
|
]);
|
|
11089
12817
|
var inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) => {
|
|
11090
12818
|
const bits = opts.bits;
|
|
11091
|
-
let
|
|
12819
|
+
let len2 = 0;
|
|
11092
12820
|
let sym = 0;
|
|
11093
|
-
let
|
|
12821
|
+
let min2 = 0, max2 = 0;
|
|
11094
12822
|
let root = 0;
|
|
11095
12823
|
let curr = 0;
|
|
11096
12824
|
let drop = 0;
|
|
@@ -11108,49 +12836,49 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11108
12836
|
const offs = new Uint16Array(MAXBITS + 1);
|
|
11109
12837
|
let extra = null;
|
|
11110
12838
|
let here_bits, here_op, here_val;
|
|
11111
|
-
for (
|
|
11112
|
-
count[
|
|
12839
|
+
for (len2 = 0; len2 <= MAXBITS; len2++) {
|
|
12840
|
+
count[len2] = 0;
|
|
11113
12841
|
}
|
|
11114
12842
|
for (sym = 0; sym < codes; sym++) {
|
|
11115
12843
|
count[lens[lens_index + sym]]++;
|
|
11116
12844
|
}
|
|
11117
12845
|
root = bits;
|
|
11118
|
-
for (
|
|
11119
|
-
if (count[
|
|
12846
|
+
for (max2 = MAXBITS; max2 >= 1; max2--) {
|
|
12847
|
+
if (count[max2] !== 0) {
|
|
11120
12848
|
break;
|
|
11121
12849
|
}
|
|
11122
12850
|
}
|
|
11123
|
-
if (root >
|
|
11124
|
-
root =
|
|
12851
|
+
if (root > max2) {
|
|
12852
|
+
root = max2;
|
|
11125
12853
|
}
|
|
11126
|
-
if (
|
|
12854
|
+
if (max2 === 0) {
|
|
11127
12855
|
table[table_index++] = 1 << 24 | 64 << 16 | 0;
|
|
11128
12856
|
table[table_index++] = 1 << 24 | 64 << 16 | 0;
|
|
11129
12857
|
opts.bits = 1;
|
|
11130
12858
|
return 0;
|
|
11131
12859
|
}
|
|
11132
|
-
for (
|
|
11133
|
-
if (count[
|
|
12860
|
+
for (min2 = 1; min2 < max2; min2++) {
|
|
12861
|
+
if (count[min2] !== 0) {
|
|
11134
12862
|
break;
|
|
11135
12863
|
}
|
|
11136
12864
|
}
|
|
11137
|
-
if (root <
|
|
11138
|
-
root =
|
|
12865
|
+
if (root < min2) {
|
|
12866
|
+
root = min2;
|
|
11139
12867
|
}
|
|
11140
12868
|
left = 1;
|
|
11141
|
-
for (
|
|
12869
|
+
for (len2 = 1; len2 <= MAXBITS; len2++) {
|
|
11142
12870
|
left <<= 1;
|
|
11143
|
-
left -= count[
|
|
12871
|
+
left -= count[len2];
|
|
11144
12872
|
if (left < 0) {
|
|
11145
12873
|
return -1;
|
|
11146
12874
|
}
|
|
11147
12875
|
}
|
|
11148
|
-
if (left > 0 && (type === CODES$1 ||
|
|
12876
|
+
if (left > 0 && (type === CODES$1 || max2 !== 1)) {
|
|
11149
12877
|
return -1;
|
|
11150
12878
|
}
|
|
11151
12879
|
offs[1] = 0;
|
|
11152
|
-
for (
|
|
11153
|
-
offs[
|
|
12880
|
+
for (len2 = 1; len2 < MAXBITS; len2++) {
|
|
12881
|
+
offs[len2 + 1] = offs[len2] + count[len2];
|
|
11154
12882
|
}
|
|
11155
12883
|
for (sym = 0; sym < codes; sym++) {
|
|
11156
12884
|
if (lens[lens_index + sym] !== 0) {
|
|
@@ -11171,7 +12899,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11171
12899
|
}
|
|
11172
12900
|
huff = 0;
|
|
11173
12901
|
sym = 0;
|
|
11174
|
-
|
|
12902
|
+
len2 = min2;
|
|
11175
12903
|
next = table_index;
|
|
11176
12904
|
curr = root;
|
|
11177
12905
|
drop = 0;
|
|
@@ -11182,7 +12910,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11182
12910
|
return 1;
|
|
11183
12911
|
}
|
|
11184
12912
|
for (; ; ) {
|
|
11185
|
-
here_bits =
|
|
12913
|
+
here_bits = len2 - drop;
|
|
11186
12914
|
if (work[sym] + 1 < match) {
|
|
11187
12915
|
here_op = 0;
|
|
11188
12916
|
here_val = work[sym];
|
|
@@ -11193,14 +12921,14 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11193
12921
|
here_op = 32 + 64;
|
|
11194
12922
|
here_val = 0;
|
|
11195
12923
|
}
|
|
11196
|
-
incr = 1 <<
|
|
12924
|
+
incr = 1 << len2 - drop;
|
|
11197
12925
|
fill = 1 << curr;
|
|
11198
|
-
|
|
12926
|
+
min2 = fill;
|
|
11199
12927
|
do {
|
|
11200
12928
|
fill -= incr;
|
|
11201
12929
|
table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
|
|
11202
12930
|
} while (fill !== 0);
|
|
11203
|
-
incr = 1 <<
|
|
12931
|
+
incr = 1 << len2 - 1;
|
|
11204
12932
|
while (huff & incr) {
|
|
11205
12933
|
incr >>= 1;
|
|
11206
12934
|
}
|
|
@@ -11211,20 +12939,20 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11211
12939
|
huff = 0;
|
|
11212
12940
|
}
|
|
11213
12941
|
sym++;
|
|
11214
|
-
if (--count[
|
|
11215
|
-
if (
|
|
12942
|
+
if (--count[len2] === 0) {
|
|
12943
|
+
if (len2 === max2) {
|
|
11216
12944
|
break;
|
|
11217
12945
|
}
|
|
11218
|
-
|
|
12946
|
+
len2 = lens[lens_index + work[sym]];
|
|
11219
12947
|
}
|
|
11220
|
-
if (
|
|
12948
|
+
if (len2 > root && (huff & mask) !== low) {
|
|
11221
12949
|
if (drop === 0) {
|
|
11222
12950
|
drop = root;
|
|
11223
12951
|
}
|
|
11224
|
-
next +=
|
|
11225
|
-
curr =
|
|
12952
|
+
next += min2;
|
|
12953
|
+
curr = len2 - drop;
|
|
11226
12954
|
left = 1 << curr;
|
|
11227
|
-
while (curr + drop <
|
|
12955
|
+
while (curr + drop < max2) {
|
|
11228
12956
|
left -= count[curr + drop];
|
|
11229
12957
|
if (left <= 0) {
|
|
11230
12958
|
break;
|
|
@@ -11241,7 +12969,7 @@ var inflate_table = (type, lens, lens_index, codes, table, table_index, work, op
|
|
|
11241
12969
|
}
|
|
11242
12970
|
}
|
|
11243
12971
|
if (huff !== 0) {
|
|
11244
|
-
table[next + huff] =
|
|
12972
|
+
table[next + huff] = len2 - drop << 24 | 64 << 16 | 0;
|
|
11245
12973
|
}
|
|
11246
12974
|
opts.bits = root;
|
|
11247
12975
|
return 0;
|
|
@@ -11460,8 +13188,8 @@ var fixedtables = (state) => {
|
|
|
11460
13188
|
state.distcode = distfix;
|
|
11461
13189
|
state.distbits = 5;
|
|
11462
13190
|
};
|
|
11463
|
-
var updatewindow = (strm, src, end,
|
|
11464
|
-
let
|
|
13191
|
+
var updatewindow = (strm, src, end, copy3) => {
|
|
13192
|
+
let dist2;
|
|
11465
13193
|
const state = strm.state;
|
|
11466
13194
|
if (state.window === null) {
|
|
11467
13195
|
state.wsize = 1 << state.wbits;
|
|
@@ -11469,28 +13197,28 @@ var updatewindow = (strm, src, end, copy) => {
|
|
|
11469
13197
|
state.whave = 0;
|
|
11470
13198
|
state.window = new Uint8Array(state.wsize);
|
|
11471
13199
|
}
|
|
11472
|
-
if (
|
|
13200
|
+
if (copy3 >= state.wsize) {
|
|
11473
13201
|
state.window.set(src.subarray(end - state.wsize, end), 0);
|
|
11474
13202
|
state.wnext = 0;
|
|
11475
13203
|
state.whave = state.wsize;
|
|
11476
13204
|
} else {
|
|
11477
|
-
|
|
11478
|
-
if (
|
|
11479
|
-
|
|
11480
|
-
}
|
|
11481
|
-
state.window.set(src.subarray(end -
|
|
11482
|
-
|
|
11483
|
-
if (
|
|
11484
|
-
state.window.set(src.subarray(end -
|
|
11485
|
-
state.wnext =
|
|
13205
|
+
dist2 = state.wsize - state.wnext;
|
|
13206
|
+
if (dist2 > copy3) {
|
|
13207
|
+
dist2 = copy3;
|
|
13208
|
+
}
|
|
13209
|
+
state.window.set(src.subarray(end - copy3, end - copy3 + dist2), state.wnext);
|
|
13210
|
+
copy3 -= dist2;
|
|
13211
|
+
if (copy3) {
|
|
13212
|
+
state.window.set(src.subarray(end - copy3, end), 0);
|
|
13213
|
+
state.wnext = copy3;
|
|
11486
13214
|
state.whave = state.wsize;
|
|
11487
13215
|
} else {
|
|
11488
|
-
state.wnext +=
|
|
13216
|
+
state.wnext += dist2;
|
|
11489
13217
|
if (state.wnext === state.wsize) {
|
|
11490
13218
|
state.wnext = 0;
|
|
11491
13219
|
}
|
|
11492
13220
|
if (state.whave < state.wsize) {
|
|
11493
|
-
state.whave +=
|
|
13221
|
+
state.whave += dist2;
|
|
11494
13222
|
}
|
|
11495
13223
|
}
|
|
11496
13224
|
}
|
|
@@ -11505,13 +13233,13 @@ var inflate$2 = (strm, flush) => {
|
|
|
11505
13233
|
let hold;
|
|
11506
13234
|
let bits;
|
|
11507
13235
|
let _in, _out;
|
|
11508
|
-
let
|
|
13236
|
+
let copy3;
|
|
11509
13237
|
let from;
|
|
11510
13238
|
let from_source;
|
|
11511
13239
|
let here = 0;
|
|
11512
13240
|
let here_bits, here_op, here_val;
|
|
11513
13241
|
let last_bits, last_op, last_val;
|
|
11514
|
-
let
|
|
13242
|
+
let len2;
|
|
11515
13243
|
let ret;
|
|
11516
13244
|
const hbuf = new Uint8Array(4);
|
|
11517
13245
|
let opts;
|
|
@@ -11583,11 +13311,11 @@ var inflate$2 = (strm, flush) => {
|
|
|
11583
13311
|
}
|
|
11584
13312
|
hold >>>= 4;
|
|
11585
13313
|
bits -= 4;
|
|
11586
|
-
|
|
13314
|
+
len2 = (hold & 15) + 8;
|
|
11587
13315
|
if (state.wbits === 0) {
|
|
11588
|
-
state.wbits =
|
|
13316
|
+
state.wbits = len2;
|
|
11589
13317
|
}
|
|
11590
|
-
if (
|
|
13318
|
+
if (len2 > 15 || len2 > state.wbits) {
|
|
11591
13319
|
strm.msg = "invalid window size";
|
|
11592
13320
|
state.mode = BAD;
|
|
11593
13321
|
break;
|
|
@@ -11704,13 +13432,13 @@ var inflate$2 = (strm, flush) => {
|
|
|
11704
13432
|
/* falls through */
|
|
11705
13433
|
case EXTRA:
|
|
11706
13434
|
if (state.flags & 1024) {
|
|
11707
|
-
|
|
11708
|
-
if (
|
|
11709
|
-
|
|
13435
|
+
copy3 = state.length;
|
|
13436
|
+
if (copy3 > have) {
|
|
13437
|
+
copy3 = have;
|
|
11710
13438
|
}
|
|
11711
|
-
if (
|
|
13439
|
+
if (copy3) {
|
|
11712
13440
|
if (state.head) {
|
|
11713
|
-
|
|
13441
|
+
len2 = state.head.extra_len - state.length;
|
|
11714
13442
|
if (!state.head.extra) {
|
|
11715
13443
|
state.head.extra = new Uint8Array(state.head.extra_len);
|
|
11716
13444
|
}
|
|
@@ -11719,18 +13447,18 @@ var inflate$2 = (strm, flush) => {
|
|
|
11719
13447
|
next,
|
|
11720
13448
|
// extra field is limited to 65536 bytes
|
|
11721
13449
|
// - no need for additional size check
|
|
11722
|
-
next +
|
|
13450
|
+
next + copy3
|
|
11723
13451
|
),
|
|
11724
13452
|
/*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
|
|
11725
|
-
|
|
13453
|
+
len2
|
|
11726
13454
|
);
|
|
11727
13455
|
}
|
|
11728
13456
|
if (state.flags & 512 && state.wrap & 4) {
|
|
11729
|
-
state.check = crc32_1(state.check, input,
|
|
13457
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
11730
13458
|
}
|
|
11731
|
-
have -=
|
|
11732
|
-
next +=
|
|
11733
|
-
state.length -=
|
|
13459
|
+
have -= copy3;
|
|
13460
|
+
next += copy3;
|
|
13461
|
+
state.length -= copy3;
|
|
11734
13462
|
}
|
|
11735
13463
|
if (state.length) {
|
|
11736
13464
|
break inf_leave;
|
|
@@ -11744,19 +13472,19 @@ var inflate$2 = (strm, flush) => {
|
|
|
11744
13472
|
if (have === 0) {
|
|
11745
13473
|
break inf_leave;
|
|
11746
13474
|
}
|
|
11747
|
-
|
|
13475
|
+
copy3 = 0;
|
|
11748
13476
|
do {
|
|
11749
|
-
|
|
11750
|
-
if (state.head &&
|
|
11751
|
-
state.head.name += String.fromCharCode(
|
|
13477
|
+
len2 = input[next + copy3++];
|
|
13478
|
+
if (state.head && len2 && state.length < 65536) {
|
|
13479
|
+
state.head.name += String.fromCharCode(len2);
|
|
11752
13480
|
}
|
|
11753
|
-
} while (
|
|
13481
|
+
} while (len2 && copy3 < have);
|
|
11754
13482
|
if (state.flags & 512 && state.wrap & 4) {
|
|
11755
|
-
state.check = crc32_1(state.check, input,
|
|
13483
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
11756
13484
|
}
|
|
11757
|
-
have -=
|
|
11758
|
-
next +=
|
|
11759
|
-
if (
|
|
13485
|
+
have -= copy3;
|
|
13486
|
+
next += copy3;
|
|
13487
|
+
if (len2) {
|
|
11760
13488
|
break inf_leave;
|
|
11761
13489
|
}
|
|
11762
13490
|
} else if (state.head) {
|
|
@@ -11770,19 +13498,19 @@ var inflate$2 = (strm, flush) => {
|
|
|
11770
13498
|
if (have === 0) {
|
|
11771
13499
|
break inf_leave;
|
|
11772
13500
|
}
|
|
11773
|
-
|
|
13501
|
+
copy3 = 0;
|
|
11774
13502
|
do {
|
|
11775
|
-
|
|
11776
|
-
if (state.head &&
|
|
11777
|
-
state.head.comment += String.fromCharCode(
|
|
13503
|
+
len2 = input[next + copy3++];
|
|
13504
|
+
if (state.head && len2 && state.length < 65536) {
|
|
13505
|
+
state.head.comment += String.fromCharCode(len2);
|
|
11778
13506
|
}
|
|
11779
|
-
} while (
|
|
13507
|
+
} while (len2 && copy3 < have);
|
|
11780
13508
|
if (state.flags & 512 && state.wrap & 4) {
|
|
11781
|
-
state.check = crc32_1(state.check, input,
|
|
13509
|
+
state.check = crc32_1(state.check, input, copy3, next);
|
|
11782
13510
|
}
|
|
11783
|
-
have -=
|
|
11784
|
-
next +=
|
|
11785
|
-
if (
|
|
13511
|
+
have -= copy3;
|
|
13512
|
+
next += copy3;
|
|
13513
|
+
if (len2) {
|
|
11786
13514
|
break inf_leave;
|
|
11787
13515
|
}
|
|
11788
13516
|
} else if (state.head) {
|
|
@@ -11916,23 +13644,23 @@ var inflate$2 = (strm, flush) => {
|
|
|
11916
13644
|
state.mode = COPY;
|
|
11917
13645
|
/* falls through */
|
|
11918
13646
|
case COPY:
|
|
11919
|
-
|
|
11920
|
-
if (
|
|
11921
|
-
if (
|
|
11922
|
-
|
|
13647
|
+
copy3 = state.length;
|
|
13648
|
+
if (copy3) {
|
|
13649
|
+
if (copy3 > have) {
|
|
13650
|
+
copy3 = have;
|
|
11923
13651
|
}
|
|
11924
|
-
if (
|
|
11925
|
-
|
|
13652
|
+
if (copy3 > left) {
|
|
13653
|
+
copy3 = left;
|
|
11926
13654
|
}
|
|
11927
|
-
if (
|
|
13655
|
+
if (copy3 === 0) {
|
|
11928
13656
|
break inf_leave;
|
|
11929
13657
|
}
|
|
11930
|
-
output.set(input.subarray(next, next +
|
|
11931
|
-
have -=
|
|
11932
|
-
next +=
|
|
11933
|
-
left -=
|
|
11934
|
-
put +=
|
|
11935
|
-
state.length -=
|
|
13658
|
+
output.set(input.subarray(next, next + copy3), put);
|
|
13659
|
+
have -= copy3;
|
|
13660
|
+
next += copy3;
|
|
13661
|
+
left -= copy3;
|
|
13662
|
+
put += copy3;
|
|
13663
|
+
state.length -= copy3;
|
|
11936
13664
|
break;
|
|
11937
13665
|
}
|
|
11938
13666
|
state.mode = TYPE;
|
|
@@ -12032,8 +13760,8 @@ var inflate$2 = (strm, flush) => {
|
|
|
12032
13760
|
state.mode = BAD;
|
|
12033
13761
|
break;
|
|
12034
13762
|
}
|
|
12035
|
-
|
|
12036
|
-
|
|
13763
|
+
len2 = state.lens[state.have - 1];
|
|
13764
|
+
copy3 = 3 + (hold & 3);
|
|
12037
13765
|
hold >>>= 2;
|
|
12038
13766
|
bits -= 2;
|
|
12039
13767
|
} else if (here_val === 17) {
|
|
@@ -12048,8 +13776,8 @@ var inflate$2 = (strm, flush) => {
|
|
|
12048
13776
|
}
|
|
12049
13777
|
hold >>>= here_bits;
|
|
12050
13778
|
bits -= here_bits;
|
|
12051
|
-
|
|
12052
|
-
|
|
13779
|
+
len2 = 0;
|
|
13780
|
+
copy3 = 3 + (hold & 7);
|
|
12053
13781
|
hold >>>= 3;
|
|
12054
13782
|
bits -= 3;
|
|
12055
13783
|
} else {
|
|
@@ -12064,18 +13792,18 @@ var inflate$2 = (strm, flush) => {
|
|
|
12064
13792
|
}
|
|
12065
13793
|
hold >>>= here_bits;
|
|
12066
13794
|
bits -= here_bits;
|
|
12067
|
-
|
|
12068
|
-
|
|
13795
|
+
len2 = 0;
|
|
13796
|
+
copy3 = 11 + (hold & 127);
|
|
12069
13797
|
hold >>>= 7;
|
|
12070
13798
|
bits -= 7;
|
|
12071
13799
|
}
|
|
12072
|
-
if (state.have +
|
|
13800
|
+
if (state.have + copy3 > state.nlen + state.ndist) {
|
|
12073
13801
|
strm.msg = "invalid bit length repeat";
|
|
12074
13802
|
state.mode = BAD;
|
|
12075
13803
|
break;
|
|
12076
13804
|
}
|
|
12077
|
-
while (
|
|
12078
|
-
state.lens[state.have++] =
|
|
13805
|
+
while (copy3--) {
|
|
13806
|
+
state.lens[state.have++] = len2;
|
|
12079
13807
|
}
|
|
12080
13808
|
}
|
|
12081
13809
|
}
|
|
@@ -12293,39 +14021,39 @@ var inflate$2 = (strm, flush) => {
|
|
|
12293
14021
|
if (left === 0) {
|
|
12294
14022
|
break inf_leave;
|
|
12295
14023
|
}
|
|
12296
|
-
|
|
12297
|
-
if (state.offset >
|
|
12298
|
-
|
|
12299
|
-
if (
|
|
14024
|
+
copy3 = _out - left;
|
|
14025
|
+
if (state.offset > copy3) {
|
|
14026
|
+
copy3 = state.offset - copy3;
|
|
14027
|
+
if (copy3 > state.whave) {
|
|
12300
14028
|
if (state.sane) {
|
|
12301
14029
|
strm.msg = "invalid distance too far back";
|
|
12302
14030
|
state.mode = BAD;
|
|
12303
14031
|
break;
|
|
12304
14032
|
}
|
|
12305
14033
|
}
|
|
12306
|
-
if (
|
|
12307
|
-
|
|
12308
|
-
from = state.wsize -
|
|
14034
|
+
if (copy3 > state.wnext) {
|
|
14035
|
+
copy3 -= state.wnext;
|
|
14036
|
+
from = state.wsize - copy3;
|
|
12309
14037
|
} else {
|
|
12310
|
-
from = state.wnext -
|
|
14038
|
+
from = state.wnext - copy3;
|
|
12311
14039
|
}
|
|
12312
|
-
if (
|
|
12313
|
-
|
|
14040
|
+
if (copy3 > state.length) {
|
|
14041
|
+
copy3 = state.length;
|
|
12314
14042
|
}
|
|
12315
14043
|
from_source = state.window;
|
|
12316
14044
|
} else {
|
|
12317
14045
|
from_source = output;
|
|
12318
14046
|
from = put - state.offset;
|
|
12319
|
-
|
|
14047
|
+
copy3 = state.length;
|
|
12320
14048
|
}
|
|
12321
|
-
if (
|
|
12322
|
-
|
|
14049
|
+
if (copy3 > left) {
|
|
14050
|
+
copy3 = left;
|
|
12323
14051
|
}
|
|
12324
|
-
left -=
|
|
12325
|
-
state.length -=
|
|
14052
|
+
left -= copy3;
|
|
14053
|
+
state.length -= copy3;
|
|
12326
14054
|
do {
|
|
12327
14055
|
output[put++] = from_source[from++];
|
|
12328
|
-
} while (--
|
|
14056
|
+
} while (--copy3);
|
|
12329
14057
|
if (state.length === 0) {
|
|
12330
14058
|
state.mode = LEN;
|
|
12331
14059
|
}
|
|
@@ -12789,18 +14517,18 @@ var _StreamingBuffer = class _StreamingBuffer {
|
|
|
12789
14517
|
_StreamingBuffer.MAX_STRING_LENGTH,
|
|
12790
14518
|
this.writeOffset - this.readOffset
|
|
12791
14519
|
);
|
|
12792
|
-
let
|
|
12793
|
-
while (
|
|
12794
|
-
|
|
14520
|
+
let length2 = 0;
|
|
14521
|
+
while (length2 < maxLength && this.buffer[this.readOffset + length2] !== 0) {
|
|
14522
|
+
length2++;
|
|
12795
14523
|
}
|
|
12796
|
-
if (
|
|
14524
|
+
if (length2 >= maxLength) {
|
|
12797
14525
|
if (this.writeOffset - this.readOffset <= maxLength) {
|
|
12798
14526
|
throw new Error("Buffer underflow");
|
|
12799
14527
|
}
|
|
12800
14528
|
throw new Error("String exceeds max length");
|
|
12801
14529
|
}
|
|
12802
|
-
const bytes = this.buffer.slice(this.readOffset, this.readOffset +
|
|
12803
|
-
this.readOffset +=
|
|
14530
|
+
const bytes = this.buffer.slice(this.readOffset, this.readOffset + length2);
|
|
14531
|
+
this.readOffset += length2 + 1;
|
|
12804
14532
|
return new TextDecoder("latin1").decode(bytes);
|
|
12805
14533
|
}
|
|
12806
14534
|
/**
|
|
@@ -13266,8 +14994,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13266
14994
|
}
|
|
13267
14995
|
parsePrint() {
|
|
13268
14996
|
const id = this.stream.readByte();
|
|
13269
|
-
const
|
|
13270
|
-
if (this.handler) this.handler.onPrint(id,
|
|
14997
|
+
const str3 = this.stream.readString();
|
|
14998
|
+
if (this.handler) this.handler.onPrint(id, str3);
|
|
13271
14999
|
}
|
|
13272
15000
|
parseStuffText() {
|
|
13273
15001
|
const text = this.stream.readString();
|
|
@@ -13311,8 +15039,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13311
15039
|
}
|
|
13312
15040
|
parseConfigString() {
|
|
13313
15041
|
const index = this.stream.readShort();
|
|
13314
|
-
const
|
|
13315
|
-
if (this.handler) this.handler.onConfigString(index,
|
|
15042
|
+
const str3 = this.stream.readString();
|
|
15043
|
+
if (this.handler) this.handler.onConfigString(index, str3);
|
|
13316
15044
|
}
|
|
13317
15045
|
parseSplitClient() {
|
|
13318
15046
|
const clientNum = this.stream.readByte();
|
|
@@ -13327,8 +15055,8 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
13327
15055
|
const blastStream = new BinaryStream(decompressed.buffer);
|
|
13328
15056
|
while (blastStream.hasMore()) {
|
|
13329
15057
|
const index = blastStream.readUShort();
|
|
13330
|
-
const
|
|
13331
|
-
if (this.handler) this.handler.onConfigString(index,
|
|
15058
|
+
const str3 = blastStream.readString();
|
|
15059
|
+
if (this.handler) this.handler.onConfigString(index, str3);
|
|
13332
15060
|
}
|
|
13333
15061
|
} catch (e) {
|
|
13334
15062
|
console.error("svc_configblast error", e);
|
|
@@ -13890,10 +15618,10 @@ var DemoAnalyzer = class {
|
|
|
13890
15618
|
frameDuration = 1 / tickRate;
|
|
13891
15619
|
}
|
|
13892
15620
|
},
|
|
13893
|
-
onConfigString: (index,
|
|
13894
|
-
this.configStrings.set(index,
|
|
15621
|
+
onConfigString: (index, str3) => {
|
|
15622
|
+
this.configStrings.set(index, str3);
|
|
13895
15623
|
if (index === 0) {
|
|
13896
|
-
this.parseServerInfo(
|
|
15624
|
+
this.parseServerInfo(str3);
|
|
13897
15625
|
}
|
|
13898
15626
|
},
|
|
13899
15627
|
onSpawnBaseline: (entity) => {
|
|
@@ -14046,8 +15774,8 @@ var DemoAnalyzer = class {
|
|
|
14046
15774
|
recordEvent(event) {
|
|
14047
15775
|
this.events.push(event);
|
|
14048
15776
|
}
|
|
14049
|
-
parseServerInfo(
|
|
14050
|
-
const parts =
|
|
15777
|
+
parseServerInfo(str3) {
|
|
15778
|
+
const parts = str3.split("\\");
|
|
14051
15779
|
for (let i = 1; i < parts.length; i += 2) {
|
|
14052
15780
|
if (i + 1 < parts.length) {
|
|
14053
15781
|
this.serverInfo[parts[i]] = parts[i + 1];
|
|
@@ -14658,8 +16386,8 @@ var DemoPlaybackController = class {
|
|
|
14658
16386
|
getCameraMode() {
|
|
14659
16387
|
return this.cameraMode;
|
|
14660
16388
|
}
|
|
14661
|
-
setThirdPersonDistance(
|
|
14662
|
-
this.thirdPersonDistance =
|
|
16389
|
+
setThirdPersonDistance(distance2) {
|
|
16390
|
+
this.thirdPersonDistance = distance2;
|
|
14663
16391
|
}
|
|
14664
16392
|
setThirdPersonOffset(offset) {
|
|
14665
16393
|
this.thirdPersonOffset = offset;
|
|
@@ -14839,9 +16567,9 @@ var DemoValidator = class {
|
|
|
14839
16567
|
return { valid: false, error: "File too small to be a valid demo" };
|
|
14840
16568
|
}
|
|
14841
16569
|
const view = new DataView(buffer);
|
|
14842
|
-
const
|
|
14843
|
-
if (
|
|
14844
|
-
return { valid: false, error: `Invalid first block length: ${
|
|
16570
|
+
const length2 = view.getInt32(0, true);
|
|
16571
|
+
if (length2 <= 0 || length2 > buffer.byteLength - 4) {
|
|
16572
|
+
return { valid: false, error: `Invalid first block length: ${length2}` };
|
|
14845
16573
|
}
|
|
14846
16574
|
const firstCmd = view.getUint8(4);
|
|
14847
16575
|
if (firstCmd !== ServerCommand.serverdata) {
|
|
@@ -14851,7 +16579,7 @@ var DemoValidator = class {
|
|
|
14851
16579
|
};
|
|
14852
16580
|
}
|
|
14853
16581
|
let version = -1;
|
|
14854
|
-
if (
|
|
16582
|
+
if (length2 >= 5) {
|
|
14855
16583
|
version = view.getInt32(5, true);
|
|
14856
16584
|
}
|
|
14857
16585
|
return { valid: true, version };
|
|
@@ -14936,10 +16664,10 @@ var MessageWriter = class {
|
|
|
14936
16664
|
this.writer.writeShort(playerNum);
|
|
14937
16665
|
this.writer.writeString(levelName);
|
|
14938
16666
|
}
|
|
14939
|
-
writeConfigString(index,
|
|
16667
|
+
writeConfigString(index, str3, protocolVersion = 0) {
|
|
14940
16668
|
this.writeCommand(ServerCommand.configstring, protocolVersion);
|
|
14941
16669
|
this.writer.writeShort(index);
|
|
14942
|
-
this.writer.writeString(
|
|
16670
|
+
this.writer.writeString(str3);
|
|
14943
16671
|
}
|
|
14944
16672
|
writeSpawnBaseline(entity, protocolVersion) {
|
|
14945
16673
|
this.writeCommand(ServerCommand.spawnbaseline, protocolVersion);
|
|
@@ -15439,8 +17167,8 @@ var DemoClipper = class {
|
|
|
15439
17167
|
onServerData: (protocol, serverCount, attractLoop, gameDir, playerNum, levelName, tickRate, demoType) => {
|
|
15440
17168
|
state.serverData = { protocol, serverCount, attractLoop, gameDir, playerNum, levelName, tickRate, demoType };
|
|
15441
17169
|
},
|
|
15442
|
-
onConfigString: (index,
|
|
15443
|
-
state.configStrings.set(index,
|
|
17170
|
+
onConfigString: (index, str3) => {
|
|
17171
|
+
state.configStrings.set(index, str3);
|
|
15444
17172
|
},
|
|
15445
17173
|
onSpawnBaseline: (entity) => {
|
|
15446
17174
|
state.entityBaselines.set(entity.number, { ...entity });
|
|
@@ -15537,8 +17265,8 @@ var DemoClipper = class {
|
|
|
15537
17265
|
serverData.levelName
|
|
15538
17266
|
);
|
|
15539
17267
|
}
|
|
15540
|
-
for (const [index,
|
|
15541
|
-
headerWriter.writeConfigString(index,
|
|
17268
|
+
for (const [index, str3] of worldState.configStrings) {
|
|
17269
|
+
headerWriter.writeConfigString(index, str3, serverData.protocol);
|
|
15542
17270
|
}
|
|
15543
17271
|
for (const entity of worldState.entityBaselines.values()) {
|
|
15544
17272
|
headerWriter.writeSpawnBaseline(entity, serverData.protocol);
|
|
@@ -15573,7 +17301,7 @@ var DemoClipper = class {
|
|
|
15573
17301
|
const passthroughHandler = {
|
|
15574
17302
|
onServerData: () => {
|
|
15575
17303
|
},
|
|
15576
|
-
onConfigString: (idx,
|
|
17304
|
+
onConfigString: (idx, str3) => blockWriter.writeConfigString(idx, str3, serverData.protocol),
|
|
15577
17305
|
onSpawnBaseline: (ent) => blockWriter.writeSpawnBaseline(ent, serverData.protocol),
|
|
15578
17306
|
onCenterPrint: (msg) => blockWriter.writeCenterPrint(msg, serverData.protocol),
|
|
15579
17307
|
onStuffText: (txt) => blockWriter.writeStuffText(txt, serverData.protocol),
|
|
@@ -15753,7 +17481,7 @@ function drawLine(buffer, width, height, x0, y0, x1, y1, r, g, b, a) {
|
|
|
15753
17481
|
}
|
|
15754
17482
|
}
|
|
15755
17483
|
}
|
|
15756
|
-
function projectPoint(v, width, height, center,
|
|
17484
|
+
function projectPoint(v, width, height, center, scale3) {
|
|
15757
17485
|
const cosY = 0.707;
|
|
15758
17486
|
const sinY = 0.707;
|
|
15759
17487
|
const x1 = (v.x - center.x) * cosY - (v.y - center.y) * sinY;
|
|
@@ -15763,8 +17491,8 @@ function projectPoint(v, width, height, center, scale) {
|
|
|
15763
17491
|
const sinX = 0.5;
|
|
15764
17492
|
const y2 = y1 * cosX - z1 * sinX;
|
|
15765
17493
|
const z2 = y1 * sinX + z1 * cosX;
|
|
15766
|
-
const screenX = width / 2 + x1 *
|
|
15767
|
-
const screenY = height / 2 - z2 *
|
|
17494
|
+
const screenX = width / 2 + x1 * scale3;
|
|
17495
|
+
const screenY = height / 2 - z2 * scale3;
|
|
15768
17496
|
return { x: screenX, y: screenY };
|
|
15769
17497
|
}
|
|
15770
17498
|
var AssetPreviewGenerator = class {
|
|
@@ -15835,35 +17563,35 @@ var AssetPreviewGenerator = class {
|
|
|
15835
17563
|
return null;
|
|
15836
17564
|
}
|
|
15837
17565
|
if (vertices.length === 0) return null;
|
|
15838
|
-
const
|
|
15839
|
-
const
|
|
17566
|
+
const min2 = { x: Infinity, y: Infinity, z: Infinity };
|
|
17567
|
+
const max2 = { x: -Infinity, y: -Infinity, z: -Infinity };
|
|
15840
17568
|
for (const v of vertices) {
|
|
15841
|
-
|
|
15842
|
-
|
|
15843
|
-
|
|
15844
|
-
|
|
15845
|
-
|
|
15846
|
-
|
|
17569
|
+
min2.x = Math.min(min2.x, v.x);
|
|
17570
|
+
min2.y = Math.min(min2.y, v.y);
|
|
17571
|
+
min2.z = Math.min(min2.z, v.z);
|
|
17572
|
+
max2.x = Math.max(max2.x, v.x);
|
|
17573
|
+
max2.y = Math.max(max2.y, v.y);
|
|
17574
|
+
max2.z = Math.max(max2.z, v.z);
|
|
15847
17575
|
}
|
|
15848
17576
|
const center = {
|
|
15849
|
-
x: (
|
|
15850
|
-
y: (
|
|
15851
|
-
z: (
|
|
17577
|
+
x: (min2.x + max2.x) / 2,
|
|
17578
|
+
y: (min2.y + max2.y) / 2,
|
|
17579
|
+
z: (min2.z + max2.z) / 2
|
|
15852
17580
|
};
|
|
15853
|
-
const sizeX =
|
|
15854
|
-
const sizeY =
|
|
15855
|
-
const sizeZ =
|
|
17581
|
+
const sizeX = max2.x - min2.x;
|
|
17582
|
+
const sizeY = max2.y - min2.y;
|
|
17583
|
+
const sizeZ = max2.z - min2.z;
|
|
15856
17584
|
const maxDim = Math.max(sizeX, sizeY, sizeZ);
|
|
15857
17585
|
const safeMaxDim = Math.max(maxDim, 1e-3);
|
|
15858
|
-
const
|
|
17586
|
+
const scale3 = size * 0.8 / safeMaxDim;
|
|
15859
17587
|
const buffer = new Uint8ClampedArray(size * size * 4);
|
|
15860
17588
|
for (let i = 0; i < indices.length; i += 2) {
|
|
15861
17589
|
const idx0 = indices[i];
|
|
15862
17590
|
const idx1 = indices[i + 1];
|
|
15863
17591
|
const v0 = vertices[idx0];
|
|
15864
17592
|
const v1 = vertices[idx1];
|
|
15865
|
-
const p0 = projectPoint(v0, size, size, center,
|
|
15866
|
-
const p1 = projectPoint(v1, size, size, center,
|
|
17593
|
+
const p0 = projectPoint(v0, size, size, center, scale3);
|
|
17594
|
+
const p1 = projectPoint(v1, size, size, center, scale3);
|
|
15867
17595
|
drawLine(buffer, size, size, p0.x, p0.y, p1.x, p1.y, 0, 255, 0, 255);
|
|
15868
17596
|
}
|
|
15869
17597
|
return new ImageData(buffer, size, size);
|
|
@@ -15958,19 +17686,19 @@ var MapAnalyzer = class {
|
|
|
15958
17686
|
function parseEntLump(text) {
|
|
15959
17687
|
const entities = [];
|
|
15960
17688
|
let cursor = 0;
|
|
15961
|
-
const
|
|
17689
|
+
const length2 = text.length;
|
|
15962
17690
|
function skipWhitespace() {
|
|
15963
|
-
while (cursor <
|
|
17691
|
+
while (cursor < length2 && /\s/.test(text[cursor])) {
|
|
15964
17692
|
cursor++;
|
|
15965
17693
|
}
|
|
15966
17694
|
}
|
|
15967
17695
|
function readToken() {
|
|
15968
17696
|
skipWhitespace();
|
|
15969
|
-
if (cursor >=
|
|
17697
|
+
if (cursor >= length2) return null;
|
|
15970
17698
|
if (text[cursor] === '"') {
|
|
15971
17699
|
cursor++;
|
|
15972
17700
|
const start = cursor;
|
|
15973
|
-
while (cursor <
|
|
17701
|
+
while (cursor < length2 && text[cursor] !== '"') {
|
|
15974
17702
|
if (text[cursor] === "\n") {
|
|
15975
17703
|
}
|
|
15976
17704
|
cursor++;
|
|
@@ -15982,19 +17710,19 @@ function parseEntLump(text) {
|
|
|
15982
17710
|
return text[cursor++];
|
|
15983
17711
|
} else {
|
|
15984
17712
|
if (text.startsWith("//", cursor)) {
|
|
15985
|
-
while (cursor <
|
|
17713
|
+
while (cursor < length2 && text[cursor] !== "\n") {
|
|
15986
17714
|
cursor++;
|
|
15987
17715
|
}
|
|
15988
17716
|
return readToken();
|
|
15989
17717
|
}
|
|
15990
17718
|
const start = cursor;
|
|
15991
|
-
while (cursor <
|
|
17719
|
+
while (cursor < length2 && !/\s/.test(text[cursor]) && text[cursor] !== "}" && text[cursor] !== "{") {
|
|
15992
17720
|
cursor++;
|
|
15993
17721
|
}
|
|
15994
17722
|
return text.substring(start, cursor);
|
|
15995
17723
|
}
|
|
15996
17724
|
}
|
|
15997
|
-
while (cursor <
|
|
17725
|
+
while (cursor < length2) {
|
|
15998
17726
|
const token = readToken();
|
|
15999
17727
|
if (token === null) break;
|
|
16000
17728
|
if (token === "{") {
|