Allow mod to be launched after installing required content.

This commit is contained in:
Paul Chote
2017-07-20 09:50:06 +01:00
committed by abcdefg30
parent d1ed0e09d0
commit 0f54d6f709

View File

@@ -10,6 +10,7 @@
#endregion #endregion
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
using OpenRA.FileSystem; using OpenRA.FileSystem;
using OpenRA.Widgets; using OpenRA.Widgets;
@@ -19,11 +20,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
public class ModContentPromptLogic : ChromeLogic public class ModContentPromptLogic : ChromeLogic
{ {
readonly ModContent content;
bool requiredContentInstalled;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public ModContentPromptLogic(Widget widget, ModData modData, Manifest mod, ModContent content, Action continueLoading) public ModContentPromptLogic(Widget widget, ModData modData, Manifest mod, ModContent content, Action continueLoading)
{ {
var panel = widget.Get("CONTENT_PROMPT_PANEL"); this.content = content;
CheckRequiredContentInstalled();
var panel = widget.Get("CONTENT_PROMPT_PANEL");
var headerTemplate = panel.Get<LabelWidget>("HEADER_TEMPLATE"); var headerTemplate = panel.Get<LabelWidget>("HEADER_TEMPLATE");
var headerLines = !string.IsNullOrEmpty(content.InstallPromptMessage) ? content.InstallPromptMessage.Replace("\\n", "\n").Split('\n') : new string[0]; var headerLines = !string.IsNullOrEmpty(content.InstallPromptMessage) ? content.InstallPromptMessage.Replace("\\n", "\n").Split('\n') : new string[0];
var headerHeight = 0; var headerHeight = 0;
@@ -48,7 +54,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
{ "mod", mod }, { "mod", mod },
{ "content", content }, { "content", content },
{ "onCancel", () => { } } { "onCancel", CheckRequiredContentInstalled }
}); });
}; };
@@ -77,9 +83,24 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}; };
var quitButton = panel.Get<ButtonWidget>("QUIT_BUTTON"); var quitButton = panel.Get<ButtonWidget>("QUIT_BUTTON");
quitButton.GetText = () => requiredContentInstalled ? "Continue" : "Quit";
quitButton.Bounds.Y += headerHeight; quitButton.Bounds.Y += headerHeight;
quitButton.OnClick = Game.Exit; quitButton.OnClick = () =>
{
if (requiredContentInstalled)
continueLoading();
else
Game.Exit();
};
Game.RunAfterTick(Ui.ResetTooltips); Game.RunAfterTick(Ui.ResetTooltips);
} }
void CheckRequiredContentInstalled()
{
requiredContentInstalled = content.Packages
.Where(p => p.Value.Required)
.All(p => p.Value.TestFiles.All(f => File.Exists(Platform.ResolvePath(f))));
}
} }
} }