quake2ts 0.0.569 → 0.0.571
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/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/demo/optimalClipFinder.d.ts +35 -0
- package/packages/engine/dist/types/demo/optimalClipFinder.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/types.d.ts +9 -0
- package/packages/engine/dist/types/demo/types.d.ts.map +1 -1
- package/packages/test-utils/dist/index.cjs +253 -62
- package/packages/test-utils/dist/index.cjs.map +1 -1
- package/packages/test-utils/dist/index.d.cts +37 -2
- package/packages/test-utils/dist/index.d.ts +37 -2
- package/packages/test-utils/dist/index.js +256 -62
- package/packages/test-utils/dist/index.js.map +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { VisibilityTimeline } from '../assets/visibilityAnalyzer.js';
|
|
2
|
+
import { Offset } from './types.js';
|
|
3
|
+
import { DemoAnalyzer } from './analyzer.js';
|
|
4
|
+
export interface OptimalWindow {
|
|
5
|
+
start: Offset;
|
|
6
|
+
end: Offset;
|
|
7
|
+
resourceCount: number;
|
|
8
|
+
resources: Set<string>;
|
|
9
|
+
score: number;
|
|
10
|
+
}
|
|
11
|
+
export type ScoringMode = 'count' | 'size' | 'locality' | 'hybrid' | 'action';
|
|
12
|
+
export interface OptimizationCriteria {
|
|
13
|
+
durationRange?: [number, number];
|
|
14
|
+
maxResources?: number;
|
|
15
|
+
scoringMode?: ScoringMode;
|
|
16
|
+
resourceSizes?: Map<string, number>;
|
|
17
|
+
topN?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface OptimizationOptions extends OptimizationCriteria {
|
|
20
|
+
analyzer?: DemoAnalyzer;
|
|
21
|
+
demoBuffer?: ArrayBuffer;
|
|
22
|
+
searchStart?: number;
|
|
23
|
+
searchEnd?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class OptimalClipFinder {
|
|
26
|
+
findOptimalWindows(timeline: VisibilityTimeline, criteria: OptimizationOptions): Promise<OptimalWindow[]>;
|
|
27
|
+
findMinimalWindow(timeline: VisibilityTimeline, duration: number, options?: OptimizationOptions): OptimalWindow;
|
|
28
|
+
findMinimalWindowInRange(timeline: VisibilityTimeline, duration: number, searchStart?: Offset, searchEnd?: Offset): OptimalWindow;
|
|
29
|
+
private estimateTime;
|
|
30
|
+
private scanTimeline;
|
|
31
|
+
private calculateActionScore;
|
|
32
|
+
private addResources;
|
|
33
|
+
private removeResources;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=optimalClipFinder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimalClipFinder.d.ts","sourceRoot":"","sources":["../../../src/demo/optimalClipFinder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,oBAAoB;IACjC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAEb,kBAAkB,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,mBAAmB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IAyDpB,iBAAiB,CACpB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,mBAAwB,GAClC,aAAa;IAST,wBAAwB,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACnB,aAAa;IAUhB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IA6FpB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;CAY1B"}
|
|
@@ -24,4 +24,13 @@ export interface RecorderSnapshot {
|
|
|
24
24
|
readonly fov: number;
|
|
25
25
|
readonly blend: [number, number, number, number];
|
|
26
26
|
}
|
|
27
|
+
export type FrameOffset = {
|
|
28
|
+
type: 'frame';
|
|
29
|
+
frame: number;
|
|
30
|
+
};
|
|
31
|
+
export type TimeOffset = {
|
|
32
|
+
type: 'time';
|
|
33
|
+
seconds: number;
|
|
34
|
+
};
|
|
35
|
+
export type Offset = FrameOffset | TimeOffset;
|
|
27
36
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/demo/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/demo/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC"}
|
|
@@ -51,6 +51,8 @@ __export(index_exports, {
|
|
|
51
51
|
createGameStateSnapshotFactory: () => createGameStateSnapshotFactory,
|
|
52
52
|
createItemEntityFactory: () => createItemEntityFactory,
|
|
53
53
|
createMockAI: () => createMockAI,
|
|
54
|
+
createMockAmmoItem: () => createMockAmmoItem,
|
|
55
|
+
createMockArmorItem: () => createMockArmorItem,
|
|
54
56
|
createMockAudioContext: () => createMockAudioContext,
|
|
55
57
|
createMockCanvas: () => createMockCanvas,
|
|
56
58
|
createMockCanvasContext2D: () => createMockCanvasContext2D,
|
|
@@ -61,17 +63,22 @@ __export(index_exports, {
|
|
|
61
63
|
createMockGPUCanvasContext: () => createMockGPUCanvasContext,
|
|
62
64
|
createMockGPUDevice: () => createMockGPUDevice,
|
|
63
65
|
createMockGame: () => createMockGame,
|
|
66
|
+
createMockGameExports: () => createMockGameExports,
|
|
64
67
|
createMockGameState: () => createMockGameState,
|
|
65
68
|
createMockHandshake: () => createMockHandshake,
|
|
69
|
+
createMockHealthItem: () => createMockHealthItem,
|
|
66
70
|
createMockImage: () => createMockImage,
|
|
67
71
|
createMockImageData: () => createMockImageData,
|
|
68
72
|
createMockIndexedDB: () => createMockIndexedDB,
|
|
73
|
+
createMockInventory: () => createMockInventory,
|
|
74
|
+
createMockItem: () => createMockItem,
|
|
69
75
|
createMockLocalStorage: () => createMockLocalStorage,
|
|
70
76
|
createMockMonsterAI: () => createMockMonsterAI,
|
|
71
77
|
createMockMonsterMove: () => createMockMonsterMove,
|
|
72
78
|
createMockNetDriver: () => createMockNetDriver,
|
|
73
79
|
createMockNetworkAddress: () => createMockNetworkAddress,
|
|
74
80
|
createMockPerformance: () => createMockPerformance,
|
|
81
|
+
createMockPowerupItem: () => createMockPowerupItem,
|
|
75
82
|
createMockRAF: () => createMockRAF,
|
|
76
83
|
createMockRConClient: () => createMockRConClient,
|
|
77
84
|
createMockServer: () => createMockServer,
|
|
@@ -84,6 +91,7 @@ __export(index_exports, {
|
|
|
84
91
|
createMockUDPSocket: () => createMockUDPSocket,
|
|
85
92
|
createMockUserInfo: () => createMockUserInfo,
|
|
86
93
|
createMockWeapon: () => createMockWeapon,
|
|
94
|
+
createMockWeaponItem: () => createMockWeaponItem,
|
|
87
95
|
createMockWebGL2Context: () => createMockWebGL2Context,
|
|
88
96
|
createMonsterEntityFactory: () => createMonsterEntityFactory,
|
|
89
97
|
createMultiplayerTestScenario: () => createMultiplayerTestScenario,
|
|
@@ -691,7 +699,94 @@ var mockMonsterAttacks = {
|
|
|
691
699
|
fireBFG: import_vitest4.vi.fn()
|
|
692
700
|
};
|
|
693
701
|
|
|
702
|
+
// src/game/mocks/items.ts
|
|
703
|
+
var import_game4 = require("@quake2ts/game");
|
|
704
|
+
var import_game5 = require("@quake2ts/game");
|
|
705
|
+
function createMockInventory(overrides = {}) {
|
|
706
|
+
const defaultInventory = (0, import_game4.createPlayerInventory)();
|
|
707
|
+
const inventory = {
|
|
708
|
+
...defaultInventory,
|
|
709
|
+
...overrides
|
|
710
|
+
};
|
|
711
|
+
return inventory;
|
|
712
|
+
}
|
|
713
|
+
function createMockItem(id, overrides = {}) {
|
|
714
|
+
let base;
|
|
715
|
+
base = import_game5.WEAPON_ITEMS[id] || import_game5.HEALTH_ITEMS[id] || import_game5.ARMOR_ITEMS[id] || import_game5.POWERUP_ITEMS[id] || import_game5.POWER_ARMOR_ITEMS[id] || import_game5.KEY_ITEMS[id] || import_game5.FLAG_ITEMS[id];
|
|
716
|
+
if (!base) {
|
|
717
|
+
base = {
|
|
718
|
+
id,
|
|
719
|
+
name: `Mock Item ${id}`
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
return {
|
|
723
|
+
...base,
|
|
724
|
+
...overrides
|
|
725
|
+
};
|
|
726
|
+
}
|
|
727
|
+
function createMockWeaponItem(weaponId, overrides = {}) {
|
|
728
|
+
const found = Object.values(import_game5.WEAPON_ITEMS).find((w) => w.weaponId === weaponId);
|
|
729
|
+
const base = found ? { ...found } : {
|
|
730
|
+
type: "weapon",
|
|
731
|
+
id: `weapon_${weaponId}`,
|
|
732
|
+
name: `Mock Weapon ${weaponId}`,
|
|
733
|
+
weaponId,
|
|
734
|
+
ammoType: null,
|
|
735
|
+
initialAmmo: 0,
|
|
736
|
+
pickupAmmo: 0,
|
|
737
|
+
fireRate: 1
|
|
738
|
+
};
|
|
739
|
+
return { ...base, ...overrides };
|
|
740
|
+
}
|
|
741
|
+
function createMockHealthItem(amount, overrides = {}) {
|
|
742
|
+
return {
|
|
743
|
+
type: "health",
|
|
744
|
+
id: "item_health_mock",
|
|
745
|
+
name: "Mock Health",
|
|
746
|
+
amount,
|
|
747
|
+
max: 100,
|
|
748
|
+
...overrides
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
function createMockArmorItem(amount, overrides = {}) {
|
|
752
|
+
return {
|
|
753
|
+
type: "armor",
|
|
754
|
+
id: "item_armor_mock",
|
|
755
|
+
name: "Mock Armor",
|
|
756
|
+
amount,
|
|
757
|
+
...overrides
|
|
758
|
+
};
|
|
759
|
+
}
|
|
760
|
+
function createMockAmmoItem(ammoItemId, overrides = {}) {
|
|
761
|
+
const def = (0, import_game5.getAmmoItemDefinition)(ammoItemId);
|
|
762
|
+
if (!def) {
|
|
763
|
+
throw new Error(`Unknown ammo item id: ${ammoItemId}`);
|
|
764
|
+
}
|
|
765
|
+
const base = {
|
|
766
|
+
id: def.id,
|
|
767
|
+
name: `Mock Ammo ${def.id}`
|
|
768
|
+
};
|
|
769
|
+
return {
|
|
770
|
+
...base,
|
|
771
|
+
...overrides
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
function createMockPowerupItem(id, duration, overrides = {}) {
|
|
775
|
+
const found = import_game5.POWERUP_ITEMS[id];
|
|
776
|
+
const base = found ? { ...found } : {
|
|
777
|
+
type: "powerup",
|
|
778
|
+
id,
|
|
779
|
+
name: `Mock Powerup ${id}`,
|
|
780
|
+
timer: duration
|
|
781
|
+
};
|
|
782
|
+
if (duration !== void 0 && !found) {
|
|
783
|
+
base.timer = duration;
|
|
784
|
+
}
|
|
785
|
+
return { ...base, ...overrides };
|
|
786
|
+
}
|
|
787
|
+
|
|
694
788
|
// src/game/mocks.ts
|
|
789
|
+
var import_vitest5 = require("vitest");
|
|
695
790
|
function createMockGameState(overrides) {
|
|
696
791
|
return {
|
|
697
792
|
levelName: "test_level",
|
|
@@ -701,9 +796,97 @@ function createMockGameState(overrides) {
|
|
|
701
796
|
...overrides
|
|
702
797
|
};
|
|
703
798
|
}
|
|
799
|
+
function createMockGameExports(overrides) {
|
|
800
|
+
return {
|
|
801
|
+
init: import_vitest5.vi.fn(),
|
|
802
|
+
shutdown: import_vitest5.vi.fn(),
|
|
803
|
+
spawnWorld: import_vitest5.vi.fn(),
|
|
804
|
+
frame: import_vitest5.vi.fn().mockReturnValue({ state: {} }),
|
|
805
|
+
clientConnect: import_vitest5.vi.fn().mockReturnValue(true),
|
|
806
|
+
clientBegin: import_vitest5.vi.fn().mockReturnValue({ index: 1, origin: { x: 0, y: 0, z: 0 } }),
|
|
807
|
+
clientDisconnect: import_vitest5.vi.fn(),
|
|
808
|
+
clientThink: import_vitest5.vi.fn(),
|
|
809
|
+
// clientUserInfoChanged is not in GameExports
|
|
810
|
+
// clientCommand is not in GameExports (it's serverCommand?) No, clientCommand might be missing from interface but present in impl or legacy.
|
|
811
|
+
// Checking GameExports interface in src/index.ts:
|
|
812
|
+
/*
|
|
813
|
+
clientConnect(ent: Entity | null, userInfo: string): string | true;
|
|
814
|
+
clientBegin(client: PlayerClient): Entity;
|
|
815
|
+
clientDisconnect(ent: Entity): void;
|
|
816
|
+
clientThink(ent: Entity, cmd: UserCommand): void;
|
|
817
|
+
respawn(ent: Entity): void;
|
|
818
|
+
...
|
|
819
|
+
configstring(index: number, value: string): void;
|
|
820
|
+
serverCommand(cmd: string): void;
|
|
821
|
+
*/
|
|
822
|
+
respawn: import_vitest5.vi.fn(),
|
|
823
|
+
entities: {
|
|
824
|
+
getByIndex: import_vitest5.vi.fn(),
|
|
825
|
+
forEachEntity: import_vitest5.vi.fn(),
|
|
826
|
+
findByRadius: import_vitest5.vi.fn(),
|
|
827
|
+
find: import_vitest5.vi.fn(),
|
|
828
|
+
checkAnyCollision: import_vitest5.vi.fn(),
|
|
829
|
+
trace: import_vitest5.vi.fn(),
|
|
830
|
+
pointcontents: import_vitest5.vi.fn(),
|
|
831
|
+
link: import_vitest5.vi.fn(),
|
|
832
|
+
// linkentity mapped to link in EntitySystem? No, linkentity in imports, link/unlink in System.
|
|
833
|
+
unlink: import_vitest5.vi.fn(),
|
|
834
|
+
spawn: import_vitest5.vi.fn(),
|
|
835
|
+
free: import_vitest5.vi.fn(),
|
|
836
|
+
activeCount: 0,
|
|
837
|
+
world: { classname: "worldspawn" }
|
|
838
|
+
},
|
|
839
|
+
multicast: import_vitest5.vi.fn(),
|
|
840
|
+
unicast: import_vitest5.vi.fn(),
|
|
841
|
+
configstring: import_vitest5.vi.fn(),
|
|
842
|
+
serverCommand: import_vitest5.vi.fn(),
|
|
843
|
+
sound: import_vitest5.vi.fn(),
|
|
844
|
+
soundIndex: import_vitest5.vi.fn(),
|
|
845
|
+
centerprintf: import_vitest5.vi.fn(),
|
|
846
|
+
trace: import_vitest5.vi.fn(),
|
|
847
|
+
time: 0,
|
|
848
|
+
deathmatch: false,
|
|
849
|
+
skill: 1,
|
|
850
|
+
rogue: false,
|
|
851
|
+
xatrix: false,
|
|
852
|
+
coop: false,
|
|
853
|
+
friendlyFire: false,
|
|
854
|
+
random: {
|
|
855
|
+
next: import_vitest5.vi.fn(),
|
|
856
|
+
nextFloat: import_vitest5.vi.fn(),
|
|
857
|
+
range: import_vitest5.vi.fn(),
|
|
858
|
+
crandom: import_vitest5.vi.fn(),
|
|
859
|
+
getState: import_vitest5.vi.fn(),
|
|
860
|
+
setState: import_vitest5.vi.fn()
|
|
861
|
+
},
|
|
862
|
+
createSave: import_vitest5.vi.fn(),
|
|
863
|
+
loadSave: import_vitest5.vi.fn(),
|
|
864
|
+
serialize: import_vitest5.vi.fn(),
|
|
865
|
+
loadState: import_vitest5.vi.fn(),
|
|
866
|
+
setGodMode: import_vitest5.vi.fn(),
|
|
867
|
+
setNoclip: import_vitest5.vi.fn(),
|
|
868
|
+
setNotarget: import_vitest5.vi.fn(),
|
|
869
|
+
giveItem: import_vitest5.vi.fn(),
|
|
870
|
+
damage: import_vitest5.vi.fn(),
|
|
871
|
+
teleport: import_vitest5.vi.fn(),
|
|
872
|
+
registerHooks: import_vitest5.vi.fn(),
|
|
873
|
+
hooks: {
|
|
874
|
+
onMapLoad: import_vitest5.vi.fn(),
|
|
875
|
+
onMapUnload: import_vitest5.vi.fn(),
|
|
876
|
+
onPlayerSpawn: import_vitest5.vi.fn(),
|
|
877
|
+
onPlayerDeath: import_vitest5.vi.fn(),
|
|
878
|
+
register: import_vitest5.vi.fn()
|
|
879
|
+
},
|
|
880
|
+
setSpectator: import_vitest5.vi.fn(),
|
|
881
|
+
registerEntitySpawn: import_vitest5.vi.fn(),
|
|
882
|
+
unregisterEntitySpawn: import_vitest5.vi.fn(),
|
|
883
|
+
getCustomEntities: import_vitest5.vi.fn(),
|
|
884
|
+
...overrides
|
|
885
|
+
};
|
|
886
|
+
}
|
|
704
887
|
|
|
705
888
|
// src/server/mocks/transport.ts
|
|
706
|
-
var
|
|
889
|
+
var import_vitest6 = require("vitest");
|
|
707
890
|
var MockTransport = class {
|
|
708
891
|
constructor() {
|
|
709
892
|
this.address = "127.0.0.1";
|
|
@@ -711,11 +894,11 @@ var MockTransport = class {
|
|
|
711
894
|
this.sentMessages = [];
|
|
712
895
|
this.receivedMessages = [];
|
|
713
896
|
this.listening = false;
|
|
714
|
-
this.listenSpy =
|
|
897
|
+
this.listenSpy = import_vitest6.vi.fn().mockImplementation(async (port) => {
|
|
715
898
|
this.port = port;
|
|
716
899
|
this.listening = true;
|
|
717
900
|
});
|
|
718
|
-
this.closeSpy =
|
|
901
|
+
this.closeSpy = import_vitest6.vi.fn().mockImplementation(() => {
|
|
719
902
|
this.listening = false;
|
|
720
903
|
});
|
|
721
904
|
}
|
|
@@ -771,11 +954,11 @@ var MockTransport = class {
|
|
|
771
954
|
};
|
|
772
955
|
function createMockUDPSocket(overrides) {
|
|
773
956
|
const socket = {
|
|
774
|
-
send:
|
|
775
|
-
on:
|
|
776
|
-
close:
|
|
777
|
-
bind:
|
|
778
|
-
address:
|
|
957
|
+
send: import_vitest6.vi.fn(),
|
|
958
|
+
on: import_vitest6.vi.fn(),
|
|
959
|
+
close: import_vitest6.vi.fn(),
|
|
960
|
+
bind: import_vitest6.vi.fn(),
|
|
961
|
+
address: import_vitest6.vi.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
|
|
779
962
|
...overrides
|
|
780
963
|
};
|
|
781
964
|
return socket;
|
|
@@ -792,13 +975,13 @@ function createMockTransport(address = "127.0.0.1", port = 27910, overrides) {
|
|
|
792
975
|
}
|
|
793
976
|
function createMockNetDriver(overrides) {
|
|
794
977
|
return {
|
|
795
|
-
connect:
|
|
796
|
-
disconnect:
|
|
797
|
-
send:
|
|
798
|
-
onMessage:
|
|
799
|
-
onClose:
|
|
800
|
-
onError:
|
|
801
|
-
isConnected:
|
|
978
|
+
connect: import_vitest6.vi.fn().mockResolvedValue(void 0),
|
|
979
|
+
disconnect: import_vitest6.vi.fn(),
|
|
980
|
+
send: import_vitest6.vi.fn(),
|
|
981
|
+
onMessage: import_vitest6.vi.fn(),
|
|
982
|
+
onClose: import_vitest6.vi.fn(),
|
|
983
|
+
onError: import_vitest6.vi.fn(),
|
|
984
|
+
isConnected: import_vitest6.vi.fn().mockReturnValue(true),
|
|
802
985
|
...overrides
|
|
803
986
|
};
|
|
804
987
|
}
|
|
@@ -806,7 +989,7 @@ function createMockNetDriver(overrides) {
|
|
|
806
989
|
// src/server/mocks/state.ts
|
|
807
990
|
var import_server = require("@quake2ts/server");
|
|
808
991
|
var import_shared4 = require("@quake2ts/shared");
|
|
809
|
-
var
|
|
992
|
+
var import_vitest7 = require("vitest");
|
|
810
993
|
function createMockServerState(overrides) {
|
|
811
994
|
return {
|
|
812
995
|
state: import_server.ServerState.Game,
|
|
@@ -848,13 +1031,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
848
1031
|
incomingSequence: 0,
|
|
849
1032
|
outgoingSequence: 0,
|
|
850
1033
|
lastReceived: 0,
|
|
851
|
-
process:
|
|
852
|
-
transmit:
|
|
853
|
-
writeReliableByte:
|
|
854
|
-
writeReliableShort:
|
|
855
|
-
writeReliableLong:
|
|
856
|
-
writeReliableString:
|
|
857
|
-
writeReliableData:
|
|
1034
|
+
process: import_vitest7.vi.fn(),
|
|
1035
|
+
transmit: import_vitest7.vi.fn(),
|
|
1036
|
+
writeReliableByte: import_vitest7.vi.fn(),
|
|
1037
|
+
writeReliableShort: import_vitest7.vi.fn(),
|
|
1038
|
+
writeReliableLong: import_vitest7.vi.fn(),
|
|
1039
|
+
writeReliableString: import_vitest7.vi.fn(),
|
|
1040
|
+
writeReliableData: import_vitest7.vi.fn()
|
|
858
1041
|
},
|
|
859
1042
|
// Cast as any because NetChan might be complex to fully mock here
|
|
860
1043
|
userInfo: "",
|
|
@@ -896,13 +1079,13 @@ function createMockServerClient(clientNum, overrides) {
|
|
|
896
1079
|
}
|
|
897
1080
|
function createMockServer(overrides) {
|
|
898
1081
|
return {
|
|
899
|
-
start:
|
|
900
|
-
stop:
|
|
901
|
-
multicast:
|
|
902
|
-
unicast:
|
|
903
|
-
configstring:
|
|
904
|
-
kickPlayer:
|
|
905
|
-
changeMap:
|
|
1082
|
+
start: import_vitest7.vi.fn().mockResolvedValue(void 0),
|
|
1083
|
+
stop: import_vitest7.vi.fn(),
|
|
1084
|
+
multicast: import_vitest7.vi.fn(),
|
|
1085
|
+
unicast: import_vitest7.vi.fn(),
|
|
1086
|
+
configstring: import_vitest7.vi.fn(),
|
|
1087
|
+
kickPlayer: import_vitest7.vi.fn(),
|
|
1088
|
+
changeMap: import_vitest7.vi.fn().mockResolvedValue(void 0),
|
|
906
1089
|
...overrides
|
|
907
1090
|
};
|
|
908
1091
|
}
|
|
@@ -964,19 +1147,19 @@ async function simulateHandshake(client, server) {
|
|
|
964
1147
|
}
|
|
965
1148
|
|
|
966
1149
|
// src/server/mocks/commands.ts
|
|
967
|
-
var
|
|
1150
|
+
var import_vitest8 = require("vitest");
|
|
968
1151
|
function createMockServerConsole(overrides) {
|
|
969
1152
|
const outputBuffer = [];
|
|
970
1153
|
const commandBuffer = [];
|
|
971
1154
|
return {
|
|
972
|
-
exec:
|
|
1155
|
+
exec: import_vitest8.vi.fn((cmd) => {
|
|
973
1156
|
commandBuffer.push(cmd);
|
|
974
1157
|
return `Executed: ${cmd}`;
|
|
975
1158
|
}),
|
|
976
|
-
print:
|
|
1159
|
+
print: import_vitest8.vi.fn((text) => {
|
|
977
1160
|
outputBuffer.push(text);
|
|
978
1161
|
}),
|
|
979
|
-
broadcast:
|
|
1162
|
+
broadcast: import_vitest8.vi.fn((text) => {
|
|
980
1163
|
outputBuffer.push(`Broadcast: ${text}`);
|
|
981
1164
|
}),
|
|
982
1165
|
commandBuffer,
|
|
@@ -989,13 +1172,13 @@ function createMockRConClient(password = "") {
|
|
|
989
1172
|
connected: false,
|
|
990
1173
|
lastCommand: "",
|
|
991
1174
|
lastResponse: "",
|
|
992
|
-
connect:
|
|
1175
|
+
connect: import_vitest8.vi.fn(async (address, port, pwd) => {
|
|
993
1176
|
return pwd === password;
|
|
994
1177
|
}),
|
|
995
|
-
sendCommand:
|
|
1178
|
+
sendCommand: import_vitest8.vi.fn(async (cmd) => {
|
|
996
1179
|
return `RCON Response for: ${cmd}`;
|
|
997
1180
|
}),
|
|
998
|
-
disconnect:
|
|
1181
|
+
disconnect: import_vitest8.vi.fn()
|
|
999
1182
|
};
|
|
1000
1183
|
}
|
|
1001
1184
|
function simulateServerCommand(server, command) {
|
|
@@ -1638,10 +1821,10 @@ function createMockImage(width, height, src) {
|
|
|
1638
1821
|
}
|
|
1639
1822
|
|
|
1640
1823
|
// src/engine/mocks/webgpu.ts
|
|
1641
|
-
var
|
|
1824
|
+
var import_vitest9 = require("vitest");
|
|
1642
1825
|
function createMockGPUAdapter() {
|
|
1643
1826
|
return {
|
|
1644
|
-
requestDevice:
|
|
1827
|
+
requestDevice: import_vitest9.vi.fn().mockResolvedValue(createMockGPUDevice()),
|
|
1645
1828
|
features: /* @__PURE__ */ new Set(),
|
|
1646
1829
|
limits: {}
|
|
1647
1830
|
};
|
|
@@ -1651,40 +1834,40 @@ function createMockGPUDevice() {
|
|
|
1651
1834
|
features: /* @__PURE__ */ new Set(),
|
|
1652
1835
|
limits: {},
|
|
1653
1836
|
queue: {
|
|
1654
|
-
submit:
|
|
1655
|
-
writeBuffer:
|
|
1656
|
-
writeTexture:
|
|
1657
|
-
copyExternalImageToTexture:
|
|
1658
|
-
},
|
|
1659
|
-
createCommandEncoder:
|
|
1660
|
-
beginRenderPass:
|
|
1661
|
-
setPipeline:
|
|
1662
|
-
draw:
|
|
1663
|
-
end:
|
|
1837
|
+
submit: import_vitest9.vi.fn(),
|
|
1838
|
+
writeBuffer: import_vitest9.vi.fn(),
|
|
1839
|
+
writeTexture: import_vitest9.vi.fn(),
|
|
1840
|
+
copyExternalImageToTexture: import_vitest9.vi.fn()
|
|
1841
|
+
},
|
|
1842
|
+
createCommandEncoder: import_vitest9.vi.fn().mockReturnValue({
|
|
1843
|
+
beginRenderPass: import_vitest9.vi.fn().mockReturnValue({
|
|
1844
|
+
setPipeline: import_vitest9.vi.fn(),
|
|
1845
|
+
draw: import_vitest9.vi.fn(),
|
|
1846
|
+
end: import_vitest9.vi.fn()
|
|
1664
1847
|
}),
|
|
1665
|
-
finish:
|
|
1848
|
+
finish: import_vitest9.vi.fn()
|
|
1666
1849
|
}),
|
|
1667
|
-
createRenderPipeline:
|
|
1668
|
-
createShaderModule:
|
|
1669
|
-
createBindGroup:
|
|
1670
|
-
createBindGroupLayout:
|
|
1671
|
-
createBuffer:
|
|
1672
|
-
createTexture:
|
|
1673
|
-
createSampler:
|
|
1850
|
+
createRenderPipeline: import_vitest9.vi.fn(),
|
|
1851
|
+
createShaderModule: import_vitest9.vi.fn(),
|
|
1852
|
+
createBindGroup: import_vitest9.vi.fn(),
|
|
1853
|
+
createBindGroupLayout: import_vitest9.vi.fn(),
|
|
1854
|
+
createBuffer: import_vitest9.vi.fn(),
|
|
1855
|
+
createTexture: import_vitest9.vi.fn(),
|
|
1856
|
+
createSampler: import_vitest9.vi.fn()
|
|
1674
1857
|
};
|
|
1675
1858
|
}
|
|
1676
1859
|
function createMockGPUCanvasContext() {
|
|
1677
1860
|
return {
|
|
1678
|
-
configure:
|
|
1679
|
-
unconfigure:
|
|
1680
|
-
getCurrentTexture:
|
|
1861
|
+
configure: import_vitest9.vi.fn(),
|
|
1862
|
+
unconfigure: import_vitest9.vi.fn(),
|
|
1863
|
+
getCurrentTexture: import_vitest9.vi.fn()
|
|
1681
1864
|
};
|
|
1682
1865
|
}
|
|
1683
1866
|
function setupWebGPUMocks() {
|
|
1684
1867
|
const mockAdapter = createMockGPUAdapter();
|
|
1685
1868
|
const mockGpu = {
|
|
1686
|
-
requestAdapter:
|
|
1687
|
-
getPreferredCanvasFormat:
|
|
1869
|
+
requestAdapter: import_vitest9.vi.fn().mockResolvedValue(mockAdapter),
|
|
1870
|
+
getPreferredCanvasFormat: import_vitest9.vi.fn().mockReturnValue("bgra8unorm")
|
|
1688
1871
|
};
|
|
1689
1872
|
Object.defineProperty(global.navigator, "gpu", {
|
|
1690
1873
|
value: mockGpu,
|
|
@@ -2311,6 +2494,8 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2311
2494
|
createGameStateSnapshotFactory,
|
|
2312
2495
|
createItemEntityFactory,
|
|
2313
2496
|
createMockAI,
|
|
2497
|
+
createMockAmmoItem,
|
|
2498
|
+
createMockArmorItem,
|
|
2314
2499
|
createMockAudioContext,
|
|
2315
2500
|
createMockCanvas,
|
|
2316
2501
|
createMockCanvasContext2D,
|
|
@@ -2321,17 +2506,22 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2321
2506
|
createMockGPUCanvasContext,
|
|
2322
2507
|
createMockGPUDevice,
|
|
2323
2508
|
createMockGame,
|
|
2509
|
+
createMockGameExports,
|
|
2324
2510
|
createMockGameState,
|
|
2325
2511
|
createMockHandshake,
|
|
2512
|
+
createMockHealthItem,
|
|
2326
2513
|
createMockImage,
|
|
2327
2514
|
createMockImageData,
|
|
2328
2515
|
createMockIndexedDB,
|
|
2516
|
+
createMockInventory,
|
|
2517
|
+
createMockItem,
|
|
2329
2518
|
createMockLocalStorage,
|
|
2330
2519
|
createMockMonsterAI,
|
|
2331
2520
|
createMockMonsterMove,
|
|
2332
2521
|
createMockNetDriver,
|
|
2333
2522
|
createMockNetworkAddress,
|
|
2334
2523
|
createMockPerformance,
|
|
2524
|
+
createMockPowerupItem,
|
|
2335
2525
|
createMockRAF,
|
|
2336
2526
|
createMockRConClient,
|
|
2337
2527
|
createMockServer,
|
|
@@ -2344,6 +2534,7 @@ function createVisualTestScenario(page, sceneName) {
|
|
|
2344
2534
|
createMockUDPSocket,
|
|
2345
2535
|
createMockUserInfo,
|
|
2346
2536
|
createMockWeapon,
|
|
2537
|
+
createMockWeaponItem,
|
|
2347
2538
|
createMockWebGL2Context,
|
|
2348
2539
|
createMonsterEntityFactory,
|
|
2349
2540
|
createMultiplayerTestScenario,
|