@quake2ts/test-utils 0.0.818 → 0.0.823

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/dist/index.d.cts CHANGED
@@ -1,11 +1,12 @@
1
1
  import * as vitest from 'vitest';
2
2
  import { Mock, vi } from 'vitest';
3
- import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, TraceResult as TraceResult$1, NetDriver, NetChan, UserCommand, ProtocolPlayerState } from '@quake2ts/shared';
3
+ import * as SharedMath from '@quake2ts/shared';
4
+ import { CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, Vec3 as Vec3$1, TraceResult as TraceResult$1, NetDriver, NetChan, UserCommand, ProtocolPlayerState } from '@quake2ts/shared';
4
5
  export { ZERO_VEC3, intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
5
- import { Vec3 as Vec3$1, Bounds3 } from '@quake2ts/shared/math/vec3';
6
- import { TraceResult, CollisionPlane as CollisionPlane$1 } from '@quake2ts/shared/bsp/collision';
7
- import { ConfigStringEntry, Cvar, BspModel, WebGLContextState, AudioNodeLike, AudioBufferSourceNodeLike, AudioBufferLike, AudioParamLike, GainNodeLike, DynamicsCompressorNodeLike, PannerNodeLike, BiquadFilterNodeLike, AudioDestinationNodeLike, AudioContextLike, Renderer, FrameRenderer, BspSurfacePipeline, Md2Pipeline, Md3Pipeline, SpriteRenderer, SkyboxPipeline, AssetManager, PreparedTexture, Md2Model, Md3Model, BspMap, BufferUsage, VertexBuffer, IndexBuffer, ShaderProgram, DLight, DynamicLightManager, ParticleSystem, NullRenderer, CoordinateSystem, LoggingRenderer, Camera, FrameRenderStats, EntityState as EntityState$1, ProtocolPlayerState as ProtocolPlayerState$1, FrameData, DamageIndicator, FogData } from '@quake2ts/engine';
6
+ import { BspTexInfo, BspLightmapInfo, BspEntity, BspMap, ConfigStringEntry, Cvar, BspModel, WebGLContextState, AudioNodeLike, AudioBufferSourceNodeLike, AudioBufferLike, AudioParamLike, GainNodeLike, DynamicsCompressorNodeLike, PannerNodeLike, BiquadFilterNodeLike, AudioDestinationNodeLike, AudioContextLike, Renderer, FrameRenderer, BspSurfacePipeline, Md2Pipeline, Md3Pipeline, SpriteRenderer, SkyboxPipeline, AssetManager, PreparedTexture, Md2Model, Md3Model, BufferUsage, VertexBuffer, IndexBuffer, ShaderProgram, DLight, DynamicLightManager, ParticleSystem, NullRenderer, CoordinateSystem, LoggingRenderer, Camera, FrameRenderStats, EntityState as EntityState$1, ProtocolPlayerState as ProtocolPlayerState$1, FrameData, DamageIndicator, FogData } from '@quake2ts/engine';
8
7
  export { ConfigStringEntry, Cvar, DLight, DynamicLightManager, IndexBuffer, ParticleSystem, ShaderProgram, VertexBuffer } from '@quake2ts/engine';
8
+ import { Vec3, Bounds3 } from '@quake2ts/shared/math/vec3';
9
+ import { TraceResult, CollisionPlane as CollisionPlane$1 } from '@quake2ts/shared/bsp/collision';
9
10
  import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, GameSaveFile, LevelState, MonsterMove, DamageMod, ArmorType, RegularArmorState, PowerArmorState, PlayerInventory, BaseItem, WeaponId, WeaponItem, HealthItem, ArmorItem, AmmoItemId, PowerupItem, PlayerClient } from '@quake2ts/game';
10
11
  import { NetworkTransport, Server, ServerStatic, Client, ClientState as ClientState$1, ClientFrame } from '@quake2ts/server';
11
12
  import { ImageData, Canvas } from '@napi-rs/canvas';
@@ -174,7 +175,7 @@ declare const createPacketMock: (overrides?: Partial<PacketMock>) => PacketMock;
174
175
  * @param dist - The distance from the origin.
175
176
  * @returns A CollisionPlane object.
176
177
  */
177
- declare function makePlane(normal: Vec3, dist: number): CollisionPlane;
178
+ declare function makePlane(normal: SharedMath.Vec3, dist: number): CollisionPlane;
178
179
  /**
179
180
  * Creates a simple axis-aligned cubic brush for testing.
180
181
  *
@@ -227,7 +228,37 @@ declare function makeLeafModel(brushes: CollisionBrush[]): CollisionModel;
227
228
  * @param contents - Content flags (default: CONTENTS_SOLID).
228
229
  * @returns A CollisionBrush object.
229
230
  */
230
- declare function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents?: number): CollisionBrush;
231
+ declare function makeBrushFromMinsMaxs(mins: SharedMath.Vec3, maxs: SharedMath.Vec3, contents?: number): CollisionBrush;
232
+ type BspVec3 = [number, number, number];
233
+ interface TestBspSurface {
234
+ vertices: BspVec3[];
235
+ texInfo?: Partial<BspTexInfo>;
236
+ lightmap?: Uint8Array;
237
+ lightmapInfo?: BspLightmapInfo;
238
+ styles?: [number, number, number, number];
239
+ }
240
+ interface TestBspMapOptions {
241
+ surfaces?: TestBspSurface[];
242
+ entities?: BspEntity[];
243
+ }
244
+ /**
245
+ * Creates a minimal valid BspMap for testing rendering.
246
+ *
247
+ * @param options - Configuration for the test BSP map.
248
+ * @returns A BspMap object populated with the requested surfaces.
249
+ */
250
+ declare function createTestBspMap(options?: TestBspMapOptions): BspMap;
251
+ /**
252
+ * Creates a simple solid color lightmap of specified dimensions.
253
+ *
254
+ * @param width - Width of the lightmap (usually small, e.g. 16x16)
255
+ * @param height - Height of the lightmap
256
+ * @param r - Red component (0-255)
257
+ * @param g - Green component (0-255)
258
+ * @param b - Blue component (0-255)
259
+ * @returns Uint8Array containing RGB data
260
+ */
261
+ declare function createTestLightmap(width: number, height: number, r: number, g: number, b: number): Uint8Array;
231
262
 
232
263
  declare function findPakFile(): string | null;
233
264
  declare function loadMapFromPak(mapName: string): ArrayBuffer | null;
@@ -240,7 +271,7 @@ declare function loadMapFromPak(mapName: string): ArrayBuffer | null;
240
271
  * @param z - The Z coordinate (default: 0).
241
272
  * @returns A Vec3 object.
242
273
  */
243
- declare const createVector3: (x?: number, y?: number, z?: number) => Vec3$1;
274
+ declare const createVector3: (x?: number, y?: number, z?: number) => Vec3;
244
275
  /**
245
276
  * Creates a bounds object (min/max vectors).
246
277
  *
@@ -248,14 +279,14 @@ declare const createVector3: (x?: number, y?: number, z?: number) => Vec3$1;
248
279
  * @param maxs - The maximum bounds vector (default: 1,1,1).
249
280
  * @returns A Bounds3 object.
250
281
  */
251
- declare const createBounds: (mins?: Vec3$1, maxs?: Vec3$1) => Bounds3;
282
+ declare const createBounds: (mins?: Vec3, maxs?: Vec3) => Bounds3;
252
283
  /**
253
284
  * Interface representing a transformation (position, rotation, scale).
254
285
  */
255
286
  interface Transform {
256
- position: Vec3$1;
257
- rotation: Vec3$1;
258
- scale: Vec3$1;
287
+ position: Vec3;
288
+ rotation: Vec3;
289
+ scale: Vec3;
259
290
  }
260
291
  /**
261
292
  * Creates a Transform object.
@@ -271,14 +302,14 @@ declare const createTransform: (overrides?: Partial<Transform>) => Transform;
271
302
  * @param max - Maximum value for each component (default: 100).
272
303
  * @returns A random Vec3 object.
273
304
  */
274
- declare const randomVector3: (min?: number, max?: number) => Vec3$1;
305
+ declare const randomVector3: (min?: number, max?: number) => Vec3;
275
306
 
276
307
  /**
277
308
  * Interface for a TraceResult mock, including all standard properties.
278
309
  */
279
310
  interface TraceMock extends Partial<TraceResult> {
280
311
  fraction: number;
281
- endpos: Vec3$1;
312
+ endpos: Vec3;
282
313
  plane: CollisionPlane$1;
283
314
  surface: {
284
315
  flags: number;
@@ -474,7 +505,7 @@ declare function createPhysicsTestScenario(scenarioType: 'stairs' | 'ladder' | '
474
505
  * Uses the game's runPmove logic or manually invokes similar steps.
475
506
  * This is useful for testing specific movement mechanics in isolation.
476
507
  */
477
- declare function simulateMovement(entity: Entity, destination: Vec3, context: TestContext): TraceResult$1;
508
+ declare function simulateMovement(entity: Entity, destination: Vec3$1, context: TestContext): TraceResult$1;
478
509
  /**
479
510
  * Simulates gravity application on an entity.
480
511
  */
@@ -1586,7 +1617,7 @@ interface Lightmap {
1586
1617
  /**
1587
1618
  * Creates a mock DLight with default values.
1588
1619
  */
1589
- declare function createMockDLight(position?: Vec3, color?: Vec3, intensity?: number): DLight;
1620
+ declare function createMockDLight(position?: Vec3$1, color?: Vec3$1, intensity?: number): DLight;
1590
1621
  /**
1591
1622
  * Creates a mock DynamicLightManager with spy methods.
1592
1623
  */
@@ -1597,8 +1628,8 @@ declare function createMockDLightManager(overrides?: Partial<DynamicLightManager
1597
1628
  declare function createMockLightmap(width?: number, height?: number): Lightmap;
1598
1629
 
1599
1630
  interface MockParticle {
1600
- position: Vec3;
1601
- velocity: Vec3;
1631
+ position: Vec3$1;
1632
+ velocity: Vec3$1;
1602
1633
  color: [number, number, number, number];
1603
1634
  size: number;
1604
1635
  lifetime: number;
@@ -2047,8 +2078,8 @@ interface CameraInput {
2047
2078
  rollDelta?: number;
2048
2079
  }
2049
2080
  interface DemoCameraResult {
2050
- origin: Vec3;
2051
- angles: Vec3;
2081
+ origin: Vec3$1;
2082
+ angles: Vec3$1;
2052
2083
  fov: number;
2053
2084
  }
2054
2085
  /**
@@ -2140,8 +2171,8 @@ declare function simulatePacketLoss<T>(messages: T[], lossPercent: number): T[];
2140
2171
  /**
2141
2172
  * Factory for creating a mock EntityState.
2142
2173
  */
2143
- declare function createMockEntityState(number: number, modelIndex?: number, origin?: Partial<Vec3>, overrides?: Partial<EntityState$1>): EntityState$1;
2144
- declare function createMockDamageIndicator(damage: number, dir?: Vec3, health?: boolean, armor?: boolean, power?: boolean): DamageIndicator;
2174
+ declare function createMockEntityState(number: number, modelIndex?: number, origin?: Partial<Vec3$1>, overrides?: Partial<EntityState$1>): EntityState$1;
2175
+ declare function createMockDamageIndicator(damage: number, dir?: Vec3$1, health?: boolean, armor?: boolean, power?: boolean): DamageIndicator;
2145
2176
  declare function createMockFogData(overrides?: Partial<FogData>): FogData;
2146
2177
 
2147
2178
  interface DownloadManager {
@@ -2326,4 +2357,4 @@ declare function compareScreenshots(baseline: Buffer, current: Buffer, threshold
2326
2357
  */
2327
2358
  declare function createVisualTestScenario(sceneName: string): VisualScenario;
2328
2359
 
2329
- export { type AnimationSnapshotOptions, type AnimationSnapshotResult, type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, BrowserInputSource, type BrowserSetupOptions, type CameraInput, type CaptureOptions, type ClientInfo, type ClientState, type ClientStateProvider, type ComparisonOptions, type ComparisonResult, type ComputeTestSetup, type Connection, type ConnectionState, type ConsistencyReport, type ControlledTimer, type CvarRegistry, type DeltaSnapshot, type DemoCameraResult, type DownloadManager, type DrawCall, FakeAudioContext, FakeAudioNode, FakeAudioParam, FakeBiquadFilterNode, FakeBufferSource, FakeDestination, FakeGainNode, FakePannerNode, type Frame, type GameState, type GameStateCapture, type GeometryBuffers, type Handshake, HandshakeStage, type HeadlessWebGLContext, type HeadlessWebGLOptions, type HeadlessWebGPUSetup, type HudState, InputInjector, type KeyModifiers, type LevelFrameState, type Lightmap, type MasterServer, type Message, type MessageReaderMock, type MessageWriterMock, type MockAI, FakeBufferSource as MockAudioBufferSourceNode, type MockChatMessage, MockClientConfigStrings, type MockCollisionEntityIndex, type MockCommand, type MockConsole, type MockDamageInfo, type MockEngine, type MockGame, type MockImportsAndEngine, type MockMonsterAI, MockNetDriver, type MockNetDriverState, MockNetworkTransport, type MockNotification, type MockParticle, type MockParticleEmitter, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockSaveGame, type MockServer, type MockServerConsole, type MockServerContext, type MockServerMessage, MockTransport, type MockUDPSocket, type MockWeapon, MockWebGL2RenderingContext, type MockWebGPUContext, type MultiplayerScenario, type NetChanMock, type NetworkAddress, type NetworkCondition, type NetworkSimulator, type NodeSetupOptions, type PacketMock, type PhysicsScenario, type PlaywrightOptions, type PlaywrightTestClient, type PrecacheList, type PredictionScenario, type RateLimiter, type RecordedPacket, type RefDef, type RenderTestSetup, type SaveGameDiff, type ServerInfo, type ServerListFilter, type SmoothingAnalysis, type Snapshot, type SnapshotTestOptions, type StorageScenario, type SurfaceMock, type TestContext, type TraceMock, type Transform, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, type WebGLPlaywrightOptions, type WebGLPlaywrightSetup, type WebGLRenderTestSetup, type WebGPUContextState, type WebGPUMocks, captureAudioEvents, captureCanvasDrawCalls, captureFramebufferAsPNG, captureGameScreenshot, captureGameState, captureTexture, captureWebGLFramebuffer, compareSaveGames, compareScreenshots, compareSnapshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createBounds, createCheckerboardTexture, createCombatTestContext, createComputeTestSetup, createConfigStringArrayMock, createConfigStringMock, createControlledTimer, createCustomNetworkCondition, createCvarMock, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameImportsAndEngine, createGameStateSnapshotFactory, createHeadlessTestContext, createHeadlessWebGL, createInputInjector, createInterpolationTestData, createItemEntityFactory, createLoggingRenderer, createMessageReaderMock, createMessageWriterMock, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAssetManager, createMockAudioBuffer, createMockAudioContext, createMockBspMap, createMockBspPipeline, createMockBufferSource, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockChatMessage, createMockClientInfo, createMockClientState, createMockCollisionEntityIndex, createMockCommand, createMockCommandEncoder, createMockComputePassEncoder, createMockComputePipeline, createMockConnection, createMockConnectionState, createMockConsole, createMockCvarRegistry, createMockDLight, createMockDLightManager, createMockDamageIndicator, createMockDamageInfo, createMockDeltaFrame, createMockDemoCameraResult, createMockDownloadManager, createMockEngine, createMockEntityState, createMockFogData, createMockFrame, createMockFrameRenderer, createMockGPUAdapter, createMockGPUBuffer, createMockGPUDevice, createMockGPUTexture, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockHudState, createMockImage, createMockImageData, createMockIndexBuffer, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLightmap, createMockLocalStorage, createMockMasterServer, createMockMd2Model, createMockMd2Pipeline, createMockMd3Model, createMockMd3Pipeline, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockNotification, createMockPannerNode, createMockParticle, createMockParticleEmitter, createMockParticleSystem, createMockPerformance, createMockPlayerState, createMockPointerLock, createMockPowerupItem, createMockPrecacheList, createMockQueue, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderPassEncoder, createMockRenderPipeline, createMockRenderer, createMockRenderingContext, createMockSampler, createMockSaveGame, createMockScoreboard, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerMessage, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockShader, createMockShaderModule, createMockShaderProgram, createMockSkyboxPipeline, createMockSnapshot, createMockSpritePipeline, createMockTexture, createMockTextureView, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockVertexBuffer, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWebGLContextState, createMockWebGPUContext, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createNullRenderer, createPacketMock, createPhysicsTestContext, createPhysicsTestScenario, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createPowerArmorState, createPredictionTestScenario, createProjectileEntityFactory, createRegularArmorState, createRenderTestSetup, createSaveGameSnapshot, createServerSnapshot, createSolidTexture, createSpawnTestContext, createStorageTestScenario, createSurfaceMock, createTestContext, createTraceMock, createTransform, createTriggerEntityFactory, createVector3, createViewTestScenario, createVisualTestScenario, createWebGLPlaywrightSetup, createWebGLRenderTestSetup, expectAnimationSnapshot, expectNoDoubleTransform, expectRendererCalls, expectSnapshot, findPakFile, flipPixelsVertically, getSnapshotPath, initHeadlessWebGPU, loadMapFromPak, loadPNG, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, parseProtocolPlayerState, randomVector3, renderAndCapture, renderAndCaptureWebGL, renderAndCaptureWebGLPlaywright, renderAndExpectSnapshot, restoreSaveGameSnapshot, runComputeAndReadback, savePNG, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateClientPrediction, simulateDownload, simulateFrames, simulateGravity, simulateHandshake, simulateJump, simulateMovement, simulateNetworkCondition, simulateNetworkDelay, simulatePacketLoss, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, spawnEntity, takeScreenshot, teardownBrowserEnvironment, teardownMockAudioContext, teardownNodeEnvironment, testComputeShader, testPipelineRendering, testWebGLAnimation, testWebGLRenderer, throttleBandwidth, verifySmoothing, verifySnapshotConsistency, waitForGameReady };
2360
+ export { type AnimationSnapshotOptions, type AnimationSnapshotResult, type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, BrowserInputSource, type BrowserSetupOptions, type BspVec3, type CameraInput, type CaptureOptions, type ClientInfo, type ClientState, type ClientStateProvider, type ComparisonOptions, type ComparisonResult, type ComputeTestSetup, type Connection, type ConnectionState, type ConsistencyReport, type ControlledTimer, type CvarRegistry, type DeltaSnapshot, type DemoCameraResult, type DownloadManager, type DrawCall, FakeAudioContext, FakeAudioNode, FakeAudioParam, FakeBiquadFilterNode, FakeBufferSource, FakeDestination, FakeGainNode, FakePannerNode, type Frame, type GameState, type GameStateCapture, type GeometryBuffers, type Handshake, HandshakeStage, type HeadlessWebGLContext, type HeadlessWebGLOptions, type HeadlessWebGPUSetup, type HudState, InputInjector, type KeyModifiers, type LevelFrameState, type Lightmap, type MasterServer, type Message, type MessageReaderMock, type MessageWriterMock, type MockAI, FakeBufferSource as MockAudioBufferSourceNode, type MockChatMessage, MockClientConfigStrings, type MockCollisionEntityIndex, type MockCommand, type MockConsole, type MockDamageInfo, type MockEngine, type MockGame, type MockImportsAndEngine, type MockMonsterAI, MockNetDriver, type MockNetDriverState, MockNetworkTransport, type MockNotification, type MockParticle, type MockParticleEmitter, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockSaveGame, type MockServer, type MockServerConsole, type MockServerContext, type MockServerMessage, MockTransport, type MockUDPSocket, type MockWeapon, MockWebGL2RenderingContext, type MockWebGPUContext, type MultiplayerScenario, type NetChanMock, type NetworkAddress, type NetworkCondition, type NetworkSimulator, type NodeSetupOptions, type PacketMock, type PhysicsScenario, type PlaywrightOptions, type PlaywrightTestClient, type PrecacheList, type PredictionScenario, type RateLimiter, type RecordedPacket, type RefDef, type RenderTestSetup, type SaveGameDiff, type ServerInfo, type ServerListFilter, type SmoothingAnalysis, type Snapshot, type SnapshotTestOptions, type StorageScenario, type SurfaceMock, type TestBspMapOptions, type TestBspSurface, type TestContext, type TraceMock, type Transform, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, type WebGLPlaywrightOptions, type WebGLPlaywrightSetup, type WebGLRenderTestSetup, type WebGPUContextState, type WebGPUMocks, captureAudioEvents, captureCanvasDrawCalls, captureFramebufferAsPNG, captureGameScreenshot, captureGameState, captureTexture, captureWebGLFramebuffer, compareSaveGames, compareScreenshots, compareSnapshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createBounds, createCheckerboardTexture, createCombatTestContext, createComputeTestSetup, createConfigStringArrayMock, createConfigStringMock, createControlledTimer, createCustomNetworkCondition, createCvarMock, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameImportsAndEngine, createGameStateSnapshotFactory, createHeadlessTestContext, createHeadlessWebGL, createInputInjector, createInterpolationTestData, createItemEntityFactory, createLoggingRenderer, createMessageReaderMock, createMessageWriterMock, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAssetManager, createMockAudioBuffer, createMockAudioContext, createMockBspMap, createMockBspPipeline, createMockBufferSource, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockChatMessage, createMockClientInfo, createMockClientState, createMockCollisionEntityIndex, createMockCommand, createMockCommandEncoder, createMockComputePassEncoder, createMockComputePipeline, createMockConnection, createMockConnectionState, createMockConsole, createMockCvarRegistry, createMockDLight, createMockDLightManager, createMockDamageIndicator, createMockDamageInfo, createMockDeltaFrame, createMockDemoCameraResult, createMockDownloadManager, createMockEngine, createMockEntityState, createMockFogData, createMockFrame, createMockFrameRenderer, createMockGPUAdapter, createMockGPUBuffer, createMockGPUDevice, createMockGPUTexture, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockHudState, createMockImage, createMockImageData, createMockIndexBuffer, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLightmap, createMockLocalStorage, createMockMasterServer, createMockMd2Model, createMockMd2Pipeline, createMockMd3Model, createMockMd3Pipeline, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockNotification, createMockPannerNode, createMockParticle, createMockParticleEmitter, createMockParticleSystem, createMockPerformance, createMockPlayerState, createMockPointerLock, createMockPowerupItem, createMockPrecacheList, createMockQueue, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderPassEncoder, createMockRenderPipeline, createMockRenderer, createMockRenderingContext, createMockSampler, createMockSaveGame, createMockScoreboard, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerMessage, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockShader, createMockShaderModule, createMockShaderProgram, createMockSkyboxPipeline, createMockSnapshot, createMockSpritePipeline, createMockTexture, createMockTextureView, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockVertexBuffer, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWebGLContextState, createMockWebGPUContext, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createNullRenderer, createPacketMock, createPhysicsTestContext, createPhysicsTestScenario, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createPowerArmorState, createPredictionTestScenario, createProjectileEntityFactory, createRegularArmorState, createRenderTestSetup, createSaveGameSnapshot, createServerSnapshot, createSolidTexture, createSpawnTestContext, createStorageTestScenario, createSurfaceMock, createTestBspMap, createTestContext, createTestLightmap, createTraceMock, createTransform, createTriggerEntityFactory, createVector3, createViewTestScenario, createVisualTestScenario, createWebGLPlaywrightSetup, createWebGLRenderTestSetup, expectAnimationSnapshot, expectNoDoubleTransform, expectRendererCalls, expectSnapshot, findPakFile, flipPixelsVertically, getSnapshotPath, initHeadlessWebGPU, loadMapFromPak, loadPNG, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, parseProtocolPlayerState, randomVector3, renderAndCapture, renderAndCaptureWebGL, renderAndCaptureWebGLPlaywright, renderAndExpectSnapshot, restoreSaveGameSnapshot, runComputeAndReadback, savePNG, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateClientPrediction, simulateDownload, simulateFrames, simulateGravity, simulateHandshake, simulateJump, simulateMovement, simulateNetworkCondition, simulateNetworkDelay, simulatePacketLoss, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, spawnEntity, takeScreenshot, teardownBrowserEnvironment, teardownMockAudioContext, teardownNodeEnvironment, testComputeShader, testPipelineRendering, testWebGLAnimation, testWebGLRenderer, throttleBandwidth, verifySmoothing, verifySnapshotConsistency, waitForGameReady };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import * as vitest from 'vitest';
2
2
  import { Mock, vi } from 'vitest';
3
- import { Vec3, CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, TraceResult as TraceResult$1, NetDriver, NetChan, UserCommand, ProtocolPlayerState } from '@quake2ts/shared';
3
+ import * as SharedMath from '@quake2ts/shared';
4
+ import { CollisionPlane, CollisionBrush, CollisionNode, CollisionLeaf, CollisionModel, PlayerState, EntityState, createRandomGenerator, Vec3 as Vec3$1, TraceResult as TraceResult$1, NetDriver, NetChan, UserCommand, ProtocolPlayerState } from '@quake2ts/shared';
4
5
  export { ZERO_VEC3, intersects, ladderTrace, stairTrace } from '@quake2ts/shared';
5
- import { Vec3 as Vec3$1, Bounds3 } from '@quake2ts/shared/math/vec3';
6
- import { TraceResult, CollisionPlane as CollisionPlane$1 } from '@quake2ts/shared/bsp/collision';
7
- import { ConfigStringEntry, Cvar, BspModel, WebGLContextState, AudioNodeLike, AudioBufferSourceNodeLike, AudioBufferLike, AudioParamLike, GainNodeLike, DynamicsCompressorNodeLike, PannerNodeLike, BiquadFilterNodeLike, AudioDestinationNodeLike, AudioContextLike, Renderer, FrameRenderer, BspSurfacePipeline, Md2Pipeline, Md3Pipeline, SpriteRenderer, SkyboxPipeline, AssetManager, PreparedTexture, Md2Model, Md3Model, BspMap, BufferUsage, VertexBuffer, IndexBuffer, ShaderProgram, DLight, DynamicLightManager, ParticleSystem, NullRenderer, CoordinateSystem, LoggingRenderer, Camera, FrameRenderStats, EntityState as EntityState$1, ProtocolPlayerState as ProtocolPlayerState$1, FrameData, DamageIndicator, FogData } from '@quake2ts/engine';
6
+ import { BspTexInfo, BspLightmapInfo, BspEntity, BspMap, ConfigStringEntry, Cvar, BspModel, WebGLContextState, AudioNodeLike, AudioBufferSourceNodeLike, AudioBufferLike, AudioParamLike, GainNodeLike, DynamicsCompressorNodeLike, PannerNodeLike, BiquadFilterNodeLike, AudioDestinationNodeLike, AudioContextLike, Renderer, FrameRenderer, BspSurfacePipeline, Md2Pipeline, Md3Pipeline, SpriteRenderer, SkyboxPipeline, AssetManager, PreparedTexture, Md2Model, Md3Model, BufferUsage, VertexBuffer, IndexBuffer, ShaderProgram, DLight, DynamicLightManager, ParticleSystem, NullRenderer, CoordinateSystem, LoggingRenderer, Camera, FrameRenderStats, EntityState as EntityState$1, ProtocolPlayerState as ProtocolPlayerState$1, FrameData, DamageIndicator, FogData } from '@quake2ts/engine';
8
7
  export { ConfigStringEntry, Cvar, DLight, DynamicLightManager, IndexBuffer, ParticleSystem, ShaderProgram, VertexBuffer } from '@quake2ts/engine';
8
+ import { Vec3, Bounds3 } from '@quake2ts/shared/math/vec3';
9
+ import { TraceResult, CollisionPlane as CollisionPlane$1 } from '@quake2ts/shared/bsp/collision';
9
10
  import { GameStateSnapshot, Entity, ScriptHookRegistry, SpawnContext, EntitySystem, SpawnRegistry, GameSaveFile, LevelState, MonsterMove, DamageMod, ArmorType, RegularArmorState, PowerArmorState, PlayerInventory, BaseItem, WeaponId, WeaponItem, HealthItem, ArmorItem, AmmoItemId, PowerupItem, PlayerClient } from '@quake2ts/game';
10
11
  import { NetworkTransport, Server, ServerStatic, Client, ClientState as ClientState$1, ClientFrame } from '@quake2ts/server';
11
12
  import { ImageData, Canvas } from '@napi-rs/canvas';
@@ -174,7 +175,7 @@ declare const createPacketMock: (overrides?: Partial<PacketMock>) => PacketMock;
174
175
  * @param dist - The distance from the origin.
175
176
  * @returns A CollisionPlane object.
176
177
  */
177
- declare function makePlane(normal: Vec3, dist: number): CollisionPlane;
178
+ declare function makePlane(normal: SharedMath.Vec3, dist: number): CollisionPlane;
178
179
  /**
179
180
  * Creates a simple axis-aligned cubic brush for testing.
180
181
  *
@@ -227,7 +228,37 @@ declare function makeLeafModel(brushes: CollisionBrush[]): CollisionModel;
227
228
  * @param contents - Content flags (default: CONTENTS_SOLID).
228
229
  * @returns A CollisionBrush object.
229
230
  */
230
- declare function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents?: number): CollisionBrush;
231
+ declare function makeBrushFromMinsMaxs(mins: SharedMath.Vec3, maxs: SharedMath.Vec3, contents?: number): CollisionBrush;
232
+ type BspVec3 = [number, number, number];
233
+ interface TestBspSurface {
234
+ vertices: BspVec3[];
235
+ texInfo?: Partial<BspTexInfo>;
236
+ lightmap?: Uint8Array;
237
+ lightmapInfo?: BspLightmapInfo;
238
+ styles?: [number, number, number, number];
239
+ }
240
+ interface TestBspMapOptions {
241
+ surfaces?: TestBspSurface[];
242
+ entities?: BspEntity[];
243
+ }
244
+ /**
245
+ * Creates a minimal valid BspMap for testing rendering.
246
+ *
247
+ * @param options - Configuration for the test BSP map.
248
+ * @returns A BspMap object populated with the requested surfaces.
249
+ */
250
+ declare function createTestBspMap(options?: TestBspMapOptions): BspMap;
251
+ /**
252
+ * Creates a simple solid color lightmap of specified dimensions.
253
+ *
254
+ * @param width - Width of the lightmap (usually small, e.g. 16x16)
255
+ * @param height - Height of the lightmap
256
+ * @param r - Red component (0-255)
257
+ * @param g - Green component (0-255)
258
+ * @param b - Blue component (0-255)
259
+ * @returns Uint8Array containing RGB data
260
+ */
261
+ declare function createTestLightmap(width: number, height: number, r: number, g: number, b: number): Uint8Array;
231
262
 
232
263
  declare function findPakFile(): string | null;
233
264
  declare function loadMapFromPak(mapName: string): ArrayBuffer | null;
@@ -240,7 +271,7 @@ declare function loadMapFromPak(mapName: string): ArrayBuffer | null;
240
271
  * @param z - The Z coordinate (default: 0).
241
272
  * @returns A Vec3 object.
242
273
  */
243
- declare const createVector3: (x?: number, y?: number, z?: number) => Vec3$1;
274
+ declare const createVector3: (x?: number, y?: number, z?: number) => Vec3;
244
275
  /**
245
276
  * Creates a bounds object (min/max vectors).
246
277
  *
@@ -248,14 +279,14 @@ declare const createVector3: (x?: number, y?: number, z?: number) => Vec3$1;
248
279
  * @param maxs - The maximum bounds vector (default: 1,1,1).
249
280
  * @returns A Bounds3 object.
250
281
  */
251
- declare const createBounds: (mins?: Vec3$1, maxs?: Vec3$1) => Bounds3;
282
+ declare const createBounds: (mins?: Vec3, maxs?: Vec3) => Bounds3;
252
283
  /**
253
284
  * Interface representing a transformation (position, rotation, scale).
254
285
  */
255
286
  interface Transform {
256
- position: Vec3$1;
257
- rotation: Vec3$1;
258
- scale: Vec3$1;
287
+ position: Vec3;
288
+ rotation: Vec3;
289
+ scale: Vec3;
259
290
  }
260
291
  /**
261
292
  * Creates a Transform object.
@@ -271,14 +302,14 @@ declare const createTransform: (overrides?: Partial<Transform>) => Transform;
271
302
  * @param max - Maximum value for each component (default: 100).
272
303
  * @returns A random Vec3 object.
273
304
  */
274
- declare const randomVector3: (min?: number, max?: number) => Vec3$1;
305
+ declare const randomVector3: (min?: number, max?: number) => Vec3;
275
306
 
276
307
  /**
277
308
  * Interface for a TraceResult mock, including all standard properties.
278
309
  */
279
310
  interface TraceMock extends Partial<TraceResult> {
280
311
  fraction: number;
281
- endpos: Vec3$1;
312
+ endpos: Vec3;
282
313
  plane: CollisionPlane$1;
283
314
  surface: {
284
315
  flags: number;
@@ -474,7 +505,7 @@ declare function createPhysicsTestScenario(scenarioType: 'stairs' | 'ladder' | '
474
505
  * Uses the game's runPmove logic or manually invokes similar steps.
475
506
  * This is useful for testing specific movement mechanics in isolation.
476
507
  */
477
- declare function simulateMovement(entity: Entity, destination: Vec3, context: TestContext): TraceResult$1;
508
+ declare function simulateMovement(entity: Entity, destination: Vec3$1, context: TestContext): TraceResult$1;
478
509
  /**
479
510
  * Simulates gravity application on an entity.
480
511
  */
@@ -1586,7 +1617,7 @@ interface Lightmap {
1586
1617
  /**
1587
1618
  * Creates a mock DLight with default values.
1588
1619
  */
1589
- declare function createMockDLight(position?: Vec3, color?: Vec3, intensity?: number): DLight;
1620
+ declare function createMockDLight(position?: Vec3$1, color?: Vec3$1, intensity?: number): DLight;
1590
1621
  /**
1591
1622
  * Creates a mock DynamicLightManager with spy methods.
1592
1623
  */
@@ -1597,8 +1628,8 @@ declare function createMockDLightManager(overrides?: Partial<DynamicLightManager
1597
1628
  declare function createMockLightmap(width?: number, height?: number): Lightmap;
1598
1629
 
1599
1630
  interface MockParticle {
1600
- position: Vec3;
1601
- velocity: Vec3;
1631
+ position: Vec3$1;
1632
+ velocity: Vec3$1;
1602
1633
  color: [number, number, number, number];
1603
1634
  size: number;
1604
1635
  lifetime: number;
@@ -2047,8 +2078,8 @@ interface CameraInput {
2047
2078
  rollDelta?: number;
2048
2079
  }
2049
2080
  interface DemoCameraResult {
2050
- origin: Vec3;
2051
- angles: Vec3;
2081
+ origin: Vec3$1;
2082
+ angles: Vec3$1;
2052
2083
  fov: number;
2053
2084
  }
2054
2085
  /**
@@ -2140,8 +2171,8 @@ declare function simulatePacketLoss<T>(messages: T[], lossPercent: number): T[];
2140
2171
  /**
2141
2172
  * Factory for creating a mock EntityState.
2142
2173
  */
2143
- declare function createMockEntityState(number: number, modelIndex?: number, origin?: Partial<Vec3>, overrides?: Partial<EntityState$1>): EntityState$1;
2144
- declare function createMockDamageIndicator(damage: number, dir?: Vec3, health?: boolean, armor?: boolean, power?: boolean): DamageIndicator;
2174
+ declare function createMockEntityState(number: number, modelIndex?: number, origin?: Partial<Vec3$1>, overrides?: Partial<EntityState$1>): EntityState$1;
2175
+ declare function createMockDamageIndicator(damage: number, dir?: Vec3$1, health?: boolean, armor?: boolean, power?: boolean): DamageIndicator;
2145
2176
  declare function createMockFogData(overrides?: Partial<FogData>): FogData;
2146
2177
 
2147
2178
  interface DownloadManager {
@@ -2326,4 +2357,4 @@ declare function compareScreenshots(baseline: Buffer, current: Buffer, threshold
2326
2357
  */
2327
2358
  declare function createVisualTestScenario(sceneName: string): VisualScenario;
2328
2359
 
2329
- export { type AnimationSnapshotOptions, type AnimationSnapshotResult, type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, BrowserInputSource, type BrowserSetupOptions, type CameraInput, type CaptureOptions, type ClientInfo, type ClientState, type ClientStateProvider, type ComparisonOptions, type ComparisonResult, type ComputeTestSetup, type Connection, type ConnectionState, type ConsistencyReport, type ControlledTimer, type CvarRegistry, type DeltaSnapshot, type DemoCameraResult, type DownloadManager, type DrawCall, FakeAudioContext, FakeAudioNode, FakeAudioParam, FakeBiquadFilterNode, FakeBufferSource, FakeDestination, FakeGainNode, FakePannerNode, type Frame, type GameState, type GameStateCapture, type GeometryBuffers, type Handshake, HandshakeStage, type HeadlessWebGLContext, type HeadlessWebGLOptions, type HeadlessWebGPUSetup, type HudState, InputInjector, type KeyModifiers, type LevelFrameState, type Lightmap, type MasterServer, type Message, type MessageReaderMock, type MessageWriterMock, type MockAI, FakeBufferSource as MockAudioBufferSourceNode, type MockChatMessage, MockClientConfigStrings, type MockCollisionEntityIndex, type MockCommand, type MockConsole, type MockDamageInfo, type MockEngine, type MockGame, type MockImportsAndEngine, type MockMonsterAI, MockNetDriver, type MockNetDriverState, MockNetworkTransport, type MockNotification, type MockParticle, type MockParticleEmitter, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockSaveGame, type MockServer, type MockServerConsole, type MockServerContext, type MockServerMessage, MockTransport, type MockUDPSocket, type MockWeapon, MockWebGL2RenderingContext, type MockWebGPUContext, type MultiplayerScenario, type NetChanMock, type NetworkAddress, type NetworkCondition, type NetworkSimulator, type NodeSetupOptions, type PacketMock, type PhysicsScenario, type PlaywrightOptions, type PlaywrightTestClient, type PrecacheList, type PredictionScenario, type RateLimiter, type RecordedPacket, type RefDef, type RenderTestSetup, type SaveGameDiff, type ServerInfo, type ServerListFilter, type SmoothingAnalysis, type Snapshot, type SnapshotTestOptions, type StorageScenario, type SurfaceMock, type TestContext, type TraceMock, type Transform, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, type WebGLPlaywrightOptions, type WebGLPlaywrightSetup, type WebGLRenderTestSetup, type WebGPUContextState, type WebGPUMocks, captureAudioEvents, captureCanvasDrawCalls, captureFramebufferAsPNG, captureGameScreenshot, captureGameState, captureTexture, captureWebGLFramebuffer, compareSaveGames, compareScreenshots, compareSnapshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createBounds, createCheckerboardTexture, createCombatTestContext, createComputeTestSetup, createConfigStringArrayMock, createConfigStringMock, createControlledTimer, createCustomNetworkCondition, createCvarMock, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameImportsAndEngine, createGameStateSnapshotFactory, createHeadlessTestContext, createHeadlessWebGL, createInputInjector, createInterpolationTestData, createItemEntityFactory, createLoggingRenderer, createMessageReaderMock, createMessageWriterMock, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAssetManager, createMockAudioBuffer, createMockAudioContext, createMockBspMap, createMockBspPipeline, createMockBufferSource, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockChatMessage, createMockClientInfo, createMockClientState, createMockCollisionEntityIndex, createMockCommand, createMockCommandEncoder, createMockComputePassEncoder, createMockComputePipeline, createMockConnection, createMockConnectionState, createMockConsole, createMockCvarRegistry, createMockDLight, createMockDLightManager, createMockDamageIndicator, createMockDamageInfo, createMockDeltaFrame, createMockDemoCameraResult, createMockDownloadManager, createMockEngine, createMockEntityState, createMockFogData, createMockFrame, createMockFrameRenderer, createMockGPUAdapter, createMockGPUBuffer, createMockGPUDevice, createMockGPUTexture, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockHudState, createMockImage, createMockImageData, createMockIndexBuffer, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLightmap, createMockLocalStorage, createMockMasterServer, createMockMd2Model, createMockMd2Pipeline, createMockMd3Model, createMockMd3Pipeline, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockNotification, createMockPannerNode, createMockParticle, createMockParticleEmitter, createMockParticleSystem, createMockPerformance, createMockPlayerState, createMockPointerLock, createMockPowerupItem, createMockPrecacheList, createMockQueue, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderPassEncoder, createMockRenderPipeline, createMockRenderer, createMockRenderingContext, createMockSampler, createMockSaveGame, createMockScoreboard, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerMessage, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockShader, createMockShaderModule, createMockShaderProgram, createMockSkyboxPipeline, createMockSnapshot, createMockSpritePipeline, createMockTexture, createMockTextureView, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockVertexBuffer, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWebGLContextState, createMockWebGPUContext, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createNullRenderer, createPacketMock, createPhysicsTestContext, createPhysicsTestScenario, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createPowerArmorState, createPredictionTestScenario, createProjectileEntityFactory, createRegularArmorState, createRenderTestSetup, createSaveGameSnapshot, createServerSnapshot, createSolidTexture, createSpawnTestContext, createStorageTestScenario, createSurfaceMock, createTestContext, createTraceMock, createTransform, createTriggerEntityFactory, createVector3, createViewTestScenario, createVisualTestScenario, createWebGLPlaywrightSetup, createWebGLRenderTestSetup, expectAnimationSnapshot, expectNoDoubleTransform, expectRendererCalls, expectSnapshot, findPakFile, flipPixelsVertically, getSnapshotPath, initHeadlessWebGPU, loadMapFromPak, loadPNG, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, parseProtocolPlayerState, randomVector3, renderAndCapture, renderAndCaptureWebGL, renderAndCaptureWebGLPlaywright, renderAndExpectSnapshot, restoreSaveGameSnapshot, runComputeAndReadback, savePNG, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateClientPrediction, simulateDownload, simulateFrames, simulateGravity, simulateHandshake, simulateJump, simulateMovement, simulateNetworkCondition, simulateNetworkDelay, simulatePacketLoss, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, spawnEntity, takeScreenshot, teardownBrowserEnvironment, teardownMockAudioContext, teardownNodeEnvironment, testComputeShader, testPipelineRendering, testWebGLAnimation, testWebGLRenderer, throttleBandwidth, verifySmoothing, verifySnapshotConsistency, waitForGameReady };
2360
+ export { type AnimationSnapshotOptions, type AnimationSnapshotResult, type AudioEvent, type BandwidthScenario, type BinaryStreamMock, type BinaryWriterMock, BrowserInputSource, type BrowserSetupOptions, type BspVec3, type CameraInput, type CaptureOptions, type ClientInfo, type ClientState, type ClientStateProvider, type ComparisonOptions, type ComparisonResult, type ComputeTestSetup, type Connection, type ConnectionState, type ConsistencyReport, type ControlledTimer, type CvarRegistry, type DeltaSnapshot, type DemoCameraResult, type DownloadManager, type DrawCall, FakeAudioContext, FakeAudioNode, FakeAudioParam, FakeBiquadFilterNode, FakeBufferSource, FakeDestination, FakeGainNode, FakePannerNode, type Frame, type GameState, type GameStateCapture, type GeometryBuffers, type Handshake, HandshakeStage, type HeadlessWebGLContext, type HeadlessWebGLOptions, type HeadlessWebGPUSetup, type HudState, InputInjector, type KeyModifiers, type LevelFrameState, type Lightmap, type MasterServer, type Message, type MessageReaderMock, type MessageWriterMock, type MockAI, FakeBufferSource as MockAudioBufferSourceNode, type MockChatMessage, MockClientConfigStrings, type MockCollisionEntityIndex, type MockCommand, type MockConsole, type MockDamageInfo, type MockEngine, type MockGame, type MockImportsAndEngine, type MockMonsterAI, MockNetDriver, type MockNetDriverState, MockNetworkTransport, type MockNotification, type MockParticle, type MockParticleEmitter, MockPointerLock, type MockRAF, type MockRConClient, type MockRenderingContext, type MockSaveGame, type MockServer, type MockServerConsole, type MockServerContext, type MockServerMessage, MockTransport, type MockUDPSocket, type MockWeapon, MockWebGL2RenderingContext, type MockWebGPUContext, type MultiplayerScenario, type NetChanMock, type NetworkAddress, type NetworkCondition, type NetworkSimulator, type NodeSetupOptions, type PacketMock, type PhysicsScenario, type PlaywrightOptions, type PlaywrightTestClient, type PrecacheList, type PredictionScenario, type RateLimiter, type RecordedPacket, type RefDef, type RenderTestSetup, type SaveGameDiff, type ServerInfo, type ServerListFilter, type SmoothingAnalysis, type Snapshot, type SnapshotTestOptions, type StorageScenario, type SurfaceMock, type TestBspMapOptions, type TestBspSurface, type TestContext, type TraceMock, type Transform, type UserInfo, type ViewScenario, type ViewState, type VisualDiff, type VisualScenario, type WebGLPlaywrightOptions, type WebGLPlaywrightSetup, type WebGLRenderTestSetup, type WebGPUContextState, type WebGPUMocks, captureAudioEvents, captureCanvasDrawCalls, captureFramebufferAsPNG, captureGameScreenshot, captureGameState, captureTexture, captureWebGLFramebuffer, compareSaveGames, compareScreenshots, compareSnapshots, createBandwidthTestScenario, createBinaryStreamMock, createBinaryWriterMock, createBounds, createCheckerboardTexture, createCombatTestContext, createComputeTestSetup, createConfigStringArrayMock, createConfigStringMock, createControlledTimer, createCustomNetworkCondition, createCvarMock, createDeltaSnapshot, createEntity, createEntityFactory, createEntityStateFactory, createGameImportsAndEngine, createGameStateSnapshotFactory, createHeadlessTestContext, createHeadlessWebGL, createInputInjector, createInterpolationTestData, createItemEntityFactory, createLoggingRenderer, createMessageReaderMock, createMessageWriterMock, createMockAI, createMockAmmoItem, createMockArmorItem, createMockAssetManager, createMockAudioBuffer, createMockAudioContext, createMockBspMap, createMockBspPipeline, createMockBufferSource, createMockCamera, createMockCanvas, createMockCanvasContext2D, createMockChatMessage, createMockClientInfo, createMockClientState, createMockCollisionEntityIndex, createMockCommand, createMockCommandEncoder, createMockComputePassEncoder, createMockComputePipeline, createMockConnection, createMockConnectionState, createMockConsole, createMockCvarRegistry, createMockDLight, createMockDLightManager, createMockDamageIndicator, createMockDamageInfo, createMockDeltaFrame, createMockDemoCameraResult, createMockDownloadManager, createMockEngine, createMockEntityState, createMockFogData, createMockFrame, createMockFrameRenderer, createMockGPUAdapter, createMockGPUBuffer, createMockGPUDevice, createMockGPUTexture, createMockGame, createMockGameExports, createMockGameState, createMockHandshake, createMockHealthItem, createMockHudState, createMockImage, createMockImageData, createMockIndexBuffer, createMockIndexedDB, createMockInventory, createMockItem, createMockKeyboardEvent, createMockLightmap, createMockLocalStorage, createMockMasterServer, createMockMd2Model, createMockMd2Pipeline, createMockMd3Model, createMockMd3Pipeline, createMockMonsterAI, createMockMonsterMove, createMockMouseEvent, createMockNetDriver, createMockNetworkAddress, createMockNotification, createMockPannerNode, createMockParticle, createMockParticleEmitter, createMockParticleSystem, createMockPerformance, createMockPlayerState, createMockPointerLock, createMockPowerupItem, createMockPrecacheList, createMockQueue, createMockRAF, createMockRConClient, createMockRateLimiter, createMockRefDef, createMockRenderPassEncoder, createMockRenderPipeline, createMockRenderer, createMockRenderingContext, createMockSampler, createMockSaveGame, createMockScoreboard, createMockServer, createMockServerClient, createMockServerConsole, createMockServerInfo, createMockServerMessage, createMockServerState, createMockServerStatic, createMockSessionStorage, createMockShader, createMockShaderModule, createMockShaderProgram, createMockSkyboxPipeline, createMockSnapshot, createMockSpritePipeline, createMockTexture, createMockTextureView, createMockTransport, createMockUDPSocket, createMockUserInfo, createMockVertexBuffer, createMockViewState, createMockWeapon, createMockWeaponItem, createMockWebGL2Context, createMockWebGLContextState, createMockWebGPUContext, createMockWheelEvent, createMonsterEntityFactory, createMultiplayerTestScenario, createNetChanMock, createNullRenderer, createPacketMock, createPhysicsTestContext, createPhysicsTestScenario, createPlayerEntityFactory, createPlayerStateFactory, createPlaywrightTestClient, createPowerArmorState, createPredictionTestScenario, createProjectileEntityFactory, createRegularArmorState, createRenderTestSetup, createSaveGameSnapshot, createServerSnapshot, createSolidTexture, createSpawnTestContext, createStorageTestScenario, createSurfaceMock, createTestBspMap, createTestContext, createTestLightmap, createTraceMock, createTransform, createTriggerEntityFactory, createVector3, createViewTestScenario, createVisualTestScenario, createWebGLPlaywrightSetup, createWebGLRenderTestSetup, expectAnimationSnapshot, expectNoDoubleTransform, expectRendererCalls, expectSnapshot, findPakFile, flipPixelsVertically, getSnapshotPath, initHeadlessWebGPU, loadMapFromPak, loadPNG, makeAxisBrush, makeBrushFromMinsMaxs, makeBspModel, makeLeaf, makeLeafModel, makeNode, makePlane, measureSnapshotSize, mockMonsterAttacks, parseProtocolPlayerState, randomVector3, renderAndCapture, renderAndCaptureWebGL, renderAndCaptureWebGLPlaywright, renderAndExpectSnapshot, restoreSaveGameSnapshot, runComputeAndReadback, savePNG, serializeUserInfo, setupBrowserEnvironment, setupMockAudioContext, setupNodeEnvironment, setupWebGPUMocks, simulateBandwidthLimit, simulateCameraMovement, simulateClientPrediction, simulateDownload, simulateFrames, simulateGravity, simulateHandshake, simulateJump, simulateMovement, simulateNetworkCondition, simulateNetworkDelay, simulatePacketLoss, simulatePlayerInput, simulatePlayerJoin, simulatePlayerLeave, simulateServerCommand, simulateServerRegistration, simulateServerTick, simulateSnapshotDelivery, spawnEntity, takeScreenshot, teardownBrowserEnvironment, teardownMockAudioContext, teardownNodeEnvironment, testComputeShader, testPipelineRendering, testWebGLAnimation, testWebGLRenderer, throttleBandwidth, verifySmoothing, verifySnapshotConsistency, waitForGameReady };
package/dist/index.js CHANGED
@@ -203,6 +203,140 @@ function makeBrushFromMinsMaxs(mins, maxs, contents = CONTENTS_SOLID) {
203
203
  sides: planes.map((plane) => ({ plane, surfaceFlags: 0 }))
204
204
  };
205
205
  }
206
+ function createTestBspMap(options = {}) {
207
+ const vertices = [];
208
+ const edges = [];
209
+ const surfEdges = [];
210
+ const faces = [];
211
+ const texInfos = [];
212
+ const lightMapInfo = [];
213
+ let lightMapDataSize = 0;
214
+ if (options.surfaces) {
215
+ for (const surface of options.surfaces) {
216
+ if (surface.lightmap) {
217
+ lightMapDataSize += surface.lightmap.length;
218
+ }
219
+ }
220
+ }
221
+ const lightMaps = new Uint8Array(lightMapDataSize);
222
+ let currentLightMapOffset = 0;
223
+ if (options.surfaces) {
224
+ for (const surface of options.surfaces) {
225
+ const firstEdge = surfEdges.length;
226
+ const startVertexIndex = vertices.length;
227
+ for (const v of surface.vertices) {
228
+ vertices.push(v);
229
+ }
230
+ for (let i = 0; i < surface.vertices.length; i++) {
231
+ const v1 = startVertexIndex + i;
232
+ const v2 = startVertexIndex + (i + 1) % surface.vertices.length;
233
+ edges.push({ vertices: [v1, v2] });
234
+ surfEdges.push(edges.length - 1);
235
+ }
236
+ const defaultTexInfo = {
237
+ s: [1, 0, 0],
238
+ sOffset: 0,
239
+ t: [0, 1, 0],
240
+ tOffset: 0,
241
+ flags: 0,
242
+ value: 0,
243
+ texture: "test_texture",
244
+ nextTexInfo: -1
245
+ };
246
+ const texInfo = { ...defaultTexInfo, ...surface.texInfo };
247
+ texInfos.push(texInfo);
248
+ let lightOffset = -1;
249
+ let info = void 0;
250
+ if (surface.lightmap) {
251
+ lightOffset = currentLightMapOffset;
252
+ lightMaps.set(surface.lightmap, lightOffset);
253
+ info = { offset: lightOffset, length: surface.lightmap.length };
254
+ currentLightMapOffset += surface.lightmap.length;
255
+ }
256
+ lightMapInfo.push(info);
257
+ faces.push({
258
+ planeIndex: 0,
259
+ // Dummy plane
260
+ side: 0,
261
+ firstEdge,
262
+ numEdges: surface.vertices.length,
263
+ texInfo: texInfos.length - 1,
264
+ styles: surface.styles ?? [255, 255, 255, 255],
265
+ // Default styles
266
+ lightOffset
267
+ });
268
+ }
269
+ }
270
+ const header = { version: 38, lumps: /* @__PURE__ */ new Map() };
271
+ const entities = {
272
+ raw: "",
273
+ entities: options.entities || [],
274
+ worldspawn: void 0,
275
+ getUniqueClassnames: () => []
276
+ };
277
+ const planes = [{ normal: [0, 0, 1], dist: 0, type: 0 }];
278
+ const nodes = [];
279
+ const leafs = [{
280
+ contents: 0,
281
+ cluster: 0,
282
+ area: 0,
283
+ mins: [-1e3, -1e3, -1e3],
284
+ maxs: [1e3, 1e3, 1e3],
285
+ firstLeafFace: 0,
286
+ numLeafFaces: faces.length,
287
+ firstLeafBrush: 0,
288
+ numLeafBrushes: 0
289
+ }];
290
+ const leafLists = {
291
+ leafFaces: [faces.map((_, i) => i)],
292
+ leafBrushes: [[]]
293
+ };
294
+ const models = [{
295
+ mins: [-1e3, -1e3, -1e3],
296
+ maxs: [1e3, 1e3, 1e3],
297
+ origin: [0, 0, 0],
298
+ headNode: 0,
299
+ firstFace: 0,
300
+ numFaces: faces.length
301
+ }];
302
+ const data = {
303
+ header,
304
+ entities,
305
+ planes,
306
+ vertices,
307
+ nodes,
308
+ texInfo: texInfos,
309
+ faces,
310
+ lightMaps,
311
+ lightMapInfo,
312
+ leafs,
313
+ leafLists,
314
+ edges,
315
+ surfEdges: Int32Array.from(surfEdges),
316
+ models,
317
+ brushes: [],
318
+ brushSides: [],
319
+ visibility: void 0,
320
+ areas: [],
321
+ areaPortals: []
322
+ };
323
+ return {
324
+ ...data,
325
+ pickEntity: () => null,
326
+ findLeaf: () => leafs[0],
327
+ calculatePVS: () => void 0
328
+ };
329
+ }
330
+ function createTestLightmap(width, height, r, g, b) {
331
+ const size = width * height * 3;
332
+ const data = new Uint8Array(size);
333
+ for (let i = 0; i < size; i += 3) {
334
+ data[i] = r;
335
+ data[i + 1] = g;
336
+ data[i + 2] = b;
337
+ }
338
+ return data;
339
+ }
206
340
 
207
341
  // src/shared/pak-loader.ts
208
342
  import * as fs from "fs";
@@ -3326,6 +3460,7 @@ function createMockRenderer(overrides) {
3326
3460
  setLodBias: vi12.fn(),
3327
3461
  setAreaPortalState: vi12.fn(),
3328
3462
  renderInstanced: vi12.fn(),
3463
+ uploadBspGeometry: vi12.fn().mockReturnValue({ surfaces: [], lightmaps: [] }),
3329
3464
  dispose: vi12.fn(),
3330
3465
  ...overrides
3331
3466
  };
@@ -5575,7 +5710,9 @@ export {
5575
5710
  createSpawnTestContext,
5576
5711
  createStorageTestScenario,
5577
5712
  createSurfaceMock,
5713
+ createTestBspMap,
5578
5714
  createTestContext,
5715
+ createTestLightmap,
5579
5716
  createTraceMock,
5580
5717
  createTransform,
5581
5718
  createTriggerEntityFactory,