quake2ts 0.0.572 → 0.0.574
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.map +1 -1
- package/packages/client/dist/cjs/index.cjs +2 -2
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +2 -2
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +16 -16
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +123 -14
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +122 -14
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/index.d.ts +1 -0
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/instancing.d.ts +12 -0
- package/packages/engine/dist/types/render/instancing.d.ts.map +1 -0
- package/packages/engine/dist/types/render/renderer.d.ts +4 -0
- package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/test-utils/dist/index.cjs +133 -0
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +84 -2
- package/packages/test-utils/dist/index.d.ts +84 -2
- package/packages/test-utils/dist/index.js +126 -0
- package/packages/test-utils/dist/index.js.map +1 -1
- package/packages/tools/dist/browser/index.global.js +2 -1
- package/packages/tools/dist/browser/index.global.js.map +1 -1
- package/packages/tools/dist/cjs/index.cjs +175 -2
- package/packages/tools/dist/cjs/index.cjs.map +1 -1
- package/packages/tools/dist/esm/index.js +170 -1
- package/packages/tools/dist/esm/index.js.map +1 -1
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/tools/dist/types/index.d.ts +1 -0
- package/packages/tools/dist/types/index.d.ts.map +1 -1
- package/packages/tools/dist/types/modelExport.d.ts +19 -0
- package/packages/tools/dist/types/modelExport.d.ts.map +1 -0
|
@@ -39,6 +39,7 @@ __export(index_exports, {
|
|
|
39
39
|
captureGameScreenshot: () => captureGameScreenshot,
|
|
40
40
|
captureGameState: () => captureGameState,
|
|
41
41
|
compareScreenshots: () => compareScreenshots,
|
|
42
|
+
createBandwidthTestScenario: () => createBandwidthTestScenario,
|
|
42
43
|
createBinaryStreamMock: () => createBinaryStreamMock,
|
|
43
44
|
createBinaryWriterMock: () => createBinaryWriterMock,
|
|
44
45
|
createCombatTestContext: () => createCombatTestContext,
|
|
@@ -73,6 +74,7 @@ __export(index_exports, {
|
|
|
73
74
|
createMockInventory: () => createMockInventory,
|
|
74
75
|
createMockItem: () => createMockItem,
|
|
75
76
|
createMockLocalStorage: () => createMockLocalStorage,
|
|
77
|
+
createMockMasterServer: () => createMockMasterServer,
|
|
76
78
|
createMockMonsterAI: () => createMockMonsterAI,
|
|
77
79
|
createMockMonsterMove: () => createMockMonsterMove,
|
|
78
80
|
createMockNetDriver: () => createMockNetDriver,
|
|
@@ -81,9 +83,11 @@ __export(index_exports, {
|
|
|
81
83
|
createMockPowerupItem: () => createMockPowerupItem,
|
|
82
84
|
createMockRAF: () => createMockRAF,
|
|
83
85
|
createMockRConClient: () => createMockRConClient,
|
|
86
|
+
createMockRateLimiter: () => createMockRateLimiter,
|
|
84
87
|
createMockServer: () => createMockServer,
|
|
85
88
|
createMockServerClient: () => createMockServerClient,
|
|
86
89
|
createMockServerConsole: () => createMockServerConsole,
|
|
90
|
+
createMockServerInfo: () => createMockServerInfo,
|
|
87
91
|
createMockServerState: () => createMockServerState,
|
|
88
92
|
createMockServerStatic: () => createMockServerStatic,
|
|
89
93
|
createMockSessionStorage: () => createMockSessionStorage,
|
|
@@ -116,12 +120,14 @@ __export(index_exports, {
|
|
|
116
120
|
makeLeafModel: () => makeLeafModel,
|
|
117
121
|
makeNode: () => makeNode,
|
|
118
122
|
makePlane: () => makePlane,
|
|
123
|
+
measureSnapshotSize: () => measureSnapshotSize,
|
|
119
124
|
mockMonsterAttacks: () => mockMonsterAttacks,
|
|
120
125
|
serializeUserInfo: () => serializeUserInfo,
|
|
121
126
|
setupBrowserEnvironment: () => setupBrowserEnvironment,
|
|
122
127
|
setupMockAudioContext: () => setupMockAudioContext,
|
|
123
128
|
setupNodeEnvironment: () => setupNodeEnvironment,
|
|
124
129
|
setupWebGPUMocks: () => setupWebGPUMocks,
|
|
130
|
+
simulateBandwidthLimit: () => simulateBandwidthLimit,
|
|
125
131
|
simulateFrames: () => simulateFrames,
|
|
126
132
|
simulateFramesWithMock: () => simulateFramesWithMock,
|
|
127
133
|
simulateHandshake: () => simulateHandshake,
|
|
@@ -130,6 +136,7 @@ __export(index_exports, {
|
|
|
130
136
|
simulatePlayerJoin: () => simulatePlayerJoin,
|
|
131
137
|
simulatePlayerLeave: () => simulatePlayerLeave,
|
|
132
138
|
simulateServerCommand: () => simulateServerCommand,
|
|
139
|
+
simulateServerRegistration: () => simulateServerRegistration,
|
|
133
140
|
simulateServerTick: () => simulateServerTick,
|
|
134
141
|
simulateSnapshotDelivery: () => simulateSnapshotDelivery,
|
|
135
142
|
stairTrace: () => import_shared3.stairTrace,
|
|
@@ -1192,6 +1199,60 @@ function simulateServerCommand(server, command) {
|
|
|
1192
1199
|
return "Unknown command handler";
|
|
1193
1200
|
}
|
|
1194
1201
|
|
|
1202
|
+
// src/server/mocks/master.ts
|
|
1203
|
+
function createMockMasterServer(overrides = {}) {
|
|
1204
|
+
const servers = /* @__PURE__ */ new Map();
|
|
1205
|
+
return {
|
|
1206
|
+
registerServer: async (info) => {
|
|
1207
|
+
servers.set(info.address, info);
|
|
1208
|
+
return true;
|
|
1209
|
+
},
|
|
1210
|
+
heartbeat: async (serverAddress) => {
|
|
1211
|
+
return servers.has(serverAddress);
|
|
1212
|
+
},
|
|
1213
|
+
getServerList: async (filter) => {
|
|
1214
|
+
let list = Array.from(servers.values());
|
|
1215
|
+
if (filter) {
|
|
1216
|
+
if (filter.gametype) {
|
|
1217
|
+
list = list.filter((s) => s.gametype === filter.gametype);
|
|
1218
|
+
}
|
|
1219
|
+
if (filter.map) {
|
|
1220
|
+
list = list.filter((s) => s.map === filter.map);
|
|
1221
|
+
}
|
|
1222
|
+
if (filter.notEmpty) {
|
|
1223
|
+
list = list.filter((s) => s.players > 0);
|
|
1224
|
+
}
|
|
1225
|
+
if (filter.notFull) {
|
|
1226
|
+
list = list.filter((s) => s.players < s.maxPlayers);
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
return list;
|
|
1230
|
+
},
|
|
1231
|
+
...overrides
|
|
1232
|
+
};
|
|
1233
|
+
}
|
|
1234
|
+
function createMockServerInfo(overrides = {}) {
|
|
1235
|
+
return {
|
|
1236
|
+
address: "127.0.0.1:27910",
|
|
1237
|
+
name: "Quake 2 Test Server",
|
|
1238
|
+
map: "q2dm1",
|
|
1239
|
+
players: 0,
|
|
1240
|
+
maxPlayers: 16,
|
|
1241
|
+
gametype: "deathmatch",
|
|
1242
|
+
version: "1.0",
|
|
1243
|
+
...overrides
|
|
1244
|
+
};
|
|
1245
|
+
}
|
|
1246
|
+
async function simulateServerRegistration(server, master) {
|
|
1247
|
+
const info = createMockServerInfo({
|
|
1248
|
+
name: server.name || "Test Server",
|
|
1249
|
+
map: server.mapName || "q2dm1",
|
|
1250
|
+
players: server.clients ? server.clients.filter((c) => c && c.state >= 2).length : 0,
|
|
1251
|
+
maxPlayers: server.maxClients || 16
|
|
1252
|
+
});
|
|
1253
|
+
return master.registerServer(info);
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1195
1256
|
// src/server/helpers/multiplayer.ts
|
|
1196
1257
|
var import_server3 = require("@quake2ts/server");
|
|
1197
1258
|
function createMultiplayerTestScenario(numPlayers = 2) {
|
|
@@ -1344,6 +1405,71 @@ async function simulateSnapshotDelivery(snapshot, reliability = 1) {
|
|
|
1344
1405
|
return snapshot;
|
|
1345
1406
|
}
|
|
1346
1407
|
|
|
1408
|
+
// src/server/helpers/bandwidth.ts
|
|
1409
|
+
function createMockRateLimiter(bytesPerSecond) {
|
|
1410
|
+
let bucket = bytesPerSecond;
|
|
1411
|
+
const maxBucket = bytesPerSecond;
|
|
1412
|
+
let usage = 0;
|
|
1413
|
+
return {
|
|
1414
|
+
bytesPerSecond,
|
|
1415
|
+
allow(bytes) {
|
|
1416
|
+
if (bucket >= bytes) {
|
|
1417
|
+
bucket -= bytes;
|
|
1418
|
+
usage += bytes;
|
|
1419
|
+
return true;
|
|
1420
|
+
}
|
|
1421
|
+
return false;
|
|
1422
|
+
},
|
|
1423
|
+
update(deltaSeconds) {
|
|
1424
|
+
bucket += bytesPerSecond * deltaSeconds;
|
|
1425
|
+
if (bucket > maxBucket) {
|
|
1426
|
+
bucket = maxBucket;
|
|
1427
|
+
}
|
|
1428
|
+
},
|
|
1429
|
+
reset() {
|
|
1430
|
+
bucket = maxBucket;
|
|
1431
|
+
usage = 0;
|
|
1432
|
+
},
|
|
1433
|
+
getUsage() {
|
|
1434
|
+
return usage;
|
|
1435
|
+
}
|
|
1436
|
+
};
|
|
1437
|
+
}
|
|
1438
|
+
function simulateBandwidthLimit(messages, bandwidth) {
|
|
1439
|
+
const limiter = createMockRateLimiter(bandwidth);
|
|
1440
|
+
const result = [];
|
|
1441
|
+
let lastTime = messages.length > 0 ? messages[0].timestamp : 0;
|
|
1442
|
+
for (const msg of messages) {
|
|
1443
|
+
const delta = (msg.timestamp - lastTime) / 1e3;
|
|
1444
|
+
if (delta > 0) {
|
|
1445
|
+
limiter.update(delta);
|
|
1446
|
+
}
|
|
1447
|
+
lastTime = msg.timestamp;
|
|
1448
|
+
if (limiter.allow(msg.size)) {
|
|
1449
|
+
result.push(msg);
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
return result;
|
|
1453
|
+
}
|
|
1454
|
+
function measureSnapshotSize(snapshot) {
|
|
1455
|
+
let size = 0;
|
|
1456
|
+
size += snapshot.areaBytes;
|
|
1457
|
+
size += 200;
|
|
1458
|
+
size += snapshot.entities.length * 20;
|
|
1459
|
+
return size;
|
|
1460
|
+
}
|
|
1461
|
+
function createBandwidthTestScenario(bandwidth, numClients) {
|
|
1462
|
+
const clients = [];
|
|
1463
|
+
return {
|
|
1464
|
+
bandwidth,
|
|
1465
|
+
clients,
|
|
1466
|
+
duration: 0,
|
|
1467
|
+
totalBytesSent: 0,
|
|
1468
|
+
totalBytesReceived: 0,
|
|
1469
|
+
droppedPackets: 0
|
|
1470
|
+
};
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1347
1473
|
// src/setup/browser.ts
|
|
1348
1474
|
var import_jsdom = require("jsdom");
|
|
1349
1475
|
var import_canvas = require("@napi-rs/canvas");
|
|
@@ -2482,6 +2608,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2482
2608
|
captureGameScreenshot,
|
|
2483
2609
|
captureGameState,
|
|
2484
2610
|
compareScreenshots,
|
|
2611
|
+
createBandwidthTestScenario,
|
|
2485
2612
|
createBinaryStreamMock,
|
|
2486
2613
|
createBinaryWriterMock,
|
|
2487
2614
|
createCombatTestContext,
|
|
@@ -2516,6 +2643,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2516
2643
|
createMockInventory,
|
|
2517
2644
|
createMockItem,
|
|
2518
2645
|
createMockLocalStorage,
|
|
2646
|
+
createMockMasterServer,
|
|
2519
2647
|
createMockMonsterAI,
|
|
2520
2648
|
createMockMonsterMove,
|
|
2521
2649
|
createMockNetDriver,
|
|
@@ -2524,9 +2652,11 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2524
2652
|
createMockPowerupItem,
|
|
2525
2653
|
createMockRAF,
|
|
2526
2654
|
createMockRConClient,
|
|
2655
|
+
createMockRateLimiter,
|
|
2527
2656
|
createMockServer,
|
|
2528
2657
|
createMockServerClient,
|
|
2529
2658
|
createMockServerConsole,
|
|
2659
|
+
createMockServerInfo,
|
|
2530
2660
|
createMockServerState,
|
|
2531
2661
|
createMockServerStatic,
|
|
2532
2662
|
createMockSessionStorage,
|
|
@@ -2559,12 +2689,14 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2559
2689
|
makeLeafModel,
|
|
2560
2690
|
makeNode,
|
|
2561
2691
|
makePlane,
|
|
2692
|
+
measureSnapshotSize,
|
|
2562
2693
|
mockMonsterAttacks,
|
|
2563
2694
|
serializeUserInfo,
|
|
2564
2695
|
setupBrowserEnvironment,
|
|
2565
2696
|
setupMockAudioContext,
|
|
2566
2697
|
setupNodeEnvironment,
|
|
2567
2698
|
setupWebGPUMocks,
|
|
2699
|
+
simulateBandwidthLimit,
|
|
2568
2700
|
simulateFrames,
|
|
2569
2701
|
simulateFramesWithMock,
|
|
2570
2702
|
simulateHandshake,
|
|
@@ -2573,6 +2705,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2573
2705
|
simulatePlayerJoin,
|
|
2574
2706
|
simulatePlayerLeave,
|
|
2575
2707
|
simulateServerCommand,
|
|
2708
|
+
simulateServerRegistration,
|
|
2576
2709
|
simulateServerTick,
|
|
2577
2710
|
simulateSnapshotDelivery,
|
|
2578
2711
|
stairTrace,
|