mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-26 01:34:36 +00:00
26f5d40819
- Replace Webpack with Vite for faster client bundling and HMR. - Migrate tests from Jest to Vitest and update configuration. - Update Web Worker instantiation to standard ESM syntax. - Implement Env utility in `src/core` for safe, hybrid environment variable access (Vite vs Node). - Refactor configuration loaders to remove direct `process.env` dependencies in shared code. - Update TypeScript environment definitions and project scripts for the new toolchain. - Remove the [depracated usage of the husky](https://github.com/typicode/husky/releases/tag/v9.0.1). ## Description: migrate build system to Vite and test runner to Vitest & Remove depracated husky usage ## Please complete the following: - [X] I have added screenshots for all UI updates - [X] I process any text displayed to the user through translateText() and I've added it to the en.json file - [ ] I have added relevant tests to the test directory - [X] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: wraith4081 --------- Co-authored-by: evanpelle <evanpelle@gmail.com>
110 lines
2.8 KiB
TypeScript
110 lines
2.8 KiB
TypeScript
import { Howl } from "howler";
|
|
import of4 from "../../../proprietary/sounds/music/of4.mp3";
|
|
import openfront from "../../../proprietary/sounds/music/openfront.mp3";
|
|
import war from "../../../proprietary/sounds/music/war.mp3";
|
|
import kaChingSound from "/sounds/effects/ka-ching.mp3?url";
|
|
|
|
export enum SoundEffect {
|
|
KaChing = "ka-ching",
|
|
}
|
|
|
|
class SoundManager {
|
|
private backgroundMusic: Howl[] = [];
|
|
private currentTrack: number = 0;
|
|
private soundEffects: Map<SoundEffect, Howl> = new Map();
|
|
private soundEffectsVolume: number = 1;
|
|
private backgroundMusicVolume: number = 0;
|
|
|
|
constructor() {
|
|
this.backgroundMusic = [
|
|
new Howl({
|
|
src: [of4],
|
|
loop: false,
|
|
onend: this.playNext.bind(this),
|
|
volume: 0,
|
|
}),
|
|
new Howl({
|
|
src: [openfront],
|
|
loop: false,
|
|
onend: this.playNext.bind(this),
|
|
volume: 0,
|
|
}),
|
|
new Howl({
|
|
src: [war],
|
|
loop: false,
|
|
onend: this.playNext.bind(this),
|
|
volume: 0,
|
|
}),
|
|
];
|
|
this.loadSoundEffect(SoundEffect.KaChing, kaChingSound);
|
|
}
|
|
|
|
public playBackgroundMusic(): void {
|
|
if (
|
|
this.backgroundMusic.length > 0 &&
|
|
!this.backgroundMusic[this.currentTrack].playing()
|
|
) {
|
|
this.backgroundMusic[this.currentTrack].play();
|
|
}
|
|
}
|
|
|
|
public stopBackgroundMusic(): void {
|
|
if (this.backgroundMusic.length > 0) {
|
|
this.backgroundMusic[this.currentTrack].stop();
|
|
}
|
|
}
|
|
|
|
public setBackgroundMusicVolume(volume: number): void {
|
|
this.backgroundMusicVolume = Math.max(0, Math.min(1, volume));
|
|
this.backgroundMusic.forEach((track) => {
|
|
track.volume(this.backgroundMusicVolume);
|
|
});
|
|
}
|
|
|
|
private playNext(): void {
|
|
this.currentTrack = (this.currentTrack + 1) % this.backgroundMusic.length;
|
|
this.playBackgroundMusic();
|
|
}
|
|
|
|
public loadSoundEffect(name: SoundEffect, src: string): void {
|
|
if (!this.soundEffects.has(name)) {
|
|
const sound = new Howl({
|
|
src: [src],
|
|
volume: this.soundEffectsVolume,
|
|
});
|
|
this.soundEffects.set(name, sound);
|
|
}
|
|
}
|
|
|
|
public playSoundEffect(name: SoundEffect): void {
|
|
const sound = this.soundEffects.get(name);
|
|
if (sound) {
|
|
sound.play();
|
|
}
|
|
}
|
|
|
|
public setSoundEffectsVolume(volume: number): void {
|
|
this.soundEffectsVolume = Math.max(0, Math.min(1, volume));
|
|
this.soundEffects.forEach((sound) => {
|
|
sound.volume(this.soundEffectsVolume);
|
|
});
|
|
}
|
|
|
|
public stopSoundEffect(name: SoundEffect): void {
|
|
const sound = this.soundEffects.get(name);
|
|
if (sound) {
|
|
sound.stop();
|
|
}
|
|
}
|
|
|
|
public unloadSoundEffect(name: SoundEffect): void {
|
|
const sound = this.soundEffects.get(name);
|
|
if (sound) {
|
|
sound.unload();
|
|
this.soundEffects.delete(name);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new SoundManager();
|