From 84b470017f0d4e7cb4eede0e2d3ea0c3a7840c46 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 17 Feb 2016 02:39:13 +0000 Subject: [PATCH] Remove static Game.ModData references from widget logic. --- OpenRA.Game/Widgets/WidgetLoader.cs | 3 +++ .../Widgets/Logic/CncMainMenuLogic.cs | 4 +-- .../Widgets/Logic/AssetBrowserLogic.cs | 5 ++-- .../Widgets/Logic/ColorPickerLogic.cs | 4 +-- .../Widgets/Logic/CreditsLogic.cs | 3 +-- .../Widgets/Logic/Editor/SaveMapLogic.cs | 4 +-- .../Logic/Ingame/GameInfoBriefingLogic.cs | 4 +-- .../Widgets/Logic/Ingame/IngameMenuLogic.cs | 4 +-- .../Logic/Installation/InstallFromCDLogic.cs | 8 +++--- .../Widgets/Logic/Lobby/LobbyLogic.cs | 9 ++++--- .../Logic/Lobby/LobbyMapPreviewLogic.cs | 4 +-- .../Widgets/Logic/MainMenuLogic.cs | 12 ++++----- .../Widgets/Logic/MapChooserLogic.cs | 19 ++++++++------ .../Widgets/Logic/MissionBrowserLogic.cs | 6 ++--- .../Widgets/Logic/ModBrowserLogic.cs | 4 +-- .../Widgets/Logic/MultiplayerLogic.cs | 10 ++++--- .../Widgets/Logic/MusicPlayerLogic.cs | 6 ++--- .../Widgets/Logic/ReplayBrowserLogic.cs | 4 +-- .../Widgets/Logic/ServerCreationLogic.cs | 6 ++--- .../Widgets/Logic/SettingsLogic.cs | 26 +++++++++++-------- 20 files changed, 78 insertions(+), 67 deletions(-) diff --git a/OpenRA.Game/Widgets/WidgetLoader.cs b/OpenRA.Game/Widgets/WidgetLoader.cs index 0a6a941710..cc873bfc6c 100644 --- a/OpenRA.Game/Widgets/WidgetLoader.cs +++ b/OpenRA.Game/Widgets/WidgetLoader.cs @@ -49,6 +49,9 @@ namespace OpenRA if (!args.ContainsKey("modRules")) args = new WidgetArgs(args) { { "modRules", modData.DefaultRules } }; + if (!args.ContainsKey("modData")) + args = new WidgetArgs(args) { { "modData", modData } }; + var widget = NewWidget(node.Key, args); if (parent != null) diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncMainMenuLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncMainMenuLogic.cs index d8153baaf1..c068bb9114 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncMainMenuLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncMainMenuLogic.cs @@ -18,8 +18,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic public class CncMainMenuLogic : MainMenuLogic { [ObjectCreator.UseCtor] - public CncMainMenuLogic(Widget widget, World world) - : base(widget, world) + public CncMainMenuLogic(Widget widget, World world, ModData modData) + : base(widget, world, modData) { var shellmapDecorations = widget.Get("SHELLMAP_DECORATIONS"); shellmapDecorations.IsVisible = () => menuType != MenuType.None && Game.Settings.Game.ShowShellmap; diff --git a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs index 0f77759ec6..a0d8bcf39d 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs @@ -48,11 +48,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic int currentFrame; [ObjectCreator.UseCtor] - public AssetBrowserLogic(Widget widget, Action onExit, World world, Dictionary logicArgs) + public AssetBrowserLogic(Widget widget, Action onExit, ModData modData, World world, Dictionary logicArgs) { this.world = world; - modData = Game.ModData; - + this.modData = modData; panel = widget; var ticker = panel.GetOrNull("ANIMATION_TICKER"); diff --git a/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs index a447409949..0558ae2250 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic public class ColorPickerLogic : ChromeLogic { [ObjectCreator.UseCtor] - public ColorPickerLogic(Widget widget, World world, HSLColor initialColor, Action onChange, WorldRenderer worldRenderer) + public ColorPickerLogic(Widget widget, ModData modData, World world, HSLColor initialColor, Action onChange, WorldRenderer worldRenderer) { string actorType; if (!ChromeMetrics.TryGet("ColorPickerActorType", out actorType)) @@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic }; // Set the initial state - var validator = Game.ModData.Manifest.Get(); + var validator = modData.Manifest.Get(); mixer.SetPaletteRange(validator.HsvSaturationRange[0], validator.HsvSaturationRange[1], validator.HsvValueRange[0], validator.HsvValueRange[1]); mixer.Set(initialColor); diff --git a/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs index 102b7d7edb..d41d59887c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs @@ -18,10 +18,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic public class CreditsLogic : ChromeLogic { [ObjectCreator.UseCtor] - public CreditsLogic(Widget widget, Action onExit) + public CreditsLogic(Widget widget, ModData modData, Action onExit) { var panel = widget.Get("CREDITS_PANEL"); - var modData = Game.ModData; panel.Get("BACK_BUTTON").OnClick = () => { diff --git a/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs index be817544d8..db20d5f782 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs @@ -29,9 +29,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic } [ObjectCreator.UseCtor] - public SaveMapLogic(Widget widget, Action onSave, Action onExit, Map map, List playerDefinitions, List actorDefinitions) + public SaveMapLogic(Widget widget, ModData modData, Action onSave, Action onExit, + Map map, List playerDefinitions, List actorDefinitions) { - var modData = Game.ModData; var title = widget.Get("TITLE"); title.Text = map.Title; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs index 8de4bf5b0e..ef0622cff6 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoBriefingLogic.cs @@ -16,10 +16,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic class GameInfoBriefingLogic : ChromeLogic { [ObjectCreator.UseCtor] - public GameInfoBriefingLogic(Widget widget, World world) + public GameInfoBriefingLogic(Widget widget, ModData modData, World world) { var previewWidget = widget.Get("MAP_PREVIEW"); - previewWidget.Preview = () => Game.ModData.MapCache[world.Map.Uid]; + previewWidget.Preview = () => modData.MapCache[world.Map.Uid]; var mapDescriptionPanel = widget.Get("MAP_DESCRIPTION_PANEL"); var mapDescription = widget.Get("MAP_DESCRIPTION"); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs index 7c9d9a79eb..fd96c28d10 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic Widget menu; [ObjectCreator.UseCtor] - public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer, IngameInfoPanel activePanel) + public IngameMenuLogic(Widget widget, ModData modData, World world, Action onExit, WorldRenderer worldRenderer, IngameInfoPanel activePanel) { var leaving = false; menu = widget.Get("INGAME_MENU"); @@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (mpe != null) mpe.Fade(mpe.Info.MenuEffect); - menu.Get("VERSION_LABEL").Text = Game.ModData.Manifest.Mod.Version; + menu.Get("VERSION_LABEL").Text = modData.Manifest.Mod.Version; var hideMenu = false; menu.Get("MENU_BUTTONS").IsVisible = () => !hideMenu; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromCDLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromCDLogic.cs index 3a3a2c8991..e1de4d41fb 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromCDLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromCDLogic.cs @@ -20,6 +20,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { public class InstallFromCDLogic : ChromeLogic { + readonly ModData modData; readonly string modId; readonly Widget panel; readonly ProgressBarWidget progressBar; @@ -30,8 +31,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly ContentInstaller installData; [ObjectCreator.UseCtor] - public InstallFromCDLogic(Widget widget, Action afterInstall, string modId) + public InstallFromCDLogic(Widget widget, ModData modData, Action afterInstall, string modId) { + this.modData = modData; this.modId = modId; installData = ModMetadata.AllMods[modId].Content; this.afterInstall = afterInstall; @@ -92,11 +94,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic insertDiskContainer.IsVisible = () => false; installingContainer.IsVisible = () => true; progressBar.Percentage = 0; - var modData = Game.ModData; new Thread(() => { - using (var cabExtractor = new InstallShieldCABExtractor(Game.ModData.ModFiles, source)) + using (var cabExtractor = new InstallShieldCABExtractor(modData.ModFiles, source)) { var denom = installData.InstallShieldCABFileIds.Count; var extractFiles = installData.ExtractFilesFromCD; @@ -152,7 +153,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic retryButton.IsDisabled = () => true; insertDiskContainer.IsVisible = () => false; installingContainer.IsVisible = () => true; - var modData = Game.ModData; var dest = Platform.ResolvePath("^", "Content", modId); var copyFiles = installData.CopyFilesFromCD; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index b25e53f593..90819d8c33 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -30,6 +30,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic public MapPreview MapPreview { get; private set; } public Map Map { get; private set; } + readonly ModData modData; readonly Action onStart; readonly Action onExit; readonly OrderManager orderManager; @@ -110,11 +111,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic } [ObjectCreator.UseCtor] - internal LobbyLogic(Widget widget, WorldRenderer worldRenderer, OrderManager orderManager, + internal LobbyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, OrderManager orderManager, Action onExit, Action onStart, bool skirmishMode, Ruleset modRules) { MapPreview = MapCache.UnknownMap; lobby = widget; + this.modData = modData; this.orderManager = orderManager; this.onStart = onStart; this.onExit = onExit; @@ -511,7 +513,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var gameSpeed = optionsBin.GetOrNull("GAMESPEED_DROPDOWNBUTTON"); if (gameSpeed != null) { - var speeds = Game.ModData.Manifest.Get().Speeds; + var speeds = modData.Manifest.Get().Speeds; gameSpeed.IsDisabled = configurationDisabled; gameSpeed.GetText = () => @@ -738,7 +740,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (MapPreview.Uid == uid) return; - var modData = Game.ModData; MapPreview = modData.MapCache[uid]; Map = null; if (MapPreview.Status == MapStatus.Available) @@ -768,7 +769,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic }).Start(); } else if (Game.Settings.Game.AllowDownloading) - Game.ModData.MapCache.QueryRemoteMapDetails(new[] { uid }); + modData.MapCache.QueryRemoteMapDetails(new[] { uid }); } void UpdatePlayerList() diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs index 490f13d021..e2bb6719ca 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic int blinkTick; [ObjectCreator.UseCtor] - internal LobbyMapPreviewLogic(Widget widget, OrderManager orderManager, LobbyLogic lobby) + internal LobbyMapPreviewLogic(Widget widget, ModData modData, OrderManager orderManager, LobbyLogic lobby) { var available = widget.GetOrNull("MAP_AVAILABLE"); if (available != null) @@ -162,7 +162,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (lobby.MapPreview.Status == MapStatus.DownloadError) lobby.MapPreview.Install(); else if (lobby.MapPreview.Status == MapStatus.Unavailable) - Game.ModData.MapCache.QueryRemoteMapDetails(new[] { lobby.MapPreview.Uid }); + modData.MapCache.QueryRemoteMapDetails(new[] { lobby.MapPreview.Uid }); }; retry.GetText = () => lobby.MapPreview.Status == MapStatus.DownloadError ? "Retry Install" : "Retry Search"; diff --git a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs index 2e5be75d87..64a323734f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs @@ -41,10 +41,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic } [ObjectCreator.UseCtor] - public MainMenuLogic(Widget widget, World world) + public MainMenuLogic(Widget widget, World world, ModData modData) { rootMenu = widget; - rootMenu.Get("VERSION_LABEL").Text = Game.ModData.Manifest.Mod.Version; + rootMenu.Get("VERSION_LABEL").Text = modData.Manifest.Mod.Version; // Menu buttons var mainMenu = widget.Get("MAIN_MENU"); @@ -70,7 +70,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic // so we can't do this inside the input handler. Game.RunAfterTick(() => { - Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id; + Game.Settings.Game.PreviousMod = modData.Manifest.Mod.Id; Game.InitializeMod("modchooser", null); }); }; @@ -103,8 +103,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic }); }; - var hasCampaign = Game.ModData.Manifest.Missions.Any(); - var hasMissions = Game.ModData.MapCache + var hasCampaign = modData.Manifest.Missions.Any(); + var hasMissions = modData.MapCache .Any(p => p.Status == MapStatus.Available && p.Visibility.HasFlag(MapVisibility.MissionSelector)); missionsButton.Disabled = !hasCampaign && !hasMissions; @@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var onSelect = new Action(uid => { RemoveShellmapUI(); - LoadMapIntoEditor(Game.ModData.MapCache[uid].Uid); + LoadMapIntoEditor(modData.MapCache[uid].Uid); }); var newMapButton = widget.Get("NEW_MAP_BUTTON"); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs index ee576f8401..9149a2fde1 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs @@ -23,6 +23,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { readonly Widget widget; readonly DropDownButtonWidget gameModeDropdown; + readonly ModData modData; MapClassification currentTab; @@ -38,9 +39,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic string mapFilter; [ObjectCreator.UseCtor] - internal MapChooserLogic(Widget widget, string initialMap, MapClassification initialTab, Action onExit, Action onSelect, MapVisibility filter) + internal MapChooserLogic(Widget widget, ModData modData, string initialMap, + MapClassification initialTab, Action onExit, Action onSelect, MapVisibility filter) { this.widget = widget; + this.modData = modData; this.onSelect = onSelect; var approving = new Action(() => { Ui.CloseWindow(); onSelect(selectedUid); }); @@ -93,7 +96,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic } var deleteMapButton = widget.Get("DELETE_MAP_BUTTON"); - deleteMapButton.IsDisabled = () => Game.ModData.MapCache[selectedUid].Class != MapClassification.User; + deleteMapButton.IsDisabled = () => modData.MapCache[selectedUid].Class != MapClassification.User; deleteMapButton.IsVisible = () => currentTab == MapClassification.User; deleteMapButton.OnClick = () => { @@ -102,7 +105,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic RefreshMaps(currentTab, filter); EnumerateMaps(currentTab, itemTemplate); if (!tabMaps[currentTab].Any()) - SwitchTab(Game.ModData.MapCache[newUid].Class, itemTemplate); + SwitchTab(modData.MapCache[newUid].Class, itemTemplate); }); }; @@ -114,7 +117,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { RefreshMaps(currentTab, filter); EnumerateMaps(currentTab, itemTemplate); - SwitchTab(Game.ModData.MapCache[newUid].Class, itemTemplate); + SwitchTab(modData.MapCache[newUid].Class, itemTemplate); }); }; @@ -143,7 +146,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic void RefreshMaps(MapClassification tab, MapVisibility filter) { - tabMaps[tab] = Game.ModData.MapCache.Where(m => m.Status == MapStatus.Available && + tabMaps[tab] = modData.MapCache.Where(m => m.Status == MapStatus.Available && m.Class == tab && (m.Visibility & filter) != 0).ToArray(); } @@ -285,7 +288,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic string DeleteMap(string map) { - var path = Game.ModData.MapCache[map].Package.Name; + var path = modData.MapCache[map].Package.Name; try { if (File.Exists(path)) @@ -293,7 +296,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic else if (Directory.Exists(path)) Directory.Delete(path, true); - Game.ModData.MapCache[map].Invalidate(); + modData.MapCache[map].Invalidate(); if (selectedUid == map) selectedUid = WidgetUtils.ChooseInitialMap(tabMaps[currentTab].Select(mp => mp.Uid).FirstOrDefault()); @@ -311,7 +314,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { ConfirmationDialogs.PromptConfirmAction( title: "Delete map", - text: "Delete the map '{0}'?".F(Game.ModData.MapCache[map].Title), + text: "Delete the map '{0}'?".F(modData.MapCache[map].Title), onConfirm: () => { var newUid = DeleteMap(map); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index 483cc0d98d..2baa8bfa2f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -53,10 +53,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic string gameSpeed; [ObjectCreator.UseCtor] - public MissionBrowserLogic(Widget widget, World world, Action onStart, Action onExit) + public MissionBrowserLogic(Widget widget, ModData modData, World world, Action onStart, Action onExit) { - modData = Game.ModData; mapCache = new Cache(p => new Map(modData, p.Package)); + this.modData = modData; this.onStart = onStart; missionList = widget.Get("MISSION_LIST"); @@ -230,7 +230,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (gameSpeedButton != null) { - var speeds = Game.ModData.Manifest.Get().Speeds; + var speeds = modData.Manifest.Get().Speeds; gameSpeed = "default"; gameSpeedButton.GetText = () => speeds[gameSpeed].Name; diff --git a/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs index 53b9f5121e..c766f1d4cc 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ModBrowserLogic.cs @@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic int modOffset = 0; [ObjectCreator.UseCtor] - public ModBrowserLogic(Widget widget) + public ModBrowserLogic(Widget widget, ModData modData) { modInstallStatus = new Cache(IsModInstalled); modPrerequisitesFulfilled = new Cache(Game.IsModInstalled); @@ -46,7 +46,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic modChooserPanel = widget; loadButton = modChooserPanel.Get("LOAD_BUTTON"); loadButton.OnClick = () => LoadMod(selectedMod); - loadButton.IsDisabled = () => selectedMod.Id == Game.ModData.Manifest.Mod.Id; + loadButton.IsDisabled = () => selectedMod.Id == modData.Manifest.Mod.Id; modChooserPanel.Get("QUIT_BUTTON").OnClick = Game.Exit; diff --git a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs index 302c39ac79..86730c90d7 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs @@ -36,6 +36,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly Color incompatibleGameStartedColor; readonly Color gameStartedColor; readonly Color incompatibleGameColor; + readonly ModData modData; GameServer currentServer; MapPreview currentMap; @@ -68,8 +69,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic } [ObjectCreator.UseCtor] - public MultiplayerLogic(Widget widget, Action onStart, Action onExit, string directConnectHost, int directConnectPort) + public MultiplayerLogic(Widget widget, ModData modData, Action onStart, Action onExit, string directConnectHost, int directConnectPort) { + this.modData = modData; this.onStart = onStart; this.onExit = onExit; @@ -321,7 +323,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return 0; // Games for the current mod+version are sorted first - if (testEntry.ModId == Game.ModData.Manifest.Mod.Id) + if (testEntry.ModId == modData.Manifest.Mod.Id) return 2; // Followed by games for different mods that are joinable @@ -331,7 +333,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic void SelectServer(GameServer server) { currentServer = server; - currentMap = server != null ? Game.ModData.MapCache[server.Map] : null; + currentMap = server != null ? modData.MapCache[server.Map] : null; } void RefreshServerListInner(IEnumerable games) @@ -438,7 +440,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic // Search for any unknown maps if (Game.Settings.Game.AllowDownloading) - Game.ModData.MapCache.QueryRemoteMapDetails(games.Where(g => !Filtered(g)).Select(g => g.Map)); + modData.MapCache.QueryRemoteMapDetails(games.Where(g => !Filtered(g)).Select(g => g.Map)); foreach (var row in rows) serverList.AddChild(row); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs index 727cadfb29..590a454d68 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MusicPlayerLogic.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic MusicInfo currentSong = null; [ObjectCreator.UseCtor] - public MusicPlayerLogic(Widget widget, Ruleset modRules, World world, Action onExit) + public MusicPlayerLogic(Widget widget, ModData modData, Ruleset modRules, World world, Action onExit) { var panel = widget; @@ -107,11 +107,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (installButton != null) { installButton.IsDisabled = () => world.Type != WorldType.Shellmap; - var args = new[] { "installMusic={0}".F(Game.ModData.Manifest.Mod.Id) }; + var args = new[] { "installMusic={0}".F(modData.Manifest.Mod.Id) }; installButton.OnClick = () => Game.RunAfterTick(() => Game.InitializeMod("modchooser", new Arguments(args))); - var installData = Game.ModData.Manifest.Get(); + var installData = modData.Manifest.Get(); installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length <= installData.ShippedSoundtracks; } diff --git a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs index 5365a746b5..6a627779a4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic volatile bool cancelLoadingReplays; [ObjectCreator.UseCtor] - public ReplayBrowserLogic(Widget widget, Action onExit, Action onStart) + public ReplayBrowserLogic(Widget widget, ModData modData, Action onExit, Action onStart) { panel = widget; @@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic replayList = panel.Get("REPLAY_LIST"); var template = panel.Get("REPLAY_TEMPLATE"); - var mod = Game.ModData.Manifest.Mod; + var mod = modData.Manifest.Mod; var dir = Platform.ResolvePath("^", "Replays", mod.Id, mod.Version); if (Directory.Exists(dir)) diff --git a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs index 64c5f2b964..78f23e20d9 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs @@ -25,14 +25,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic bool allowPortForward; [ObjectCreator.UseCtor] - public ServerCreationLogic(Widget widget, Action onExit, Action openLobby) + public ServerCreationLogic(Widget widget, ModData modData, Action onExit, Action openLobby) { panel = widget; onCreate = openLobby; this.onExit = onExit; var settings = Game.Settings; - preview = Game.ModData.MapCache[WidgetUtils.ChooseInitialMap(Game.Settings.Server.Map)]; + preview = modData.MapCache[WidgetUtils.ChooseInitialMap(Game.Settings.Server.Map)]; panel.Get("CREATE_BUTTON").OnClick = CreateAndJoin; @@ -46,7 +46,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { "initialMap", preview.Uid }, { "initialTab", MapClassification.System }, { "onExit", () => { } }, - { "onSelect", (Action)(uid => preview = Game.ModData.MapCache[uid]) }, + { "onSelect", (Action)(uid => preview = modData.MapCache[uid]) }, { "filter", MapVisibility.Lobby }, { "onStart", () => { } } }); diff --git a/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs index d0b5cad6ee..686153694b 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs @@ -21,13 +21,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic public class SettingsLogic : ChromeLogic { enum PanelType { Display, Audio, Input, Advanced } - Dictionary leavePanelActions = new Dictionary(); - Dictionary resetPanelActions = new Dictionary(); - PanelType settingsPanel = PanelType.Display; - Widget panelContainer, tabContainer; - - WorldRenderer worldRenderer; - SoundDevice soundDevice; static readonly string OriginalSoundDevice; static readonly string OriginalSoundEngine; @@ -36,6 +29,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic static readonly int2 OriginalGraphicsWindowedSize; static readonly int2 OriginalGraphicsFullscreenSize; + readonly Dictionary leavePanelActions = new Dictionary(); + readonly Dictionary resetPanelActions = new Dictionary(); + readonly Widget panelContainer, tabContainer; + + readonly ModData modData; + readonly WorldRenderer worldRenderer; + + SoundDevice soundDevice; + PanelType settingsPanel = PanelType.Display; + static SettingsLogic() { var original = Game.Settings; @@ -48,9 +51,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic } [ObjectCreator.UseCtor] - public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer) + public SettingsLogic(Widget widget, Action onExit, ModData modData, WorldRenderer worldRenderer) { this.worldRenderer = worldRenderer; + this.modData = modData; panelContainer = widget.Get("SETTINGS_PANEL"); tabContainer = widget.Get("TAB_CONTAINER"); @@ -158,7 +162,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors"); var languageDropDownButton = panel.Get("LANGUAGE_DROPDOWNBUTTON"); - languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton); + languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton, modData.Languages); languageDropDownButton.GetText = () => FieldLoader.Translate(ds.Language); var windowModeDropdown = panel.Get("MODE_DROPDOWN"); @@ -684,7 +688,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return true; } - static bool ShowLanguageDropdown(DropDownButtonWidget dropdown) + static bool ShowLanguageDropdown(DropDownButtonWidget dropdown, IEnumerable languages) { Func setupItem = (o, itemTemplate) => { @@ -696,7 +700,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return item; }; - dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.ModData.Languages, setupItem); + dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, languages, setupItem); return true; }