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;
}
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)
{
var mods = new List<string>();
while (!string.IsNullOrEmpty(mod))
{
mods.Add(mod);
mod = Mod.AllMods[mod].Requires;
}
var mods = Mod.AllMods[mod].WithPrerequisites();
Game.RunAfterTick(() =>
{

View File

@@ -46,12 +46,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
static void LoadMod(string mod)
{
var mods = new List<string>();
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()));