quake2ts 0.0.567 → 0.0.569
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 +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +5 -5
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +127 -0
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +124 -0
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/index.d.ts +1 -1
- package/packages/game/dist/types/entities/index.d.ts.map +1 -1
- package/packages/test-utils/dist/index.cjs +275 -73
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +73 -3
- package/packages/test-utils/dist/index.d.ts +73 -3
- package/packages/test-utils/dist/index.js +263 -70
- package/packages/test-utils/dist/index.js.map +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Entity, type DieCallback, type EntityFieldDescriptor, type EntityFieldType, type PainCallback, type ThinkCallback, type TouchCallback, type UseCallback, type MonsterInfo, type MonsterMove, type MonsterFrame, MoveType, Solid, ServerFlags, DeadFlag, ENTITY_FIELD_METADATA, } from './entity.js';
|
|
1
|
+
export { Entity, type DieCallback, type EntityFieldDescriptor, type EntityFieldType, type PainCallback, type ThinkCallback, type TouchCallback, type UseCallback, type MonsterInfo, type MonsterMove, type MonsterFrame, type MonsterAction, type AIAction, MoveType, Solid, ServerFlags, DeadFlag, EntityFlags, EntityEffects, MuzzleFlash, ENTITY_FIELD_METADATA, } from './entity.js';
|
|
2
2
|
export { EntitySystem, type EntitySystemSnapshot, type SerializedEntityState, type SerializedTargetAwareness, type LevelState } from './system.js';
|
|
3
3
|
export { type EntityPoolSnapshot } from './pool.js';
|
|
4
4
|
export { type ThinkScheduleEntry } from './thinkScheduler.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,EACR,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,aAAa,EACb,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -41,16 +41,21 @@ __export(index_exports, {
|
|
|
41
41
|
compareScreenshots: () => compareScreenshots,
|
|
42
42
|
createBinaryStreamMock: () => createBinaryStreamMock,
|
|
43
43
|
createBinaryWriterMock: () => createBinaryWriterMock,
|
|
44
|
+
createCombatTestContext: () => createCombatTestContext,
|
|
44
45
|
createControlledTimer: () => createControlledTimer,
|
|
45
46
|
createCustomNetworkCondition: () => createCustomNetworkCondition,
|
|
46
47
|
createDeltaSnapshot: () => createDeltaSnapshot,
|
|
47
48
|
createEntity: () => createEntity,
|
|
49
|
+
createEntityFactory: () => createEntityFactory,
|
|
48
50
|
createEntityStateFactory: () => createEntityStateFactory,
|
|
49
51
|
createGameStateSnapshotFactory: () => createGameStateSnapshotFactory,
|
|
52
|
+
createItemEntityFactory: () => createItemEntityFactory,
|
|
53
|
+
createMockAI: () => createMockAI,
|
|
50
54
|
createMockAudioContext: () => createMockAudioContext,
|
|
51
55
|
createMockCanvas: () => createMockCanvas,
|
|
52
56
|
createMockCanvasContext2D: () => createMockCanvasContext2D,
|
|
53
57
|
createMockConnection: () => createMockConnection,
|
|
58
|
+
createMockDamageInfo: () => createMockDamageInfo,
|
|
54
59
|
createMockEngine: () => createMockEngine,
|
|
55
60
|
createMockGPUAdapter: () => createMockGPUAdapter,
|
|
56
61
|
createMockGPUCanvasContext: () => createMockGPUCanvasContext,
|
|
@@ -62,6 +67,9 @@ __export(index_exports, {
|
|
|
62
67
|
createMockImageData: () => createMockImageData,
|
|
63
68
|
createMockIndexedDB: () => createMockIndexedDB,
|
|
64
69
|
createMockLocalStorage: () => createMockLocalStorage,
|
|
70
|
+
createMockMonsterAI: () => createMockMonsterAI,
|
|
71
|
+
createMockMonsterMove: () => createMockMonsterMove,
|
|
72
|
+
createMockNetDriver: () => createMockNetDriver,
|
|
65
73
|
createMockNetworkAddress: () => createMockNetworkAddress,
|
|
66
74
|
createMockPerformance: () => createMockPerformance,
|
|
67
75
|
createMockRAF: () => createMockRAF,
|
|
@@ -75,15 +83,21 @@ __export(index_exports, {
|
|
|
75
83
|
createMockTransport: () => createMockTransport,
|
|
76
84
|
createMockUDPSocket: () => createMockUDPSocket,
|
|
77
85
|
createMockUserInfo: () => createMockUserInfo,
|
|
86
|
+
createMockWeapon: () => createMockWeapon,
|
|
78
87
|
createMockWebGL2Context: () => createMockWebGL2Context,
|
|
88
|
+
createMonsterEntityFactory: () => createMonsterEntityFactory,
|
|
79
89
|
createMultiplayerTestScenario: () => createMultiplayerTestScenario,
|
|
80
90
|
createNetChanMock: () => createNetChanMock,
|
|
91
|
+
createPhysicsTestContext: () => createPhysicsTestContext,
|
|
92
|
+
createPlayerEntityFactory: () => createPlayerEntityFactory,
|
|
81
93
|
createPlayerStateFactory: () => createPlayerStateFactory,
|
|
82
94
|
createPlaywrightTestClient: () => createPlaywrightTestClient,
|
|
95
|
+
createProjectileEntityFactory: () => createProjectileEntityFactory,
|
|
83
96
|
createServerSnapshot: () => createServerSnapshot,
|
|
84
|
-
|
|
97
|
+
createSpawnTestContext: () => createSpawnTestContext,
|
|
85
98
|
createStorageTestScenario: () => createStorageTestScenario,
|
|
86
99
|
createTestContext: () => createTestContext,
|
|
100
|
+
createTriggerEntityFactory: () => createTriggerEntityFactory,
|
|
87
101
|
createVisualTestScenario: () => createVisualTestScenario,
|
|
88
102
|
intersects: () => import_shared3.intersects,
|
|
89
103
|
ladderTrace: () => import_shared3.ladderTrace,
|
|
@@ -94,6 +108,7 @@ __export(index_exports, {
|
|
|
94
108
|
makeLeafModel: () => makeLeafModel,
|
|
95
109
|
makeNode: () => makeNode,
|
|
96
110
|
makePlane: () => makePlane,
|
|
111
|
+
mockMonsterAttacks: () => mockMonsterAttacks,
|
|
97
112
|
serializeUserInfo: () => serializeUserInfo,
|
|
98
113
|
setupBrowserEnvironment: () => setupBrowserEnvironment,
|
|
99
114
|
setupMockAudioContext: () => setupMockAudioContext,
|
|
@@ -267,6 +282,7 @@ function makeBrushFromMinsMaxs(mins, maxs, contents = import_shared.CONTENTS_SOL
|
|
|
267
282
|
}
|
|
268
283
|
|
|
269
284
|
// src/game/factories.ts
|
|
285
|
+
var import_game = require("@quake2ts/game");
|
|
270
286
|
var createPlayerStateFactory = (overrides) => ({
|
|
271
287
|
pm_type: 0,
|
|
272
288
|
pm_time: 0,
|
|
@@ -349,10 +365,77 @@ var createGameStateSnapshotFactory = (overrides) => ({
|
|
|
349
365
|
pm_type: 0,
|
|
350
366
|
...overrides
|
|
351
367
|
});
|
|
368
|
+
function createEntityFactory(overrides = {}) {
|
|
369
|
+
const ent = new import_game.Entity(1);
|
|
370
|
+
Object.assign(ent, {
|
|
371
|
+
classname: "info_null",
|
|
372
|
+
health: 0,
|
|
373
|
+
max_health: 0,
|
|
374
|
+
takedamage: false,
|
|
375
|
+
deadflag: import_game.DeadFlag.Alive,
|
|
376
|
+
solid: import_game.Solid.Not,
|
|
377
|
+
movetype: import_game.MoveType.None,
|
|
378
|
+
flags: 0,
|
|
379
|
+
svflags: 0,
|
|
380
|
+
...overrides
|
|
381
|
+
});
|
|
382
|
+
return ent;
|
|
383
|
+
}
|
|
384
|
+
function createPlayerEntityFactory(overrides = {}) {
|
|
385
|
+
return createEntityFactory({
|
|
386
|
+
classname: "player",
|
|
387
|
+
health: 100,
|
|
388
|
+
max_health: 100,
|
|
389
|
+
takedamage: true,
|
|
390
|
+
solid: import_game.Solid.BoundingBox,
|
|
391
|
+
movetype: import_game.MoveType.Walk,
|
|
392
|
+
svflags: import_game.ServerFlags.Player,
|
|
393
|
+
viewheight: 22,
|
|
394
|
+
...overrides
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
function createMonsterEntityFactory(classname, overrides = {}) {
|
|
398
|
+
return createEntityFactory({
|
|
399
|
+
classname,
|
|
400
|
+
health: 100,
|
|
401
|
+
max_health: 100,
|
|
402
|
+
takedamage: true,
|
|
403
|
+
solid: import_game.Solid.BoundingBox,
|
|
404
|
+
movetype: import_game.MoveType.Step,
|
|
405
|
+
svflags: import_game.ServerFlags.Monster,
|
|
406
|
+
deadflag: import_game.DeadFlag.Alive,
|
|
407
|
+
...overrides
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
function createItemEntityFactory(classname, overrides = {}) {
|
|
411
|
+
return createEntityFactory({
|
|
412
|
+
classname,
|
|
413
|
+
solid: import_game.Solid.Trigger,
|
|
414
|
+
movetype: import_game.MoveType.Toss,
|
|
415
|
+
...overrides
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
function createProjectileEntityFactory(classname, overrides = {}) {
|
|
419
|
+
return createEntityFactory({
|
|
420
|
+
classname,
|
|
421
|
+
solid: import_game.Solid.Bsp,
|
|
422
|
+
movetype: import_game.MoveType.FlyMissile,
|
|
423
|
+
svflags: import_game.ServerFlags.Projectile,
|
|
424
|
+
...overrides
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
function createTriggerEntityFactory(classname, overrides = {}) {
|
|
428
|
+
return createEntityFactory({
|
|
429
|
+
classname,
|
|
430
|
+
solid: import_game.Solid.Trigger,
|
|
431
|
+
movetype: import_game.MoveType.None,
|
|
432
|
+
...overrides
|
|
433
|
+
});
|
|
434
|
+
}
|
|
352
435
|
|
|
353
436
|
// src/game/helpers.ts
|
|
354
437
|
var import_vitest2 = require("vitest");
|
|
355
|
-
var
|
|
438
|
+
var import_game2 = require("@quake2ts/game");
|
|
356
439
|
var import_shared2 = require("@quake2ts/shared");
|
|
357
440
|
var import_shared3 = require("@quake2ts/shared");
|
|
358
441
|
var createMockEngine = () => ({
|
|
@@ -362,8 +445,8 @@ var createMockEngine = () => ({
|
|
|
362
445
|
centerprintf: import_vitest2.vi.fn()
|
|
363
446
|
});
|
|
364
447
|
var createMockGame = (seed = 12345) => {
|
|
365
|
-
const spawnRegistry = new
|
|
366
|
-
const hooks = new
|
|
448
|
+
const spawnRegistry = new import_game2.SpawnRegistry();
|
|
449
|
+
const hooks = new import_game2.ScriptHookRegistry();
|
|
367
450
|
const game = {
|
|
368
451
|
random: (0, import_shared2.createRandomGenerator)({ seed }),
|
|
369
452
|
registerEntitySpawn: import_vitest2.vi.fn((classname, spawnFunc) => {
|
|
@@ -405,7 +488,7 @@ function createTestContext(options) {
|
|
|
405
488
|
const hooks = game.hooks;
|
|
406
489
|
const entities = {
|
|
407
490
|
spawn: import_vitest2.vi.fn(() => {
|
|
408
|
-
const ent = new
|
|
491
|
+
const ent = new import_game2.Entity(entityList.length + 1);
|
|
409
492
|
entityList.push(ent);
|
|
410
493
|
hooks.onEntitySpawn(ent);
|
|
411
494
|
return ent;
|
|
@@ -484,7 +567,7 @@ function createTestContext(options) {
|
|
|
484
567
|
deathmatch: false,
|
|
485
568
|
coop: false,
|
|
486
569
|
activeCount: entityList.length,
|
|
487
|
-
world: entityList.find((e) => e.classname === "worldspawn") || new
|
|
570
|
+
world: entityList.find((e) => e.classname === "worldspawn") || new import_game2.Entity(0)
|
|
488
571
|
// ... other EntitySystem properties would go here
|
|
489
572
|
};
|
|
490
573
|
return {
|
|
@@ -501,13 +584,113 @@ function createTestContext(options) {
|
|
|
501
584
|
precacheImage: import_vitest2.vi.fn()
|
|
502
585
|
};
|
|
503
586
|
}
|
|
504
|
-
function
|
|
587
|
+
function createSpawnTestContext(mapName) {
|
|
588
|
+
const ctx = createTestContext();
|
|
589
|
+
if (mapName) {
|
|
590
|
+
ctx.game.spawnWorld();
|
|
591
|
+
}
|
|
592
|
+
return ctx;
|
|
593
|
+
}
|
|
594
|
+
function createCombatTestContext() {
|
|
595
|
+
return createTestContext();
|
|
596
|
+
}
|
|
597
|
+
function createPhysicsTestContext() {
|
|
505
598
|
return createTestContext();
|
|
506
599
|
}
|
|
507
600
|
function createEntity() {
|
|
508
|
-
return new
|
|
601
|
+
return new import_game2.Entity(1);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// src/game/mocks/ai.ts
|
|
605
|
+
var import_vitest3 = require("vitest");
|
|
606
|
+
function createMockAI(overrides = {}) {
|
|
607
|
+
return {
|
|
608
|
+
checkAttack: import_vitest3.vi.fn(() => false),
|
|
609
|
+
findTarget: import_vitest3.vi.fn(() => null),
|
|
610
|
+
visible: import_vitest3.vi.fn(() => true),
|
|
611
|
+
infront: import_vitest3.vi.fn(() => true),
|
|
612
|
+
...overrides
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function createMockMonsterAI(overrides = {}) {
|
|
616
|
+
return {
|
|
617
|
+
stand: import_vitest3.vi.fn(),
|
|
618
|
+
walk: import_vitest3.vi.fn(),
|
|
619
|
+
run: import_vitest3.vi.fn(),
|
|
620
|
+
dodge: import_vitest3.vi.fn(),
|
|
621
|
+
attack: import_vitest3.vi.fn(),
|
|
622
|
+
melee: import_vitest3.vi.fn(),
|
|
623
|
+
sight: import_vitest3.vi.fn(),
|
|
624
|
+
idle: import_vitest3.vi.fn(),
|
|
625
|
+
...overrides
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
function createMockMonsterMove(first, last, think, action) {
|
|
629
|
+
const frames = [];
|
|
630
|
+
for (let i = first; i <= last; i++) {
|
|
631
|
+
frames.push({
|
|
632
|
+
ai: action,
|
|
633
|
+
dist: 0,
|
|
634
|
+
think
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
return {
|
|
638
|
+
firstframe: first,
|
|
639
|
+
lastframe: last,
|
|
640
|
+
frames,
|
|
641
|
+
endfunc: null
|
|
642
|
+
};
|
|
509
643
|
}
|
|
510
644
|
|
|
645
|
+
// src/game/mocks/combat.ts
|
|
646
|
+
var import_vitest4 = require("vitest");
|
|
647
|
+
var import_game3 = require("@quake2ts/game");
|
|
648
|
+
function createMockDamageInfo(overrides = {}) {
|
|
649
|
+
return {
|
|
650
|
+
damage: 10,
|
|
651
|
+
mod: import_game3.DamageMod.UNKNOWN,
|
|
652
|
+
knockback: 0,
|
|
653
|
+
attacker: null,
|
|
654
|
+
inflictor: null,
|
|
655
|
+
dir: null,
|
|
656
|
+
point: null,
|
|
657
|
+
...overrides
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
var WEAPON_NAMES = {
|
|
661
|
+
"weapon_blaster": "Blaster",
|
|
662
|
+
"weapon_shotgun": "Shotgun",
|
|
663
|
+
"weapon_supershotgun": "Super Shotgun",
|
|
664
|
+
"weapon_machinegun": "Machinegun",
|
|
665
|
+
"weapon_chaingun": "Chaingun",
|
|
666
|
+
"weapon_grenadelauncher": "Grenade Launcher",
|
|
667
|
+
"weapon_rocketlauncher": "Rocket Launcher",
|
|
668
|
+
"weapon_hyperblaster": "HyperBlaster",
|
|
669
|
+
"weapon_railgun": "Railgun",
|
|
670
|
+
"weapon_bfg": "BFG10K"
|
|
671
|
+
};
|
|
672
|
+
function createMockWeapon(name = "Mock Weapon") {
|
|
673
|
+
const displayName = WEAPON_NAMES[name] || name;
|
|
674
|
+
return {
|
|
675
|
+
name: displayName,
|
|
676
|
+
ammoType: "bullets",
|
|
677
|
+
ammoUse: 1,
|
|
678
|
+
selection: import_vitest4.vi.fn(),
|
|
679
|
+
think: import_vitest4.vi.fn(),
|
|
680
|
+
command: import_vitest4.vi.fn()
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
var mockMonsterAttacks = {
|
|
684
|
+
fireBlaster: import_vitest4.vi.fn(),
|
|
685
|
+
fireRocket: import_vitest4.vi.fn(),
|
|
686
|
+
fireGrenade: import_vitest4.vi.fn(),
|
|
687
|
+
fireHeat: import_vitest4.vi.fn(),
|
|
688
|
+
fireBullet: import_vitest4.vi.fn(),
|
|
689
|
+
fireShotgun: import_vitest4.vi.fn(),
|
|
690
|
+
fireRailgun: import_vitest4.vi.fn(),
|
|
691
|
+
fireBFG: import_vitest4.vi.fn()
|
|
692
|
+
};
|
|
693
|
+
|
|
511
694
|
// src/game/mocks.ts
|
|
512
695
|
function createMockGameState(overrides) {
|
|
513
696
|
return {
|
|
@@ -520,7 +703,7 @@ function createMockGameState(overrides) {
|
|
|
520
703
|
}
|
|
521
704
|
|
|
522
705
|
// src/server/mocks/transport.ts
|
|
523
|
-
var
|
|
706
|
+
var import_vitest5 = require("vitest");
|
|
524
707
|
var MockTransport = class {
|
|
525
708
|
constructor() {
|
|
526
709
|
this.address = "127.0.0.1";
|
|
@@ -528,11 +711,11 @@ var MockTransport = class {
|
|
|
528
711
|
this.sentMessages = [];
|
|
529
712
|
this.receivedMessages = [];
|
|
530
713
|
this.listening = false;
|
|
531
|
-
this.listenSpy =
|
|
714
|
+
this.listenSpy = import_vitest5.vi.fn().mockImplementation(async (port) => {
|
|
532
715
|
this.port = port;
|
|
533
716
|
this.listening = true;
|
|
534
717
|
});
|
|
535
|
-
this.closeSpy =
|
|
718
|
+
this.closeSpy = import_vitest5.vi.fn().mockImplementation(() => {
|
|
536
719
|
this.listening = false;
|
|
537
720
|
});
|
|
538
721
|
}
|
|
@@ -588,11 +771,11 @@ var MockTransport = class {
|
|
|
588
771
|
};
|
|
589
772
|
function createMockUDPSocket(overrides) {
|
|
590
773
|
const socket = {
|
|
591
|
-
send:
|
|
592
|
-
on:
|
|
593
|
-
close:
|
|
594
|
-
bind:
|
|
595
|
-
address:
|
|
774
|
+
send: import_vitest5.vi.fn(),
|
|
775
|
+
on: import_vitest5.vi.fn(),
|
|
776
|
+
close: import_vitest5.vi.fn(),
|
|
777
|
+
bind: import_vitest5.vi.fn(),
|
|
778
|
+
address: import_vitest5.vi.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
|
|
596
779
|
...overrides
|
|
597
780
|
};
|
|
598
781
|
return socket;
|
|
@@ -607,11 +790,23 @@ function createMockTransport(address = "127.0.0.1", port = 27910, overrides) {
|
|
|
607
790
|
Object.assign(transport, overrides);
|
|
608
791
|
return transport;
|
|
609
792
|
}
|
|
793
|
+
function createMockNetDriver(overrides) {
|
|
794
|
+
return {
|
|
795
|
+
connect: import_vitest5.vi.fn().mockResolvedValue(void 0),
|
|
796
|
+
disconnect: import_vitest5.vi.fn(),
|
|
797
|
+
send: import_vitest5.vi.fn(),
|
|
798
|
+
onMessage: import_vitest5.vi.fn(),
|
|
799
|
+
onClose: import_vitest5.vi.fn(),
|
|
800
|
+
onError: import_vitest5.vi.fn(),
|
|
801
|
+
isConnected: import_vitest5.vi.fn().mockReturnValue(true),
|
|
802
|
+
...overrides
|
|
803
|
+
};
|
|
804
|
+
}
|
|
610
805
|
|
|
611
806
|
// src/server/mocks/state.ts
|
|
612
807
|
var import_server = require("@quake2ts/server");
|
|
613
808
|
var import_shared4 = require("@quake2ts/shared");
|
|
614
|
-
var
|
|
809
|
+
var import_vitest6 = require("vitest");
|
|
615
810
|
function createMockServerState(overrides) {
|
|
616
811
|
return {
|
|
617
812
|
state: import_server.ServerState.Game,
|
|
@@ -641,15 +836,7 @@ function createMockServerStatic(maxClients = 16, overrides) {
|
|
|
641
836
|
};
|
|
642
837
|
}
|
|
643
838
|
function createMockServerClient(clientNum, overrides) {
|
|
644
|
-
const mockNet =
|
|
645
|
-
connect: import_vitest4.vi.fn(),
|
|
646
|
-
disconnect: import_vitest4.vi.fn(),
|
|
647
|
-
send: import_vitest4.vi.fn(),
|
|
648
|
-
onMessage: import_vitest4.vi.fn(),
|
|
649
|
-
onClose: import_vitest4.vi.fn(),
|
|
650
|
-
onError: import_vitest4.vi.fn(),
|
|
651
|
-
isConnected: import_vitest4.vi.fn().mockReturnValue(true)
|
|
652
|
-
};
|
|
839
|
+
const mockNet = createMockNetDriver();
|
|
653
840
|
return {
|
|
654
841
|
index: clientNum,
|
|
655
842
|
state: import_server.ClientState.Connected,
|
|
@@ -661,13 +848,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
661
848
|
incomingSequence: 0,
|
|
662
849
|
outgoingSequence: 0,
|
|
663
850
|
lastReceived: 0,
|
|
664
|
-
process:
|
|
665
|
-
transmit:
|
|
666
|
-
writeReliableByte:
|
|
667
|
-
writeReliableShort:
|
|
668
|
-
writeReliableLong:
|
|
669
|
-
writeReliableString:
|
|
670
|
-
writeReliableData:
|
|
851
|
+
process: import_vitest6.vi.fn(),
|
|
852
|
+
transmit: import_vitest6.vi.fn(),
|
|
853
|
+
writeReliableByte: import_vitest6.vi.fn(),
|
|
854
|
+
writeReliableShort: import_vitest6.vi.fn(),
|
|
855
|
+
writeReliableLong: import_vitest6.vi.fn(),
|
|
856
|
+
writeReliableString: import_vitest6.vi.fn(),
|
|
857
|
+
writeReliableData: import_vitest6.vi.fn()
|
|
671
858
|
},
|
|
672
859
|
// Cast as any because NetChan might be complex to fully mock here
|
|
673
860
|
userInfo: "",
|
|
@@ -709,13 +896,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
709
896
|
}
|
|
710
897
|
function createMockServer(overrides) {
|
|
711
898
|
return {
|
|
712
|
-
start:
|
|
713
|
-
stop:
|
|
714
|
-
multicast:
|
|
715
|
-
unicast:
|
|
716
|
-
configstring:
|
|
717
|
-
kickPlayer:
|
|
718
|
-
changeMap:
|
|
899
|
+
start: import_vitest6.vi.fn().mockResolvedValue(void 0),
|
|
900
|
+
stop: import_vitest6.vi.fn(),
|
|
901
|
+
multicast: import_vitest6.vi.fn(),
|
|
902
|
+
unicast: import_vitest6.vi.fn(),
|
|
903
|
+
configstring: import_vitest6.vi.fn(),
|
|
904
|
+
kickPlayer: import_vitest6.vi.fn(),
|
|
905
|
+
changeMap: import_vitest6.vi.fn().mockResolvedValue(void 0),
|
|
719
906
|
...overrides
|
|
720
907
|
};
|
|
721
908
|
}
|
|
@@ -777,19 +964,19 @@ async function simulateHandshake(client, server) {
|
|
|
777
964
|
}
|
|
778
965
|
|
|
779
966
|
// src/server/mocks/commands.ts
|
|
780
|
-
var
|
|
967
|
+
var import_vitest7 = require("vitest");
|
|
781
968
|
function createMockServerConsole(overrides) {
|
|
782
969
|
const outputBuffer = [];
|
|
783
970
|
const commandBuffer = [];
|
|
784
971
|
return {
|
|
785
|
-
exec:
|
|
972
|
+
exec: import_vitest7.vi.fn((cmd) => {
|
|
786
973
|
commandBuffer.push(cmd);
|
|
787
974
|
return `Executed: ${cmd}`;
|
|
788
975
|
}),
|
|
789
|
-
print:
|
|
976
|
+
print: import_vitest7.vi.fn((text) => {
|
|
790
977
|
outputBuffer.push(text);
|
|
791
978
|
}),
|
|
792
|
-
broadcast:
|
|
979
|
+
broadcast: import_vitest7.vi.fn((text) => {
|
|
793
980
|
outputBuffer.push(`Broadcast: ${text}`);
|
|
794
981
|
}),
|
|
795
982
|
commandBuffer,
|
|
@@ -802,13 +989,13 @@ function createMockRConClient(password = "") {
|
|
|
802
989
|
connected: false,
|
|
803
990
|
lastCommand: "",
|
|
804
991
|
lastResponse: "",
|
|
805
|
-
connect:
|
|
992
|
+
connect: import_vitest7.vi.fn(async (address, port, pwd) => {
|
|
806
993
|
return pwd === password;
|
|
807
994
|
}),
|
|
808
|
-
sendCommand:
|
|
995
|
+
sendCommand: import_vitest7.vi.fn(async (cmd) => {
|
|
809
996
|
return `RCON Response for: ${cmd}`;
|
|
810
997
|
}),
|
|
811
|
-
disconnect:
|
|
998
|
+
disconnect: import_vitest7.vi.fn()
|
|
812
999
|
};
|
|
813
1000
|
}
|
|
814
1001
|
function simulateServerCommand(server, command) {
|
|
@@ -1451,10 +1638,10 @@ function createMockImage(width, height, src) {
|
|
|
1451
1638
|
}
|
|
1452
1639
|
|
|
1453
1640
|
// src/engine/mocks/webgpu.ts
|
|
1454
|
-
var
|
|
1641
|
+
var import_vitest8 = require("vitest");
|
|
1455
1642
|
function createMockGPUAdapter() {
|
|
1456
1643
|
return {
|
|
1457
|
-
requestDevice:
|
|
1644
|
+
requestDevice: import_vitest8.vi.fn().mockResolvedValue(createMockGPUDevice()),
|
|
1458
1645
|
features: /* @__PURE__ */ new Set(),
|
|
1459
1646
|
limits: {}
|
|
1460
1647
|
};
|
|
@@ -1464,40 +1651,40 @@ function createMockGPUDevice() {
|
|
|
1464
1651
|
features: /* @__PURE__ */ new Set(),
|
|
1465
1652
|
limits: {},
|
|
1466
1653
|
queue: {
|
|
1467
|
-
submit:
|
|
1468
|
-
writeBuffer:
|
|
1469
|
-
writeTexture:
|
|
1470
|
-
copyExternalImageToTexture:
|
|
1471
|
-
},
|
|
1472
|
-
createCommandEncoder:
|
|
1473
|
-
beginRenderPass:
|
|
1474
|
-
setPipeline:
|
|
1475
|
-
draw:
|
|
1476
|
-
end:
|
|
1654
|
+
submit: import_vitest8.vi.fn(),
|
|
1655
|
+
writeBuffer: import_vitest8.vi.fn(),
|
|
1656
|
+
writeTexture: import_vitest8.vi.fn(),
|
|
1657
|
+
copyExternalImageToTexture: import_vitest8.vi.fn()
|
|
1658
|
+
},
|
|
1659
|
+
createCommandEncoder: import_vitest8.vi.fn().mockReturnValue({
|
|
1660
|
+
beginRenderPass: import_vitest8.vi.fn().mockReturnValue({
|
|
1661
|
+
setPipeline: import_vitest8.vi.fn(),
|
|
1662
|
+
draw: import_vitest8.vi.fn(),
|
|
1663
|
+
end: import_vitest8.vi.fn()
|
|
1477
1664
|
}),
|
|
1478
|
-
finish:
|
|
1665
|
+
finish: import_vitest8.vi.fn()
|
|
1479
1666
|
}),
|
|
1480
|
-
createRenderPipeline:
|
|
1481
|
-
createShaderModule:
|
|
1482
|
-
createBindGroup:
|
|
1483
|
-
createBindGroupLayout:
|
|
1484
|
-
createBuffer:
|
|
1485
|
-
createTexture:
|
|
1486
|
-
createSampler:
|
|
1667
|
+
createRenderPipeline: import_vitest8.vi.fn(),
|
|
1668
|
+
createShaderModule: import_vitest8.vi.fn(),
|
|
1669
|
+
createBindGroup: import_vitest8.vi.fn(),
|
|
1670
|
+
createBindGroupLayout: import_vitest8.vi.fn(),
|
|
1671
|
+
createBuffer: import_vitest8.vi.fn(),
|
|
1672
|
+
createTexture: import_vitest8.vi.fn(),
|
|
1673
|
+
createSampler: import_vitest8.vi.fn()
|
|
1487
1674
|
};
|
|
1488
1675
|
}
|
|
1489
1676
|
function createMockGPUCanvasContext() {
|
|
1490
1677
|
return {
|
|
1491
|
-
configure:
|
|
1492
|
-
unconfigure:
|
|
1493
|
-
getCurrentTexture:
|
|
1678
|
+
configure: import_vitest8.vi.fn(),
|
|
1679
|
+
unconfigure: import_vitest8.vi.fn(),
|
|
1680
|
+
getCurrentTexture: import_vitest8.vi.fn()
|
|
1494
1681
|
};
|
|
1495
1682
|
}
|
|
1496
1683
|
function setupWebGPUMocks() {
|
|
1497
1684
|
const mockAdapter = createMockGPUAdapter();
|
|
1498
1685
|
const mockGpu = {
|
|
1499
|
-
requestAdapter:
|
|
1500
|
-
getPreferredCanvasFormat:
|
|
1686
|
+
requestAdapter: import_vitest8.vi.fn().mockResolvedValue(mockAdapter),
|
|
1687
|
+
getPreferredCanvasFormat: import_vitest8.vi.fn().mockReturnValue("bgra8unorm")
|
|
1501
1688
|
};
|
|
1502
1689
|
Object.defineProperty(global.navigator, "gpu", {
|
|
1503
1690
|
value: mockGpu,
|
|
@@ -2114,16 +2301,21 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2114
2301
|
compareScreenshots,
|
|
2115
2302
|
createBinaryStreamMock,
|
|
2116
2303
|
createBinaryWriterMock,
|
|
2304
|
+
createCombatTestContext,
|
|
2117
2305
|
createControlledTimer,
|
|
2118
2306
|
createCustomNetworkCondition,
|
|
2119
2307
|
createDeltaSnapshot,
|
|
2120
2308
|
createEntity,
|
|
2309
|
+
createEntityFactory,
|
|
2121
2310
|
createEntityStateFactory,
|
|
2122
2311
|
createGameStateSnapshotFactory,
|
|
2312
|
+
createItemEntityFactory,
|
|
2313
|
+
createMockAI,
|
|
2123
2314
|
createMockAudioContext,
|
|
2124
2315
|
createMockCanvas,
|
|
2125
2316
|
createMockCanvasContext2D,
|
|
2126
2317
|
createMockConnection,
|
|
2318
|
+
createMockDamageInfo,
|
|
2127
2319
|
createMockEngine,
|
|
2128
2320
|
createMockGPUAdapter,
|
|
2129
2321
|
createMockGPUCanvasContext,
|
|
@@ -2135,6 +2327,9 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2135
2327
|
createMockImageData,
|
|
2136
2328
|
createMockIndexedDB,
|
|
2137
2329
|
createMockLocalStorage,
|
|
2330
|
+
createMockMonsterAI,
|
|
2331
|
+
createMockMonsterMove,
|
|
2332
|
+
createMockNetDriver,
|
|
2138
2333
|
createMockNetworkAddress,
|
|
2139
2334
|
createMockPerformance,
|
|
2140
2335
|
createMockRAF,
|
|
@@ -2148,15 +2343,21 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2148
2343
|
createMockTransport,
|
|
2149
2344
|
createMockUDPSocket,
|
|
2150
2345
|
createMockUserInfo,
|
|
2346
|
+
createMockWeapon,
|
|
2151
2347
|
createMockWebGL2Context,
|
|
2348
|
+
createMonsterEntityFactory,
|
|
2152
2349
|
createMultiplayerTestScenario,
|
|
2153
2350
|
createNetChanMock,
|
|
2351
|
+
createPhysicsTestContext,
|
|
2352
|
+
createPlayerEntityFactory,
|
|
2154
2353
|
createPlayerStateFactory,
|
|
2155
2354
|
createPlaywrightTestClient,
|
|
2355
|
+
createProjectileEntityFactory,
|
|
2156
2356
|
createServerSnapshot,
|
|
2157
|
-
|
|
2357
|
+
createSpawnTestContext,
|
|
2158
2358
|
createStorageTestScenario,
|
|
2159
2359
|
createTestContext,
|
|
2360
|
+
createTriggerEntityFactory,
|
|
2160
2361
|
createVisualTestScenario,
|
|
2161
2362
|
intersects,
|
|
2162
2363
|
ladderTrace,
|
|
@@ -2167,6 +2368,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2167
2368
|
makeLeafModel,
|
|
2168
2369
|
makeNode,
|
|
2169
2370
|
makePlane,
|
|
2371
|
+
mockMonsterAttacks,
|
|
2170
2372
|
serializeUserInfo,
|
|
2171
2373
|
setupBrowserEnvironment,
|
|
2172
2374
|
setupMockAudioContext,
|