@quake2ts/client 0.0.1

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.
Files changed (120) hide show
  1. package/dist/browser/index.global.js +221 -0
  2. package/dist/browser/index.global.js.map +1 -0
  3. package/dist/cjs/index.cjs +44668 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/esm/index.js +44623 -0
  6. package/dist/esm/index.js.map +1 -0
  7. package/dist/tsconfig.tsbuildinfo +1 -0
  8. package/dist/types/audio/entity-sound.d.ts +25 -0
  9. package/dist/types/audio/entity-sound.d.ts.map +1 -0
  10. package/dist/types/blend.d.ts +9 -0
  11. package/dist/types/blend.d.ts.map +1 -0
  12. package/dist/types/cgameBridge.d.ts +15 -0
  13. package/dist/types/cgameBridge.d.ts.map +1 -0
  14. package/dist/types/chat.d.ts +20 -0
  15. package/dist/types/chat.d.ts.map +1 -0
  16. package/dist/types/chat.test.d.ts +2 -0
  17. package/dist/types/chat.test.d.ts.map +1 -0
  18. package/dist/types/configStrings.d.ts +22 -0
  19. package/dist/types/configStrings.d.ts.map +1 -0
  20. package/dist/types/demo/camera.d.ts +17 -0
  21. package/dist/types/demo/camera.d.ts.map +1 -0
  22. package/dist/types/demo/handler.d.ts +71 -0
  23. package/dist/types/demo/handler.d.ts.map +1 -0
  24. package/dist/types/demo/itemMapping.d.ts +29 -0
  25. package/dist/types/demo/itemMapping.d.ts.map +1 -0
  26. package/dist/types/demo/storage.d.ts +24 -0
  27. package/dist/types/demo/storage.d.ts.map +1 -0
  28. package/dist/types/effects-system.d.ts +19 -0
  29. package/dist/types/effects-system.d.ts.map +1 -0
  30. package/dist/types/effects.d.ts +9 -0
  31. package/dist/types/effects.d.ts.map +1 -0
  32. package/dist/types/entities.d.ts +31 -0
  33. package/dist/types/entities.d.ts.map +1 -0
  34. package/dist/types/hud/blends.d.ts +4 -0
  35. package/dist/types/hud/blends.d.ts.map +1 -0
  36. package/dist/types/hud/crosshair.d.ts +7 -0
  37. package/dist/types/hud/crosshair.d.ts.map +1 -0
  38. package/dist/types/hud/damage.d.ts +5 -0
  39. package/dist/types/hud/damage.d.ts.map +1 -0
  40. package/dist/types/hud/data.d.ts +31 -0
  41. package/dist/types/hud/data.d.ts.map +1 -0
  42. package/dist/types/hud/diagnostics.d.ts +3 -0
  43. package/dist/types/hud/diagnostics.d.ts.map +1 -0
  44. package/dist/types/hud/icons.d.ts +6 -0
  45. package/dist/types/hud/icons.d.ts.map +1 -0
  46. package/dist/types/hud/layout.d.ts +30 -0
  47. package/dist/types/hud/layout.d.ts.map +1 -0
  48. package/dist/types/hud/messages.d.ts +11 -0
  49. package/dist/types/hud/messages.d.ts.map +1 -0
  50. package/dist/types/hud/numbers.d.ts +3 -0
  51. package/dist/types/hud/numbers.d.ts.map +1 -0
  52. package/dist/types/hud/pickup.d.ts +4 -0
  53. package/dist/types/hud/pickup.d.ts.map +1 -0
  54. package/dist/types/hud/statusbar.d.ts +6 -0
  55. package/dist/types/hud/statusbar.d.ts.map +1 -0
  56. package/dist/types/hud.d.ts +8 -0
  57. package/dist/types/hud.d.ts.map +1 -0
  58. package/dist/types/index.d.ts +119 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/input/bindings.d.ts +20 -0
  61. package/dist/types/input/bindings.d.ts.map +1 -0
  62. package/dist/types/input/command-buffer.d.ts +15 -0
  63. package/dist/types/input/command-buffer.d.ts.map +1 -0
  64. package/dist/types/input/controller.d.ts +139 -0
  65. package/dist/types/input/controller.d.ts.map +1 -0
  66. package/dist/types/lod.d.ts +11 -0
  67. package/dist/types/lod.d.ts.map +1 -0
  68. package/dist/types/net/browserWsDriver.d.ts +15 -0
  69. package/dist/types/net/browserWsDriver.d.ts.map +1 -0
  70. package/dist/types/net/clientConnection.d.ts +78 -0
  71. package/dist/types/net/clientConnection.d.ts.map +1 -0
  72. package/dist/types/net/connection.d.ts +96 -0
  73. package/dist/types/net/connection.d.ts.map +1 -0
  74. package/dist/types/net/master.d.ts +26 -0
  75. package/dist/types/net/master.d.ts.map +1 -0
  76. package/dist/types/net/serverBrowser.d.ts +23 -0
  77. package/dist/types/net/serverBrowser.d.ts.map +1 -0
  78. package/dist/types/scoreboard.d.ts +48 -0
  79. package/dist/types/scoreboard.d.ts.map +1 -0
  80. package/dist/types/scoreboard.test.d.ts +2 -0
  81. package/dist/types/scoreboard.test.d.ts.map +1 -0
  82. package/dist/types/session.d.ts +92 -0
  83. package/dist/types/session.d.ts.map +1 -0
  84. package/dist/types/ui/demo-controls.d.ts +14 -0
  85. package/dist/types/ui/demo-controls.d.ts.map +1 -0
  86. package/dist/types/ui/error.d.ts +13 -0
  87. package/dist/types/ui/error.d.ts.map +1 -0
  88. package/dist/types/ui/loading/screen.d.ts +12 -0
  89. package/dist/types/ui/loading/screen.d.ts.map +1 -0
  90. package/dist/types/ui/menu/demo.d.ts +19 -0
  91. package/dist/types/ui/menu/demo.d.ts.map +1 -0
  92. package/dist/types/ui/menu/main.d.ts +27 -0
  93. package/dist/types/ui/menu/main.d.ts.map +1 -0
  94. package/dist/types/ui/menu/maps.d.ts +11 -0
  95. package/dist/types/ui/menu/maps.d.ts.map +1 -0
  96. package/dist/types/ui/menu/multiplayer.d.ts +11 -0
  97. package/dist/types/ui/menu/multiplayer.d.ts.map +1 -0
  98. package/dist/types/ui/menu/options.d.ts +14 -0
  99. package/dist/types/ui/menu/options.d.ts.map +1 -0
  100. package/dist/types/ui/menu/pause.d.ts +12 -0
  101. package/dist/types/ui/menu/pause.d.ts.map +1 -0
  102. package/dist/types/ui/menu/render.d.ts +4 -0
  103. package/dist/types/ui/menu/render.d.ts.map +1 -0
  104. package/dist/types/ui/menu/saveLoad.d.ts +18 -0
  105. package/dist/types/ui/menu/saveLoad.d.ts.map +1 -0
  106. package/dist/types/ui/menu/system.d.ts +15 -0
  107. package/dist/types/ui/menu/system.d.ts.map +1 -0
  108. package/dist/types/ui/menu/types.d.ts +17 -0
  109. package/dist/types/ui/menu/types.d.ts.map +1 -0
  110. package/dist/types/ui/pakLoader.d.ts +23 -0
  111. package/dist/types/ui/pakLoader.d.ts.map +1 -0
  112. package/dist/types/ui/settings.d.ts +18 -0
  113. package/dist/types/ui/settings.d.ts.map +1 -0
  114. package/dist/types/ui/storage.d.ts +7 -0
  115. package/dist/types/ui/storage.d.ts.map +1 -0
  116. package/dist/types/ui/wheels/index.d.ts +16 -0
  117. package/dist/types/ui/wheels/index.d.ts.map +1 -0
  118. package/dist/types/view-effects.d.ts +3 -0
  119. package/dist/types/view-effects.d.ts.map +1 -0
  120. package/package.json +45 -0
@@ -0,0 +1,78 @@
1
+ import { EntityState, FrameData, NetworkMessageHandler, FogData, DamageIndicator } from '@quake2ts/engine';
2
+ import { Vec3 } from '@quake2ts/shared';
3
+ import { ClientPrediction } from '@quake2ts/cgame';
4
+ import { ClientEffectSystem } from '../effects-system.js';
5
+ export declare enum ConnectionState {
6
+ Disconnected = 0,
7
+ Connecting = 1,
8
+ Challenge = 2,
9
+ Connected = 3,
10
+ Loading = 4,
11
+ Active = 5
12
+ }
13
+ export interface ClientConnectionOptions {
14
+ prediction?: ClientPrediction;
15
+ effectSystem?: ClientEffectSystem;
16
+ }
17
+ /**
18
+ * Manages the client-side game state and protocol handling.
19
+ * Decoupled from the network transport (WebSocket/NetChan).
20
+ */
21
+ export declare class ClientConnection implements NetworkMessageHandler {
22
+ state: ConnectionState;
23
+ serverProtocol: number;
24
+ serverCount: number;
25
+ gameDir: string;
26
+ playerNum: number;
27
+ levelName: string;
28
+ configStrings: Map<number, string>;
29
+ baselines: Map<number, EntityState>;
30
+ entities: Map<number, EntityState>;
31
+ latestServerFrame: number;
32
+ private prediction?;
33
+ private effectSystem?;
34
+ onStateChange?: (state: ConnectionState) => void;
35
+ onDisconnected?: () => void;
36
+ onPacket?: (data: Uint8Array) => void;
37
+ private frameCRCs;
38
+ constructor(options?: ClientConnectionOptions);
39
+ reset(): void;
40
+ setState(newState: ConnectionState): void;
41
+ /**
42
+ * Processes a network message (payload) from the server.
43
+ * This expects the data to be already processed by NetChan (i.e., raw game protocol commands).
44
+ */
45
+ handleMessage(data: Uint8Array, crc?: number): void;
46
+ recordFrameCRC(frame: number, crc: number): void;
47
+ getFrameCRC(frame: number): number;
48
+ onServerData(protocol: number, serverCount: number, attractLoop: number, gameDir: string, playerNum: number, levelName: string): void;
49
+ onConfigString(index: number, str: string): void;
50
+ onSpawnBaseline(entity: EntityState): void;
51
+ onStuffText(msg: string): void;
52
+ onFrame(frame: FrameData): void;
53
+ onDisconnect(): void;
54
+ onCenterPrint(msg: string): void;
55
+ onPrint(level: number, msg: string): void;
56
+ onSound(flags: number, soundNum: number, volume?: number, attenuation?: number, offset?: number, ent?: number, pos?: Vec3): void;
57
+ onTempEntity(type: number, pos: Vec3, pos2?: Vec3, dir?: Vec3, cnt?: number, color?: number, ent?: number, srcEnt?: number, destEnt?: number): void;
58
+ onLayout(layout: string): void;
59
+ onInventory(inventory: number[]): void;
60
+ onMuzzleFlash(ent: number, weapon: number): void;
61
+ onMuzzleFlash2(ent: number, weapon: number): void;
62
+ onMuzzleFlash3(ent: number, weapon: number): void;
63
+ onReconnect(): void;
64
+ onDownload(size: number, percent: number, data?: Uint8Array): void;
65
+ onSplitClient(clientNum: number): void;
66
+ onConfigBlast(index: number, data: Uint8Array): void;
67
+ onSpawnBaselineBlast(entity: EntityState): void;
68
+ onLevelRestart(): void;
69
+ onDamage(indicators: DamageIndicator[]): void;
70
+ onLocPrint(flags: number, base: string, args: string[]): void;
71
+ onFog(data: FogData): void;
72
+ onWaitingForPlayers(count: number): void;
73
+ onBotChat(msg: string): void;
74
+ onPoi(flags: number, pos: Vec3): void;
75
+ onHelpPath(pos: Vec3): void;
76
+ onAchievement(id: string): void;
77
+ }
78
+ //# sourceMappingURL=clientConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientConnection.d.ts","sourceRoot":"","sources":["../../../src/net/clientConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { UserCommand, NetChan, Vec3 } from '@quake2ts/shared';
2
+ import { NetworkMessageHandler, EntityState, FrameData, DemoRecorder, FogData, DamageIndicator } from '@quake2ts/engine';
3
+ import { ClientPrediction } from '@quake2ts/cgame';
4
+ import { ClientEffectSystem } from '../effects-system.js';
5
+ export declare enum ConnectionState {
6
+ Disconnected = 0,
7
+ Connecting = 1,
8
+ Challenge = 2,
9
+ Connected = 3,
10
+ Loading = 4,
11
+ Active = 5
12
+ }
13
+ export interface MultiplayerConnectionOptions {
14
+ username: string;
15
+ model: string;
16
+ skin: string;
17
+ hand?: number;
18
+ fov?: number;
19
+ netchan?: NetChan;
20
+ }
21
+ export declare class MultiplayerConnection implements NetworkMessageHandler {
22
+ private driver;
23
+ private state;
24
+ private parser;
25
+ private options;
26
+ private netchan;
27
+ serverProtocol: number;
28
+ serverCount: number;
29
+ gameDir: string;
30
+ playerNum: number;
31
+ levelName: string;
32
+ configStrings: Map<number, string>;
33
+ baselines: Map<number, EntityState>;
34
+ entities: Map<number, EntityState>;
35
+ private challenge;
36
+ private connectPacketCount;
37
+ private connectPacketTime;
38
+ latestServerFrame: number;
39
+ private commandHistory;
40
+ prediction: ClientPrediction | null;
41
+ private demoRecorder;
42
+ onConnectionStateChange?: (state: ConnectionState) => void;
43
+ onConnectionError?: (error: Error) => void;
44
+ private lastPingTime;
45
+ private currentPing;
46
+ private effectSystem?;
47
+ private frameCRCs;
48
+ private currentPacketCRC;
49
+ constructor(options: MultiplayerConnectionOptions);
50
+ setPrediction(prediction: ClientPrediction): void;
51
+ setDemoRecorder(recorder: DemoRecorder): void;
52
+ setEffectSystem(system: ClientEffectSystem): void;
53
+ connectToServer(address: string, port: number): Promise<void>;
54
+ connect(url: string): Promise<void>;
55
+ disconnect(): void;
56
+ private cleanup;
57
+ private setState;
58
+ getPing(): number;
59
+ sendCommand(cmd: UserCommand): void;
60
+ private handleMessage;
61
+ private handleDisconnect;
62
+ private sendChallenge;
63
+ private sendConnect;
64
+ isConnected(): boolean;
65
+ onServerData(protocol: number, serverCount: number, attractLoop: number, gameDir: string, playerNum: number, levelName: string): void;
66
+ onConfigString(index: number, str: string): void;
67
+ onSpawnBaseline(entity: EntityState): void;
68
+ onStuffText(msg: string): void;
69
+ private finishLoading;
70
+ onFrame(frame: FrameData): void;
71
+ onCenterPrint(msg: string): void;
72
+ onPrint(level: number, msg: string): void;
73
+ onSound(flags: number, soundNum: number, volume?: number, attenuation?: number, offset?: number, ent?: number, pos?: Vec3): void;
74
+ onTempEntity(type: number, pos: Vec3, pos2?: Vec3, dir?: Vec3, cnt?: number, color?: number, ent?: number, srcEnt?: number, destEnt?: number): void;
75
+ onLayout(layout: string): void;
76
+ onInventory(inventory: number[]): void;
77
+ onMuzzleFlash(ent: number, weapon: number): void;
78
+ onMuzzleFlash2(ent: number, weapon: number): void;
79
+ onMuzzleFlash3(ent: number, weapon: number): void;
80
+ onDisconnect(): void;
81
+ onReconnect(): void;
82
+ onDownload(size: number, percent: number, data?: Uint8Array): void;
83
+ onSplitClient(clientNum: number): void;
84
+ onConfigBlast(index: number, data: Uint8Array): void;
85
+ onSpawnBaselineBlast(entity: EntityState): void;
86
+ onLevelRestart(): void;
87
+ onDamage(indicators: DamageIndicator[]): void;
88
+ onLocPrint(flags: number, base: string, args: string[]): void;
89
+ onFog(data: FogData): void;
90
+ onWaitingForPlayers(count: number): void;
91
+ onBotChat(msg: string): void;
92
+ onPoi(flags: number, pos: Vec3): void;
93
+ onHelpPath(pos: Vec3): void;
94
+ onAchievement(id: string): void;
95
+ }
96
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/net/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ServerInfo {
2
+ name: string;
3
+ address: string;
4
+ map: string;
5
+ players: number;
6
+ maxPlayers: number;
7
+ gamemode: string;
8
+ ping?: number;
9
+ }
10
+ /**
11
+ * Query master server for list of active game servers
12
+ *
13
+ * Note: Quake 2 master servers typically use UDP.
14
+ * This implementation assumes an HTTP-based master server or gateway
15
+ * compatible with web clients (WebSocket addresses).
16
+ *
17
+ * Expected JSON response format from master:
18
+ * [
19
+ * { "address": "ws://example.com:27910", "info": { "hostname": "Server", "mapname": "q2dm1", ... } }
20
+ * ]
21
+ *
22
+ * Or a simple list of addresses if we query them individually.
23
+ * For now, we'll assume a standard JSON structure.
24
+ */
25
+ export declare function queryMasterServer(masterUrl: string): Promise<ServerInfo[]>;
26
+ //# sourceMappingURL=master.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"master.d.ts","sourceRoot":"","sources":["../../../src/net/master.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA0ChF"}
@@ -0,0 +1,23 @@
1
+ export interface PlayerInfo {
2
+ name: string;
3
+ score: number;
4
+ ping: number;
5
+ }
6
+ export interface ServerInfo {
7
+ address: string;
8
+ hostName: string;
9
+ mapName: string;
10
+ playerCount: number;
11
+ maxPlayers: number;
12
+ protocol: number;
13
+ gameMode: string;
14
+ ping: number;
15
+ players: PlayerInfo[];
16
+ }
17
+ export declare class ServerBrowser {
18
+ private driver;
19
+ constructor();
20
+ queryServerInfo(address: string, port: number): Promise<ServerInfo>;
21
+ private parseStatusResponse;
22
+ }
23
+ //# sourceMappingURL=serverBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverBrowser.d.ts","sourceRoot":"","sources":["../../../src/net/serverBrowser.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAY;;IAMb,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkHhF,OAAO,CAAC,mBAAmB;CAsD5B"}
@@ -0,0 +1,48 @@
1
+ import { ClientConfigStrings } from './configStrings.js';
2
+ export interface ScoreboardEntry {
3
+ name: string;
4
+ frags: number;
5
+ deaths: number;
6
+ ping: number;
7
+ id: number;
8
+ skin?: string;
9
+ model?: string;
10
+ team?: string;
11
+ }
12
+ export interface ScoreboardData {
13
+ players: ScoreboardEntry[];
14
+ mapName: string;
15
+ }
16
+ export declare class ScoreboardManager {
17
+ private configStrings;
18
+ private localPlayerId;
19
+ private listeners;
20
+ private players;
21
+ constructor(configStrings: ClientConfigStrings);
22
+ setLocalPlayerId(id: number): void;
23
+ addListener(listener: (data: ScoreboardData) => void): void;
24
+ removeListener(listener: (data: ScoreboardData) => void): void;
25
+ notifyUpdate(): void;
26
+ private refreshAll;
27
+ parseConfigString(index: number, str: string): void;
28
+ getScoreboard(): ScoreboardData;
29
+ private parsePlayerConfigString;
30
+ updateScore(id: number, frags: number, deaths: number, ping: number): void;
31
+ /**
32
+ * Parses the layout string from svc_layout and updates player scores.
33
+ * Expected format example:
34
+ * xv 32 yv 32 string "%4i %4i %-12.12s %4i"
35
+ * followed by values? No, the string command draws text.
36
+ * In Q2, the layout message sends a series of drawing commands.
37
+ * The server formats the string:
38
+ * "xv 32 yv %i string \"%4i %4i %-12.12s %4i\" "
39
+ * The client receives the formatting commands AND the string data.
40
+ * Wait, svc_layout in Q2 sends a single string that the client parses and draws.
41
+ * The string contains tokens.
42
+ * Example:
43
+ * "xv 32 yv 32 string \" 10 50 PlayerName 10\""
44
+ * We need to regex this.
45
+ */
46
+ processScoreboardMessage(layout: string): void;
47
+ }
48
+ //# sourceMappingURL=scoreboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoreboard.d.ts","sourceRoot":"","sources":["../../src/scoreboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAA0C;IAG3D,OAAO,CAAC,OAAO,CAA2C;gBAE9C,aAAa,EAAE,mBAAmB;IAKvC,gBAAgB,CAAC,EAAE,EAAE,MAAM;IAI3B,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI;IAIpD,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI;IAOvD,YAAY;IAOnB,OAAO,CAAC,UAAU;IAWX,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IA4B5C,aAAa,IAAI,cAAc;IAyBtC,OAAO,CAAC,uBAAuB;IAoCxB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAU1E;;;;;;;;;;;;;;OAcG;IACI,wBAAwB,CAAC,MAAM,EAAE,MAAM;CA0D/C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scoreboard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoreboard.test.d.ts","sourceRoot":"","sources":["../../src/scoreboard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ import { ClientExports, InputSource, InputBindings, HudData, StatusBarData, CrosshairInfo } from './index.js';
2
+ import { MenuState } from './ui/menu/types.js';
3
+ import { GameExports, GameSaveFile, SaveStorage } from '@quake2ts/game';
4
+ import { EngineImports, Renderer, EngineHost } from '@quake2ts/engine';
5
+ import { UserCommand, PlayerState } from '@quake2ts/shared';
6
+ export interface SessionOptions {
7
+ mapName?: string;
8
+ skill?: number;
9
+ renderMode?: string;
10
+ audioEnabled?: boolean;
11
+ engine: EngineImports & {
12
+ renderer: Renderer;
13
+ cmd?: {
14
+ executeText(text: string): void;
15
+ };
16
+ };
17
+ }
18
+ export interface SaveMetadata {
19
+ timestamp: number;
20
+ mapName: string;
21
+ playtimeSeconds: number;
22
+ difficulty: number;
23
+ }
24
+ export declare class GameSession {
25
+ private client;
26
+ private game;
27
+ private engine;
28
+ private host;
29
+ private options;
30
+ private currentMapName;
31
+ private inputController;
32
+ private saveStorage;
33
+ private _onInputCommand?;
34
+ private _onHudUpdate?;
35
+ private _onCenterPrint?;
36
+ private _onNotify?;
37
+ private _onPickupMessage?;
38
+ private _onObituaryMessage?;
39
+ private _onMenuStateChange?;
40
+ private _onLoadComplete?;
41
+ private _onLoadError?;
42
+ constructor(options: SessionOptions);
43
+ startNewGame(mapName: string, skill?: number): void;
44
+ saveGame(slotName: string): Promise<GameSaveFile>;
45
+ getSaveMetadata(saveData: GameSaveFile): SaveMetadata;
46
+ loadGame(saveData: GameSaveFile): Promise<void>;
47
+ set onLoadComplete(handler: (() => void) | undefined);
48
+ get onLoadComplete(): (() => void) | undefined;
49
+ set onLoadError(handler: ((error: Error) => void) | undefined);
50
+ get onLoadError(): ((error: Error) => void) | undefined;
51
+ quickSave(): Promise<void>;
52
+ quickLoad(): Promise<void>;
53
+ hasQuickSave(): Promise<boolean>;
54
+ loadSavedGame(saveData: GameSaveFile): void;
55
+ shutdown(): void;
56
+ getClient(): ClientExports | null;
57
+ getGame(): GameExports | null;
58
+ getHost(): EngineHost | null;
59
+ getSaveStorage(): SaveStorage;
60
+ bindInputSource(source: InputSource): void;
61
+ setKeyBinding(action: string, keys: string[]): void;
62
+ getDefaultBindings(): InputBindings;
63
+ set onInputCommand(handler: ((cmd: UserCommand) => void) | undefined);
64
+ get onInputCommand(): ((cmd: UserCommand) => void) | undefined;
65
+ getHudData(): HudData | null;
66
+ getStatusBar(): StatusBarData | null;
67
+ getCrosshairInfo(): CrosshairInfo | null;
68
+ set onHudUpdate(handler: ((data: HudData) => void) | undefined);
69
+ get onHudUpdate(): ((data: HudData) => void) | undefined;
70
+ set onCenterPrint(handler: ((message: string, duration: number) => void) | undefined);
71
+ get onCenterPrint(): ((message: string, duration: number) => void) | undefined;
72
+ set onNotify(handler: ((message: string) => void) | undefined);
73
+ get onNotify(): ((message: string) => void) | undefined;
74
+ set onPickupMessage(handler: ((item: string) => void) | undefined);
75
+ get onPickupMessage(): ((item: string) => void) | undefined;
76
+ set onObituaryMessage(handler: ((message: string) => void) | undefined);
77
+ get onObituaryMessage(): ((message: string) => void) | undefined;
78
+ set onMenuStateChange(handler: ((active: boolean) => void) | undefined);
79
+ get onMenuStateChange(): ((active: boolean) => void) | undefined;
80
+ showPauseMenu(): void;
81
+ hidePauseMenu(): void;
82
+ isMenuActive(): boolean;
83
+ getMenuState(): MenuState | null;
84
+ getPlayerState(): PlayerState | null;
85
+ getGameTime(): number;
86
+ isPaused(): boolean;
87
+ getSkillLevel(): number;
88
+ getMapName(): string;
89
+ getGameMode(): 'single' | 'deathmatch' | 'coop';
90
+ }
91
+ export declare function createSession(options: SessionOptions): GameSession;
92
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgD,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5J,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAc,WAAW,EAAE,YAAY,EAAiC,WAAW,EAAyC,MAAM,gBAAgB,CAAC;AAC1J,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAwB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,aAAa,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE;YAAE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,CAAC;CAC3F;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAoF;IAClG,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAC,CAA6B;IACrD,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAAC,CAA8C;IACrE,OAAO,CAAC,SAAS,CAAC,CAA4B;IAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAyB;IAClD,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IACvD,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IACvD,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,YAAY,CAAC,CAAyB;gBAElC,OAAO,EAAE,cAAc;IAO5B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAkHhD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBvD,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY;IAU/C,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,IAAW,cAAc,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EAE1D;IAED,IAAW,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAEpD;IAED,IAAW,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,EAEnE;IAED,IAAW,WAAW,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAE7D;IAGY,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAY1B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB1B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAQtC,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAmH3C,QAAQ,IAAI,IAAI;IAYhB,SAAS,IAAI,aAAa,GAAG,IAAI;IAIjC,OAAO,IAAI,WAAW,GAAG,IAAI;IAI7B,OAAO,IAAI,UAAU,GAAG,IAAI;IAI5B,cAAc,IAAI,WAAW;IAI7B,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI1C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAInD,kBAAkB,IAAI,aAAa;IAI1C,IAAW,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,EAK1E;IAED,IAAW,cAAc,IAAI,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAEpE;IAGM,UAAU,IAAI,OAAO,GAAG,IAAI;IAI5B,YAAY,IAAI,aAAa,GAAG,IAAI;IAIpC,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAI/C,IAAW,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,EAKpE;IAED,IAAW,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAE9D;IAED,IAAW,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAK1F;IAED,IAAW,aAAa,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAEpF;IAED,IAAW,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAKnE;IAED,IAAW,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAE7D;IAED,IAAW,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAKvE;IAED,IAAW,eAAe,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAEjE;IAED,IAAW,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAK5E;IAED,IAAW,iBAAiB,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAEtE;IAED,IAAW,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,EAK5E;IAED,IAAW,iBAAiB,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAEtE;IAEM,aAAa,IAAI,IAAI;IAMrB,aAAa,IAAI,IAAI;IAMrB,YAAY,IAAI,OAAO;IAOvB,YAAY,IAAI,SAAS,GAAG,IAAI;IAShC,cAAc,IAAI,WAAW,GAAG,IAAI;IAOpC,WAAW,IAAI,MAAM;IAUrB,QAAQ,IAAI,OAAO;IAOnB,aAAa,IAAI,MAAM;IAOvB,UAAU,IAAI,MAAM;IAOpB,WAAW,IAAI,QAAQ,GAAG,YAAY,GAAG,MAAM;CAOvD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAElE"}
@@ -0,0 +1,14 @@
1
+ import { Renderer, DemoPlaybackController } from '@quake2ts/engine';
2
+ export declare class DemoControls {
3
+ private playback;
4
+ private isVisible;
5
+ private demoName;
6
+ private onSpeedChange?;
7
+ constructor(playback: DemoPlaybackController, onSpeedChange?: (speed: number) => void);
8
+ setDemoName(name: string | null): void;
9
+ render(renderer: Renderer, width: number, height: number): void;
10
+ handleInput(key: string, down: boolean): boolean;
11
+ private changeSpeed;
12
+ private formatTime;
13
+ }
14
+ //# sourceMappingURL=demo-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-controls.d.ts","sourceRoot":"","sources":["../../../src/ui/demo-controls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAiB,MAAM,kBAAkB,CAAC;AAEnF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAC,CAA0B;gBAEpC,QAAQ,EAAE,sBAAsB,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAK9E,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAgE/D,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;IAqCvD,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,UAAU;CAMnB"}
@@ -0,0 +1,13 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ export interface ErrorDialogState {
3
+ active: boolean;
4
+ title: string;
5
+ message: string;
6
+ }
7
+ export declare class ErrorDialog {
8
+ private state;
9
+ show(title: string, message: string): void;
10
+ hide(): void;
11
+ render(renderer: Renderer): void;
12
+ }
13
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/ui/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,KAAK,CAIX;IAEF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQnC,IAAI;IAIJ,MAAM,CAAC,QAAQ,EAAE,QAAQ;CAqB5B"}
@@ -0,0 +1,12 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ export declare class LoadingScreen {
3
+ private total;
4
+ private current;
5
+ private message;
6
+ private active;
7
+ start(total: number, message?: string): void;
8
+ update(current: number, message?: string): void;
9
+ finish(): void;
10
+ render(renderer: Renderer): void;
11
+ }
12
+ //# sourceMappingURL=screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../../src/ui/loading/screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,MAAM,CAAS;IAEvB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB;IAOnD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAOxC,MAAM;IAKN,MAAM,CAAC,QAAQ,EAAE,QAAQ;CAyB1B"}
@@ -0,0 +1,19 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { ClientExports } from '../../index.js';
4
+ export interface DemoMenuOptions {
5
+ onLoadDemoFile?: () => Promise<void>;
6
+ }
7
+ export declare class DemoMenuFactory {
8
+ private readonly menuSystem;
9
+ private readonly client;
10
+ private readonly options?;
11
+ private storage;
12
+ constructor(menuSystem: MenuSystem, client: ClientExports, options?: DemoMenuOptions | undefined);
13
+ createDemoMenu(): Menu;
14
+ private openStoredDemosMenu;
15
+ private openManageDemosMenu;
16
+ private playStoredDemo;
17
+ private loadDemoFromFilePicker;
18
+ }
19
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,eAAe;IAC5B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAL3B,OAAO,CAAC,OAAO,CAAc;gBAGV,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,eAAe,YAAA;IAK5C,cAAc,IAAI,IAAI;IAwCtB,OAAO,CAAC,mBAAmB;IA2C3B,OAAO,CAAC,mBAAmB;YAyBb,cAAc;IAe5B,OAAO,CAAC,sBAAsB;CA6C/B"}
@@ -0,0 +1,27 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { SaveLoadMenuFactory } from './saveLoad.js';
4
+ import { OptionsMenuFactory } from './options.js';
5
+ import { MapsMenuFactory } from './maps.js';
6
+ import { MultiplayerMenuFactory } from './multiplayer.js';
7
+ import { DemoMenuFactory } from './demo.js';
8
+ export interface MainMenuOptions {
9
+ onNewGame: () => void;
10
+ onQuit: () => void;
11
+ optionsFactory: OptionsMenuFactory;
12
+ mapsFactory: MapsMenuFactory;
13
+ onSetDifficulty?: (skill: number) => void;
14
+ showSaveOption?: boolean;
15
+ multiplayerFactory?: MultiplayerMenuFactory;
16
+ demoFactory?: DemoMenuFactory;
17
+ }
18
+ export declare class MainMenuFactory {
19
+ private readonly menuSystem;
20
+ private readonly saveLoadFactory;
21
+ private readonly options;
22
+ constructor(menuSystem: MenuSystem, saveLoadFactory: SaveLoadMenuFactory, options: MainMenuOptions);
23
+ createMainMenu(): Menu;
24
+ private createDifficultyMenu;
25
+ private startNewGame;
26
+ }
27
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,kBAAkB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,mBAAmB,EACpC,OAAO,EAAE,eAAe;IAG3C,cAAc,IAAI,IAAI;IAsEtB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,YAAY;CAMrB"}
@@ -0,0 +1,11 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { VirtualFileSystem } from '@quake2ts/engine';
4
+ export declare class MapsMenuFactory {
5
+ private readonly menuSystem;
6
+ private readonly vfs;
7
+ private readonly onStartMap;
8
+ constructor(menuSystem: MenuSystem, vfs: VirtualFileSystem, onStartMap: (mapName: string) => void);
9
+ createMapsMenu(): Menu;
10
+ }
11
+ //# sourceMappingURL=maps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/maps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAgB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAGxD,cAAc,IAAI,IAAI;CA+BvB"}
@@ -0,0 +1,11 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { MultiplayerConnection } from '../../net/connection.js';
4
+ export declare class MultiplayerMenuFactory {
5
+ private readonly menuSystem;
6
+ private readonly connection;
7
+ constructor(menuSystem: MenuSystem, connection: MultiplayerConnection);
8
+ createMultiplayerMenu(initialAddress?: string, status?: string): Menu;
9
+ private refreshMenu;
10
+ }
11
+ //# sourceMappingURL=multiplayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiplayer.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/multiplayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,qBAAqB;IAGpD,qBAAqB,CAAC,cAAc,GAAE,MAA0B,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI;IAiE5F,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,14 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { EngineHost } from '@quake2ts/engine';
4
+ export declare class OptionsMenuFactory {
5
+ private readonly menuSystem;
6
+ private readonly host;
7
+ constructor(menuSystem: MenuSystem, host: EngineHost);
8
+ createOptionsMenu(): Menu;
9
+ private createVideoMenu;
10
+ private createAudioMenu;
11
+ private createControlsMenu;
12
+ private createGameplayMenu;
13
+ }
14
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,UAAU;IAGnC,iBAAiB,IAAI,IAAI;IAoCzB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,kBAAkB;CA+B3B"}
@@ -0,0 +1,12 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { OptionsMenuFactory } from './options.js';
4
+ import { EngineHost } from '@quake2ts/engine';
5
+ export declare class PauseMenuFactory {
6
+ private readonly menuSystem;
7
+ private readonly optionsFactory;
8
+ private readonly host?;
9
+ constructor(menuSystem: MenuSystem, optionsFactory: OptionsMenuFactory, host?: EngineHost | undefined);
10
+ createPauseMenu(): Menu;
11
+ }
12
+ //# sourceMappingURL=pause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/pause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAFL,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,kBAAkB,EAClC,IAAI,CAAC,EAAE,UAAU,YAAA;IAGpC,eAAe,IAAI,IAAI;CAiCxB"}
@@ -0,0 +1,4 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ import { MenuState } from './types.js';
3
+ export declare function Draw_Menu(renderer: Renderer, state: MenuState, width: number, height: number): void;
4
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyDnG"}
@@ -0,0 +1,18 @@
1
+ import { Menu } from './types.js';
2
+ import { MenuSystem } from './system.js';
3
+ import { SaveStorage } from '@quake2ts/game';
4
+ export declare class SaveLoadMenuFactory {
5
+ private readonly menuSystem;
6
+ private readonly storage;
7
+ private readonly onSave;
8
+ private readonly onLoad;
9
+ private readonly onDelete;
10
+ constructor(menuSystem: MenuSystem, storage: SaveStorage, onSave: (name: string) => Promise<void>, onLoad: (slotId: string) => Promise<void>, onDelete: (slotId: string) => Promise<void>);
11
+ createSaveMenu(): Promise<Menu>;
12
+ createLoadMenu(): Promise<Menu>;
13
+ private createLoadActionMenu;
14
+ private createConfirmDeleteMenu;
15
+ private createNewSaveInputMenu;
16
+ private createConfirmOverwriteMenu;
17
+ }
18
+ //# sourceMappingURL=saveLoad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveLoad.d.ts","sourceRoot":"","sources":["../../../../src/ui/menu/saveLoad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAkC,MAAM,gBAAgB,CAAC;AAE7E,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAJR,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACvC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAGxD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC/B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCrC,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,0BAA0B;CAmBnC"}