Rework mod enumeration / caching.

- Replaced ModMetadata.AllMods with Game.Mods.
- Store / reference mod Manifest instead of ModMetadata.
- Removes engine dependency on ModContent class.
This commit is contained in:
Paul Chote
2016-08-05 17:07:04 +01:00
parent 45a596953e
commit 3df9efb95d
33 changed files with 301 additions and 219 deletions

View File

@@ -38,14 +38,14 @@ namespace OpenRA.Network
{
FieldLoader.Load(this, yaml);
ModMetadata mod;
Manifest mod;
var modVersion = Mods.Split('@');
if (modVersion.Length == 2 && ModMetadata.AllMods.TryGetValue(modVersion[0], out mod))
if (modVersion.Length == 2 && Game.Mods.TryGetValue(modVersion[0], out mod))
{
ModId = modVersion[0];
ModVersion = modVersion[1];
ModLabel = "{0} ({1})".F(mod.Title, modVersion[1]);
IsCompatible = Game.Settings.Debug.IgnoreVersionMismatch || ModVersion == mod.Version;
ModLabel = "{0} ({1})".F(mod.Mod.Title, modVersion[1]);
IsCompatible = Game.Settings.Debug.IgnoreVersionMismatch || ModVersion == mod.Mod.Version;
}
else
ModLabel = "Unknown mod: {0}".F(Mods);

View File

@@ -44,8 +44,8 @@ namespace OpenRA.Network
void StartSavingReplay(byte[] initialContent)
{
var filename = chooseFilename();
var mod = Game.ModData.Manifest.Mod;
var dir = Platform.ResolvePath("^", "Replays", mod.Id, mod.Version);
var mod = Game.ModData.Manifest;
var dir = Platform.ResolvePath("^", "Replays", mod.Id, mod.Mod.Version);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);

View File

@@ -132,13 +132,13 @@ namespace OpenRA.Network
case "HandshakeRequest":
{
// Switch to the server's mod if we need and are able to
var mod = Game.ModData.Manifest.Mod;
var mod = Game.ModData.Manifest;
var request = HandshakeRequest.Deserialize(order.TargetString);
ModMetadata serverMod;
Manifest serverMod;
if (request.Mod != mod.Id &&
ModMetadata.AllMods.TryGetValue(request.Mod, out serverMod) &&
serverMod.Version == request.Version)
Game.Mods.TryGetValue(request.Mod, out serverMod) &&
serverMod.Mod.Version == request.Version)
{
var replay = orderManager.Connection as ReplayConnection;
var launchCommand = replay != null ?
@@ -170,7 +170,7 @@ namespace OpenRA.Network
{
Client = info,
Mod = mod.Id,
Version = mod.Version,
Version = mod.Mod.Version,
Password = orderManager.Password
};