diff --git a/OpenRA.Game/Widgets/ProgressBarWidget.cs b/OpenRA.Game/Widgets/ProgressBarWidget.cs index d3f66bb849..00b8f84a54 100644 --- a/OpenRA.Game/Widgets/ProgressBarWidget.cs +++ b/OpenRA.Game/Widgets/ProgressBarWidget.cs @@ -46,6 +46,12 @@ namespace OpenRA.Widgets indeterminateTick = 0; } + public void SetIndeterminate(bool value) + { + Indeterminate = value; + indeterminateTick = 0; + } + public override Widget Clone() { return new ProgressBarWidget(this); } } } \ No newline at end of file diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index b37280ff24..c0198c6875 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -82,6 +82,7 @@ namespace OpenRA.Mods.Cnc void TestAndContinue() { + Widget.RootWidget.RemoveChildren(); if (!FileSystem.Exists(Info["TestFile"])) { var args = new Dictionary() @@ -89,7 +90,8 @@ namespace OpenRA.Mods.Cnc { "continueLoading", (Action)(() => TestAndContinue()) }, { "installData", Info } }; - Widget.OpenWindow(Info["InstallerWidget"], args); + Widget.LoadWidget(Info["InstallerBackgroundWidget"], args); + Widget.OpenWindow(Info["InstallerMenuWidget"], args); } else Game.LoadShellMap(); diff --git a/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs index 47598bc665..68e8d9166b 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs @@ -57,6 +57,8 @@ namespace OpenRA.Mods.Cnc.Widgets Game.AddChatLine += AddChatLineStub; } + ingameRoot.GetWidget("DIPLOMACY_BUTTON").IsDisabled = () => true; + ingameRoot.GetWidget("OPTIONS_BUTTON").OnClick = () => { ingameRoot.IsVisible = () => false; @@ -109,6 +111,9 @@ namespace OpenRA.Mods.Cnc.Widgets surrenderButton.OnClick = () => PromptConfirmAction("Surrender", "Are you sure you want to surrender?", onSurrender, doNothing); + menu.GetWidget("MUSIC_BUTTON").IsDisabled = () => true; + menu.GetWidget("PREFERENCES_BUTTON").IsDisabled = () => true; + menu.GetWidget("RESUME_BUTTON").OnClick = () => { Widget.RootWidget.RemoveChild(menu); diff --git a/OpenRA.Mods.Cnc/Widgets/CncInstallLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncInstallLogic.cs index d85293c20a..b5efe7b740 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncInstallLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncInstallLogic.cs @@ -25,27 +25,32 @@ namespace OpenRA.Mods.Cnc.Widgets [ObjectCreator.Param] Dictionary installData, [ObjectCreator.Param] Action continueLoading) { - var panel = widget.GetWidget("INSTALL_PANEL"); - var args = new Dictionary() - { - { "continueLoading", continueLoading }, - { "installData", installData } - }; - - panel.GetWidget("DOWNLOAD_BUTTON").OnClick = () => - Widget.OpenWindow("INSTALL_DOWNLOAD_PANEL", args); - - panel.GetWidget("INSTALL_BUTTON").OnClick = () => - Widget.OpenWindow("INSTALL_FROMCD_PANEL", args); - - //panel.GetWidget("MODS_BUTTON").OnClick = ShowModDialog; - panel.GetWidget("QUIT_BUTTON").OnClick = Game.Exit; + var panel = widget.GetWidget("INSTALL_PANEL"); + var args = new Dictionary() + { + { "continueLoading", continueLoading }, + { "installData", installData } + }; + + panel.GetWidget("DOWNLOAD_BUTTON").OnClick = () => + Widget.OpenWindow("INSTALL_DOWNLOAD_PANEL", args); + + panel.GetWidget("INSTALL_BUTTON").OnClick = () => + Widget.OpenWindow("INSTALL_FROMCD_PANEL", args); + + panel.GetWidget("QUIT_BUTTON").OnClick = Game.Exit; + + // TODO: + panel.GetWidget("DOWNLOAD_BUTTON").IsDisabled = () => true; + panel.GetWidget("MODS_BUTTON").IsDisabled = () => true; } } public class CncInstallFromCDLogic : IWidgetDelegate { Widget panel; + ProgressBarWidget progressBar; + LabelWidget statusLabel; Action continueLoading; [ObjectCreator.UseCtor] @@ -54,6 +59,8 @@ namespace OpenRA.Mods.Cnc.Widgets { this.continueLoading = continueLoading; panel = widget.GetWidget("INSTALL_FROMCD_PANEL"); + progressBar = panel.GetWidget("PROGRESS_BAR"); + statusLabel = panel.GetWidget("STATUS_LABEL"); var backButton = panel.GetWidget("BACK_BUTTON"); backButton.OnClick = Widget.CloseWindow; @@ -63,12 +70,13 @@ namespace OpenRA.Mods.Cnc.Widgets retryButton.OnClick = PromptForCD; retryButton.IsVisible = () => false; - // TODO: Search obvious places (platform dependant) for CD + // TODO: Search obvious places (platform dependent) for CD PromptForCD(); } void PromptForCD() { + progressBar.SetIndeterminate(true); Game.Utilities.PromptFilepathAsync("Select CONQUER.MIX on the C&C CD", path => Game.RunAfterTick(() => Install(path))); } @@ -81,10 +89,8 @@ namespace OpenRA.Mods.Cnc.Widgets var extractPackage = "INSTALL/SETUP.Z"; var extractFiles = new string[] { "cclocal.mix", "speech.mix", "tempicnh.mix", "updatec.mix" }; - var progressBar = panel.GetWidget("PROGRESS_BAR"); - progressBar.Indeterminate = false; + progressBar.SetIndeterminate(false); - var statusLabel = panel.GetWidget("STATUS_LABEL"); var installCounter = 0; var onProgress = (Action)(s => { diff --git a/OpenRA.Mods.Cnc/Widgets/CncMenuLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncMenuLogic.cs index 75bdd2299d..5ea7bb0587 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncMenuLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncMenuLogic.cs @@ -97,6 +97,9 @@ namespace OpenRA.Mods.Cnc.Widgets var settingsMenu = widget.GetWidget("SETTINGS_MENU"); settingsMenu.IsVisible = () => Menu == MenuType.Settings; + settingsMenu.GetWidget("MODS_BUTTON").IsDisabled = () => true; + settingsMenu.GetWidget("MUSIC_BUTTON").IsDisabled = () => true; + settingsMenu.GetWidget("PREFERENCES_BUTTON").IsDisabled = () => true; settingsMenu.GetWidget("BACK_BUTTON").OnClick = () => Menu = MenuType.Main; } diff --git a/mods/cnc/chrome/ingamemenu.yaml b/mods/cnc/chrome/ingamemenu.yaml index 2e091e1b3f..26b83b16f2 100644 --- a/mods/cnc/chrome/ingamemenu.yaml +++ b/mods/cnc/chrome/ingamemenu.yaml @@ -39,8 +39,15 @@ Container@INGAME_MENU: Width:140 Height:35 Text:Surrender - CncMenuButton@SETTINGS_BUTTON: - Id:SETTINGS_BUTTON + CncMenuButton@MUSIC_BUTTON: + Id:MUSIC_BUTTON + X:300 + Y:0 + Width:140 + Height:35 + Text:Music + CncMenuButton@PREFERENCES_BUTTON: + Id:PREFERENCES_BUTTON X:450 Y:0 Width:140 diff --git a/mods/cnc/chrome/gameinit.yaml b/mods/cnc/chrome/install.yaml similarity index 96% rename from mods/cnc/chrome/gameinit.yaml rename to mods/cnc/chrome/install.yaml index 0e1d5829b4..6445517204 100644 --- a/mods/cnc/chrome/gameinit.yaml +++ b/mods/cnc/chrome/install.yaml @@ -1,3 +1,9 @@ +Background@INSTALL_BACKGROUND: + Id:INSTALL_BACKGROUND + Width:WINDOW_RIGHT + Height:WINDOW_BOTTOM + Background:shellmapborder + Container@INSTALL_PANEL: Id:INSTALL_PANEL Delegate:CncInstallLogic @@ -96,7 +102,6 @@ Container@INSTALL_FROMCD_PANEL: Y:45 Width:PARENT_RIGHT - 185 Height:35 - Indeterminate:true Label@STATUS_LABEL: Id:STATUS_LABEL X:170 diff --git a/mods/cnc/chrome/mainmenu.yaml b/mods/cnc/chrome/mainmenu.yaml index 04f1c2be81..2052396559 100644 --- a/mods/cnc/chrome/mainmenu.yaml +++ b/mods/cnc/chrome/mainmenu.yaml @@ -44,7 +44,7 @@ Container@MENU_BACKGROUND: Y:0 Width:140 Height:35 - Text:Skirmish + Text:Singleplayer CncMenuButton@MULTIPLAYER_BUTTON: Id:MULTIPLAYER_BUTTON X:150 diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index ed3f32b08d..c773aa5c16 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -61,7 +61,7 @@ Assemblies: mods/cnc/OpenRA.Mods.Cnc.dll ChromeLayout: - mods/cnc/chrome/gameinit.yaml + mods/cnc/chrome/install.yaml mods/cnc/chrome/mainmenu.yaml mods/cnc/chrome/serverbrowser.yaml mods/cnc/chrome/createserver.yaml @@ -93,7 +93,8 @@ TileSets: mods/cnc/tilesets/snow.yaml LoadScreen: CncLoadScreen - InstallerWidget: INSTALL_PANEL + InstallerMenuWidget: INSTALL_PANEL + InstallerBackgroundWidget: INSTALL_BACKGROUND TestFile: conquer.mix PackageURL: http://open-ra.org/get-dependency.php?file=cnc-packages