diff --git a/resources/lang/en.json b/resources/lang/en.json index f3ef57e7d..f4165a490 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -380,7 +380,8 @@ "terrain_disabled": "Terrain view disabled", "exit_game_label": "Exit Game", "exit_game_info": "Return to main menu", - "background_music_volume": "Background Music Volume" + "background_music_volume": "Background Music Volume", + "sound_effects_volume": "Sound Effects Volume" }, "chat": { "title": "Quick Chat", diff --git a/resources/sounds/effects/ka-ching.mp3 b/resources/sounds/effects/ka-ching.mp3 new file mode 100644 index 000000000..fc506bdcf Binary files /dev/null and b/resources/sounds/effects/ka-ching.mp3 differ diff --git a/src/client/graphics/layers/FxLayer.ts b/src/client/graphics/layers/FxLayer.ts index 0c39d9802..731976f9a 100644 --- a/src/client/graphics/layers/FxLayer.ts +++ b/src/client/graphics/layers/FxLayer.ts @@ -7,6 +7,7 @@ import { RailroadUpdate, } from "../../../core/game/GameUpdates"; import { GameView, UnitView } from "../../../core/game/GameView"; +import SoundManager, { SoundEffect } from "../../sound/SoundManager"; import { renderNumber } from "../../Utils"; import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; import { conquestFxFactory } from "../fx/ConquestFx"; @@ -216,6 +217,8 @@ export class FxLayer implements Layer { return; } + SoundManager.playSoundEffect(SoundEffect.KaChing); + const conquestFx = conquestFxFactory( this.animatedSpriteLoader, conquest, diff --git a/src/client/graphics/layers/SettingsModal.ts b/src/client/graphics/layers/SettingsModal.ts index 8c49995a4..2bfc57349 100644 --- a/src/client/graphics/layers/SettingsModal.ts +++ b/src/client/graphics/layers/SettingsModal.ts @@ -50,6 +50,7 @@ export class SettingsModal extends LitElement implements Layer { SoundManager.setBackgroundMusicVolume( this.userSettings.backgroundMusicVolume(), ); + SoundManager.setSoundEffectsVolume(this.userSettings.soundEffectsVolume()); this.eventBus.on(ShowSettingsModalEvent, (event) => { this.isVisible = event.isVisible; this.shouldPause = event.shouldPause; @@ -162,6 +163,13 @@ export class SettingsModal extends LitElement implements Layer { this.requestUpdate(); } + private onSoundEffectsVolumeChange(event: Event) { + const volume = parseFloat((event.target as HTMLInputElement).value) / 100; + this.userSettings.setSoundEffectsVolume(volume); + SoundManager.setSoundEffectsVolume(volume); + this.requestUpdate(); + } + render() { if (!this.isVisible) { return null; @@ -221,6 +229,33 @@ export class SettingsModal extends LitElement implements Layer { +
+ soundEffectsIcon +
+
+ ${translateText("user_setting.sound_effects_volume")} +
+ +
+
+ ${Math.round(this.userSettings.soundEffectsVolume() * 100)}% +
+
+