diff --git a/OpenRA.FileFormats/Mod.cs b/OpenRA.FileFormats/Mod.cs index e2d0ea39f6..361de84ac2 100644 --- a/OpenRA.FileFormats/Mod.cs +++ b/OpenRA.FileFormats/Mod.cs @@ -47,5 +47,12 @@ namespace OpenRA.FileFormats } return ret; } + + public string[] WithPrerequisites() + { + return Id.Iterate(m => AllMods[m].Requires) + .TakeWhile(m => m != null) + .ToArray(); + } } } diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncModBrowserLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncModBrowserLogic.cs index 90b143780f..8d760031a0 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncModBrowserLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncModBrowserLogic.cs @@ -50,13 +50,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic void LoadMod(string mod, Action onSwitch) { - var mods = new List(); - while (!string.IsNullOrEmpty(mod)) - { - mods.Add(mod); - mod = Mod.AllMods[mod].Requires; - } - + var mods = Mod.AllMods[mod].WithPrerequisites(); + Game.RunAfterTick(() => { Widget.CloseWindow(); diff --git a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs index f0ebffafc8..0219820141 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs @@ -46,12 +46,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic static void LoadMod(string mod) { - var mods = new List(); - while (!string.IsNullOrEmpty(mod)) - { - mods.Add(mod); - mod = Mod.AllMods[mod].Requires; - } + var mods = Mod.AllMods[mod].WithPrerequisites(); if (Game.CurrentMods.Keys.ToArray().SymmetricDifference(mods.ToArray()).Any()) Game.RunAfterTick(() => Game.InitializeWithMods(mods.ToArray()));