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.
@@ -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 import_vitest5 = require("vitest");
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 = import_vitest5.vi.fn().mockImplementation(async (port) => {
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 = import_vitest5.vi.fn().mockImplementation(() => {
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: 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 }),
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: 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),
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 import_vitest6 = require("vitest");
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: 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()
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: 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),
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 import_vitest7 = require("vitest");
1150
+ var import_vitest8 = require("vitest");
968
1151
  function createMockServerConsole(overrides) {
969
1152
  const outputBuffer = [];
970
1153
  const commandBuffer = [];
971
1154
  return {
972
- exec: import_vitest7.vi.fn((cmd) => {
1155
+ exec: import_vitest8.vi.fn((cmd) => {
973
1156
  commandBuffer.push(cmd);
974
1157
  return `Executed: ${cmd}`;
975
1158
  }),
976
- print: import_vitest7.vi.fn((text) => {
1159
+ print: import_vitest8.vi.fn((text) => {
977
1160
  outputBuffer.push(text);
978
1161
  }),
979
- broadcast: import_vitest7.vi.fn((text) => {
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: import_vitest7.vi.fn(async (address, port, pwd) => {
1175
+ connect: import_vitest8.vi.fn(async (address, port, pwd) => {
993
1176
  return pwd === password;
994
1177
  }),
995
- sendCommand: import_vitest7.vi.fn(async (cmd) => {
1178
+ sendCommand: import_vitest8.vi.fn(async (cmd) => {
996
1179
  return `RCON Response for: ${cmd}`;
997
1180
  }),
998
- disconnect: import_vitest7.vi.fn()
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 import_vitest8 = require("vitest");
1824
+ var import_vitest9 = require("vitest");
1642
1825
  function createMockGPUAdapter() {
1643
1826
  return {
1644
- requestDevice: import_vitest8.vi.fn().mockResolvedValue(createMockGPUDevice()),
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: 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()
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: import_vitest8.vi.fn()
1848
+ finish: import_vitest9.vi.fn()
1666
1849
  }),
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()
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: import_vitest8.vi.fn(),
1679
- unconfigure: import_vitest8.vi.fn(),
1680
- getCurrentTexture: import_vitest8.vi.fn()
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: import_vitest8.vi.fn().mockResolvedValue(mockAdapter),
1687
- getPreferredCanvasFormat: import_vitest8.vi.fn().mockReturnValue("bgra8unorm")
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,