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
|
@@ -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
|
|
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 =
|
|
774
|
+
this.listenSpy = vi6.fn().mockImplementation(async (port) => {
|
|
589
775
|
this.port = port;
|
|
590
776
|
this.listening = true;
|
|
591
777
|
});
|
|
592
|
-
this.closeSpy =
|
|
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:
|
|
649
|
-
on:
|
|
650
|
-
close:
|
|
651
|
-
bind:
|
|
652
|
-
address:
|
|
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:
|
|
670
|
-
disconnect:
|
|
671
|
-
send:
|
|
672
|
-
onMessage:
|
|
673
|
-
onClose:
|
|
674
|
-
onError:
|
|
675
|
-
isConnected:
|
|
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
|
|
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:
|
|
726
|
-
transmit:
|
|
727
|
-
writeReliableByte:
|
|
728
|
-
writeReliableShort:
|
|
729
|
-
writeReliableLong:
|
|
730
|
-
writeReliableString:
|
|
731
|
-
writeReliableData:
|
|
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:
|
|
774
|
-
stop:
|
|
775
|
-
multicast:
|
|
776
|
-
unicast:
|
|
777
|
-
configstring:
|
|
778
|
-
kickPlayer:
|
|
779
|
-
changeMap:
|
|
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
|
|
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:
|
|
1032
|
+
exec: vi8.fn((cmd) => {
|
|
847
1033
|
commandBuffer.push(cmd);
|
|
848
1034
|
return `Executed: ${cmd}`;
|
|
849
1035
|
}),
|
|
850
|
-
print:
|
|
1036
|
+
print: vi8.fn((text) => {
|
|
851
1037
|
outputBuffer.push(text);
|
|
852
1038
|
}),
|
|
853
|
-
broadcast:
|
|
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:
|
|
1052
|
+
connect: vi8.fn(async (address, port, pwd) => {
|
|
867
1053
|
return pwd === password;
|
|
868
1054
|
}),
|
|
869
|
-
sendCommand:
|
|
1055
|
+
sendCommand: vi8.fn(async (cmd) => {
|
|
870
1056
|
return `RCON Response for: ${cmd}`;
|
|
871
1057
|
}),
|
|
872
|
-
disconnect:
|
|
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
|
|
1701
|
+
import { vi as vi9 } from "vitest";
|
|
1516
1702
|
function createMockGPUAdapter() {
|
|
1517
1703
|
return {
|
|
1518
|
-
requestDevice:
|
|
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:
|
|
1529
|
-
writeBuffer:
|
|
1530
|
-
writeTexture:
|
|
1531
|
-
copyExternalImageToTexture:
|
|
1532
|
-
},
|
|
1533
|
-
createCommandEncoder:
|
|
1534
|
-
beginRenderPass:
|
|
1535
|
-
setPipeline:
|
|
1536
|
-
draw:
|
|
1537
|
-
end:
|
|
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:
|
|
1725
|
+
finish: vi9.fn()
|
|
1540
1726
|
}),
|
|
1541
|
-
createRenderPipeline:
|
|
1542
|
-
createShaderModule:
|
|
1543
|
-
createBindGroup:
|
|
1544
|
-
createBindGroupLayout:
|
|
1545
|
-
createBuffer:
|
|
1546
|
-
createTexture:
|
|
1547
|
-
createSampler:
|
|
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:
|
|
1553
|
-
unconfigure:
|
|
1554
|
-
getCurrentTexture:
|
|
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:
|
|
1561
|
-
getPreferredCanvasFormat:
|
|
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,
|