remove duplicated mod prerequisite chain walk; write it clearly

This commit is contained in:
Chris Forbes
2011-09-24 21:46:39 +12:00
parent 23202eff0c
commit 9fcddc0df2
3 changed files with 10 additions and 13 deletions

View File

@@ -47,5 +47,12 @@ namespace OpenRA.FileFormats
} }
return ret; return ret;
} }
public string[] WithPrerequisites()
{
return Id.Iterate(m => AllMods[m].Requires)
.TakeWhile(m => m != null)
.ToArray();
}
} }
} }

View File

@@ -50,12 +50,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
void LoadMod(string mod, Action onSwitch) void LoadMod(string mod, Action onSwitch)
{ {
var mods = new List<string>(); var mods = Mod.AllMods[mod].WithPrerequisites();
while (!string.IsNullOrEmpty(mod))
{
mods.Add(mod);
mod = Mod.AllMods[mod].Requires;
}
Game.RunAfterTick(() => Game.RunAfterTick(() =>
{ {

View File

@@ -46,12 +46,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
static void LoadMod(string mod) static void LoadMod(string mod)
{ {
var mods = new List<string>(); var mods = Mod.AllMods[mod].WithPrerequisites();
while (!string.IsNullOrEmpty(mod))
{
mods.Add(mod);
mod = Mod.AllMods[mod].Requires;
}
if (Game.CurrentMods.Keys.ToArray().SymmetricDifference(mods.ToArray()).Any()) if (Game.CurrentMods.Keys.ToArray().SymmetricDifference(mods.ToArray()).Any())
Game.RunAfterTick(() => Game.InitializeWithMods(mods.ToArray())); Game.RunAfterTick(() => Game.InitializeWithMods(mods.ToArray()));