@quake2ts/test-utils 0.0.739 → 0.0.741
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/dist/index.cjs +35 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/game/helpers.ts +19 -9
- package/src/shared/math.ts +2 -0
package/dist/index.cjs
CHANGED
|
@@ -55,6 +55,7 @@ __export(index_exports, {
|
|
|
55
55
|
ParticleSystem: () => import_engine7.ParticleSystem,
|
|
56
56
|
ShaderProgram: () => import_engine5.ShaderProgram,
|
|
57
57
|
VertexBuffer: () => import_engine4.VertexBuffer,
|
|
58
|
+
ZERO_VEC3: () => import_shared2.ZERO_VEC3,
|
|
58
59
|
captureAudioEvents: () => captureAudioEvents,
|
|
59
60
|
captureCanvasDrawCalls: () => captureCanvasDrawCalls,
|
|
60
61
|
captureFramebufferAsPNG: () => captureFramebufferAsPNG,
|
|
@@ -228,8 +229,8 @@ __export(index_exports, {
|
|
|
228
229
|
findPakFile: () => findPakFile,
|
|
229
230
|
getSnapshotPath: () => getSnapshotPath,
|
|
230
231
|
initHeadlessWebGPU: () => initHeadlessWebGPU,
|
|
231
|
-
intersects: () =>
|
|
232
|
-
ladderTrace: () =>
|
|
232
|
+
intersects: () => import_shared3.intersects,
|
|
233
|
+
ladderTrace: () => import_shared3.ladderTrace,
|
|
233
234
|
loadMapFromPak: () => loadMapFromPak,
|
|
234
235
|
loadPNG: () => loadPNG,
|
|
235
236
|
makeAxisBrush: () => makeAxisBrush,
|
|
@@ -272,7 +273,8 @@ __export(index_exports, {
|
|
|
272
273
|
simulateServerRegistration: () => simulateServerRegistration,
|
|
273
274
|
simulateServerTick: () => simulateServerTick,
|
|
274
275
|
simulateSnapshotDelivery: () => simulateSnapshotDelivery,
|
|
275
|
-
|
|
276
|
+
spawnEntity: () => spawnEntity,
|
|
277
|
+
stairTrace: () => import_shared3.stairTrace,
|
|
276
278
|
takeScreenshot: () => takeScreenshot,
|
|
277
279
|
teardownBrowserEnvironment: () => teardownBrowserEnvironment,
|
|
278
280
|
teardownMockAudioContext: () => teardownMockAudioContext,
|
|
@@ -508,6 +510,7 @@ function loadMapFromPak(mapName) {
|
|
|
508
510
|
}
|
|
509
511
|
|
|
510
512
|
// src/shared/math.ts
|
|
513
|
+
var import_shared2 = require("@quake2ts/shared");
|
|
511
514
|
var createVector3 = (x = 0, y = 0, z = 0) => ({
|
|
512
515
|
x,
|
|
513
516
|
y,
|
|
@@ -530,7 +533,7 @@ var randomVector3 = (min = -100, max = 100) => ({
|
|
|
530
533
|
});
|
|
531
534
|
|
|
532
535
|
// src/shared/collision.ts
|
|
533
|
-
var
|
|
536
|
+
var import_shared3 = require("@quake2ts/shared");
|
|
534
537
|
var createTraceMock = (overrides) => ({
|
|
535
538
|
fraction: 1,
|
|
536
539
|
endpos: { x: 0, y: 0, z: 0 },
|
|
@@ -551,7 +554,7 @@ var createSurfaceMock = (overrides) => ({
|
|
|
551
554
|
|
|
552
555
|
// src/shared/factories.ts
|
|
553
556
|
var import_engine2 = require("@quake2ts/engine");
|
|
554
|
-
var
|
|
557
|
+
var import_shared4 = require("@quake2ts/shared");
|
|
555
558
|
var import_engine3 = require("@quake2ts/engine");
|
|
556
559
|
function createConfigStringMock(index, value) {
|
|
557
560
|
return { index, value };
|
|
@@ -565,7 +568,7 @@ function createConfigStringArrayMock(entries) {
|
|
|
565
568
|
}
|
|
566
569
|
return result;
|
|
567
570
|
}
|
|
568
|
-
function createCvarMock(name, value, flags =
|
|
571
|
+
function createCvarMock(name, value, flags = import_shared4.CvarFlags.None) {
|
|
569
572
|
return new import_engine2.Cvar({
|
|
570
573
|
name,
|
|
571
574
|
defaultValue: value,
|
|
@@ -785,7 +788,7 @@ function createTriggerEntityFactory(classname, overrides = {}) {
|
|
|
785
788
|
// src/game/helpers.ts
|
|
786
789
|
var import_vitest2 = require("vitest");
|
|
787
790
|
var import_game2 = require("@quake2ts/game");
|
|
788
|
-
var
|
|
791
|
+
var import_shared5 = require("@quake2ts/shared");
|
|
789
792
|
var createMockEngine = () => ({
|
|
790
793
|
sound: import_vitest2.vi.fn(),
|
|
791
794
|
soundIndex: import_vitest2.vi.fn((sound) => 0),
|
|
@@ -796,7 +799,7 @@ var createMockGame = (seed = 12345) => {
|
|
|
796
799
|
const spawnRegistry = new import_game2.SpawnRegistry();
|
|
797
800
|
const hooks = new import_game2.ScriptHookRegistry();
|
|
798
801
|
const game = {
|
|
799
|
-
random: (0,
|
|
802
|
+
random: (0, import_shared5.createRandomGenerator)({ seed }),
|
|
800
803
|
registerEntitySpawn: import_vitest2.vi.fn((classname, spawnFunc) => {
|
|
801
804
|
spawnRegistry.register(classname, (entity) => spawnFunc(entity));
|
|
802
805
|
}),
|
|
@@ -889,7 +892,7 @@ function createTestContext(options) {
|
|
|
889
892
|
findByTargetName: import_vitest2.vi.fn(() => []),
|
|
890
893
|
pickTarget: import_vitest2.vi.fn(() => null),
|
|
891
894
|
killBox: import_vitest2.vi.fn(),
|
|
892
|
-
rng: (0,
|
|
895
|
+
rng: (0, import_shared5.createRandomGenerator)({ seed }),
|
|
893
896
|
imports: {
|
|
894
897
|
configstring: import_vitest2.vi.fn(),
|
|
895
898
|
trace: traceFn,
|
|
@@ -918,18 +921,17 @@ function createTestContext(options) {
|
|
|
918
921
|
timeSeconds: 10,
|
|
919
922
|
frameNumber: 1,
|
|
920
923
|
sightEntity: null,
|
|
921
|
-
soundEntity: null
|
|
924
|
+
soundEntity: null,
|
|
925
|
+
activePlayers: [],
|
|
926
|
+
monsterAlertedByPlayers: import_vitest2.vi.fn().mockReturnValue(null),
|
|
927
|
+
soundClient: import_vitest2.vi.fn().mockReturnValue(null)
|
|
922
928
|
},
|
|
923
929
|
warn: import_vitest2.vi.fn(),
|
|
924
|
-
// Added warn to entities as it is sometimes used there too, though typically on SpawnContext
|
|
925
|
-
// Adding missing properties to satisfy EntitySystem interface partially or fully
|
|
926
|
-
// We cast to unknown first anyway, but filling these in makes it safer for consumers
|
|
927
930
|
skill: 1,
|
|
928
931
|
deathmatch: false,
|
|
929
932
|
coop: false,
|
|
930
933
|
activeCount: entityList.length,
|
|
931
934
|
world: entityList.find((e) => e.classname === "worldspawn") || new import_game2.Entity(0)
|
|
932
|
-
// ... other EntitySystem properties would go here
|
|
933
935
|
};
|
|
934
936
|
return {
|
|
935
937
|
keyValues: {},
|
|
@@ -939,7 +941,6 @@ function createTestContext(options) {
|
|
|
939
941
|
health_multiplier: 1,
|
|
940
942
|
warn: import_vitest2.vi.fn(),
|
|
941
943
|
free: import_vitest2.vi.fn(),
|
|
942
|
-
// Mock precache functions if they are part of SpawnContext in future or TestContext extensions
|
|
943
944
|
precacheModel: import_vitest2.vi.fn(),
|
|
944
945
|
precacheSound: import_vitest2.vi.fn(),
|
|
945
946
|
precacheImage: import_vitest2.vi.fn()
|
|
@@ -964,6 +965,11 @@ function createPhysicsTestContext(bspModel) {
|
|
|
964
965
|
function createEntity() {
|
|
965
966
|
return new import_game2.Entity(1);
|
|
966
967
|
}
|
|
968
|
+
function spawnEntity(system, data) {
|
|
969
|
+
const ent = system.spawn();
|
|
970
|
+
Object.assign(ent, data);
|
|
971
|
+
return ent;
|
|
972
|
+
}
|
|
967
973
|
function createGameImportsAndEngine(overrides) {
|
|
968
974
|
const defaultTraceResult = {
|
|
969
975
|
fraction: 1,
|
|
@@ -1022,7 +1028,7 @@ function createMockGameExports(overrides = {}) {
|
|
|
1022
1028
|
|
|
1023
1029
|
// src/game/helpers/physics.ts
|
|
1024
1030
|
var import_game3 = require("@quake2ts/game");
|
|
1025
|
-
var
|
|
1031
|
+
var import_shared6 = require("@quake2ts/shared");
|
|
1026
1032
|
function createPhysicsTestScenario(scenarioType, context) {
|
|
1027
1033
|
const walls = [];
|
|
1028
1034
|
const ground = context.entities.spawn();
|
|
@@ -1079,13 +1085,13 @@ function createPhysicsTestScenario(scenarioType, context) {
|
|
|
1079
1085
|
}
|
|
1080
1086
|
function simulateMovement(entity, destination, context) {
|
|
1081
1087
|
const dt = 0.1;
|
|
1082
|
-
const delta = (0,
|
|
1083
|
-
const dist = (0,
|
|
1088
|
+
const delta = (0, import_shared6.subtractVec3)(destination, entity.origin);
|
|
1089
|
+
const dist = (0, import_shared6.lengthVec3)(delta);
|
|
1084
1090
|
if (dist < 1e-3) {
|
|
1085
1091
|
return createTraceMock({ fraction: 1, endpos: destination });
|
|
1086
1092
|
}
|
|
1087
|
-
const dir = (0,
|
|
1088
|
-
entity.velocity = (0,
|
|
1093
|
+
const dir = (0, import_shared6.normalizeVec3)(delta);
|
|
1094
|
+
entity.velocity = (0, import_shared6.scaleVec3)(dir, dist / dt);
|
|
1089
1095
|
const start = { ...entity.origin };
|
|
1090
1096
|
const end = destination;
|
|
1091
1097
|
const tr = context.entities.trace(start, entity.mins, entity.maxs, end, entity, entity.clipmask || 0);
|
|
@@ -1549,12 +1555,12 @@ function createMockNetDriver(overrides) {
|
|
|
1549
1555
|
}
|
|
1550
1556
|
|
|
1551
1557
|
// src/server/mockTransport.ts
|
|
1552
|
-
var
|
|
1558
|
+
var import_shared7 = require("@quake2ts/shared");
|
|
1553
1559
|
var MockNetworkTransport = class {
|
|
1554
1560
|
constructor() {
|
|
1555
1561
|
this.recordedPackets = [];
|
|
1556
1562
|
this.sentPackets = [];
|
|
1557
|
-
this.netchan = new
|
|
1563
|
+
this.netchan = new import_shared7.NetChan();
|
|
1558
1564
|
this.netchan.setup(1234, { type: "loopback", port: 0 });
|
|
1559
1565
|
}
|
|
1560
1566
|
reset() {
|
|
@@ -1666,7 +1672,7 @@ var MockNetDriver = class {
|
|
|
1666
1672
|
|
|
1667
1673
|
// src/server/mocks/state.ts
|
|
1668
1674
|
var import_server = require("@quake2ts/server");
|
|
1669
|
-
var
|
|
1675
|
+
var import_shared8 = require("@quake2ts/shared");
|
|
1670
1676
|
var import_vitest7 = require("vitest");
|
|
1671
1677
|
function createMockGameState(overrides) {
|
|
1672
1678
|
return {
|
|
@@ -1687,8 +1693,8 @@ function createMockServerState(overrides) {
|
|
|
1687
1693
|
frame: 0,
|
|
1688
1694
|
name: "test_map",
|
|
1689
1695
|
collisionModel: null,
|
|
1690
|
-
configStrings: new Array(
|
|
1691
|
-
baselines: new Array(
|
|
1696
|
+
configStrings: new Array(import_shared8.MAX_CONFIGSTRINGS).fill(""),
|
|
1697
|
+
baselines: new Array(import_shared8.MAX_EDICTS).fill(null),
|
|
1692
1698
|
multicastBuf: new Uint8Array(0),
|
|
1693
1699
|
...overrides
|
|
1694
1700
|
};
|
|
@@ -2043,7 +2049,7 @@ function simulatePlayerInput(client, input) {
|
|
|
2043
2049
|
}
|
|
2044
2050
|
|
|
2045
2051
|
// src/server/helpers/snapshot.ts
|
|
2046
|
-
var
|
|
2052
|
+
var import_shared9 = require("@quake2ts/shared");
|
|
2047
2053
|
function createServerSnapshot(serverState, clientNum) {
|
|
2048
2054
|
const visibleEntities = [];
|
|
2049
2055
|
if (serverState.baselines) {
|
|
@@ -2107,7 +2113,7 @@ async function simulateSnapshotDelivery(snapshot, reliability = 1) {
|
|
|
2107
2113
|
return snapshot;
|
|
2108
2114
|
}
|
|
2109
2115
|
function parseProtocolPlayerState(data) {
|
|
2110
|
-
const stream = new
|
|
2116
|
+
const stream = new import_shared9.BinaryStream(data.buffer);
|
|
2111
2117
|
const ps = {
|
|
2112
2118
|
pm_type: 0,
|
|
2113
2119
|
origin: { x: 0, y: 0, z: 0 },
|
|
@@ -5130,6 +5136,7 @@ function createVisualTestScenario(sceneName) {
|
|
|
5130
5136
|
ParticleSystem,
|
|
5131
5137
|
ShaderProgram,
|
|
5132
5138
|
VertexBuffer,
|
|
5139
|
+
ZERO_VEC3,
|
|
5133
5140
|
captureAudioEvents,
|
|
5134
5141
|
captureCanvasDrawCalls,
|
|
5135
5142
|
captureFramebufferAsPNG,
|
|
@@ -5347,6 +5354,7 @@ function createVisualTestScenario(sceneName) {
|
|
|
5347
5354
|
simulateServerRegistration,
|
|
5348
5355
|
simulateServerTick,
|
|
5349
5356
|
simulateSnapshotDelivery,
|
|
5357
|
+
spawnEntity,
|
|
5350
5358
|
stairTrace,
|
|
5351
5359
|
takeScreenshot,
|
|
5352
5360
|
teardownBrowserEnvironment,
|