Merge pull request #9549 from pchote/lobby-music
Add a music player to the game lobby.
This commit is contained in:
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
readonly Ruleset modRules;
|
||||
readonly World shellmapWorld;
|
||||
|
||||
enum PanelType { Players, Options, Kick, ForceStart }
|
||||
enum PanelType { Players, Options, Music, Kick, ForceStart }
|
||||
PanelType panel = PanelType.Players;
|
||||
|
||||
readonly Widget lobby;
|
||||
@@ -276,10 +276,27 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var optionsBin = Ui.LoadWidget("LOBBY_OPTIONS_BIN", lobby.Get("TOP_PANELS_ROOT"), new WidgetArgs());
|
||||
optionsBin.IsVisible = () => panel == PanelType.Options;
|
||||
|
||||
var optionsButton = lobby.Get<ButtonWidget>("OPTIONS_BUTTON");
|
||||
optionsButton.IsDisabled = () => Map.RuleStatus != MapRuleStatus.Cached || panel == PanelType.Kick || panel == PanelType.ForceStart;
|
||||
optionsButton.GetText = () => panel == PanelType.Options ? "Players" : "Options";
|
||||
optionsButton.OnClick = () => panel = (panel == PanelType.Options) ? PanelType.Players : PanelType.Options;
|
||||
var musicBin = Ui.LoadWidget("LOBBY_MUSIC_BIN", lobby.Get("TOP_PANELS_ROOT"), new WidgetArgs
|
||||
{
|
||||
{ "onExit", DoNothing },
|
||||
{ "world", worldRenderer.World }
|
||||
});
|
||||
musicBin.IsVisible = () => panel == PanelType.Music;
|
||||
|
||||
var optionsTab = lobby.Get<ButtonWidget>("OPTIONS_TAB");
|
||||
optionsTab.IsHighlighted = () => panel == PanelType.Options;
|
||||
optionsTab.IsDisabled = () => Map.RuleStatus != MapRuleStatus.Cached || panel == PanelType.Kick || panel == PanelType.ForceStart;
|
||||
optionsTab.OnClick = () => panel = PanelType.Options;
|
||||
|
||||
var playersTab = lobby.Get<ButtonWidget>("PLAYERS_TAB");
|
||||
playersTab.IsHighlighted = () => panel == PanelType.Players;
|
||||
playersTab.IsDisabled = () => panel == PanelType.Kick || panel == PanelType.ForceStart;
|
||||
playersTab.OnClick = () => panel = PanelType.Players;
|
||||
|
||||
var musicTab = lobby.GetOrNull<ButtonWidget>("MUSIC_TAB");
|
||||
musicTab.IsHighlighted = () => panel == PanelType.Music;
|
||||
musicTab.IsDisabled = () => panel == PanelType.Kick || panel == PanelType.ForceStart;
|
||||
musicTab.OnClick = () => panel = PanelType.Music;
|
||||
|
||||
// Force start panel
|
||||
Action startGame = () =>
|
||||
@@ -584,14 +601,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
chatTemplate = chatPanel.Get("CHAT_TEMPLATE");
|
||||
chatPanel.RemoveChildren();
|
||||
|
||||
var musicButton = lobby.GetOrNull<ButtonWidget>("MUSIC_BUTTON");
|
||||
if (musicButton != null)
|
||||
musicButton.OnClick = () => Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs
|
||||
{
|
||||
{ "onExit", DoNothing },
|
||||
{ "world", worldRenderer.World }
|
||||
});
|
||||
|
||||
var settingsButton = lobby.GetOrNull<ButtonWidget>("SETTINGS_BUTTON");
|
||||
if (settingsButton != null)
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
[ObjectCreator.UseCtor]
|
||||
public MusicPlayerLogic(Widget widget, Ruleset modRules, World world, Action onExit)
|
||||
{
|
||||
var panel = widget.Get("MUSIC_PANEL");
|
||||
var panel = widget;
|
||||
|
||||
musicList = panel.Get<ScrollPanelWidget>("MUSIC_LIST");
|
||||
itemTemplate = musicList.Get<ScrollItemWidget>("MUSIC_TEMPLATE");
|
||||
@@ -83,6 +83,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
return "{0:D2}:{1:D2} / {2:D2}:{3:D2}".F(minutes, seconds, totalMinutes, totalSeconds);
|
||||
};
|
||||
|
||||
var musicTitle = panel.GetOrNull<LabelWidget>("TITLE_LABEL");
|
||||
if (musicTitle != null)
|
||||
musicTitle.GetText = () => currentSong != null ? currentSong.Title : "No song playing";
|
||||
|
||||
var musicSlider = panel.Get<SliderWidget>("MUSIC_SLIDER");
|
||||
musicSlider.OnChange += x => Game.Sound.MusicVolume = x;
|
||||
musicSlider.Value = Game.Sound.MusicVolume;
|
||||
@@ -114,7 +118,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
}
|
||||
|
||||
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Game.Settings.Save(); Ui.CloseWindow(); onExit(); };
|
||||
var backButton = panel.GetOrNull<ButtonWidget>("BACK_BUTTON");
|
||||
if (backButton != null)
|
||||
backButton.OnClick = () => { Game.Settings.Save(); Ui.CloseWindow(); onExit(); };
|
||||
}
|
||||
|
||||
public void BuildMusicTable()
|
||||
|
||||
Reference in New Issue
Block a user