Allow players to mute shellmap background music

This commit is contained in:
Ivaylo Draganov
2020-01-31 18:41:18 +02:00
committed by Paul Chote
parent 28f7604172
commit 3e2022a3dd
9 changed files with 51 additions and 2 deletions

View File

@@ -199,6 +199,7 @@ namespace OpenRA
public bool CashTicks = true;
public bool Mute = false;
public bool MuteBackgroundMusic = false;
}
public class PlayerSettings

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -311,6 +311,13 @@ Container@SETTINGS_PANEL:
Height: 20
Font: Regular
Text: Mute Sound
Checkbox@MUTE_BACKGROUND_MUSIC:
X: 15
Y: 103
Width: 200
Height: 20
Font: Regular
Text: Mute Background Music
Label@SOUND_LABEL:
X: PARENT_RIGHT - WIDTH - 270
Y: 40

View File

@@ -32,4 +32,5 @@ Rules:
-CrateSpawner:
MusicPlaylist:
BackgroundMusic: map1
AllowMuteBackgroundMusic: true
DisableWorldSounds: true

View File

@@ -322,6 +322,13 @@ Background@SETTINGS_PANEL:
Height: 20
Font: Regular
Text: Mute Sound
Checkbox@MUTE_BACKGROUND_MUSIC:
X: 15
Y: 103
Width: 200
Height: 20
Font: Regular
Text: Mute Background Music
Label@SOUND_LABEL:
X: PARENT_RIGHT - WIDTH - 270
Y: 40

View File

@@ -13,6 +13,7 @@ World:
Maximum: 3
MusicPlaylist:
BackgroundMusic: options
AllowMuteBackgroundMusic: true
DisableWorldSounds: true
LuaScript:
Scripts: d2k-shellmap.lua

View File

@@ -10,6 +10,7 @@ World:
-MPStartLocations:
MusicPlaylist:
BackgroundMusic: intro
AllowMuteBackgroundMusic: true
DisableWorldSounds: true
ResourceType@ore:
ValuePerUnit: 0

View File

@@ -13,6 +13,7 @@ World:
MusicPlaylist:
BackgroundMusic: intro
DisableWorldSounds: true
AllowMuteBackgroundMusic: true
GlobalLightingPaletteEffect:
Blue: 0.7
Ambient: 0.7