Pipe mod music installation through the ModChooser

This commit is contained in:
Pavel Penev
2015-09-05 00:19:20 +03:00
parent 0e7122acad
commit 4401e1aa0c
9 changed files with 94 additions and 26 deletions

View File

@@ -41,8 +41,17 @@ namespace OpenRA.Mods.Common.LoadScreens
public void StartGame(Arguments args)
{
Ui.LoadWidget("MODCHOOSER_BACKGROUND", Ui.Root, new WidgetArgs());
Ui.OpenWindow("MODCHOOSER_DIALOG");
var widgetArgs = new WidgetArgs();
Ui.LoadWidget("MODCHOOSER_BACKGROUND", Ui.Root, widgetArgs);
if (args != null && args.Contains("installMusic"))
{
widgetArgs.Add("modId", args.GetValue("installMusic", ""));
Ui.OpenWindow("INSTALL_MUSIC_PANEL", widgetArgs);
}
else
Ui.OpenWindow("MODCHOOSER_DIALOG", widgetArgs);
}
public void Dispose()

View File

@@ -9,10 +9,6 @@
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using OpenRA.FileSystem;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
@@ -20,38 +16,42 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class InstallMusicLogic
{
[ObjectCreator.UseCtor]
public InstallMusicLogic(Widget widget)
public InstallMusicLogic(Widget widget, string modId)
{
var installMusicContainer = widget.Get("INSTALL_MUSIC_PANEL");
Action loadDefaultMod = () => Game.RunAfterTick(() =>
Game.InitializeMod(Game.Settings.Game.Mod, null));
Action loadDefaultMod = () =>
Game.RunAfterTick(() => Game.InitializeMod(modId, null));
var cancelButton = installMusicContainer.GetOrNull<ButtonWidget>("CANCEL_BUTTON");
var cancelButton = installMusicContainer.GetOrNull<ButtonWidget>("BACK_BUTTON");
if (cancelButton != null)
cancelButton.OnClick = loadDefaultMod;
var copyFromDiscButton = installMusicContainer.GetOrNull<ButtonWidget>("COPY_FROM_CD_BUTTON");
var copyFromDiscButton = installMusicContainer.GetOrNull<ButtonWidget>("INSTALL_MUSIC_BUTTON");
if (copyFromDiscButton != null)
{
copyFromDiscButton.OnClick = () =>
{
Ui.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs() {
Ui.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs
{
{ "continueLoading", loadDefaultMod },
{ "modId", modId }
});
};
}
var downloadButton = installMusicContainer.GetOrNull<ButtonWidget>("DOWNLOAD_BUTTON");
var downloadButton = installMusicContainer.GetOrNull<ButtonWidget>("DOWNLOAD_MUSIC_BUTTON");
if (downloadButton != null)
{
var installData = Game.ModData.Manifest.Get<ContentInstaller>();
downloadButton.IsVisible = () => !string.IsNullOrEmpty(installData.MusicPackageMirrorList);
var installData = ModMetadata.AllMods[modId].Content;
downloadButton.IsDisabled = () => string.IsNullOrEmpty(installData.MusicPackageMirrorList);
downloadButton.OnClick = () =>
{
Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", new WidgetArgs() {
Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", new WidgetArgs
{
{ "afterInstall", loadDefaultMod },
{ "mirrorListUrl", installData.MusicPackageMirrorList },
{ "modId", modId }
});
};
}

View File

@@ -13,7 +13,6 @@ using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Widgets;
@@ -96,7 +95,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
modInstallStatus = new Cache<ModMetadata, bool>(IsModInstalled);
ModMetadata initialMod = null;
ModMetadata initialMod;
ModMetadata.AllMods.TryGetValue(Game.Settings.Game.PreviousMod, out initialMod);
SelectMod(initialMod != null && initialMod.Id != "modchooser" ? initialMod : ModMetadata.AllMods["ra"]);

View File

@@ -90,11 +90,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var installButton = widget.GetOrNull<ButtonWidget>("INSTALL_BUTTON");
if (installButton != null)
{
installButton.IsDisabled = () => world == null || world.Type != WorldType.Shellmap;
var args = new string[] { "Install.Music=true" };
installButton.IsDisabled = () => world.Type != WorldType.Shellmap;
var args = new[] { "installMusic={0}".F(Game.ModData.Manifest.Mod.Id) };
installButton.OnClick = () =>
Game.RunAfterTick(() =>
Game.InitializeMod(Game.Settings.Game.Mod, new Arguments(args)));
Game.RunAfterTick(() => Game.InitializeMod("modchooser", new Arguments(args)));
var installData = Game.ModData.Manifest.Get<ContentInstaller>();
installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length <= installData.ShippedSoundtracks;