From 4401e1aa0cd1b48eb7351729bef1f383a46f1b84 Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Sat, 5 Sep 2015 00:19:20 +0300 Subject: [PATCH] Pipe mod music installation through the ModChooser --- .../LoadScreens/ModChooserLoadScreen.cs | 13 +++- .../Logic/Installation/InstallMusicLogic.cs | 28 ++++---- .../Widgets/Logic/ModBrowserLogic.cs | 3 +- .../Widgets/Logic/MusicPlayerLogic.cs | 7 +- mods/cnc/mod.yaml | 1 - mods/d2k/mod.yaml | 1 - mods/modchooser/install.yaml | 65 +++++++++++++++++++ mods/ra/mod.yaml | 1 - mods/ts/mod.yaml | 1 - 9 files changed, 94 insertions(+), 26 deletions(-) diff --git a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs index 690dc0d7da..d744f8ccdc 100644 --- a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs @@ -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() diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallMusicLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallMusicLogic.cs index 7dd7956884..431345c81c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallMusicLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallMusicLogic.cs @@ -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("CANCEL_BUTTON"); + var cancelButton = installMusicContainer.GetOrNull("BACK_BUTTON"); if (cancelButton != null) cancelButton.OnClick = loadDefaultMod; - var copyFromDiscButton = installMusicContainer.GetOrNull("COPY_FROM_CD_BUTTON"); + var copyFromDiscButton = installMusicContainer.GetOrNull("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("DOWNLOAD_BUTTON"); + var downloadButton = installMusicContainer.GetOrNull("DOWNLOAD_MUSIC_BUTTON"); if (downloadButton != null) { - var installData = Game.ModData.Manifest.Get(); - 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 } }); }; } diff --git a/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs index 3c0ab93760..80597047e2 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs @@ -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(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"]); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs index 449963aaf6..0279ad9c9a 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs @@ -90,11 +90,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic var installButton = widget.GetOrNull("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(); installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length <= installData.ShippedSoundtracks; diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 96e68f9806..85a197c2a4 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -140,7 +140,6 @@ LoadScreen: CncLoadScreen ContentInstaller: TestFiles: ^Content/cnc/conquer.mix, ^Content/cnc/desert.mix, ^Content/cnc/sounds.mix, ^Content/cnc/speech.mix, ^Content/cnc/temperat.mix, ^Content/cnc/tempicnh.mix, ^Content/cnc/winter.mix - MusicMenuWidget: INSTALL_MUSIC_PANEL FilesToCopy: CONQUER.MIX, DESERT.MIX, SCORES.MIX, SOUNDS.MIX, TEMPERAT.MIX, WINTER.MIX FilesToExtract: speech.mix, tempicnh.mix, transit.mix PackageMirrorList: http://www.openra.net/packages/cnc-mirrors.txt diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index dea69e5fe2..6cbaaca57b 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -123,7 +123,6 @@ LoadScreen: LogoStripeLoadScreen Text: Filling Crates..., Breeding Sandworms..., Fuelling carryalls..., Deploying harvesters..., Preparing 'thopters..., Summoning mentats... ContentInstaller: - MusicMenuWidget: INSTALL_MUSIC_PANEL # TODO: check if DATA.R8 is at 1.03 patch level with 4840 frames TestFiles: ^Content/d2k/BLOXBASE.R8, ^Content/d2k/BLOXBAT.R8, ^Content/d2k/BLOXBGBS.R8, ^Content/d2k/BLOXICE.R8, ^Content/d2k/BLOXTREE.R8, ^Content/d2k/BLOXWAST.R8, ^Content/d2k/DATA.R8, ^Content/d2k/SOUND.RS PackageMirrorList: http://www.openra.net/packages/d2k-103-mirrors.txt diff --git a/mods/modchooser/install.yaml b/mods/modchooser/install.yaml index 88cb9c5f1c..7f8d32093d 100644 --- a/mods/modchooser/install.yaml +++ b/mods/modchooser/install.yaml @@ -195,3 +195,68 @@ Container@INSTALL_FROMCD_PANEL: Font: Bold Key: escape + +Container@INSTALL_MUSIC_PANEL: + Logic: InstallMusicLogic + X: (WINDOW_RIGHT - WIDTH)/2 + Y: (WINDOW_BOTTOM - HEIGHT)/2 + Width: 500 + Height: 177 + Children: + Background: + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Background: panel-bg + Background@RULE: + X: 30 + Y: 50 + Width: 440 + Height:150 + Background:panel-rule + Label@TITLE: + X: 0 + Y: 12 + Width: PARENT_RIGHT + Height: 25 + Text: Install Music + Align: Center + Font: MediumBold + Label@DESC1: + X: 0 + Y: 65 + Width: PARENT_RIGHT + Height: 25 + Text: OpenRA can download the music files from the internet (if available), + Align: Center + Label@DESC2: + X: 0 + Y: 85 + Width: PARENT_RIGHT + Height: 25 + Text: or you can install them from an original CD. + Align: Center + Button@DOWNLOAD_MUSIC_BUTTON: + X: 20 + Y: PARENT_BOTTOM - 52 + Background:button-highlighted + Width: 110 + Height: 32 + Text: Download + Font: Bold + Button@INSTALL_MUSIC_BUTTON: + X: 140 + Y: PARENT_BOTTOM - 52 + Background:button-highlighted + Width: 110 + Height: 32 + Text: Use CD + Font: Bold + Button@BACK_BUTTON: + X: PARENT_RIGHT - 130 + Y: PARENT_BOTTOM - 52 + Background:button-highlighted + Width: 110 + Height: 32 + Text: Back + Font: Bold + Key: escape diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 1189b2112c..3a1495b227 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -141,7 +141,6 @@ LoadScreen: LogoStripeLoadScreen Text: Filling Crates..., Charging Capacitors..., Reticulating Splines..., Planting Trees..., Building Bridges..., Aging Empires..., Compiling EVA..., Constructing Pylons..., Activating Skynet..., Splitting Atoms... ContentInstaller: - MusicMenuWidget: INSTALL_MUSIC_PANEL TestFiles: ^Content/ra/allies.mix, ^Content/ra/conquer.mix, ^Content/ra/interior.mix, ^Content/ra/redalert.mix, ^Content/ra/russian.mix, ^Content/ra/snow.mix, ^Content/ra/sounds.mix, ^Content/ra/temperat.mix PackageMirrorList: http://www.openra.net/packages/ra-mirrors.txt DiskTestFiles: MAIN.MIX, INSTALL/REDALERT.MIX diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index bd435501eb..64e30242ef 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -189,7 +189,6 @@ LoadScreen: LogoStripeLoadScreen Text: Updating EVA installation..., Changing perspective... ContentInstaller: - MusicMenuWidget: INSTALL_MUSIC_PANEL TestFiles: ^Content/ts/cache.mix, ^Content/ts/conquer.mix, ^Content/ts/isosnow.mix, ^Content/ts/isotemp.mix, ^Content/ts/local.mix, ^Content/ts/sidec01.mix, ^Content/ts/sidec02.mix, ^Content/ts/sno.mix, ^Content/ts/snow.mix, ^Content/ts/sounds.mix, ^Content/ts/speech01.mix, ^Content/ts/tem.mix, ^Content/ts/temperat.mix PackageMirrorList: http://www.openra.net/packages/ts-mirrors.txt DiskTestFiles: MULTI.MIX, INSTALL/TIBSUN.MIX