diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 1fbb6d8683..422edf20f6 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -331,45 +331,7 @@ namespace OpenRA Environment.Exit(0); } else - { - var window = args != null ? args.GetValue("Launch.Window", null) : null; - if (!string.IsNullOrEmpty(window)) - { - var installData = modData.Manifest.ContentInstaller; - if (installData.InstallerBackgroundWidget != null) - Ui.LoadWidget(installData.InstallerBackgroundWidget, Ui.Root, new WidgetArgs()); - - Widgets.Ui.OpenWindow(window, new WidgetArgs()); - } - else - { - modData.LoadScreen.StartGame(); - Settings.Save(); - var replay = args != null ? args.GetValue("Launch.Replay", null) : null; - if (!string.IsNullOrEmpty(replay)) - Game.JoinReplay(replay); - } - } - } - - public static void TestAndContinue() - { - Ui.ResetAll(); - var installData = modData.Manifest.ContentInstaller; - if (!installData.TestFiles.All(f => GlobalFileSystem.Exists(f))) - { - var args = new WidgetArgs() - { - { "continueLoading", () => InitializeMod(Game.Settings.Game.Mod, null) }, - }; - - if (installData.InstallerBackgroundWidget != null) - Ui.LoadWidget(installData.InstallerBackgroundWidget, Ui.Root, args); - - Ui.OpenWindow(installData.InstallerMenuWidget, args); - } - else - LoadShellMap(); + modData.LoadScreen.StartGame(args); } public static void LoadShellMap() diff --git a/OpenRA.Game/ModData.cs b/OpenRA.Game/ModData.cs index 3715a3fbe6..8dff28832a 100644 --- a/OpenRA.Game/ModData.cs +++ b/OpenRA.Game/ModData.cs @@ -184,6 +184,6 @@ namespace OpenRA { void Init(Manifest m, Dictionary info); void Display(); - void StartGame(); + void StartGame(Arguments args); } } diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index 1f3d424737..d81ba334c9 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -12,12 +12,15 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using OpenRA.Graphics; +using OpenRA.Mods.Common.LoadScreens; using OpenRA.Widgets; namespace OpenRA.Mods.Cnc { - public sealed class CncLoadScreen : ILoadScreen + public sealed class CncLoadScreen : BlankLoadScreen { + readonly NullInputHandler nih = new NullInputHandler(); + Dictionary loadInfo; Stopwatch loadTimer = Stopwatch.StartNew(); Sheet sheet; @@ -27,9 +30,8 @@ namespace OpenRA.Mods.Cnc Sprite nodLogo, gdiLogo, evaLogo, brightBlock, dimBlock; Rectangle bounds; Renderer r; - readonly NullInputHandler nih = new NullInputHandler(); - public void Init(Manifest m, Dictionary info) + public override void Init(Manifest m, Dictionary info) { loadInfo = info; @@ -72,7 +74,7 @@ namespace OpenRA.Mods.Cnc string loadingText, versionText; float2 loadingPos, versionPos; - public void Display() + public override void Display() { if (r == null || loadTimer.Elapsed.TotalSeconds < 0.25) return; @@ -118,12 +120,7 @@ namespace OpenRA.Mods.Cnc r.EndFrame(nih); } - public void StartGame() - { - Game.TestAndContinue(); - } - - public void Dispose() + public override void Dispose() { if (sheet != null) sheet.Dispose(); diff --git a/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs new file mode 100644 index 0000000000..4074bc50a8 --- /dev/null +++ b/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs @@ -0,0 +1,78 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; +using OpenRA.FileSystem; +using OpenRA.Widgets; + +namespace OpenRA.Mods.Common.LoadScreens +{ + public class BlankLoadScreen : ILoadScreen + { + public virtual void Init(Manifest m, Dictionary info) { } + + public virtual void Display() + { + if (Game.Renderer == null) + return; + + // Draw a black screen + Game.Renderer.BeginFrame(int2.Zero, 1f); + Game.Renderer.EndFrame(new NullInputHandler()); + } + + void TestAndContinue() + { + Ui.ResetAll(); + var installData = Game.modData.Manifest.ContentInstaller; + if (!installData.TestFiles.All(f => GlobalFileSystem.Exists(f))) + { + var args = new WidgetArgs() + { + { "continueLoading", () => Game.InitializeMod(Game.Settings.Game.Mod, null) }, + }; + + if (installData.InstallerBackgroundWidget != null) + Ui.LoadWidget(installData.InstallerBackgroundWidget, Ui.Root, args); + + Ui.OpenWindow(installData.InstallerMenuWidget, args); + } + else + Game.LoadShellMap(); + + Game.Settings.Save(); + } + + public void StartGame(Arguments args) + { + var window = args != null ? args.GetValue("Launch.Window", null) : null; + if (!string.IsNullOrEmpty(window)) + { + var installData = Game.modData.Manifest.ContentInstaller; + if (installData.InstallerBackgroundWidget != null) + Ui.LoadWidget(installData.InstallerBackgroundWidget, Ui.Root, new WidgetArgs()); + + Ui.OpenWindow(window, new WidgetArgs()); + } + else + { + TestAndContinue(); + + var replay = args != null ? args.GetValue("Launch.Replay", null) : null; + if (!string.IsNullOrEmpty(replay)) + Game.JoinReplay(replay); + } + } + + public virtual void Dispose() { } + } +} + diff --git a/OpenRA.Mods.Common/LoadScreens/DefaultLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs similarity index 89% rename from OpenRA.Mods.Common/LoadScreens/DefaultLoadScreen.cs rename to OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs index c04fa6738d..ab18d9b026 100644 --- a/OpenRA.Mods.Common/LoadScreens/DefaultLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs @@ -16,7 +16,7 @@ using OpenRA.Widgets; namespace OpenRA.Mods.Common.LoadScreens { - public sealed class DefaultLoadScreen : ILoadScreen + public sealed class LogoStripeLoadScreen : BlankLoadScreen { Stopwatch lastUpdate = Stopwatch.StartNew(); Renderer r; @@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.LoadScreens Sprite stripe, logo; string[] messages; - public void Init(Manifest m, Dictionary info) + public override void Init(Manifest m, Dictionary info) { // Avoid standard loading mechanisms so we // can display the loadscreen as early as possible @@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.LoadScreens logoPos = new float2(r.Resolution.Width / 2 - 128, r.Resolution.Height / 2 - 128); } - public void Display() + public override void Display() { if (r == null) return; @@ -66,12 +66,7 @@ namespace OpenRA.Mods.Common.LoadScreens r.EndFrame(new NullInputHandler()); } - public void StartGame() - { - Game.TestAndContinue(); - } - - public void Dispose() + public override void Dispose() { if (sheet != null) sheet.Dispose(); diff --git a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs index ccc18e204e..bfea1e2aee 100644 --- a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.LoadScreens r.EndFrame(new NullInputHandler()); } - public void StartGame() + public void StartGame(Arguments args) { Ui.LoadWidget("MODCHOOSER", Ui.Root, new WidgetArgs()); } diff --git a/OpenRA.Mods.Common/LoadScreens/NullLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/NullLoadScreen.cs deleted file mode 100644 index ce0c7b149c..0000000000 --- a/OpenRA.Mods.Common/LoadScreens/NullLoadScreen.cs +++ /dev/null @@ -1,39 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System.Collections.Generic; -using OpenRA.Widgets; - -namespace OpenRA.Mods.Common.LoadScreens -{ - public sealed class NullLoadScreen : ILoadScreen - { - public void Init(Manifest m, Dictionary info) { } - - public void Display() - { - if (Game.Renderer == null) - return; - - // Draw a black screen - Game.Renderer.BeginFrame(int2.Zero, 1f); - Game.Renderer.EndFrame(new NullInputHandler()); - } - - public void StartGame() - { - Ui.ResetAll(); - } - - public void Dispose() - { - } - } -} diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 4ed8a1ab5a..7401ff88fb 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -78,9 +78,7 @@ - - @@ -239,6 +237,8 @@ + + diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 6d3018f755..7a47f5d1db 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -117,7 +117,7 @@ Movies: Translations: ./mods/d2k/languages/english.yaml -LoadScreen: DefaultLoadScreen +LoadScreen: LogoStripeLoadScreen Image: ./mods/d2k/uibits/loadscreen.png Text: Filling Crates..., Breeding Sandworms... diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 57294f8cc5..bbdff772b3 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -132,7 +132,7 @@ Movies: Translations: ./mods/ra/languages/english.yaml -LoadScreen: DefaultLoadScreen +LoadScreen: LogoStripeLoadScreen Image: ./mods/ra/uibits/loadscreen.png Text: Filling Crates..., Charging Capacitors..., Reticulating Splines..., Planting Trees..., Building Bridges..., Aging Empires..., Compiling EVA..., Constructing Pylons..., Activating Skynet..., Splitting Atoms... diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index b0d26fefb1..997fe876d2 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -162,7 +162,7 @@ Movies: Translations: ./mods/ts/languages/english.yaml -LoadScreen: DefaultLoadScreen +LoadScreen: LogoStripeLoadScreen Image: ./mods/ts/uibits/loadscreen.png Text: Updating EVA installation..., Changing perspective...