@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,19 @@
1
+ import { DynamicLightManager, EngineImports, EntityState } from '@quake2ts/engine';
2
+ import { Vec3 } from '@quake2ts/shared';
3
+ import { ClientConfigStrings } from './configStrings.js';
4
+ export interface EntityProvider {
5
+ getEntity(entNum: number): EntityState | undefined;
6
+ getPlayerNum(): number;
7
+ }
8
+ export declare class ClientEffectSystem {
9
+ private dlightManager;
10
+ private engine;
11
+ private entityProvider;
12
+ private configStrings?;
13
+ constructor(dlightManager: DynamicLightManager, engine: EngineImports, entityProvider: EntityProvider, configStrings?: ClientConfigStrings);
14
+ private addLight;
15
+ private playSound;
16
+ onMuzzleFlash(entNum: number, weapon: number, time: number): void;
17
+ onTempEntity(type: number, pos: Vec3, time: number, dir?: Vec3, pos2?: Vec3): void;
18
+ }
19
+ //# sourceMappingURL=effects-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects-system.d.ts","sourceRoot":"","sources":["../../src/effects-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EACL,IAAI,EAOL,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAYzD,MAAM,WAAW,cAAc;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,YAAY,IAAI,MAAM,CAAC;CAC1B;AA2BD,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAC,CAAsB;gBAEhC,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,mBAAmB;IAQ1I,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,SAAS;IAaV,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAgH1D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;CA0JrF"}
@@ -0,0 +1,9 @@
1
+ import { Vec3 } from '@quake2ts/shared';
2
+ import { DLight } from '@quake2ts/engine';
3
+ export declare function processEntityEffects(entity: {
4
+ effects: number;
5
+ renderfx: number;
6
+ origin: Vec3;
7
+ alpha?: number;
8
+ }, dlights: DLight[], time: number): void;
9
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAoB1C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,QAmEb"}
@@ -0,0 +1,31 @@
1
+ import { RenderableEntity } from '@quake2ts/engine';
2
+ import { ClientConfigStrings } from './configStrings.js';
3
+ import { ClientImports } from './index.js';
4
+ type AnyEntityState = {
5
+ number: number;
6
+ origin: {
7
+ x: number;
8
+ y: number;
9
+ z: number;
10
+ };
11
+ angles: {
12
+ x: number;
13
+ y: number;
14
+ z: number;
15
+ };
16
+ frame: number;
17
+ alpha?: number;
18
+ scale?: number;
19
+ modelIndex?: number;
20
+ skinNum?: number;
21
+ renderfx?: number;
22
+ modelindex?: number;
23
+ skinnum?: number;
24
+ };
25
+ export declare function buildRenderableEntities(latestEntities: AnyEntityState[], previousEntities: AnyEntityState[] | Map<number, AnyEntityState>, alpha: number, configStrings: ClientConfigStrings, imports: ClientImports, cameraPosition?: {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ }): RenderableEntity[];
30
+ export {};
31
+ //# sourceMappingURL=entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/entities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAY,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAc3C,KAAK,cAAc,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,uBAAuB,CACnC,cAAc,EAAE,cAAc,EAAE,EAChC,gBAAgB,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,mBAAmB,EAClC,OAAO,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,gBAAgB,EAAE,CAoIpB"}
@@ -0,0 +1,4 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ import { PlayerState } from '@quake2ts/shared';
3
+ export declare const Draw_Blends: (renderer: Renderer, ps: PlayerState) => void;
4
+ //# sourceMappingURL=blends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blends.d.ts","sourceRoot":"","sources":["../../../src/hud/blends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,IAAI,WAAW,SAQ9D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { AssetManager, Renderer } from '@quake2ts/engine';
2
+ export declare const Init_Crosshair: (renderer: Renderer, assets: AssetManager) => Promise<void>;
3
+ export declare const Set_Crosshair: (index: number) => void;
4
+ export declare const Set_CrosshairColor: (r: number, g: number, b: number, a?: number) => void;
5
+ export declare const Cycle_Crosshair: () => number;
6
+ export declare const Draw_Crosshair: (renderer: Renderer, width: number, height: number) => void;
7
+ //# sourceMappingURL=crosshair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crosshair.d.ts","sourceRoot":"","sources":["../../../src/hud/crosshair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAO,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAU/D,eAAO,MAAM,cAAc,GAAU,UAAU,QAAQ,EAAE,QAAQ,YAAY,kBAmB5E,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,SAkB1C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,IAAG,MAAU,SAEhF,CAAA;AAED,eAAO,MAAM,eAAe,cAmC3B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,SAM/E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { AssetManager, Renderer } from '@quake2ts/engine';
2
+ import { PlayerState } from '@quake2ts/shared';
3
+ export declare const Init_Damage: (renderer: Renderer, assets: AssetManager) => Promise<void>;
4
+ export declare const Draw_Damage: (renderer: Renderer, ps: PlayerState) => void;
5
+ //# sourceMappingURL=damage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"damage.d.ts","sourceRoot":"","sources":["../../../src/hud/damage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAO,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAA+B,MAAM,kBAAkB,CAAC;AAQ5E,eAAO,MAAM,WAAW,GAAU,UAAU,QAAQ,EAAE,QAAQ,YAAY,kBAUzE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,IAAI,WAAW,SAoD9D,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface HudData {
2
+ health: number;
3
+ armor: number;
4
+ ammo: number;
5
+ ammoIcon?: string;
6
+ weaponIcon?: string;
7
+ pickupIcon?: string;
8
+ inventory: {
9
+ name: string;
10
+ count: number;
11
+ icon?: string;
12
+ }[];
13
+ damageIndicators: {
14
+ angle: number;
15
+ alpha: number;
16
+ }[];
17
+ fps: number;
18
+ }
19
+ export interface StatusBarData {
20
+ health: number;
21
+ armor: number;
22
+ ammo: number;
23
+ ammoIcon?: string;
24
+ armorIcon?: string;
25
+ selectedAmmoIndex: number;
26
+ }
27
+ export interface CrosshairInfo {
28
+ index: number;
29
+ name: string;
30
+ }
31
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/hud/data.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,3 @@
1
+ import { Renderer, FrameRenderStats } from '@quake2ts/engine';
2
+ export declare const Draw_Diagnostics: (renderer: Renderer, stats: FrameRenderStats) => void;
3
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/hud/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAAI,UAAU,QAAQ,EAAE,OAAO,gBAAgB,SAc3E,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AssetManager, Pic, Renderer } from '@quake2ts/engine';
2
+ import { PlayerClient } from '@quake2ts/game';
3
+ export declare const iconPics: Map<string, import("@quake2ts/engine").Texture2D>;
4
+ export declare const Init_Icons: (renderer: Renderer, assets: AssetManager) => Promise<void>;
5
+ export declare const Draw_Icons: (renderer: Renderer, client: PlayerClient, hudNumberPics: readonly Pic[], numberWidth: number, timeMs: number) => void;
6
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/hud/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA8C,MAAM,gBAAgB,CAAC;AAI1F,eAAO,MAAM,QAAQ,mDAAyB,CAAC;AAkB/C,eAAO,MAAM,UAAU,GAAU,UAAU,QAAQ,EAAE,QAAQ,YAAY,kBAUxE,CAAC;AAEF,eAAO,MAAM,UAAU,GACnB,UAAU,QAAQ,EAClB,QAAQ,YAAY,EACpB,eAAe,SAAS,GAAG,EAAE,EAC7B,aAAa,MAAM,EACnB,QAAQ,MAAM,SAmEjB,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const getHudLayout: (width: number, height: number) => {
2
+ HEALTH_X: number;
3
+ HEALTH_Y: number;
4
+ ARMOR_X: number;
5
+ ARMOR_Y: number;
6
+ AMMO_X: number;
7
+ AMMO_Y: number;
8
+ CENTER_PRINT_X: number;
9
+ CENTER_PRINT_Y: number;
10
+ WEAPON_ICON_X: number;
11
+ WEAPON_ICON_Y: number;
12
+ POWERUP_X: number;
13
+ POWERUP_Y: number;
14
+ scale: number;
15
+ };
16
+ export declare const HUD_LAYOUT: {
17
+ HEALTH_X: number;
18
+ HEALTH_Y: number;
19
+ ARMOR_X: number;
20
+ ARMOR_Y: number;
21
+ AMMO_X: number;
22
+ AMMO_Y: number;
23
+ CENTER_PRINT_X: number;
24
+ CENTER_PRINT_Y: number;
25
+ WEAPON_ICON_X: number;
26
+ WEAPON_ICON_Y: number;
27
+ POWERUP_X: number;
28
+ POWERUP_Y: number;
29
+ };
30
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/hud/layout.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM;;;;;;;;;;;;;;CA8CzD,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAatB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ import { getHudLayout } from './layout.js';
3
+ export declare class MessageSystem {
4
+ private centerPrintMsg;
5
+ private notifyMessages;
6
+ addCenterPrint(text: string, now: number): void;
7
+ addNotify(text: string, now: number): void;
8
+ drawCenterPrint(renderer: Renderer, now: number, layout: ReturnType<typeof getHudLayout>): void;
9
+ drawNotifications(renderer: Renderer, now: number): void;
10
+ }
11
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/hud/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAY3C,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,cAAc,CAAiB;IAEvC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAQxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAYnC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC;IAgBxF,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;CAYlD"}
@@ -0,0 +1,3 @@
1
+ import { Pic, Renderer } from '@quake2ts/engine';
2
+ export declare const Draw_Number: (renderer: Renderer, x: number, y: number, value: number, pics: readonly Pic[], width: number, color?: [number, number, number, number]) => void;
3
+ //# sourceMappingURL=numbers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../../src/hud/numbers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,SAAS,GAAG,EAAE,EAAE,OAAO,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,SASjK,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Renderer } from '@quake2ts/engine';
2
+ import { PlayerState } from '@quake2ts/shared';
3
+ export declare const Draw_Pickup: (renderer: Renderer, ps: PlayerState) => void;
4
+ //# sourceMappingURL=pickup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickup.d.ts","sourceRoot":"","sources":["../../../src/hud/pickup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,IAAI,WAAW,SAS9D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Pic, Renderer } from '@quake2ts/engine';
2
+ import { PlayerClient } from '@quake2ts/game';
3
+ import { getHudLayout } from './layout.js';
4
+ export declare const Set_ColorblindMode: (enabled: boolean) => void;
5
+ export declare const Draw_StatusBar: (renderer: Renderer, client: PlayerClient, health: number, armor: number, ammo: number, hudNumberPics: readonly Pic[], numberWidth: number, timeMs: number, layout: ReturnType<typeof getHudLayout>) => void;
6
+ //# sourceMappingURL=statusbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusbar.d.ts","sourceRoot":"","sources":["../../../src/hud/statusbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAmC,MAAM,gBAAgB,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,kBAAkB,GAAI,SAAS,OAAO,SAElD,CAAC;AAEF,eAAO,MAAM,cAAc,GACvB,UAAU,QAAQ,EAClB,QAAQ,YAAY,EACpB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,eAAe,SAAS,GAAG,EAAE,EAC7B,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,QAAQ,UAAU,CAAC,OAAO,YAAY,CAAC,SAkF1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { FrameRenderStats, AssetManager } from '@quake2ts/engine';
2
+ import { Renderer } from '@quake2ts/engine';
3
+ import { PlayerClient } from '@quake2ts/game';
4
+ import { PlayerState } from '@quake2ts/shared';
5
+ import { MessageSystem } from './hud/messages.js';
6
+ export declare const Init_Hud: (renderer: Renderer, assets: AssetManager) => Promise<void>;
7
+ export declare const Draw_Hud: (renderer: Renderer, ps: PlayerState, client: PlayerClient, health: number, armor: number, ammo: number, stats: FrameRenderStats, messageSystem: MessageSystem, timeMs: number) => void;
8
+ //# sourceMappingURL=hud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud.d.ts","sourceRoot":"","sources":["../../src/hud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAO,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASlD,eAAO,MAAM,QAAQ,GAAU,UAAU,QAAQ,EAAE,QAAQ,YAAY,kBAiBtE,CAAC;AAEF,eAAO,MAAM,QAAQ,GACjB,UAAU,QAAQ,EAClB,IAAI,WAAW,EACf,QAAQ,YAAY,EACpB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,gBAAgB,EACvB,eAAe,aAAa,EAC5B,QAAQ,MAAM,SAmCjB,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { ClientRenderer, EngineImports, GameFrameResult, Camera, Renderer, DemoPlaybackController, EngineHost } from '@quake2ts/engine';
2
+ import { UserCommand, Vec3 } from '@quake2ts/shared';
3
+ import { ClientPrediction, PredictionState } from '@quake2ts/cgame';
4
+ import { ViewEffects, ViewSample } from '@quake2ts/cgame';
5
+ import { FrameRenderStats } from '@quake2ts/engine';
6
+ import { ClientNetworkHandler } from './demo/handler.js';
7
+ import { ClientConfigStrings } from './configStrings.js';
8
+ import { MainMenuFactory, MainMenuOptions } from './ui/menu/main.js';
9
+ import { MenuSystem } from './ui/menu/system.js';
10
+ import { SaveStorage } from '@quake2ts/game';
11
+ import { InputBindings } from './input/bindings.js';
12
+ import { LoadingScreen } from './ui/loading/screen.js';
13
+ import { ErrorDialog } from './ui/error.js';
14
+ import { MultiplayerConnection } from './net/connection.js';
15
+ import { DynamicLightManager } from '@quake2ts/engine';
16
+ import { DemoCameraMode } from './demo/camera.js';
17
+ import { ScoreboardData } from './scoreboard.js';
18
+ import { HudData, StatusBarData, CrosshairInfo } from './hud/data.js';
19
+ import { MenuState } from './ui/menu/types.js';
20
+ import { LodModel } from './lod.js';
21
+ export { createDefaultBindings, InputBindings, normalizeCommand, normalizeInputCode } from './input/bindings.js';
22
+ import { InputController, InputSource } from './input/controller.js';
23
+ export { GamepadLike, GamepadLikeButton, InputAction, InputController, InputSource, TouchInputState, type InputControllerOptions, } from './input/controller.js';
24
+ export { InputCommandBuffer, type QueuedFrameCommands, } from './input/command-buffer.js';
25
+ export { ClientPrediction, interpolatePredictionState, defaultPredictionState, } from '@quake2ts/cgame';
26
+ export type { PredictionSettings, PredictionState } from '@quake2ts/cgame';
27
+ export { ViewEffects } from '@quake2ts/cgame';
28
+ export type { ViewEffectSettings, ViewKick, ViewSample } from '@quake2ts/cgame';
29
+ export { ClientConfigStrings } from './configStrings.js';
30
+ export * from './scoreboard.js';
31
+ export { HudData, StatusBarData, CrosshairInfo } from './hud/data.js';
32
+ export * from './session.js';
33
+ export * from './demo/camera.js';
34
+ export { queryMasterServer, type ServerInfo } from './net/master.js';
35
+ export interface ClientImports {
36
+ readonly engine: EngineImports & {
37
+ renderer: Renderer;
38
+ cmd?: {
39
+ executeText(text: string): void;
40
+ };
41
+ };
42
+ readonly host?: EngineHost;
43
+ readonly inputController?: InputController;
44
+ }
45
+ export declare enum ClientMode {
46
+ Normal = 0,
47
+ DemoPlayback = 1,
48
+ Multiplayer = 2
49
+ }
50
+ export interface ClientExports extends ClientRenderer<PredictionState> {
51
+ predict(command: UserCommand): PredictionState;
52
+ ParseCenterPrint(msg: string): void;
53
+ ParseNotify(msg: string): void;
54
+ ParseConfigString(index: number, value: string): void;
55
+ showSubtitle(text: string, soundName: string): void;
56
+ readonly prediction: ClientPrediction;
57
+ readonly lastRendered?: PredictionState;
58
+ readonly view: ViewEffects;
59
+ readonly lastView?: ViewSample;
60
+ readonly configStrings: ClientConfigStrings;
61
+ camera?: Camera;
62
+ demoPlayback: DemoPlaybackController;
63
+ demoHandler: ClientNetworkHandler;
64
+ readonly isDemoPlaying: boolean;
65
+ readonly currentDemoName: string | null;
66
+ readonly mode: ClientMode;
67
+ startDemoPlayback(buffer: ArrayBuffer, filename: string): void;
68
+ stopDemoPlayback(): void;
69
+ setDemoCameraMode(mode: DemoCameraMode): void;
70
+ setDemoThirdPersonDistance(dist: number): void;
71
+ setDemoThirdPersonOffset(offset: Vec3): void;
72
+ setDemoFreeCamera(origin: Vec3, angles: Vec3): void;
73
+ setDemoFollowEntity(entityId: number): void;
74
+ setSpectatorTarget(targetEntityId: number | null): void;
75
+ getSpectatorTargets(): {
76
+ id: number;
77
+ name: string;
78
+ }[];
79
+ multiplayer: MultiplayerConnection;
80
+ startRecording(filename: string): void;
81
+ stopRecording(): void;
82
+ createMainMenu(options: Omit<MainMenuOptions, 'optionsFactory' | 'mapsFactory' | 'onSetDifficulty' | 'multiplayerFactory'>, storage: SaveStorage, saveCallback: (name: string) => Promise<void>, loadCallback: (slot: string) => Promise<void>, deleteCallback: (slot: string) => Promise<void>): {
83
+ menuSystem: MenuSystem;
84
+ factory: MainMenuFactory;
85
+ };
86
+ showPauseMenu(): void;
87
+ hidePauseMenu(): void;
88
+ isMenuActive(): boolean;
89
+ onMenuStateChange?: (active: boolean) => void;
90
+ getMenuState(): MenuState;
91
+ handleInput(key: string, down: boolean): boolean;
92
+ toggleMenu(): void;
93
+ bindInputSource(source: InputSource): void;
94
+ setKeyBinding(action: string, keys: string[]): void;
95
+ getDefaultBindings(): InputBindings;
96
+ onInputCommand?: (cmd: UserCommand) => void;
97
+ Init(initial?: GameFrameResult<PredictionState>): void;
98
+ Shutdown(): void;
99
+ DrawHUD(stats: FrameRenderStats, timeMs: number): void;
100
+ readonly loadingScreen: LoadingScreen;
101
+ readonly errorDialog: ErrorDialog;
102
+ readonly dlightManager: DynamicLightManager;
103
+ getScoreboard(): ScoreboardData;
104
+ onScoreboardUpdate?: (scoreboard: ScoreboardData) => void;
105
+ sendChatMessage(message: string, team?: boolean): void;
106
+ onChatMessage?: (sender: string, message: string, team: boolean) => void;
107
+ getChatHistory(): any[];
108
+ getHudData(): HudData | null;
109
+ getStatusBar(): StatusBarData | null;
110
+ getCrosshairInfo(): CrosshairInfo;
111
+ onHudUpdate?: (data: HudData) => void;
112
+ onCenterPrint?: (message: string, duration: number) => void;
113
+ onNotify?: (message: string) => void;
114
+ onPickupMessage?: (item: string) => void;
115
+ onObituaryMessage?: (message: string) => void;
116
+ registerLod(baseModel: string, lods: LodModel[]): void;
117
+ }
118
+ export declare function createClient(imports: ClientImports): ClientExports;
119
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type InputCode = string;
2
+ export interface BindingEntry {
3
+ readonly code: InputCode;
4
+ readonly command: string;
5
+ }
6
+ export declare const DEFAULT_BINDINGS: readonly BindingEntry[];
7
+ export type BindingMap = ReadonlyMap<InputCode, string>;
8
+ export declare class InputBindings {
9
+ private readonly bindings;
10
+ constructor(entries?: Iterable<BindingEntry>);
11
+ bind(code: InputCode, command: string): void;
12
+ unbind(code: InputCode): void;
13
+ getBinding(code: InputCode): string | undefined;
14
+ getBoundKeys(command: string): InputCode[];
15
+ entries(): BindingMap;
16
+ }
17
+ export declare function createDefaultBindings(): InputBindings;
18
+ export declare function normalizeInputCode(code: string): InputCode;
19
+ export declare function normalizeCommand(command: string): string;
20
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/input/bindings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAkCnD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAExD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAE7C,OAAO,GAAE,QAAQ,CAAC,YAAY,CAAoB;IAM9D,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5C,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI7B,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAI/C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAW1C,OAAO,IAAI,UAAU;CAGtB;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,15 @@
1
+ import type { UserCommand } from '@quake2ts/shared';
2
+ import { InputController, type InputControllerOptions } from './controller.js';
3
+ export interface QueuedFrameCommands {
4
+ readonly command: UserCommand;
5
+ readonly console: readonly string[];
6
+ }
7
+ export declare class InputCommandBuffer {
8
+ private readonly controller;
9
+ private readonly queued;
10
+ constructor(options?: InputControllerOptions, controller?: InputController);
11
+ captureFrame(frameMsec: number, now?: number, serverFrame?: number): QueuedFrameCommands;
12
+ consumeQueued(): readonly QueuedFrameCommands[];
13
+ getController(): InputController;
14
+ }
15
+ //# sourceMappingURL=command-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-buffer.d.ts","sourceRoot":"","sources":["../../../src/input/command-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,OAAO,CAAC,EAAE,sBAAsB,EAAE,UAAU,kBAA+B;IAIvF,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAQxF,aAAa,IAAI,SAAS,mBAAmB,EAAE;IAM/C,aAAa,IAAI,eAAe;CAGjC"}
@@ -0,0 +1,139 @@
1
+ import { type UserCommand } from '@quake2ts/shared';
2
+ import { InputBindings, type InputCode } from './bindings.js';
3
+ export interface GamepadLikeButton {
4
+ readonly pressed: boolean;
5
+ readonly value: number;
6
+ }
7
+ export interface GamepadLike {
8
+ readonly axes: readonly number[];
9
+ readonly buttons: readonly GamepadLikeButton[];
10
+ readonly index?: number;
11
+ readonly connected?: boolean;
12
+ }
13
+ export interface TouchInputState {
14
+ readonly move?: {
15
+ readonly x: number;
16
+ readonly y: number;
17
+ };
18
+ readonly look?: {
19
+ readonly x: number;
20
+ readonly y: number;
21
+ };
22
+ readonly buttons?: Partial<Record<InputAction, boolean>>;
23
+ }
24
+ export interface InputSource {
25
+ on(event: 'keydown', handler: (code: string) => void): void;
26
+ on(event: 'keyup', handler: (code: string) => void): void;
27
+ on(event: 'mousedown', handler: (button: number) => void): void;
28
+ on(event: 'mouseup', handler: (button: number) => void): void;
29
+ on(event: 'mousemove', handler: (dx: number, dy: number) => void): void;
30
+ }
31
+ export interface InputControllerOptions {
32
+ readonly forwardSpeed?: number;
33
+ readonly sideSpeed?: number;
34
+ readonly upSpeed?: number;
35
+ readonly yawSpeed?: number;
36
+ readonly pitchSpeed?: number;
37
+ readonly sensitivity?: number;
38
+ readonly sensitivityX?: number;
39
+ readonly sensitivityY?: number;
40
+ readonly invertMouseY?: boolean;
41
+ readonly runByDefault?: boolean;
42
+ readonly requirePointerLock?: boolean;
43
+ readonly jumpAddsUpMove?: boolean;
44
+ readonly crouchAddsDownMove?: boolean;
45
+ readonly mouseFilter?: boolean;
46
+ readonly getGamepads?: () => readonly (GamepadLike | null | undefined)[];
47
+ readonly gamepadDeadZone?: number;
48
+ readonly gamepadLookScale?: number;
49
+ readonly invertGamepadY?: boolean;
50
+ }
51
+ export declare enum InputAction {
52
+ Forward = "+forward",
53
+ Back = "+back",
54
+ MoveLeft = "+moveleft",
55
+ MoveRight = "+moveright",
56
+ MoveUp = "+moveup",
57
+ MoveDown = "+movedown",
58
+ Jump = "+jump",
59
+ Crouch = "+crouch",
60
+ Attack = "+attack",
61
+ Use = "+use",
62
+ Holster = "+holster",
63
+ TurnLeft = "+left",
64
+ TurnRight = "+right",
65
+ LookUp = "+lookup",
66
+ LookDown = "+lookdown",
67
+ SpeedModifier = "+speed",
68
+ Zoom = "+zoom"
69
+ }
70
+ export declare class InputController {
71
+ private readonly bindings;
72
+ private readonly buttons;
73
+ private viewAngles;
74
+ private pointerLocked;
75
+ private mouseDelta;
76
+ private previousMouseDelta;
77
+ private anyPressed;
78
+ private commandQueue;
79
+ private pendingGamepads;
80
+ private readonly gamepadButtons;
81
+ private gamepadMove;
82
+ private gamepadLook;
83
+ private pendingTouchState;
84
+ private readonly touchButtons;
85
+ private touchMove;
86
+ private touchLook;
87
+ private readonly forwardSpeed;
88
+ private readonly sideSpeed;
89
+ private readonly upSpeed;
90
+ private readonly yawSpeed;
91
+ private readonly pitchSpeed;
92
+ private readonly sensitivity;
93
+ private readonly sensitivityX?;
94
+ private readonly sensitivityY?;
95
+ private readonly invertMouseY;
96
+ private readonly runByDefault;
97
+ private readonly requirePointerLock;
98
+ private readonly jumpAddsUpMove;
99
+ private readonly crouchAddsDownMove;
100
+ private readonly mouseFilter;
101
+ private readonly getGamepads?;
102
+ private readonly gamepadDeadZone;
103
+ private readonly gamepadLookScale;
104
+ private readonly invertGamepadY;
105
+ private sequence;
106
+ private impulse;
107
+ onInputCommand?: (cmd: UserCommand) => void;
108
+ constructor(options?: InputControllerOptions, bindings?: InputBindings);
109
+ handleKeyDown(code: string, eventTimeMs?: number): void;
110
+ handleKeyUp(code: string, eventTimeMs?: number): void;
111
+ handleMouseButtonDown(button: number, eventTimeMs?: number): void;
112
+ handleMouseButtonUp(button: number, eventTimeMs?: number): void;
113
+ handleMouseMove(deltaX: number, deltaY: number): void;
114
+ setPointerLocked(locked: boolean): void;
115
+ setGamepadState(gamepads: readonly (GamepadLike | null | undefined)[]): void;
116
+ setTouchState(state: TouchInputState): void;
117
+ bindInputSource(source: InputSource): void;
118
+ setKeyBinding(action: string, keys: string[]): void;
119
+ getBoundKeys(command: string): InputCode[];
120
+ getDefaultBindings(): InputBindings;
121
+ buildCommand(frameMsec: number, now?: number, serverFrame?: number): UserCommand;
122
+ consumeConsoleCommands(): readonly string[];
123
+ private pollGamepads;
124
+ private applyTouchState;
125
+ private applyCommand;
126
+ private sampleMouseDelta;
127
+ private collectButtonBits;
128
+ private lookupButton;
129
+ private mouseButtonToCode;
130
+ private mouseButtonToCommand;
131
+ private sample;
132
+ private gamepadButtonCode;
133
+ private touchButtonCode;
134
+ private clampAnalog;
135
+ private applyDeadZone;
136
+ private mergeAnalog;
137
+ private clampMove;
138
+ }
139
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/input/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAwC,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAIpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAQD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1D,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9D,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACzE;AAuDD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IACzE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,oBAAY,WAAW;IACrB,OAAO,aAAa;IACpB,IAAI,UAAU;IACd,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,MAAM,YAAY;IAClB,QAAQ,cAAc;IACtB,IAAI,UAAU;IACd,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,GAAG,SAAS;IACZ,OAAO,aAAa;IACpB,QAAQ,UAAU;IAClB,SAAS,WAAW;IACpB,MAAM,YAAY;IAClB,QAAQ,cAAc;IACtB,aAAa,WAAW;IACxB,IAAI,UAAU;CACf;AA0BD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,kBAAkB,CAAwC;IAClE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,eAAe,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAoD;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEzC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAK;IAEb,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;gBAEvC,OAAO,GAAE,sBAA2B,EAAE,QAAQ,gBAAsB;IAsBhF,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgB,GAAG,IAAI;IAQhE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgB,GAAG,IAAI;IAQ9D,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgB,GAAG,IAAI;IAK1E,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgB,GAAG,IAAI;IAKxE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASrD,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIvC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI;IAI5E,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAI3C,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAQ1C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAOnD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAI1C,kBAAkB,IAAI,aAAa;IAInC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAgB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW;IAqIzF,sBAAsB,IAAI,SAAS,MAAM,EAAE;IAM3C,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;CAGlB"}
@@ -0,0 +1,11 @@
1
+ export interface LodModel {
2
+ distance: number;
3
+ model: string;
4
+ }
5
+ export declare class LodRegistry {
6
+ private registry;
7
+ register(baseModel: string, lods: LodModel[]): void;
8
+ getLodModel(baseModel: string, distance: number): string | undefined;
9
+ }
10
+ export declare const lodRegistry: LodRegistry;
11
+ //# sourceMappingURL=lod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lod.d.ts","sourceRoot":"","sources":["../../src/lod.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAiC;IAEjD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;IAK5C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAuBvE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { NetDriver } from '@quake2ts/shared';
2
+ export declare class BrowserWebSocketNetDriver implements NetDriver {
3
+ private socket;
4
+ private messageCallback;
5
+ private closeCallback;
6
+ private errorCallback;
7
+ connect(url: string): Promise<void>;
8
+ disconnect(): void;
9
+ send(data: Uint8Array): void;
10
+ onMessage(callback: (data: Uint8Array) => void): void;
11
+ onClose(callback: () => void): void;
12
+ onError(callback: (error: Error) => void): void;
13
+ isConnected(): boolean;
14
+ }
15
+ //# sourceMappingURL=browserWsDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserWsDriver.d.ts","sourceRoot":"","sources":["../../../src/net/browserWsDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,qBAAa,yBAA0B,YAAW,SAAS;IACzD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAyC;IAExD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCzC,UAAU,IAAI,IAAI;IAOlB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAQ5B,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAIrD,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAInC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI/C,WAAW,IAAI,OAAO;CAGvB"}