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.
@@ -2,7 +2,7 @@ import * as vitest from 'vitest';
2
2
  import { Mock } from 'vitest';
3
3
  import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, NetDriver, UserCommand } from '@quake2ts/shared';
4
4
  export { intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
5
- import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, MonsterMove, DamageMod } from '@quake2ts/game';
5
+ import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, MonsterMove, DamageMod, PlayerInventory, BaseItem, WeaponId, WeaponItem, HealthItem, ArmorItem, AmmoItemId, PowerupItem, GameExports } from '@quake2ts/game';
6
6
  import { NetworkTransport, Server, ServerStatic, Client, ClientState } from '@quake2ts/server';
7
7
  import { ImageData } from '@napi-rs/canvas';
8
8
  import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
@@ -197,6 +197,37 @@ declare const mockMonsterAttacks: {
197
197
  fireBFG: Mock<any, any>;
198
198
  };
199
199
 
200
+ /**
201
+ * Creates a mock player inventory with default values suitable for testing.
202
+ * Can be customized with overrides.
203
+ */
204
+ declare function createMockInventory(overrides?: Partial<PlayerInventory>): PlayerInventory;
205
+ /**
206
+ * Generic factory for any item type.
207
+ * Attempts to find a predefined item by ID first, then applies overrides.
208
+ */
209
+ declare function createMockItem(id: string, overrides?: Partial<BaseItem>): BaseItem;
210
+ /**
211
+ * Creates a mock WeaponItem
212
+ */
213
+ declare function createMockWeaponItem(weaponId: WeaponId, overrides?: Partial<WeaponItem>): WeaponItem;
214
+ /**
215
+ * Creates a mock HealthItem
216
+ */
217
+ declare function createMockHealthItem(amount: number, overrides?: Partial<HealthItem>): HealthItem;
218
+ /**
219
+ * Creates a mock ArmorItem
220
+ */
221
+ declare function createMockArmorItem(amount: number, overrides?: Partial<ArmorItem>): ArmorItem;
222
+ /**
223
+ * Creates a mock AmmoItem
224
+ */
225
+ declare function createMockAmmoItem(ammoItemId: AmmoItemId, overrides?: Partial<BaseItem>): BaseItem;
226
+ /**
227
+ * Creates a mock PowerupItem
228
+ */
229
+ declare function createMockPowerupItem(id: string, duration: number, overrides?: Partial<PowerupItem>): PowerupItem;
230
+
200
231
  interface GameState {
201
232
  levelName: string;
202
233
  time: number;
@@ -208,6 +239,10 @@ interface GameState {
208
239
  * @param overrides Optional overrides for the game state.
209
240
  */
210
241
  declare function createMockGameState(overrides?: Partial<GameState>): GameState;
242
+ /**
243
+ * Creates a mock GameExports object.
244
+ */
245
+ declare function createMockGameExports(overrides?: Partial<GameExports>): GameExports;
211
246
 
212
247
  /**
213
248
  * Mock implementation of the NetworkTransport interface for server testing.
@@ -774,4 +809,4 @@ interface VisualScenario {
774
809
  */
775
810
  declare function createVisualTestScenario(page: Page, sceneName: string): VisualScenario;
776
811
 
777
- export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type MockAI, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createItemEntityFactory, createMockAI, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameState, createMockHandshake, createMockImage, createMockImageData, createMockIndexedDB, createMockLocalStorage, createMockMonsterAI, createMockMonsterMove, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockRAF, createMockRConClient, createMockServer, createMockServerClient, createMockServerConsole, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockWeapon, createMockWebGL2Context, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateFrames, simulateFramesWithMock, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };
812
+ export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type MockAI, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createItemEntityFactory, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockImage, createMockImageData, createMockIndexedDB, createMockInventory, createMockItem, createMockLocalStorage, createMockMonsterAI, createMockMonsterMove, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockPowerupItem, createMockRAF, createMockRConClient, createMockServer, createMockServerClient, createMockServerConsole, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateFrames, simulateFramesWithMock, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };
@@ -2,7 +2,7 @@ import * as vitest from 'vitest';
2
2
  import { Mock } from 'vitest';
3
3
  import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, NetDriver, UserCommand } from '@quake2ts/shared';
4
4
  export { intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
5
- import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, MonsterMove, DamageMod } from '@quake2ts/game';
5
+ import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, MonsterMove, DamageMod, PlayerInventory, BaseItem, WeaponId, WeaponItem, HealthItem, ArmorItem, AmmoItemId, PowerupItem, GameExports } from '@quake2ts/game';
6
6
  import { NetworkTransport, Server, ServerStatic, Client, ClientState } from '@quake2ts/server';
7
7
  import { ImageData } from '@napi-rs/canvas';
8
8
  import { LaunchOptions, BrowserContextOptions, Browser, BrowserContext, Page } from 'playwright';
@@ -197,6 +197,37 @@ declare const mockMonsterAttacks: {
197
197
  fireBFG: Mock<any, any>;
198
198
  };
199
199
 
200
+ /**
201
+ * Creates a mock player inventory with default values suitable for testing.
202
+ * Can be customized with overrides.
203
+ */
204
+ declare function createMockInventory(overrides?: Partial<PlayerInventory>): PlayerInventory;
205
+ /**
206
+ * Generic factory for any item type.
207
+ * Attempts to find a predefined item by ID first, then applies overrides.
208
+ */
209
+ declare function createMockItem(id: string, overrides?: Partial<BaseItem>): BaseItem;
210
+ /**
211
+ * Creates a mock WeaponItem
212
+ */
213
+ declare function createMockWeaponItem(weaponId: WeaponId, overrides?: Partial<WeaponItem>): WeaponItem;
214
+ /**
215
+ * Creates a mock HealthItem
216
+ */
217
+ declare function createMockHealthItem(amount: number, overrides?: Partial<HealthItem>): HealthItem;
218
+ /**
219
+ * Creates a mock ArmorItem
220
+ */
221
+ declare function createMockArmorItem(amount: number, overrides?: Partial<ArmorItem>): ArmorItem;
222
+ /**
223
+ * Creates a mock AmmoItem
224
+ */
225
+ declare function createMockAmmoItem(ammoItemId: AmmoItemId, overrides?: Partial<BaseItem>): BaseItem;
226
+ /**
227
+ * Creates a mock PowerupItem
228
+ */
229
+ declare function createMockPowerupItem(id: string, duration: number, overrides?: Partial<PowerupItem>): PowerupItem;
230
+
200
231
  interface GameState {
201
232
  levelName: string;
202
233
  time: number;
@@ -208,6 +239,10 @@ interface GameState {
208
239
  * @param overrides Optional overrides for the game state.
209
240
  */
210
241
  declare function createMockGameState(overrides?: Partial<GameState>): GameState;
242
+ /**
243
+ * Creates a mock GameExports object.
244
+ */
245
+ declare function createMockGameExports(overrides?: Partial<GameExports>): GameExports;
211
246
 
212
247
  /**
213
248
  * Mock implementation of the NetworkTransport interface for server testing.
@@ -774,4 +809,4 @@ interface VisualScenario {
774
809
  */
775
810
  declare function createVisualTestScenario(page: Page, sceneName: string): VisualScenario;
776
811
 
777
- export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type MockAI, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createItemEntityFactory, createMockAI, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameState, createMockHandshake, createMockImage, createMockImageData, createMockIndexedDB, createMockLocalStorage, createMockMonsterAI, createMockMonsterMove, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockRAF, createMockRConClient, createMockServer, createMockServerClient, createMockServerConsole, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockWeapon, createMockWebGL2Context, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateFrames, simulateFramesWithMock, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };
812
+ export { type AudioEvent, type BinaryStreamMock, type BinaryWriterMock, type BrowserSetupOptions, type Connection, type ConsistencyReport, type ControlledTimer, type DeltaSnapshot, type DrawCall, type GameState, type GameStateCapture, type Handshake, HandshakeStage, InputInjector, type MockAI, type MockDamageInfo, type MockEngine, type MockGame, type MockMonsterAI, MockPointerLock, type MockRAF, type MockRConClient, type MockServer, type MockServerConsole, type MockServerContext, MockTransport, type MockUDPSocket, type MultiplayerScenario, type NetworkAddress, type NetworkCondition, type NetworkConfig, type NetworkSimulator, type NodeSetupOptions, type PlaywrightOptions, type PlaywrightTestClient, type Snapshot, type StorageScenario, type TestContext, type UserInfo, type VisualDiff, type VisualScenario, captureAudioEvents, captureCanvasDrawCalls, captureGameScreenshot, captureGameState, compareScreenshots, createBinaryStreamMock, createBinaryWriterMock, createCombatTestContext, createControlledTimer, createCustomNetworkCondition, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameStateSnapshotFactory, createItemEntityFactory, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAudioContext, createMockCanvas, createMockCanvasContext2D, createMockConnection, createMockDamageInfo, createMockEngine, createMockGPUAdapter, createMockGPUCanvasContext, createMockGPUDevice, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockImage, createMockImageData, createMockIndexedDB, createMockInventory, createMockItem, createMockLocalStorage, createMockMonsterAI, createMockMonsterMove, createMockNetDriver, createMockNetworkAddress, createMockPerformance, createMockPowerupItem, createMockRAF, createMockRConClient, createMockServer, createMockServerClient, createMockServerConsole, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createPhysicsTestContext, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createProjectileEntityFactory, createServerSnapshot, createSpawnTestContext, createStorageTestScenario, createTestContext, createTriggerEntityFactory, createVisualTestScenario, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, mockMonsterAttacks, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateFrames, simulateFramesWithMock, simulateHandshake, simulateNetworkCondition, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerTick, simulateSnapshotDelivery, teardownBrowserEnvironment, teardownMockAudioContext, throttleBandwidth, verifySnapshotConsistency, waitForGameReady };
@@ -565,7 +565,105 @@ var mockMonsterAttacks = {
565
565
  fireBFG: vi4.fn()
566
566
  };
567
567
 
568
+ // src/game/mocks/items.ts
569
+ import {
570
+ createPlayerInventory
571
+ } from "@quake2ts/game";
572
+ import {
573
+ WEAPON_ITEMS,
574
+ HEALTH_ITEMS,
575
+ ARMOR_ITEMS,
576
+ POWERUP_ITEMS,
577
+ POWER_ARMOR_ITEMS,
578
+ KEY_ITEMS,
579
+ FLAG_ITEMS,
580
+ getAmmoItemDefinition
581
+ } from "@quake2ts/game";
582
+ function createMockInventory(overrides = {}) {
583
+ const defaultInventory = createPlayerInventory();
584
+ const inventory = {
585
+ ...defaultInventory,
586
+ ...overrides
587
+ };
588
+ return inventory;
589
+ }
590
+ function createMockItem(id, overrides = {}) {
591
+ let base;
592
+ base = WEAPON_ITEMS[id] || HEALTH_ITEMS[id] || ARMOR_ITEMS[id] || POWERUP_ITEMS[id] || POWER_ARMOR_ITEMS[id] || KEY_ITEMS[id] || FLAG_ITEMS[id];
593
+ if (!base) {
594
+ base = {
595
+ id,
596
+ name: `Mock Item ${id}`
597
+ };
598
+ }
599
+ return {
600
+ ...base,
601
+ ...overrides
602
+ };
603
+ }
604
+ function createMockWeaponItem(weaponId, overrides = {}) {
605
+ const found = Object.values(WEAPON_ITEMS).find((w) => w.weaponId === weaponId);
606
+ const base = found ? { ...found } : {
607
+ type: "weapon",
608
+ id: `weapon_${weaponId}`,
609
+ name: `Mock Weapon ${weaponId}`,
610
+ weaponId,
611
+ ammoType: null,
612
+ initialAmmo: 0,
613
+ pickupAmmo: 0,
614
+ fireRate: 1
615
+ };
616
+ return { ...base, ...overrides };
617
+ }
618
+ function createMockHealthItem(amount, overrides = {}) {
619
+ return {
620
+ type: "health",
621
+ id: "item_health_mock",
622
+ name: "Mock Health",
623
+ amount,
624
+ max: 100,
625
+ ...overrides
626
+ };
627
+ }
628
+ function createMockArmorItem(amount, overrides = {}) {
629
+ return {
630
+ type: "armor",
631
+ id: "item_armor_mock",
632
+ name: "Mock Armor",
633
+ amount,
634
+ ...overrides
635
+ };
636
+ }
637
+ function createMockAmmoItem(ammoItemId, overrides = {}) {
638
+ const def = getAmmoItemDefinition(ammoItemId);
639
+ if (!def) {
640
+ throw new Error(`Unknown ammo item id: ${ammoItemId}`);
641
+ }
642
+ const base = {
643
+ id: def.id,
644
+ name: `Mock Ammo ${def.id}`
645
+ };
646
+ return {
647
+ ...base,
648
+ ...overrides
649
+ };
650
+ }
651
+ function createMockPowerupItem(id, duration, overrides = {}) {
652
+ const found = POWERUP_ITEMS[id];
653
+ const base = found ? { ...found } : {
654
+ type: "powerup",
655
+ id,
656
+ name: `Mock Powerup ${id}`,
657
+ timer: duration
658
+ };
659
+ if (duration !== void 0 && !found) {
660
+ base.timer = duration;
661
+ }
662
+ return { ...base, ...overrides };
663
+ }
664
+
568
665
  // src/game/mocks.ts
666
+ import { vi as vi5 } from "vitest";
569
667
  function createMockGameState(overrides) {
570
668
  return {
571
669
  levelName: "test_level",
@@ -575,9 +673,97 @@ function createMockGameState(overrides) {
575
673
  ...overrides
576
674
  };
577
675
  }
676
+ function createMockGameExports(overrides) {
677
+ return {
678
+ init: vi5.fn(),
679
+ shutdown: vi5.fn(),
680
+ spawnWorld: vi5.fn(),
681
+ frame: vi5.fn().mockReturnValue({ state: {} }),
682
+ clientConnect: vi5.fn().mockReturnValue(true),
683
+ clientBegin: vi5.fn().mockReturnValue({ index: 1, origin: { x: 0, y: 0, z: 0 } }),
684
+ clientDisconnect: vi5.fn(),
685
+ clientThink: vi5.fn(),
686
+ // clientUserInfoChanged is not in GameExports
687
+ // clientCommand is not in GameExports (it's serverCommand?) No, clientCommand might be missing from interface but present in impl or legacy.
688
+ // Checking GameExports interface in src/index.ts:
689
+ /*
690
+ clientConnect(ent: Entity | null, userInfo: string): string | true;
691
+ clientBegin(client: PlayerClient): Entity;
692
+ clientDisconnect(ent: Entity): void;
693
+ clientThink(ent: Entity, cmd: UserCommand): void;
694
+ respawn(ent: Entity): void;
695
+ ...
696
+ configstring(index: number, value: string): void;
697
+ serverCommand(cmd: string): void;
698
+ */
699
+ respawn: vi5.fn(),
700
+ entities: {
701
+ getByIndex: vi5.fn(),
702
+ forEachEntity: vi5.fn(),
703
+ findByRadius: vi5.fn(),
704
+ find: vi5.fn(),
705
+ checkAnyCollision: vi5.fn(),
706
+ trace: vi5.fn(),
707
+ pointcontents: vi5.fn(),
708
+ link: vi5.fn(),
709
+ // linkentity mapped to link in EntitySystem? No, linkentity in imports, link/unlink in System.
710
+ unlink: vi5.fn(),
711
+ spawn: vi5.fn(),
712
+ free: vi5.fn(),
713
+ activeCount: 0,
714
+ world: { classname: "worldspawn" }
715
+ },
716
+ multicast: vi5.fn(),
717
+ unicast: vi5.fn(),
718
+ configstring: vi5.fn(),
719
+ serverCommand: vi5.fn(),
720
+ sound: vi5.fn(),
721
+ soundIndex: vi5.fn(),
722
+ centerprintf: vi5.fn(),
723
+ trace: vi5.fn(),
724
+ time: 0,
725
+ deathmatch: false,
726
+ skill: 1,
727
+ rogue: false,
728
+ xatrix: false,
729
+ coop: false,
730
+ friendlyFire: false,
731
+ random: {
732
+ next: vi5.fn(),
733
+ nextFloat: vi5.fn(),
734
+ range: vi5.fn(),
735
+ crandom: vi5.fn(),
736
+ getState: vi5.fn(),
737
+ setState: vi5.fn()
738
+ },
739
+ createSave: vi5.fn(),
740
+ loadSave: vi5.fn(),
741
+ serialize: vi5.fn(),
742
+ loadState: vi5.fn(),
743
+ setGodMode: vi5.fn(),
744
+ setNoclip: vi5.fn(),
745
+ setNotarget: vi5.fn(),
746
+ giveItem: vi5.fn(),
747
+ damage: vi5.fn(),
748
+ teleport: vi5.fn(),
749
+ registerHooks: vi5.fn(),
750
+ hooks: {
751
+ onMapLoad: vi5.fn(),
752
+ onMapUnload: vi5.fn(),
753
+ onPlayerSpawn: vi5.fn(),
754
+ onPlayerDeath: vi5.fn(),
755
+ register: vi5.fn()
756
+ },
757
+ setSpectator: vi5.fn(),
758
+ registerEntitySpawn: vi5.fn(),
759
+ unregisterEntitySpawn: vi5.fn(),
760
+ getCustomEntities: vi5.fn(),
761
+ ...overrides
762
+ };
763
+ }
578
764
 
579
765
  // src/server/mocks/transport.ts
580
- import { vi as vi5 } from "vitest";
766
+ import { vi as vi6 } from "vitest";
581
767
  var MockTransport = class {
582
768
  constructor() {
583
769
  this.address = "127.0.0.1";
@@ -585,11 +771,11 @@ var MockTransport = class {
585
771
  this.sentMessages = [];
586
772
  this.receivedMessages = [];
587
773
  this.listening = false;
588
- this.listenSpy = vi5.fn().mockImplementation(async (port) => {
774
+ this.listenSpy = vi6.fn().mockImplementation(async (port) => {
589
775
  this.port = port;
590
776
  this.listening = true;
591
777
  });
592
- this.closeSpy = vi5.fn().mockImplementation(() => {
778
+ this.closeSpy = vi6.fn().mockImplementation(() => {
593
779
  this.listening = false;
594
780
  });
595
781
  }
@@ -645,11 +831,11 @@ var MockTransport = class {
645
831
  };
646
832
  function createMockUDPSocket(overrides) {
647
833
  const socket = {
648
- send: vi5.fn(),
649
- on: vi5.fn(),
650
- close: vi5.fn(),
651
- bind: vi5.fn(),
652
- address: vi5.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
834
+ send: vi6.fn(),
835
+ on: vi6.fn(),
836
+ close: vi6.fn(),
837
+ bind: vi6.fn(),
838
+ address: vi6.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
653
839
  ...overrides
654
840
  };
655
841
  return socket;
@@ -666,13 +852,13 @@ function createMockTransport(address = "127.0.0.1", port = 27910, overrides) {
666
852
  }
667
853
  function createMockNetDriver(overrides) {
668
854
  return {
669
- connect: vi5.fn().mockResolvedValue(void 0),
670
- disconnect: vi5.fn(),
671
- send: vi5.fn(),
672
- onMessage: vi5.fn(),
673
- onClose: vi5.fn(),
674
- onError: vi5.fn(),
675
- isConnected: vi5.fn().mockReturnValue(true),
855
+ connect: vi6.fn().mockResolvedValue(void 0),
856
+ disconnect: vi6.fn(),
857
+ send: vi6.fn(),
858
+ onMessage: vi6.fn(),
859
+ onClose: vi6.fn(),
860
+ onError: vi6.fn(),
861
+ isConnected: vi6.fn().mockReturnValue(true),
676
862
  ...overrides
677
863
  };
678
864
  }
@@ -680,7 +866,7 @@ function createMockNetDriver(overrides) {
680
866
  // src/server/mocks/state.ts
681
867
  import { ServerState, ClientState } from "@quake2ts/server";
682
868
  import { MAX_CONFIGSTRINGS, MAX_EDICTS } from "@quake2ts/shared";
683
- import { vi as vi6 } from "vitest";
869
+ import { vi as vi7 } from "vitest";
684
870
  function createMockServerState(overrides) {
685
871
  return {
686
872
  state: ServerState.Game,
@@ -722,13 +908,13 @@ function createMockServerClient(clientNum, overrides) {
722
908
  incomingSequence: 0,
723
909
  outgoingSequence: 0,
724
910
  lastReceived: 0,
725
- process: vi6.fn(),
726
- transmit: vi6.fn(),
727
- writeReliableByte: vi6.fn(),
728
- writeReliableShort: vi6.fn(),
729
- writeReliableLong: vi6.fn(),
730
- writeReliableString: vi6.fn(),
731
- writeReliableData: vi6.fn()
911
+ process: vi7.fn(),
912
+ transmit: vi7.fn(),
913
+ writeReliableByte: vi7.fn(),
914
+ writeReliableShort: vi7.fn(),
915
+ writeReliableLong: vi7.fn(),
916
+ writeReliableString: vi7.fn(),
917
+ writeReliableData: vi7.fn()
732
918
  },
733
919
  // Cast as any because NetChan might be complex to fully mock here
734
920
  userInfo: "",
@@ -770,13 +956,13 @@ function createMockServerClient(clientNum, overrides) {
770
956
  }
771
957
  function createMockServer(overrides) {
772
958
  return {
773
- start: vi6.fn().mockResolvedValue(void 0),
774
- stop: vi6.fn(),
775
- multicast: vi6.fn(),
776
- unicast: vi6.fn(),
777
- configstring: vi6.fn(),
778
- kickPlayer: vi6.fn(),
779
- changeMap: vi6.fn().mockResolvedValue(void 0),
959
+ start: vi7.fn().mockResolvedValue(void 0),
960
+ stop: vi7.fn(),
961
+ multicast: vi7.fn(),
962
+ unicast: vi7.fn(),
963
+ configstring: vi7.fn(),
964
+ kickPlayer: vi7.fn(),
965
+ changeMap: vi7.fn().mockResolvedValue(void 0),
780
966
  ...overrides
781
967
  };
782
968
  }
@@ -838,19 +1024,19 @@ async function simulateHandshake(client, server) {
838
1024
  }
839
1025
 
840
1026
  // src/server/mocks/commands.ts
841
- import { vi as vi7 } from "vitest";
1027
+ import { vi as vi8 } from "vitest";
842
1028
  function createMockServerConsole(overrides) {
843
1029
  const outputBuffer = [];
844
1030
  const commandBuffer = [];
845
1031
  return {
846
- exec: vi7.fn((cmd) => {
1032
+ exec: vi8.fn((cmd) => {
847
1033
  commandBuffer.push(cmd);
848
1034
  return `Executed: ${cmd}`;
849
1035
  }),
850
- print: vi7.fn((text) => {
1036
+ print: vi8.fn((text) => {
851
1037
  outputBuffer.push(text);
852
1038
  }),
853
- broadcast: vi7.fn((text) => {
1039
+ broadcast: vi8.fn((text) => {
854
1040
  outputBuffer.push(`Broadcast: ${text}`);
855
1041
  }),
856
1042
  commandBuffer,
@@ -863,13 +1049,13 @@ function createMockRConClient(password = "") {
863
1049
  connected: false,
864
1050
  lastCommand: "",
865
1051
  lastResponse: "",
866
- connect: vi7.fn(async (address, port, pwd) => {
1052
+ connect: vi8.fn(async (address, port, pwd) => {
867
1053
  return pwd === password;
868
1054
  }),
869
- sendCommand: vi7.fn(async (cmd) => {
1055
+ sendCommand: vi8.fn(async (cmd) => {
870
1056
  return `RCON Response for: ${cmd}`;
871
1057
  }),
872
- disconnect: vi7.fn()
1058
+ disconnect: vi8.fn()
873
1059
  };
874
1060
  }
875
1061
  function simulateServerCommand(server, command) {
@@ -1512,10 +1698,10 @@ function createMockImage(width, height, src) {
1512
1698
  }
1513
1699
 
1514
1700
  // src/engine/mocks/webgpu.ts
1515
- import { vi as vi8 } from "vitest";
1701
+ import { vi as vi9 } from "vitest";
1516
1702
  function createMockGPUAdapter() {
1517
1703
  return {
1518
- requestDevice: vi8.fn().mockResolvedValue(createMockGPUDevice()),
1704
+ requestDevice: vi9.fn().mockResolvedValue(createMockGPUDevice()),
1519
1705
  features: /* @__PURE__ */ new Set(),
1520
1706
  limits: {}
1521
1707
  };
@@ -1525,40 +1711,40 @@ function createMockGPUDevice() {
1525
1711
  features: /* @__PURE__ */ new Set(),
1526
1712
  limits: {},
1527
1713
  queue: {
1528
- submit: vi8.fn(),
1529
- writeBuffer: vi8.fn(),
1530
- writeTexture: vi8.fn(),
1531
- copyExternalImageToTexture: vi8.fn()
1532
- },
1533
- createCommandEncoder: vi8.fn().mockReturnValue({
1534
- beginRenderPass: vi8.fn().mockReturnValue({
1535
- setPipeline: vi8.fn(),
1536
- draw: vi8.fn(),
1537
- end: vi8.fn()
1714
+ submit: vi9.fn(),
1715
+ writeBuffer: vi9.fn(),
1716
+ writeTexture: vi9.fn(),
1717
+ copyExternalImageToTexture: vi9.fn()
1718
+ },
1719
+ createCommandEncoder: vi9.fn().mockReturnValue({
1720
+ beginRenderPass: vi9.fn().mockReturnValue({
1721
+ setPipeline: vi9.fn(),
1722
+ draw: vi9.fn(),
1723
+ end: vi9.fn()
1538
1724
  }),
1539
- finish: vi8.fn()
1725
+ finish: vi9.fn()
1540
1726
  }),
1541
- createRenderPipeline: vi8.fn(),
1542
- createShaderModule: vi8.fn(),
1543
- createBindGroup: vi8.fn(),
1544
- createBindGroupLayout: vi8.fn(),
1545
- createBuffer: vi8.fn(),
1546
- createTexture: vi8.fn(),
1547
- createSampler: vi8.fn()
1727
+ createRenderPipeline: vi9.fn(),
1728
+ createShaderModule: vi9.fn(),
1729
+ createBindGroup: vi9.fn(),
1730
+ createBindGroupLayout: vi9.fn(),
1731
+ createBuffer: vi9.fn(),
1732
+ createTexture: vi9.fn(),
1733
+ createSampler: vi9.fn()
1548
1734
  };
1549
1735
  }
1550
1736
  function createMockGPUCanvasContext() {
1551
1737
  return {
1552
- configure: vi8.fn(),
1553
- unconfigure: vi8.fn(),
1554
- getCurrentTexture: vi8.fn()
1738
+ configure: vi9.fn(),
1739
+ unconfigure: vi9.fn(),
1740
+ getCurrentTexture: vi9.fn()
1555
1741
  };
1556
1742
  }
1557
1743
  function setupWebGPUMocks() {
1558
1744
  const mockAdapter = createMockGPUAdapter();
1559
1745
  const mockGpu = {
1560
- requestAdapter: vi8.fn().mockResolvedValue(mockAdapter),
1561
- getPreferredCanvasFormat: vi8.fn().mockReturnValue("bgra8unorm")
1746
+ requestAdapter: vi9.fn().mockResolvedValue(mockAdapter),
1747
+ getPreferredCanvasFormat: vi9.fn().mockReturnValue("bgra8unorm")
1562
1748
  };
1563
1749
  Object.defineProperty(global.navigator, "gpu", {
1564
1750
  value: mockGpu,
@@ -2184,6 +2370,8 @@ export {
2184
2370
  createGameStateSnapshotFactory,
2185
2371
  createItemEntityFactory,
2186
2372
  createMockAI,
2373
+ createMockAmmoItem,
2374
+ createMockArmorItem,
2187
2375
  createMockAudioContext,
2188
2376
  createMockCanvas,
2189
2377
  createMockCanvasContext2D,
@@ -2194,17 +2382,22 @@ export {
2194
2382
  createMockGPUCanvasContext,
2195
2383
  createMockGPUDevice,
2196
2384
  createMockGame,
2385
+ createMockGameExports,
2197
2386
  createMockGameState,
2198
2387
  createMockHandshake,
2388
+ createMockHealthItem,
2199
2389
  createMockImage,
2200
2390
  createMockImageData,
2201
2391
  createMockIndexedDB,
2392
+ createMockInventory,
2393
+ createMockItem,
2202
2394
  createMockLocalStorage,
2203
2395
  createMockMonsterAI,
2204
2396
  createMockMonsterMove,
2205
2397
  createMockNetDriver,
2206
2398
  createMockNetworkAddress,
2207
2399
  createMockPerformance,
2400
+ createMockPowerupItem,
2208
2401
  createMockRAF,
2209
2402
  createMockRConClient,
2210
2403
  createMockServer,
@@ -2217,6 +2410,7 @@ export {
2217
2410
  createMockUDPSocket,
2218
2411
  createMockUserInfo,
2219
2412
  createMockWeapon,
2413
+ createMockWeaponItem,
2220
2414
  createMockWebGL2Context,
2221
2415
  createMonsterEntityFactory,
2222
2416
  createMultiplayerTestScenario,