quake2ts 0.0.568 → 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 +267 -71
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +68 -3
- package/packages/test-utils/dist/index.d.ts +68 -3
- package/packages/test-utils/dist/index.js +256 -68
- 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,8 @@ __export(index_exports, {
|
|
|
62
67
|
createMockImageData: () => createMockImageData,
|
|
63
68
|
createMockIndexedDB: () => createMockIndexedDB,
|
|
64
69
|
createMockLocalStorage: () => createMockLocalStorage,
|
|
70
|
+
createMockMonsterAI: () => createMockMonsterAI,
|
|
71
|
+
createMockMonsterMove: () => createMockMonsterMove,
|
|
65
72
|
createMockNetDriver: () => createMockNetDriver,
|
|
66
73
|
createMockNetworkAddress: () => createMockNetworkAddress,
|
|
67
74
|
createMockPerformance: () => createMockPerformance,
|
|
@@ -76,15 +83,21 @@ __export(index_exports, {
|
|
|
76
83
|
createMockTransport: () => createMockTransport,
|
|
77
84
|
createMockUDPSocket: () => createMockUDPSocket,
|
|
78
85
|
createMockUserInfo: () => createMockUserInfo,
|
|
86
|
+
createMockWeapon: () => createMockWeapon,
|
|
79
87
|
createMockWebGL2Context: () => createMockWebGL2Context,
|
|
88
|
+
createMonsterEntityFactory: () => createMonsterEntityFactory,
|
|
80
89
|
createMultiplayerTestScenario: () => createMultiplayerTestScenario,
|
|
81
90
|
createNetChanMock: () => createNetChanMock,
|
|
91
|
+
createPhysicsTestContext: () => createPhysicsTestContext,
|
|
92
|
+
createPlayerEntityFactory: () => createPlayerEntityFactory,
|
|
82
93
|
createPlayerStateFactory: () => createPlayerStateFactory,
|
|
83
94
|
createPlaywrightTestClient: () => createPlaywrightTestClient,
|
|
95
|
+
createProjectileEntityFactory: () => createProjectileEntityFactory,
|
|
84
96
|
createServerSnapshot: () => createServerSnapshot,
|
|
85
|
-
|
|
97
|
+
createSpawnTestContext: () => createSpawnTestContext,
|
|
86
98
|
createStorageTestScenario: () => createStorageTestScenario,
|
|
87
99
|
createTestContext: () => createTestContext,
|
|
100
|
+
createTriggerEntityFactory: () => createTriggerEntityFactory,
|
|
88
101
|
createVisualTestScenario: () => createVisualTestScenario,
|
|
89
102
|
intersects: () => import_shared3.intersects,
|
|
90
103
|
ladderTrace: () => import_shared3.ladderTrace,
|
|
@@ -95,6 +108,7 @@ __export(index_exports, {
|
|
|
95
108
|
makeLeafModel: () => makeLeafModel,
|
|
96
109
|
makeNode: () => makeNode,
|
|
97
110
|
makePlane: () => makePlane,
|
|
111
|
+
mockMonsterAttacks: () => mockMonsterAttacks,
|
|
98
112
|
serializeUserInfo: () => serializeUserInfo,
|
|
99
113
|
setupBrowserEnvironment: () => setupBrowserEnvironment,
|
|
100
114
|
setupMockAudioContext: () => setupMockAudioContext,
|
|
@@ -268,6 +282,7 @@ function makeBrushFromMinsMaxs(mins, maxs, contents = import_shared.CONTENTS_SOL
|
|
|
268
282
|
}
|
|
269
283
|
|
|
270
284
|
// src/game/factories.ts
|
|
285
|
+
var import_game = require("@quake2ts/game");
|
|
271
286
|
var createPlayerStateFactory = (overrides) => ({
|
|
272
287
|
pm_type: 0,
|
|
273
288
|
pm_time: 0,
|
|
@@ -350,10 +365,77 @@ var createGameStateSnapshotFactory = (overrides) => ({
|
|
|
350
365
|
pm_type: 0,
|
|
351
366
|
...overrides
|
|
352
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
|
+
}
|
|
353
435
|
|
|
354
436
|
// src/game/helpers.ts
|
|
355
437
|
var import_vitest2 = require("vitest");
|
|
356
|
-
var
|
|
438
|
+
var import_game2 = require("@quake2ts/game");
|
|
357
439
|
var import_shared2 = require("@quake2ts/shared");
|
|
358
440
|
var import_shared3 = require("@quake2ts/shared");
|
|
359
441
|
var createMockEngine = () => ({
|
|
@@ -363,8 +445,8 @@ var createMockEngine = () => ({
|
|
|
363
445
|
centerprintf: import_vitest2.vi.fn()
|
|
364
446
|
});
|
|
365
447
|
var createMockGame = (seed = 12345) => {
|
|
366
|
-
const spawnRegistry = new
|
|
367
|
-
const hooks = new
|
|
448
|
+
const spawnRegistry = new import_game2.SpawnRegistry();
|
|
449
|
+
const hooks = new import_game2.ScriptHookRegistry();
|
|
368
450
|
const game = {
|
|
369
451
|
random: (0, import_shared2.createRandomGenerator)({ seed }),
|
|
370
452
|
registerEntitySpawn: import_vitest2.vi.fn((classname, spawnFunc) => {
|
|
@@ -406,7 +488,7 @@ function createTestContext(options) {
|
|
|
406
488
|
const hooks = game.hooks;
|
|
407
489
|
const entities = {
|
|
408
490
|
spawn: import_vitest2.vi.fn(() => {
|
|
409
|
-
const ent = new
|
|
491
|
+
const ent = new import_game2.Entity(entityList.length + 1);
|
|
410
492
|
entityList.push(ent);
|
|
411
493
|
hooks.onEntitySpawn(ent);
|
|
412
494
|
return ent;
|
|
@@ -485,7 +567,7 @@ function createTestContext(options) {
|
|
|
485
567
|
deathmatch: false,
|
|
486
568
|
coop: false,
|
|
487
569
|
activeCount: entityList.length,
|
|
488
|
-
world: entityList.find((e) => e.classname === "worldspawn") || new
|
|
570
|
+
world: entityList.find((e) => e.classname === "worldspawn") || new import_game2.Entity(0)
|
|
489
571
|
// ... other EntitySystem properties would go here
|
|
490
572
|
};
|
|
491
573
|
return {
|
|
@@ -502,13 +584,113 @@ function createTestContext(options) {
|
|
|
502
584
|
precacheImage: import_vitest2.vi.fn()
|
|
503
585
|
};
|
|
504
586
|
}
|
|
505
|
-
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() {
|
|
506
598
|
return createTestContext();
|
|
507
599
|
}
|
|
508
600
|
function createEntity() {
|
|
509
|
-
return new
|
|
601
|
+
return new import_game2.Entity(1);
|
|
510
602
|
}
|
|
511
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
|
+
};
|
|
643
|
+
}
|
|
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
|
+
|
|
512
694
|
// src/game/mocks.ts
|
|
513
695
|
function createMockGameState(overrides) {
|
|
514
696
|
return {
|
|
@@ -521,7 +703,7 @@ function createMockGameState(overrides) {
|
|
|
521
703
|
}
|
|
522
704
|
|
|
523
705
|
// src/server/mocks/transport.ts
|
|
524
|
-
var
|
|
706
|
+
var import_vitest5 = require("vitest");
|
|
525
707
|
var MockTransport = class {
|
|
526
708
|
constructor() {
|
|
527
709
|
this.address = "127.0.0.1";
|
|
@@ -529,11 +711,11 @@ var MockTransport = class {
|
|
|
529
711
|
this.sentMessages = [];
|
|
530
712
|
this.receivedMessages = [];
|
|
531
713
|
this.listening = false;
|
|
532
|
-
this.listenSpy =
|
|
714
|
+
this.listenSpy = import_vitest5.vi.fn().mockImplementation(async (port) => {
|
|
533
715
|
this.port = port;
|
|
534
716
|
this.listening = true;
|
|
535
717
|
});
|
|
536
|
-
this.closeSpy =
|
|
718
|
+
this.closeSpy = import_vitest5.vi.fn().mockImplementation(() => {
|
|
537
719
|
this.listening = false;
|
|
538
720
|
});
|
|
539
721
|
}
|
|
@@ -589,11 +771,11 @@ var MockTransport = class {
|
|
|
589
771
|
};
|
|
590
772
|
function createMockUDPSocket(overrides) {
|
|
591
773
|
const socket = {
|
|
592
|
-
send:
|
|
593
|
-
on:
|
|
594
|
-
close:
|
|
595
|
-
bind:
|
|
596
|
-
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 }),
|
|
597
779
|
...overrides
|
|
598
780
|
};
|
|
599
781
|
return socket;
|
|
@@ -610,13 +792,13 @@ function createMockTransport(address = "127.0.0.1", port = 27910, overrides) {
|
|
|
610
792
|
}
|
|
611
793
|
function createMockNetDriver(overrides) {
|
|
612
794
|
return {
|
|
613
|
-
connect:
|
|
614
|
-
disconnect:
|
|
615
|
-
send:
|
|
616
|
-
onMessage:
|
|
617
|
-
onClose:
|
|
618
|
-
onError:
|
|
619
|
-
isConnected:
|
|
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),
|
|
620
802
|
...overrides
|
|
621
803
|
};
|
|
622
804
|
}
|
|
@@ -624,7 +806,7 @@ function createMockNetDriver(overrides) {
|
|
|
624
806
|
// src/server/mocks/state.ts
|
|
625
807
|
var import_server = require("@quake2ts/server");
|
|
626
808
|
var import_shared4 = require("@quake2ts/shared");
|
|
627
|
-
var
|
|
809
|
+
var import_vitest6 = require("vitest");
|
|
628
810
|
function createMockServerState(overrides) {
|
|
629
811
|
return {
|
|
630
812
|
state: import_server.ServerState.Game,
|
|
@@ -666,13 +848,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
666
848
|
incomingSequence: 0,
|
|
667
849
|
outgoingSequence: 0,
|
|
668
850
|
lastReceived: 0,
|
|
669
|
-
process:
|
|
670
|
-
transmit:
|
|
671
|
-
writeReliableByte:
|
|
672
|
-
writeReliableShort:
|
|
673
|
-
writeReliableLong:
|
|
674
|
-
writeReliableString:
|
|
675
|
-
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()
|
|
676
858
|
},
|
|
677
859
|
// Cast as any because NetChan might be complex to fully mock here
|
|
678
860
|
userInfo: "",
|
|
@@ -714,13 +896,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
714
896
|
}
|
|
715
897
|
function createMockServer(overrides) {
|
|
716
898
|
return {
|
|
717
|
-
start:
|
|
718
|
-
stop:
|
|
719
|
-
multicast:
|
|
720
|
-
unicast:
|
|
721
|
-
configstring:
|
|
722
|
-
kickPlayer:
|
|
723
|
-
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),
|
|
724
906
|
...overrides
|
|
725
907
|
};
|
|
726
908
|
}
|
|
@@ -782,19 +964,19 @@ async function simulateHandshake(client, server) {
|
|
|
782
964
|
}
|
|
783
965
|
|
|
784
966
|
// src/server/mocks/commands.ts
|
|
785
|
-
var
|
|
967
|
+
var import_vitest7 = require("vitest");
|
|
786
968
|
function createMockServerConsole(overrides) {
|
|
787
969
|
const outputBuffer = [];
|
|
788
970
|
const commandBuffer = [];
|
|
789
971
|
return {
|
|
790
|
-
exec:
|
|
972
|
+
exec: import_vitest7.vi.fn((cmd) => {
|
|
791
973
|
commandBuffer.push(cmd);
|
|
792
974
|
return `Executed: ${cmd}`;
|
|
793
975
|
}),
|
|
794
|
-
print:
|
|
976
|
+
print: import_vitest7.vi.fn((text) => {
|
|
795
977
|
outputBuffer.push(text);
|
|
796
978
|
}),
|
|
797
|
-
broadcast:
|
|
979
|
+
broadcast: import_vitest7.vi.fn((text) => {
|
|
798
980
|
outputBuffer.push(`Broadcast: ${text}`);
|
|
799
981
|
}),
|
|
800
982
|
commandBuffer,
|
|
@@ -807,13 +989,13 @@ function createMockRConClient(password = "") {
|
|
|
807
989
|
connected: false,
|
|
808
990
|
lastCommand: "",
|
|
809
991
|
lastResponse: "",
|
|
810
|
-
connect:
|
|
992
|
+
connect: import_vitest7.vi.fn(async (address, port, pwd) => {
|
|
811
993
|
return pwd === password;
|
|
812
994
|
}),
|
|
813
|
-
sendCommand:
|
|
995
|
+
sendCommand: import_vitest7.vi.fn(async (cmd) => {
|
|
814
996
|
return `RCON Response for: ${cmd}`;
|
|
815
997
|
}),
|
|
816
|
-
disconnect:
|
|
998
|
+
disconnect: import_vitest7.vi.fn()
|
|
817
999
|
};
|
|
818
1000
|
}
|
|
819
1001
|
function simulateServerCommand(server, command) {
|
|
@@ -1456,10 +1638,10 @@ function createMockImage(width, height, src) {
|
|
|
1456
1638
|
}
|
|
1457
1639
|
|
|
1458
1640
|
// src/engine/mocks/webgpu.ts
|
|
1459
|
-
var
|
|
1641
|
+
var import_vitest8 = require("vitest");
|
|
1460
1642
|
function createMockGPUAdapter() {
|
|
1461
1643
|
return {
|
|
1462
|
-
requestDevice:
|
|
1644
|
+
requestDevice: import_vitest8.vi.fn().mockResolvedValue(createMockGPUDevice()),
|
|
1463
1645
|
features: /* @__PURE__ */ new Set(),
|
|
1464
1646
|
limits: {}
|
|
1465
1647
|
};
|
|
@@ -1469,40 +1651,40 @@ function createMockGPUDevice() {
|
|
|
1469
1651
|
features: /* @__PURE__ */ new Set(),
|
|
1470
1652
|
limits: {},
|
|
1471
1653
|
queue: {
|
|
1472
|
-
submit:
|
|
1473
|
-
writeBuffer:
|
|
1474
|
-
writeTexture:
|
|
1475
|
-
copyExternalImageToTexture:
|
|
1476
|
-
},
|
|
1477
|
-
createCommandEncoder:
|
|
1478
|
-
beginRenderPass:
|
|
1479
|
-
setPipeline:
|
|
1480
|
-
draw:
|
|
1481
|
-
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()
|
|
1482
1664
|
}),
|
|
1483
|
-
finish:
|
|
1665
|
+
finish: import_vitest8.vi.fn()
|
|
1484
1666
|
}),
|
|
1485
|
-
createRenderPipeline:
|
|
1486
|
-
createShaderModule:
|
|
1487
|
-
createBindGroup:
|
|
1488
|
-
createBindGroupLayout:
|
|
1489
|
-
createBuffer:
|
|
1490
|
-
createTexture:
|
|
1491
|
-
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()
|
|
1492
1674
|
};
|
|
1493
1675
|
}
|
|
1494
1676
|
function createMockGPUCanvasContext() {
|
|
1495
1677
|
return {
|
|
1496
|
-
configure:
|
|
1497
|
-
unconfigure:
|
|
1498
|
-
getCurrentTexture:
|
|
1678
|
+
configure: import_vitest8.vi.fn(),
|
|
1679
|
+
unconfigure: import_vitest8.vi.fn(),
|
|
1680
|
+
getCurrentTexture: import_vitest8.vi.fn()
|
|
1499
1681
|
};
|
|
1500
1682
|
}
|
|
1501
1683
|
function setupWebGPUMocks() {
|
|
1502
1684
|
const mockAdapter = createMockGPUAdapter();
|
|
1503
1685
|
const mockGpu = {
|
|
1504
|
-
requestAdapter:
|
|
1505
|
-
getPreferredCanvasFormat:
|
|
1686
|
+
requestAdapter: import_vitest8.vi.fn().mockResolvedValue(mockAdapter),
|
|
1687
|
+
getPreferredCanvasFormat: import_vitest8.vi.fn().mockReturnValue("bgra8unorm")
|
|
1506
1688
|
};
|
|
1507
1689
|
Object.defineProperty(global.navigator, "gpu", {
|
|
1508
1690
|
value: mockGpu,
|
|
@@ -2119,16 +2301,21 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2119
2301
|
compareScreenshots,
|
|
2120
2302
|
createBinaryStreamMock,
|
|
2121
2303
|
createBinaryWriterMock,
|
|
2304
|
+
createCombatTestContext,
|
|
2122
2305
|
createControlledTimer,
|
|
2123
2306
|
createCustomNetworkCondition,
|
|
2124
2307
|
createDeltaSnapshot,
|
|
2125
2308
|
createEntity,
|
|
2309
|
+
createEntityFactory,
|
|
2126
2310
|
createEntityStateFactory,
|
|
2127
2311
|
createGameStateSnapshotFactory,
|
|
2312
|
+
createItemEntityFactory,
|
|
2313
|
+
createMockAI,
|
|
2128
2314
|
createMockAudioContext,
|
|
2129
2315
|
createMockCanvas,
|
|
2130
2316
|
createMockCanvasContext2D,
|
|
2131
2317
|
createMockConnection,
|
|
2318
|
+
createMockDamageInfo,
|
|
2132
2319
|
createMockEngine,
|
|
2133
2320
|
createMockGPUAdapter,
|
|
2134
2321
|
createMockGPUCanvasContext,
|
|
@@ -2140,6 +2327,8 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2140
2327
|
createMockImageData,
|
|
2141
2328
|
createMockIndexedDB,
|
|
2142
2329
|
createMockLocalStorage,
|
|
2330
|
+
createMockMonsterAI,
|
|
2331
|
+
createMockMonsterMove,
|
|
2143
2332
|
createMockNetDriver,
|
|
2144
2333
|
createMockNetworkAddress,
|
|
2145
2334
|
createMockPerformance,
|
|
@@ -2154,15 +2343,21 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2154
2343
|
createMockTransport,
|
|
2155
2344
|
createMockUDPSocket,
|
|
2156
2345
|
createMockUserInfo,
|
|
2346
|
+
createMockWeapon,
|
|
2157
2347
|
createMockWebGL2Context,
|
|
2348
|
+
createMonsterEntityFactory,
|
|
2158
2349
|
createMultiplayerTestScenario,
|
|
2159
2350
|
createNetChanMock,
|
|
2351
|
+
createPhysicsTestContext,
|
|
2352
|
+
createPlayerEntityFactory,
|
|
2160
2353
|
createPlayerStateFactory,
|
|
2161
2354
|
createPlaywrightTestClient,
|
|
2355
|
+
createProjectileEntityFactory,
|
|
2162
2356
|
createServerSnapshot,
|
|
2163
|
-
|
|
2357
|
+
createSpawnTestContext,
|
|
2164
2358
|
createStorageTestScenario,
|
|
2165
2359
|
createTestContext,
|
|
2360
|
+
createTriggerEntityFactory,
|
|
2166
2361
|
createVisualTestScenario,
|
|
2167
2362
|
intersects,
|
|
2168
2363
|
ladderTrace,
|
|
@@ -2173,6 +2368,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2173
2368
|
makeLeafModel,
|
|
2174
2369
|
makeNode,
|
|
2175
2370
|
makePlane,
|
|
2371
|
+
mockMonsterAttacks,
|
|
2176
2372
|
serializeUserInfo,
|
|
2177
2373
|
setupBrowserEnvironment,
|
|
2178
2374
|
setupMockAudioContext,
|