quake2ts 0.0.7 → 0.0.39
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/README.md +425 -0
- package/apps/viewer/dist/browser/index.global.js +1 -1
- package/apps/viewer/dist/browser/index.global.js.map +1 -1
- package/apps/viewer/dist/cjs/index.cjs +2097 -295
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +2097 -295
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/viewer/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +1200 -13
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +1186 -12
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +14 -6
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/input/bindings.d.ts +18 -0
- package/packages/client/dist/types/input/bindings.d.ts.map +1 -0
- package/packages/client/dist/types/input/command-buffer.d.ts +15 -0
- package/packages/client/dist/types/input/command-buffer.d.ts.map +1 -0
- package/packages/client/dist/types/input/controller.d.ts +125 -0
- package/packages/client/dist/types/input/controller.d.ts.map +1 -0
- package/packages/client/dist/types/prediction.d.ts +38 -0
- package/packages/client/dist/types/prediction.d.ts.map +1 -0
- package/packages/client/dist/types/view-effects.d.ts +41 -0
- package/packages/client/dist/types/view-effects.d.ts.map +1 -0
- package/packages/engine/dist/browser/index.global.js +257 -1
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +2408 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +2340 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/animation.d.ts +33 -0
- package/packages/engine/dist/types/assets/animation.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/audio.d.ts +21 -0
- package/packages/engine/dist/types/assets/audio.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/bsp.d.ts +1 -1
- package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/ingestion.d.ts +31 -0
- package/packages/engine/dist/types/assets/ingestion.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/manager.d.ts +43 -0
- package/packages/engine/dist/types/assets/manager.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/md3.d.ts +69 -0
- package/packages/engine/dist/types/assets/md3.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/ogg.d.ts +12 -0
- package/packages/engine/dist/types/assets/ogg.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pakIndexStore.d.ts +19 -0
- package/packages/engine/dist/types/assets/pakIndexStore.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pakValidation.d.ts +28 -0
- package/packages/engine/dist/types/assets/pakValidation.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pcx.d.ts +13 -0
- package/packages/engine/dist/types/assets/pcx.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/texture.d.ts +29 -0
- package/packages/engine/dist/types/assets/texture.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/wal.d.ts +21 -0
- package/packages/engine/dist/types/assets/wal.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/wav.d.ts +11 -0
- package/packages/engine/dist/types/assets/wav.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/api.d.ts +29 -0
- package/packages/engine/dist/types/audio/api.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/channels.d.ts +15 -0
- package/packages/engine/dist/types/audio/channels.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/constants.d.ts +24 -0
- package/packages/engine/dist/types/audio/constants.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/context.d.ts +67 -0
- package/packages/engine/dist/types/audio/context.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/music.d.ts +42 -0
- package/packages/engine/dist/types/audio/music.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/precache.d.ts +28 -0
- package/packages/engine/dist/types/audio/precache.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/registry.d.ts +13 -0
- package/packages/engine/dist/types/audio/registry.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/spatialization.d.ts +14 -0
- package/packages/engine/dist/types/audio/spatialization.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/system.d.ts +101 -0
- package/packages/engine/dist/types/audio/system.d.ts.map +1 -0
- package/packages/engine/dist/types/configstrings.d.ts +1 -0
- package/packages/engine/dist/types/configstrings.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +26 -1
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/bspPipeline.d.ts +42 -0
- package/packages/engine/dist/types/render/bspPipeline.d.ts.map +1 -0
- package/packages/engine/dist/types/render/bspTraversal.d.ts +11 -0
- package/packages/engine/dist/types/render/bspTraversal.d.ts.map +1 -0
- package/packages/engine/dist/types/render/culling.d.ts +8 -0
- package/packages/engine/dist/types/render/culling.d.ts.map +1 -0
- package/packages/engine/dist/types/render/md2Pipeline.d.ts +51 -0
- package/packages/engine/dist/types/render/md2Pipeline.d.ts.map +1 -0
- package/packages/engine/dist/types/render/resources.d.ts +10 -0
- package/packages/engine/dist/types/render/resources.d.ts.map +1 -1
- package/packages/engine/dist/types/render/skybox.d.ts +26 -0
- package/packages/engine/dist/types/render/skybox.d.ts.map +1 -0
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +2926 -116
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +2863 -115
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/ai/constants.d.ts +13 -0
- package/packages/game/dist/types/ai/constants.d.ts.map +1 -0
- package/packages/game/dist/types/ai/index.d.ts +4 -0
- package/packages/game/dist/types/ai/index.d.ts.map +1 -0
- package/packages/game/dist/types/ai/movement.d.ts +20 -0
- package/packages/game/dist/types/ai/movement.d.ts.map +1 -0
- package/packages/game/dist/types/ai/perception.d.ts +21 -0
- package/packages/game/dist/types/ai/perception.d.ts.map +1 -0
- package/packages/game/dist/types/checksum.d.ts +3 -0
- package/packages/game/dist/types/checksum.d.ts.map +1 -0
- package/packages/game/dist/types/combat/armor.d.ts +39 -0
- package/packages/game/dist/types/combat/armor.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damage.d.ts +52 -0
- package/packages/game/dist/types/combat/damage.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damageFlags.d.ts +15 -0
- package/packages/game/dist/types/combat/damageFlags.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damageMods.d.ts +79 -0
- package/packages/game/dist/types/combat/damageMods.d.ts.map +1 -0
- package/packages/game/dist/types/combat/index.d.ts +6 -0
- package/packages/game/dist/types/combat/index.d.ts.map +1 -0
- package/packages/game/dist/types/combat/specialDamage.d.ts +88 -0
- package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -0
- package/packages/game/dist/types/entities/entity.d.ts +46 -2
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/index.d.ts +6 -2
- package/packages/game/dist/types/entities/index.d.ts.map +1 -1
- package/packages/game/dist/types/entities/pool.d.ts +9 -0
- package/packages/game/dist/types/entities/pool.d.ts.map +1 -1
- package/packages/game/dist/types/entities/spawn.d.ts +27 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -0
- package/packages/game/dist/types/entities/system.d.ts +32 -1
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/entities/thinkScheduler.d.ts +6 -0
- package/packages/game/dist/types/entities/thinkScheduler.d.ts.map +1 -1
- package/packages/game/dist/types/entities/triggers.d.ts +3 -0
- package/packages/game/dist/types/entities/triggers.d.ts.map +1 -0
- package/packages/game/dist/types/entities/utils.d.ts +4 -0
- package/packages/game/dist/types/entities/utils.d.ts.map +1 -0
- package/packages/game/dist/types/index.d.ts +5 -0
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/ammo.d.ts +17 -0
- package/packages/game/dist/types/inventory/ammo.d.ts.map +1 -0
- package/packages/game/dist/types/inventory/index.d.ts +2 -0
- package/packages/game/dist/types/inventory/index.d.ts.map +1 -0
- package/packages/game/dist/types/level.d.ts +1 -0
- package/packages/game/dist/types/level.d.ts.map +1 -1
- package/packages/game/dist/types/save/index.d.ts +4 -0
- package/packages/game/dist/types/save/index.d.ts.map +1 -0
- package/packages/game/dist/types/save/rerelease.d.ts +25 -0
- package/packages/game/dist/types/save/rerelease.d.ts.map +1 -0
- package/packages/game/dist/types/save/save.d.ts +49 -0
- package/packages/game/dist/types/save/save.d.ts.map +1 -0
- package/packages/game/dist/types/save/storage.d.ts +37 -0
- package/packages/game/dist/types/save/storage.d.ts.map +1 -0
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +638 -9
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +616 -9
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/bsp/collision.d.ts +56 -0
- package/packages/shared/dist/types/bsp/collision.d.ts.map +1 -1
- package/packages/shared/dist/types/bsp/contents.d.ts +1 -0
- package/packages/shared/dist/types/bsp/contents.d.ts.map +1 -1
- package/packages/shared/dist/types/index.d.ts +2 -0
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/math/random.d.ts +11 -0
- package/packages/shared/dist/types/math/random.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/contracts.d.ts +17 -0
- package/packages/shared/dist/types/protocol/contracts.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/usercmd.d.ts +30 -0
- package/packages/shared/dist/types/protocol/usercmd.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import { MusicSystem } from './music.js';
|
|
3
|
+
import { SoundRegistry } from './registry.js';
|
|
4
|
+
import { AudioSystem, type SoundRequest } from './system.js';
|
|
5
|
+
export interface AudioApiOptions {
|
|
6
|
+
registry: SoundRegistry;
|
|
7
|
+
system: AudioSystem;
|
|
8
|
+
music?: MusicSystem;
|
|
9
|
+
}
|
|
10
|
+
export declare class AudioApi {
|
|
11
|
+
private readonly registry;
|
|
12
|
+
private readonly system;
|
|
13
|
+
private readonly music?;
|
|
14
|
+
constructor(options: AudioApiOptions);
|
|
15
|
+
soundindex(name: string): number;
|
|
16
|
+
sound(entity: number, channel: number, soundindex: number, volume: number, attenuation: number, timeofs: number): void;
|
|
17
|
+
positioned_sound(origin: Vec3, soundindex: number, volume: number, attenuation: number): void;
|
|
18
|
+
loop_sound(entity: number, channel: number, soundindex: number, volume: number, attenuation: number): void;
|
|
19
|
+
stop_entity_sounds(entnum: number): void;
|
|
20
|
+
set_listener(listener: Parameters<AudioSystem['setListener']>[0]): void;
|
|
21
|
+
play_music(track: string, loop?: boolean): Promise<void>;
|
|
22
|
+
pause_music(): void;
|
|
23
|
+
resume_music(): Promise<void>;
|
|
24
|
+
stop_music(): void;
|
|
25
|
+
set_music_volume(volume: number): void;
|
|
26
|
+
play_ambient(origin: Vec3, soundindex: number, volume: number): void;
|
|
27
|
+
play_channel(request: Omit<SoundRequest, 'looping'>): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/audio/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAc;gBAEzB,OAAO,EAAE,eAAe;IAMpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWtH,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI7F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAW1G,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,WAAW,IAAI,IAAI;IAInB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,UAAU,IAAI,IAAI;IAIlB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI;CAG3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const baseChannel: (entchannel: number) => number;
|
|
2
|
+
export interface ChannelState {
|
|
3
|
+
entnum: number;
|
|
4
|
+
entchannel: number;
|
|
5
|
+
endTimeMs: number;
|
|
6
|
+
isPlayer: boolean;
|
|
7
|
+
active: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ChannelPickContext {
|
|
10
|
+
readonly nowMs: number;
|
|
11
|
+
readonly playerEntity?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function createInitialChannels(playerEntity?: number): ChannelState[];
|
|
14
|
+
export declare function pickChannel(channels: ChannelState[], entnum: number, entchannel: number, context: ChannelPickContext): number | undefined;
|
|
15
|
+
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/audio/channels.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAAmC,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAQ3E;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,GAAG,SAAS,CAkCpB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const MAX_SOUND_CHANNELS = 32;
|
|
2
|
+
export declare enum SoundChannel {
|
|
3
|
+
Auto = 0,
|
|
4
|
+
Weapon = 1,
|
|
5
|
+
Voice = 2,
|
|
6
|
+
Item = 3,
|
|
7
|
+
Body = 4,
|
|
8
|
+
Aux = 5,
|
|
9
|
+
Footstep = 6,
|
|
10
|
+
Aux3 = 7,
|
|
11
|
+
NoPhsAdd = 8,
|
|
12
|
+
Reliable = 16,
|
|
13
|
+
ForcePos = 32
|
|
14
|
+
}
|
|
15
|
+
export declare const ATTN_LOOP_NONE = -1;
|
|
16
|
+
export declare const ATTN_NONE = 0;
|
|
17
|
+
export declare const ATTN_NORM = 1;
|
|
18
|
+
export declare const ATTN_IDLE = 2;
|
|
19
|
+
export declare const ATTN_STATIC = 3;
|
|
20
|
+
export declare const SOUND_FULLVOLUME = 80;
|
|
21
|
+
export declare const SOUND_LOOP_ATTENUATE = 0.003;
|
|
22
|
+
export declare function attenuationToDistanceMultiplier(attenuation: number): number;
|
|
23
|
+
export declare function calculateMaxAudibleDistance(attenuation: number): number;
|
|
24
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/audio/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAGrC,oBAAY,YAAY;IACtB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,GAAG,IAAI;IACP,QAAQ,IAAI;IACZ,IAAI,IAAI;IAER,QAAQ,IAAS;IACjB,QAAQ,KAAS;IACjB,QAAQ,KAAS;CAClB;AAED,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGvE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface AudioParamLike {
|
|
2
|
+
value: number;
|
|
3
|
+
}
|
|
4
|
+
export interface AudioNodeLike {
|
|
5
|
+
connect(destination: AudioNodeLike): void;
|
|
6
|
+
}
|
|
7
|
+
export interface BiquadFilterNodeLike extends AudioNodeLike {
|
|
8
|
+
frequency: AudioParamLike;
|
|
9
|
+
Q: AudioParamLike;
|
|
10
|
+
type: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GainNodeLike extends AudioNodeLike {
|
|
13
|
+
gain: AudioParamLike;
|
|
14
|
+
}
|
|
15
|
+
export interface DynamicsCompressorNodeLike extends AudioNodeLike {
|
|
16
|
+
}
|
|
17
|
+
export interface AudioBufferLike {
|
|
18
|
+
readonly duration: number;
|
|
19
|
+
}
|
|
20
|
+
export interface AudioBufferSourceNodeLike extends AudioNodeLike {
|
|
21
|
+
buffer: AudioBufferLike | null;
|
|
22
|
+
loop: boolean;
|
|
23
|
+
onended: (() => void) | null;
|
|
24
|
+
start(when?: number, offset?: number, duration?: number): void;
|
|
25
|
+
stop(when?: number): void;
|
|
26
|
+
}
|
|
27
|
+
export interface PannerNodeLike extends AudioNodeLike {
|
|
28
|
+
positionX: AudioParamLike;
|
|
29
|
+
positionY: AudioParamLike;
|
|
30
|
+
positionZ: AudioParamLike;
|
|
31
|
+
refDistance?: number;
|
|
32
|
+
maxDistance?: number;
|
|
33
|
+
rolloffFactor?: number;
|
|
34
|
+
distanceModel?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface AudioDestinationNodeLike extends AudioNodeLike {
|
|
37
|
+
}
|
|
38
|
+
export interface AudioContextLike {
|
|
39
|
+
readonly destination: AudioDestinationNodeLike;
|
|
40
|
+
readonly currentTime: number;
|
|
41
|
+
state: 'suspended' | 'running' | 'closed';
|
|
42
|
+
resume(): Promise<void>;
|
|
43
|
+
suspend(): Promise<void>;
|
|
44
|
+
createGain(): GainNodeLike;
|
|
45
|
+
createDynamicsCompressor(): DynamicsCompressorNodeLike;
|
|
46
|
+
createBufferSource(): AudioBufferSourceNodeLike;
|
|
47
|
+
createPanner?(): PannerNodeLike;
|
|
48
|
+
createBiquadFilter?(): BiquadFilterNodeLike;
|
|
49
|
+
decodeAudioData?(data: ArrayBuffer): Promise<AudioBufferLike>;
|
|
50
|
+
}
|
|
51
|
+
export type AudioContextFactory = () => AudioContextLike;
|
|
52
|
+
export interface AudioGraph {
|
|
53
|
+
context: AudioContextLike;
|
|
54
|
+
master: GainNodeLike;
|
|
55
|
+
compressor: DynamicsCompressorNodeLike;
|
|
56
|
+
filter?: BiquadFilterNodeLike;
|
|
57
|
+
}
|
|
58
|
+
export declare class AudioContextController {
|
|
59
|
+
private readonly factory;
|
|
60
|
+
private context?;
|
|
61
|
+
constructor(factory: AudioContextFactory);
|
|
62
|
+
getContext(): AudioContextLike;
|
|
63
|
+
resume(): Promise<void>;
|
|
64
|
+
getState(): AudioContextLike['state'];
|
|
65
|
+
}
|
|
66
|
+
export declare function createAudioGraph(controller: AudioContextController): AudioGraph;
|
|
67
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/audio/context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,SAAS,EAAE,cAAc,CAAC;IAC1B,CAAC,EAAE,cAAc,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,0BAA2B,SAAQ,aAAa;CAAG;AAEpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC9D,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAyB,SAAQ,aAAa;CAAG;AAElE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,YAAY,CAAC;IAC3B,wBAAwB,IAAI,0BAA0B,CAAC;IACvD,kBAAkB,IAAI,yBAAyB,CAAC;IAChD,YAAY,CAAC,IAAI,cAAc,CAAC;IAChC,kBAAkB,CAAC,IAAI,oBAAoB,CAAC;IAC5C,eAAe,CAAC,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,0BAA0B,CAAC;IACvC,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAC,CAAmB;gBAEN,OAAO,EAAE,mBAAmB;IAEzD,UAAU,IAAI,gBAAgB;IAOxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC;CAGtC;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,sBAAsB,GAAG,UAAU,CAiB/E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface AudioElementLike {
|
|
2
|
+
src: string;
|
|
3
|
+
loop: boolean;
|
|
4
|
+
volume: number;
|
|
5
|
+
currentTime: number;
|
|
6
|
+
paused: boolean;
|
|
7
|
+
ended: boolean;
|
|
8
|
+
play(): Promise<void>;
|
|
9
|
+
pause(): void;
|
|
10
|
+
load(): void;
|
|
11
|
+
}
|
|
12
|
+
export type AudioElementFactory = () => AudioElementLike;
|
|
13
|
+
export type MusicSourceResolver = (path: string) => Promise<string>;
|
|
14
|
+
export interface MusicSystemOptions {
|
|
15
|
+
createElement: AudioElementFactory;
|
|
16
|
+
resolveSource?: MusicSourceResolver;
|
|
17
|
+
volume?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface MusicState {
|
|
20
|
+
readonly track?: string;
|
|
21
|
+
readonly paused: boolean;
|
|
22
|
+
readonly playing: boolean;
|
|
23
|
+
readonly volume: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class MusicSystem {
|
|
26
|
+
private readonly createElement;
|
|
27
|
+
private readonly resolveSource;
|
|
28
|
+
private element?;
|
|
29
|
+
private track?;
|
|
30
|
+
private volume;
|
|
31
|
+
constructor(options: MusicSystemOptions);
|
|
32
|
+
play(track: string, { loop, restart }?: {
|
|
33
|
+
loop?: boolean;
|
|
34
|
+
restart?: boolean;
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
pause(): void;
|
|
37
|
+
resume(): Promise<void>;
|
|
38
|
+
stop(): void;
|
|
39
|
+
setVolume(volume: number): void;
|
|
40
|
+
getState(): MusicState;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=music.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"music.d.ts","sourceRoot":"","sources":["../../../src/audio/music.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,kBAAkB;IAMjC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAW,EAAE,OAAe,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BtH,KAAK,IAAI,IAAI;IAKP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,IAAI,IAAI,IAAI;IAQZ,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO/B,QAAQ,IAAI,UAAU;CAKvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { VirtualFileSystem } from '../assets/vfs.js';
|
|
2
|
+
import type { AudioBufferLike, AudioContextLike } from './context.js';
|
|
3
|
+
import { AudioContextController } from './context.js';
|
|
4
|
+
import { SoundRegistry } from './registry.js';
|
|
5
|
+
export interface SoundPrecacheOptions {
|
|
6
|
+
vfs: Pick<VirtualFileSystem, 'readFile' | 'stat'>;
|
|
7
|
+
registry: SoundRegistry;
|
|
8
|
+
context: AudioContextController;
|
|
9
|
+
decodeAudio?: (context: AudioContextLike, data: ArrayBuffer) => Promise<AudioBufferLike>;
|
|
10
|
+
soundRoot?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SoundPrecacheReport {
|
|
13
|
+
loaded: string[];
|
|
14
|
+
skipped: string[];
|
|
15
|
+
missing: string[];
|
|
16
|
+
errors: Record<string, Error>;
|
|
17
|
+
}
|
|
18
|
+
export declare class SoundPrecache {
|
|
19
|
+
private readonly vfs;
|
|
20
|
+
private readonly registry;
|
|
21
|
+
private readonly contextController;
|
|
22
|
+
private readonly decodeAudio;
|
|
23
|
+
private readonly soundRoot;
|
|
24
|
+
constructor(options: SoundPrecacheOptions);
|
|
25
|
+
precache(paths: string[]): Promise<SoundPrecacheReport>;
|
|
26
|
+
private normalize;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=precache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"precache.d.ts","sourceRoot":"","sources":["../../../src/audio/precache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IAClD,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,oBAAoB;IAenC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiC7D,OAAO,CAAC,SAAS;CAOlB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ConfigStringRegistry } from '../configstrings.js';
|
|
2
|
+
import type { AudioBufferLike } from './context.js';
|
|
3
|
+
export declare class SoundRegistry {
|
|
4
|
+
private readonly configStrings;
|
|
5
|
+
private readonly buffers;
|
|
6
|
+
constructor(configStrings?: ConfigStringRegistry);
|
|
7
|
+
registerName(name: string): number;
|
|
8
|
+
register(name: string, buffer: AudioBufferLike): number;
|
|
9
|
+
find(name: string): number | undefined;
|
|
10
|
+
get(index: number): AudioBufferLike | undefined;
|
|
11
|
+
has(index: number): boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/audio/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEjC,aAAa,uBAA6B;IAEvE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIlC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM;IAMvD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI/C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAG5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Vec3 } from '@quake2ts/shared';
|
|
2
|
+
export interface ListenerState {
|
|
3
|
+
origin: Vec3;
|
|
4
|
+
right: Vec3;
|
|
5
|
+
mono?: boolean;
|
|
6
|
+
playerEntity?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface SpatializationResult {
|
|
9
|
+
left: number;
|
|
10
|
+
right: number;
|
|
11
|
+
distanceComponent: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function spatializeOrigin(origin: Vec3, listener: ListenerState, masterVolume: number, attenuation: number, isListenerSound: boolean): SpatializationResult;
|
|
14
|
+
//# sourceMappingURL=spatialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatialization.d.ts","sourceRoot":"","sources":["../../../src/audio/spatialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoD,MAAM,kBAAkB,CAAC;AAG1F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,OAAO,GACvB,oBAAoB,CAqBtB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import { AudioContextController, type AudioBufferSourceNodeLike, type BiquadFilterNodeLike, type GainNodeLike, type PannerNodeLike } from './context.js';
|
|
3
|
+
import { SoundRegistry } from './registry.js';
|
|
4
|
+
import { type ChannelState } from './channels.js';
|
|
5
|
+
import { type ListenerState } from './spatialization.js';
|
|
6
|
+
export interface SoundRequest {
|
|
7
|
+
entity: number;
|
|
8
|
+
channel: number;
|
|
9
|
+
soundIndex: number;
|
|
10
|
+
volume: number;
|
|
11
|
+
attenuation: number;
|
|
12
|
+
origin?: Vec3;
|
|
13
|
+
timeOffsetMs?: number;
|
|
14
|
+
looping?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface AudioSystemOptions {
|
|
17
|
+
context: AudioContextController;
|
|
18
|
+
registry: SoundRegistry;
|
|
19
|
+
playerEntity?: number;
|
|
20
|
+
listener?: ListenerState;
|
|
21
|
+
sfxVolume?: number;
|
|
22
|
+
masterVolume?: number;
|
|
23
|
+
resolveOcclusion?: OcclusionResolver;
|
|
24
|
+
}
|
|
25
|
+
interface ActiveSound {
|
|
26
|
+
channelIndex: number;
|
|
27
|
+
entnum: number;
|
|
28
|
+
entchannel: number;
|
|
29
|
+
endTimeMs: number;
|
|
30
|
+
source: AudioBufferSourceNodeLike;
|
|
31
|
+
panner: PannerNodeLike;
|
|
32
|
+
gain: GainNodeLike;
|
|
33
|
+
baseGain: number;
|
|
34
|
+
origin: Vec3;
|
|
35
|
+
attenuation: number;
|
|
36
|
+
occlusion?: OcclusionState;
|
|
37
|
+
}
|
|
38
|
+
interface OcclusionState {
|
|
39
|
+
scale: number;
|
|
40
|
+
lowpassHz?: number;
|
|
41
|
+
filter?: BiquadFilterNodeLike;
|
|
42
|
+
}
|
|
43
|
+
export interface OcclusionResult {
|
|
44
|
+
gainScale?: number;
|
|
45
|
+
lowpassHz?: number;
|
|
46
|
+
}
|
|
47
|
+
export type OcclusionResolver = (listener: ListenerState, source: Vec3, attenuation: number) => OcclusionResult | undefined;
|
|
48
|
+
export interface AudioDiagnostics {
|
|
49
|
+
activeChannels: number;
|
|
50
|
+
masterVolume: number;
|
|
51
|
+
sfxVolume: number;
|
|
52
|
+
channels: ChannelState[];
|
|
53
|
+
activeSounds: Array<{
|
|
54
|
+
entnum: number;
|
|
55
|
+
entchannel: number;
|
|
56
|
+
channelIndex: number;
|
|
57
|
+
origin: Vec3;
|
|
58
|
+
gain: number;
|
|
59
|
+
baseGain: number;
|
|
60
|
+
attenuation: number;
|
|
61
|
+
maxDistance?: number;
|
|
62
|
+
distanceModel?: string;
|
|
63
|
+
occlusion?: {
|
|
64
|
+
scale: number;
|
|
65
|
+
lowpassHz?: number;
|
|
66
|
+
};
|
|
67
|
+
}>;
|
|
68
|
+
}
|
|
69
|
+
export declare class AudioSystem {
|
|
70
|
+
private readonly channels;
|
|
71
|
+
private readonly registry;
|
|
72
|
+
private readonly contextController;
|
|
73
|
+
private readonly graph;
|
|
74
|
+
private readonly playerEntity?;
|
|
75
|
+
private readonly activeSources;
|
|
76
|
+
private readonly resolveOcclusion?;
|
|
77
|
+
private listener;
|
|
78
|
+
private sfxVolume;
|
|
79
|
+
private masterVolume;
|
|
80
|
+
constructor(options: AudioSystemOptions);
|
|
81
|
+
setListener(listener: ListenerState): void;
|
|
82
|
+
setMasterVolume(volume: number): void;
|
|
83
|
+
setSfxVolume(volume: number): void;
|
|
84
|
+
ensureRunning(): Promise<void>;
|
|
85
|
+
play(request: SoundRequest): ActiveSound | undefined;
|
|
86
|
+
stop(channelIndex: number): void;
|
|
87
|
+
stopEntitySounds(entnum: number): void;
|
|
88
|
+
updateEntityPosition(entnum: number, origin: Vec3): void;
|
|
89
|
+
positionedSound(origin: Vec3, soundIndex: number, volume: number, attenuation: number): ActiveSound | undefined;
|
|
90
|
+
ambientSound(origin: Vec3, soundIndex: number, volume: number): ActiveSound | undefined;
|
|
91
|
+
getChannelState(index: number): ChannelState | undefined;
|
|
92
|
+
getDiagnostics(): AudioDiagnostics;
|
|
93
|
+
setUnderwater(enabled: boolean, cutoffHz?: number): void;
|
|
94
|
+
private createPanner;
|
|
95
|
+
private configurePanner;
|
|
96
|
+
private applyOriginToPanner;
|
|
97
|
+
private createOcclusionFilter;
|
|
98
|
+
private applyOcclusion;
|
|
99
|
+
}
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/audio/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ export declare class ConfigStringRegistry {
|
|
|
23
23
|
getAll(): string[];
|
|
24
24
|
modelIndex(path: string): number;
|
|
25
25
|
soundIndex(path: string): number;
|
|
26
|
+
findSoundIndex(path: string): number | undefined;
|
|
26
27
|
imageIndex(path: string): number;
|
|
27
28
|
lightIndex(definition: string): number;
|
|
28
29
|
shadowLightIndex(definition: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configstrings.d.ts","sourceRoot":"","sources":["../../src/configstrings.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAiB3E;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAA6B;IAElD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAOzC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,MAAM,IAAI,MAAM,EAAE;IAQlB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAItC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,OAAO,CAAC,QAAQ;CAgCjB"}
|
|
1
|
+
{"version":3,"file":"configstrings.d.ts","sourceRoot":"","sources":["../../src/configstrings.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAiB3E;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAA6B;IAElD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAOzC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,MAAM,IAAI,MAAM,EAAE;IAQlB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAShD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAItC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,OAAO,CAAC,QAAQ;CAgCjB"}
|
|
@@ -28,10 +28,35 @@ export { ingestPaks, PakIngestionError, type PakIngestionOptions, type PakIngest
|
|
|
28
28
|
export { LruCache } from './assets/cache.js';
|
|
29
29
|
export { filesToPakSources, ingestPakFiles, wireDropTarget, wireFileInput } from './assets/browserIngestion.js';
|
|
30
30
|
export { Md2Loader, Md2ParseError, groupMd2Animations, parseMd2, type Md2Animation, type Md2Frame, type Md2GlCommand, type Md2Model, } from './assets/md2.js';
|
|
31
|
+
export { Md3Loader, Md3ParseError, parseMd3, type Md3Frame, type Md3Model, type Md3Surface, } from './assets/md3.js';
|
|
32
|
+
export { advanceAnimation, computeFrameBlend, createAnimationState, interpolateVec3, type AnimationSequence, type AnimationState, type FrameBlend, } from './assets/animation.js';
|
|
33
|
+
export { parseWal, type WalTexture } from './assets/wal.js';
|
|
34
|
+
export { parsePcx, pcxToRgba, type PcxImage } from './assets/pcx.js';
|
|
35
|
+
export { parseWalTexture, preparePcxTexture, TextureCache, walToRgba, type PreparedTexture, type TextureLevel, } from './assets/texture.js';
|
|
36
|
+
export { parseWav, type WavData } from './assets/wav.js';
|
|
37
|
+
export { decodeOgg, type OggAudio } from './assets/ogg.js';
|
|
38
|
+
export { AudioRegistry, AudioRegistryError, type DecodedAudio } from './assets/audio.js';
|
|
39
|
+
export { PakIndexStore, type StoredPakIndex } from './assets/pakIndexStore.js';
|
|
40
|
+
export { PakValidationError, PakValidator, RERELEASE_KNOWN_PAKS, type KnownPakChecksum, type PakValidationOutcome, } from './assets/pakValidation.js';
|
|
41
|
+
export { AssetDependencyError, AssetDependencyTracker, AssetManager, type AssetManagerOptions, } from './assets/manager.js';
|
|
42
|
+
export { ATTN_IDLE, ATTN_LOOP_NONE, ATTN_NONE, ATTN_NORM, ATTN_STATIC, MAX_SOUND_CHANNELS, SOUND_FULLVOLUME, SOUND_LOOP_ATTENUATE, SoundChannel, attenuationToDistanceMultiplier, calculateMaxAudibleDistance, } from './audio/constants.js';
|
|
43
|
+
export { AudioContextController, createAudioGraph, type AudioBufferLike, type AudioContextLike, type AudioGraph, type AudioNodeLike, type GainNodeLike, type BiquadFilterNodeLike, type PannerNodeLike, } from './audio/context.js';
|
|
44
|
+
export { SoundRegistry } from './audio/registry.js';
|
|
45
|
+
export { SoundPrecache, type SoundPrecacheOptions, type SoundPrecacheReport } from './audio/precache.js';
|
|
46
|
+
export { AudioSystem, type AudioSystemOptions, type SoundRequest } from './audio/system.js';
|
|
47
|
+
export { spatializeOrigin, type ListenerState, type SpatializationResult } from './audio/spatialization.js';
|
|
48
|
+
export { createInitialChannels, pickChannel, type ChannelState } from './audio/channels.js';
|
|
49
|
+
export { MusicSystem, type MusicSystemOptions, type MusicState, type AudioElementLike } from './audio/music.js';
|
|
50
|
+
export { AudioApi, type AudioApiOptions } from './audio/api.js';
|
|
31
51
|
export { EngineHost, type ClientRenderer, type EngineHostOptions, type GameFrameResult, type GameRenderSample, type GameSimulation, };
|
|
32
52
|
export { EngineRuntime, createEngineRuntime };
|
|
33
53
|
export { createWebGLContext, type WebGLContextInitOptions, type WebGLContextState } from './render/context.js';
|
|
34
54
|
export { ShaderProgram, createProgramFromSources, type ShaderSources } from './render/shaderProgram.js';
|
|
35
|
-
export { Framebuffer, IndexBuffer, Texture2D, VertexArray, VertexBuffer, type BufferUsage, type TextureParameters, type VertexAttributeLayout, } from './render/resources.js';
|
|
55
|
+
export { Framebuffer, IndexBuffer, Texture2D, TextureCubeMap, VertexArray, VertexBuffer, type BufferUsage, type TextureParameters, type VertexAttributeLayout, } from './render/resources.js';
|
|
36
56
|
export { BSP_VERTEX_LAYOUT, buildBspGeometry, type BspGeometryBuildResult, type BspLightmapData, type BspSurfaceGeometry, type BspSurfaceInput, type LightmapAtlas, type LightmapPlacement, } from './render/bsp.js';
|
|
57
|
+
export { extractFrustumPlanes, boxIntersectsFrustum, type FrustumPlane } from './render/culling.js';
|
|
58
|
+
export { findLeafForPoint, gatherVisibleFaces, type VisibleFace } from './render/bspTraversal.js';
|
|
59
|
+
export { applySurfaceState, BspSurfacePipeline, BSP_SURFACE_FRAGMENT_SOURCE, BSP_SURFACE_VERTEX_SOURCE, deriveSurfaceRenderState, resolveLightStyles, type BspSurfaceBindOptions, type SurfaceRenderState, } from './render/bspPipeline.js';
|
|
60
|
+
export { SKYBOX_FRAGMENT_SHADER, SKYBOX_VERTEX_SHADER, SkyboxPipeline, computeSkyScroll, removeViewTranslation, } from './render/skybox.js';
|
|
61
|
+
export { MD2_FRAGMENT_SHADER, MD2_VERTEX_SHADER, Md2MeshBuffers, Md2Pipeline, buildMd2Geometry, buildMd2VertexData, type Md2BindOptions, type Md2FrameBlend, type Md2Geometry, type Md2DrawVertex, } from './render/md2Pipeline.js';
|
|
37
62
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type SurfaceFlag } from '@quake2ts/shared';
|
|
2
|
+
import { ShaderProgram } from './shaderProgram.js';
|
|
3
|
+
export interface SurfaceRenderState {
|
|
4
|
+
readonly alpha: number;
|
|
5
|
+
readonly blend: boolean;
|
|
6
|
+
readonly depthWrite: boolean;
|
|
7
|
+
readonly warp: boolean;
|
|
8
|
+
readonly flowOffset: readonly [number, number];
|
|
9
|
+
readonly sky: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface BspSurfaceBindOptions {
|
|
12
|
+
readonly modelViewProjection: Float32List;
|
|
13
|
+
readonly styleIndices?: readonly number[];
|
|
14
|
+
readonly styleValues?: ReadonlyArray<number>;
|
|
15
|
+
readonly diffuseSampler?: number;
|
|
16
|
+
readonly lightmapSampler?: number;
|
|
17
|
+
readonly surfaceFlags?: SurfaceFlag;
|
|
18
|
+
readonly timeSeconds?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare const BSP_SURFACE_VERTEX_SOURCE = "#version 300 es\nprecision highp float;\n\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec2 a_texCoord;\nlayout(location = 2) in vec2 a_lightmapCoord;\n\nuniform mat4 u_modelViewProjection;\nuniform vec2 u_texScroll;\nuniform vec2 u_lightmapScroll;\n\nout vec2 v_texCoord;\nout vec2 v_lightmapCoord;\n\nvec2 applyScroll(vec2 uv, vec2 scroll) {\n return uv + scroll;\n}\n\nvoid main() {\n v_texCoord = applyScroll(a_texCoord, u_texScroll);\n v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);\n gl_Position = u_modelViewProjection * vec4(a_position, 1.0);\n}";
|
|
21
|
+
export declare const BSP_SURFACE_FRAGMENT_SOURCE = "#version 300 es\nprecision highp float;\n\nin vec2 v_texCoord;\nin vec2 v_lightmapCoord;\n\nuniform sampler2D u_diffuseMap;\nuniform sampler2D u_lightmapAtlas;\nuniform vec4 u_lightStyleFactors;\nuniform float u_alpha;\nuniform bool u_applyLightmap;\nuniform bool u_warp;\nuniform float u_time;\n\nout vec4 o_color;\n\nvec2 warpCoords(vec2 uv) {\n // Quake II warp applies a subtle sinusoidal offset; we mirror the rerelease scale.\n if (!u_warp) {\n return uv;\n }\n float s = uv.x + sin(uv.y * 0.125 + u_time) * 0.125;\n float t = uv.y + sin(uv.x * 0.125 + u_time) * 0.125;\n return vec2(s, t);\n}\n\nvoid main() {\n vec2 warpedTex = warpCoords(v_texCoord);\n vec4 base = texture(u_diffuseMap, warpedTex);\n\n if (u_applyLightmap) {\n vec3 light = texture(u_lightmapAtlas, warpCoords(v_lightmapCoord)).rgb;\n float styleScale = dot(u_lightStyleFactors, vec4(1.0));\n base.rgb *= light * styleScale;\n }\n\n o_color = vec4(base.rgb, base.a * u_alpha);\n}";
|
|
22
|
+
export declare function resolveLightStyles(styleIndices?: readonly number[], styleValues?: ReadonlyArray<number>): Float32Array;
|
|
23
|
+
export declare function deriveSurfaceRenderState(surfaceFlags?: SurfaceFlag, timeSeconds?: number): SurfaceRenderState;
|
|
24
|
+
export declare class BspSurfacePipeline {
|
|
25
|
+
readonly gl: WebGL2RenderingContext;
|
|
26
|
+
readonly program: ShaderProgram;
|
|
27
|
+
private readonly uniformMvp;
|
|
28
|
+
private readonly uniformTexScroll;
|
|
29
|
+
private readonly uniformLmScroll;
|
|
30
|
+
private readonly uniformLightStyles;
|
|
31
|
+
private readonly uniformAlpha;
|
|
32
|
+
private readonly uniformApplyLightmap;
|
|
33
|
+
private readonly uniformWarp;
|
|
34
|
+
private readonly uniformDiffuse;
|
|
35
|
+
private readonly uniformLightmap;
|
|
36
|
+
private readonly uniformTime;
|
|
37
|
+
constructor(gl: WebGL2RenderingContext);
|
|
38
|
+
bind(options: BspSurfaceBindOptions): SurfaceRenderState;
|
|
39
|
+
dispose(): void;
|
|
40
|
+
}
|
|
41
|
+
export declare function applySurfaceState(gl: WebGL2RenderingContext, state: SurfaceRenderState): void;
|
|
42
|
+
//# sourceMappingURL=bspPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bspPipeline.d.ts","sourceRoot":"","sources":["../../../src/render/bspPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,yBAAyB,2lBAsBpC,CAAC;AAEH,eAAO,MAAM,2BAA2B,u9BAqCtC,CAAC;AAIH,wBAAgB,kBAAkB,CAChC,YAAY,GAAE,SAAS,MAAM,EAA0B,EACvD,WAAW,GAAE,aAAa,CAAC,MAAM,CAAM,GACtC,YAAY,CAYd;AAQD,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,WAAuB,EACrC,WAAW,SAAI,GACd,kBAAkB,CAoBpB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAC3D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8B;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,EAAE,EAAE,sBAAsB;IAoBtC,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,kBAAkB;IA6BxD,OAAO,IAAI,IAAI;CAGhB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAQ7F"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import type { BspMap } from '../assets/bsp.js';
|
|
3
|
+
import { type FrustumPlane } from './culling.js';
|
|
4
|
+
export interface VisibleFace {
|
|
5
|
+
readonly faceIndex: number;
|
|
6
|
+
readonly leafIndex: number;
|
|
7
|
+
readonly sortKey: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function findLeafForPoint(map: BspMap, point: Vec3): number;
|
|
10
|
+
export declare function gatherVisibleFaces(map: BspMap, cameraPosition: Vec3, frustum: readonly FrustumPlane[]): VisibleFace[];
|
|
11
|
+
//# sourceMappingURL=bspTraversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bspTraversal.d.ts","sourceRoot":"","sources":["../../../src/render/bspTraversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAEV,MAAM,EAIP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAqCD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAcjE;AAgED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,IAAI,EACpB,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,WAAW,EAAE,CAOf"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
export interface FrustumPlane {
|
|
3
|
+
readonly normal: Vec3;
|
|
4
|
+
readonly distance: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function extractFrustumPlanes(matrix: readonly number[]): readonly FrustumPlane[];
|
|
7
|
+
export declare function boxIntersectsFrustum(mins: Vec3, maxs: Vec3, planes: readonly FrustumPlane[]): boolean;
|
|
8
|
+
//# sourceMappingURL=culling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"culling.d.ts","sourceRoot":"","sources":["../../../src/render/culling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,YAAY,EAAE,CAsCvF;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAWrG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Md2Model } from '../assets/md2.js';
|
|
2
|
+
import { IndexBuffer, VertexArray, VertexBuffer } from './resources.js';
|
|
3
|
+
import { ShaderProgram } from './shaderProgram.js';
|
|
4
|
+
export interface Md2DrawVertex {
|
|
5
|
+
readonly vertexIndex: number;
|
|
6
|
+
readonly texCoord: readonly [number, number];
|
|
7
|
+
}
|
|
8
|
+
export interface Md2Geometry {
|
|
9
|
+
readonly vertices: readonly Md2DrawVertex[];
|
|
10
|
+
readonly indices: Uint16Array;
|
|
11
|
+
}
|
|
12
|
+
export interface Md2FrameBlend {
|
|
13
|
+
readonly currentFrame: number;
|
|
14
|
+
readonly nextFrame: number;
|
|
15
|
+
readonly lerp: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Md2BindOptions {
|
|
18
|
+
readonly modelViewProjection: Float32List;
|
|
19
|
+
readonly lightDirection?: readonly [number, number, number];
|
|
20
|
+
readonly tint?: readonly [number, number, number, number];
|
|
21
|
+
readonly diffuseSampler?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const MD2_VERTEX_SHADER = "#version 300 es\nprecision highp float;\n\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec3 a_normal;\nlayout(location = 2) in vec2 a_texCoord;\n\nuniform mat4 u_modelViewProjection;\nuniform vec3 u_lightDir;\n\nout vec2 v_texCoord;\nout float v_light;\n\nvoid main() {\n vec3 normal = normalize(a_normal);\n v_light = max(dot(normal, normalize(u_lightDir)), 0.0);\n v_texCoord = a_texCoord;\n gl_Position = u_modelViewProjection * vec4(a_position, 1.0);\n}";
|
|
24
|
+
export declare const MD2_FRAGMENT_SHADER = "#version 300 es\nprecision highp float;\n\nin vec2 v_texCoord;\nin float v_light;\n\nuniform sampler2D u_diffuseMap;\nuniform vec4 u_tint;\n\nout vec4 o_color;\n\nvoid main() {\n vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;\n o_color = vec4(albedo.rgb * v_light, albedo.a);\n}";
|
|
25
|
+
export declare function buildMd2Geometry(model: Md2Model): Md2Geometry;
|
|
26
|
+
export declare function buildMd2VertexData(model: Md2Model, geometry: Md2Geometry, blend: Md2FrameBlend): Float32Array;
|
|
27
|
+
export declare class Md2MeshBuffers {
|
|
28
|
+
readonly gl: WebGL2RenderingContext;
|
|
29
|
+
readonly geometry: Md2Geometry;
|
|
30
|
+
readonly vertexBuffer: VertexBuffer;
|
|
31
|
+
readonly indexBuffer: IndexBuffer;
|
|
32
|
+
readonly vertexArray: VertexArray;
|
|
33
|
+
readonly indexCount: number;
|
|
34
|
+
constructor(gl: WebGL2RenderingContext, model: Md2Model, blend: Md2FrameBlend);
|
|
35
|
+
update(model: Md2Model, blend: Md2FrameBlend): void;
|
|
36
|
+
bind(): void;
|
|
37
|
+
dispose(): void;
|
|
38
|
+
}
|
|
39
|
+
export declare class Md2Pipeline {
|
|
40
|
+
readonly gl: WebGL2RenderingContext;
|
|
41
|
+
readonly program: ShaderProgram;
|
|
42
|
+
private readonly uniformMvp;
|
|
43
|
+
private readonly uniformLightDir;
|
|
44
|
+
private readonly uniformTint;
|
|
45
|
+
private readonly uniformDiffuse;
|
|
46
|
+
constructor(gl: WebGL2RenderingContext);
|
|
47
|
+
bind(options: Md2BindOptions): void;
|
|
48
|
+
draw(mesh: Md2MeshBuffers): void;
|
|
49
|
+
dispose(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=md2Pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"md2Pipeline.d.ts","sourceRoot":"","sources":["../../../src/render/md2Pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,iBAAiB,weAkB5B,CAAC;AAEH,eAAO,MAAM,mBAAmB,wSAc9B,CAAC;AA2BH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAiD7D;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,aAAa,GACnB,YAAY,CAgCd;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa;IAuB7E,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAKnD,IAAI,IAAI,IAAI;IAKZ,OAAO,IAAI,IAAI;CAKhB;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;gBAEjD,EAAE,EAAE,sBAAsB;IActC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAWnC,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKhC,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -45,6 +45,16 @@ export declare class Texture2D {
|
|
|
45
45
|
uploadImage(level: number, internalFormat: GLenum, width: number, height: number, border: number, format: GLenum, type: GLenum, data: ArrayBufferView | null): void;
|
|
46
46
|
dispose(): void;
|
|
47
47
|
}
|
|
48
|
+
export declare class TextureCubeMap {
|
|
49
|
+
readonly gl: WebGL2RenderingContext;
|
|
50
|
+
readonly texture: WebGLTexture;
|
|
51
|
+
readonly target: GLenum;
|
|
52
|
+
constructor(gl: WebGL2RenderingContext);
|
|
53
|
+
bind(unit?: number): void;
|
|
54
|
+
setParameters(params: TextureParameters): void;
|
|
55
|
+
uploadFace(faceTarget: GLenum, level: number, internalFormat: GLenum, width: number, height: number, border: number, format: GLenum, type: GLenum, data: ArrayBufferView | null): void;
|
|
56
|
+
dispose(): void;
|
|
57
|
+
}
|
|
48
58
|
export declare class Framebuffer {
|
|
49
59
|
readonly gl: WebGL2RenderingContext;
|
|
50
60
|
readonly framebuffer: WebGLFramebuffer;
|