remove duplicated mod prerequisite chain walk; write it clearly
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(() =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
Reference in New Issue
Block a user