Allow players to mute shellmap background music
This commit is contained in:
committed by
Paul Chote
parent
28f7604172
commit
3e2022a3dd
@@ -33,6 +33,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
"It cannot be paused, but can be overridden by selecting a new track.")]
|
||||
public readonly string BackgroundMusic = null;
|
||||
|
||||
[Desc("Allow the background music to be muted by the player.")]
|
||||
public readonly bool AllowMuteBackgroundMusic = false;
|
||||
|
||||
[Desc("Disable all world sounds (combat etc).")]
|
||||
public readonly bool DisableWorldSounds = false;
|
||||
|
||||
@@ -49,6 +52,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public readonly bool IsMusicInstalled;
|
||||
public readonly bool IsMusicAvailable;
|
||||
public readonly bool AllowMuteBackgroundMusic;
|
||||
|
||||
public bool IsBackgroundMusicMuted
|
||||
{
|
||||
get { return AllowMuteBackgroundMusic && Game.Settings.Sound.MuteBackgroundMusic; }
|
||||
}
|
||||
|
||||
public bool CurrentSongIsBackground { get; private set; }
|
||||
|
||||
MusicInfo currentSong;
|
||||
@@ -73,6 +83,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
random = playlist.Shuffle(Game.CosmeticRandom).ToArray();
|
||||
IsMusicAvailable = playlist.Any();
|
||||
AllowMuteBackgroundMusic = info.AllowMuteBackgroundMusic;
|
||||
|
||||
if (SongExists(info.BackgroundMusic))
|
||||
{
|
||||
@@ -150,7 +161,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
void Play()
|
||||
{
|
||||
if (!SongExists(currentSong))
|
||||
if (!SongExists(currentSong) || (CurrentSongIsBackground && IsBackgroundMusicMuted))
|
||||
return;
|
||||
|
||||
Game.Sound.PlayMusicThen(currentSong, () =>
|
||||
@@ -228,7 +239,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
currentSong = currentBackgroundSong;
|
||||
CurrentSongIsBackground = true;
|
||||
Play();
|
||||
|
||||
if (!IsBackgroundMusicMuted)
|
||||
Play();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Support;
|
||||
using OpenRA.Widgets;
|
||||
@@ -401,10 +402,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
Action InitAudioPanel(Widget panel)
|
||||
{
|
||||
var musicPlaylist = worldRenderer.World.WorldActor.Trait<MusicPlaylist>();
|
||||
var ss = Game.Settings.Sound;
|
||||
|
||||
BindCheckboxPref(panel, "CASH_TICKS", ss, "CashTicks");
|
||||
BindCheckboxPref(panel, "MUTE_SOUND", ss, "Mute");
|
||||
BindCheckboxPref(panel, "MUTE_BACKGROUND_MUSIC", ss, "MuteBackgroundMusic");
|
||||
|
||||
BindSliderPref(panel, "SOUND_VOLUME", ss, "SoundVolume");
|
||||
BindSliderPref(panel, "MUSIC_VOLUME", ss, "MusicVolume");
|
||||
@@ -425,6 +428,19 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
Game.Sound.UnmuteAudio();
|
||||
};
|
||||
|
||||
var muteBackgroundMusicCheckbox = panel.Get<CheckboxWidget>("MUTE_BACKGROUND_MUSIC");
|
||||
var muteBackgroundMusicCheckboxOnClick = muteBackgroundMusicCheckbox.OnClick;
|
||||
muteBackgroundMusicCheckbox.OnClick = () =>
|
||||
{
|
||||
muteBackgroundMusicCheckboxOnClick();
|
||||
|
||||
if (!musicPlaylist.AllowMuteBackgroundMusic)
|
||||
return;
|
||||
|
||||
if (musicPlaylist.CurrentSongIsBackground)
|
||||
musicPlaylist.Stop();
|
||||
};
|
||||
|
||||
// Replace controls with a warning label if sound is disabled
|
||||
var noDeviceLabel = panel.GetOrNull("NO_AUDIO_DEVICE");
|
||||
if (noDeviceLabel != null)
|
||||
@@ -471,6 +487,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ss.VideoVolume = dss.VideoVolume;
|
||||
ss.CashTicks = dss.CashTicks;
|
||||
ss.Mute = dss.Mute;
|
||||
ss.MuteBackgroundMusic = dss.MuteBackgroundMusic;
|
||||
ss.Device = dss.Device;
|
||||
|
||||
panel.Get<SliderWidget>("SOUND_VOLUME").Value = ss.SoundVolume;
|
||||
|
||||
Reference in New Issue
Block a user