Stop passing around partially constructed ModData instances.
This commit is contained in:
committed by
Gustas Kažukauskas
parent
2b6977d53f
commit
31607bd0cf
@@ -21,6 +21,7 @@ using OpenRA.Graphics;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Support;
|
||||
using OpenRA.Traits;
|
||||
using FS = OpenRA.FileSystem.FileSystem;
|
||||
|
||||
namespace OpenRA
|
||||
{
|
||||
@@ -31,8 +32,9 @@ namespace OpenRA
|
||||
readonly Dictionary<IReadOnlyPackage, MapClassification> mapLocations = [];
|
||||
public bool LoadPreviewImages = true;
|
||||
|
||||
readonly Cache<string, MapPreview> previews;
|
||||
readonly ModData modData;
|
||||
readonly Manifest manifest;
|
||||
readonly FS modFiles;
|
||||
Cache<string, MapPreview> previews;
|
||||
readonly SheetBuilder sheetBuilder;
|
||||
Thread previewLoaderThread;
|
||||
bool previewLoaderThreadShutDown = true;
|
||||
@@ -67,13 +69,11 @@ namespace OpenRA
|
||||
return null;
|
||||
}
|
||||
|
||||
public MapCache(ModData modData)
|
||||
public MapCache(Manifest manifest, FS modFiles)
|
||||
{
|
||||
this.modData = modData;
|
||||
|
||||
var gridType = Exts.Lazy(() => modData.GetOrCreate<MapGrid>().Type);
|
||||
previews = new Cache<string, MapPreview>(uid => new MapPreview(modData, uid, gridType.Value, this));
|
||||
sheetBuilder = new SheetBuilder(SheetType.BGRA, modData.Manifest.RendererConstants.MapPreviewSheetSize);
|
||||
this.manifest = manifest;
|
||||
this.modFiles = modFiles;
|
||||
sheetBuilder = new SheetBuilder(SheetType.BGRA, manifest.RendererConstants.MapPreviewSheetSize);
|
||||
}
|
||||
|
||||
public void UpdateMaps()
|
||||
@@ -82,14 +82,17 @@ namespace OpenRA
|
||||
tracker.UpdateMaps(this);
|
||||
}
|
||||
|
||||
public void LoadMaps()
|
||||
public void LoadMaps(ModData modData)
|
||||
{
|
||||
// Utility mod that does not support maps
|
||||
if (modData.Manifest.MapFolders.Count == 0)
|
||||
if (manifest.MapFolders.Count == 0)
|
||||
return;
|
||||
|
||||
var gridType = modData.GetOrCreate<MapGrid>().Type;
|
||||
previews = new Cache<string, MapPreview>(uid => new MapPreview(modData, uid, gridType, this));
|
||||
|
||||
// Enumerate map directories
|
||||
foreach (var kv in modData.Manifest.MapFolders)
|
||||
foreach (var kv in manifest.MapFolders)
|
||||
{
|
||||
var name = kv.Key;
|
||||
var classification = string.IsNullOrEmpty(kv.Value)
|
||||
@@ -108,7 +111,7 @@ namespace OpenRA
|
||||
if (resolved.StartsWith(Platform.SupportDir, StringComparison.Ordinal) && !File.Exists(resolved))
|
||||
Directory.CreateDirectory(resolved);
|
||||
|
||||
package = modData.ModFiles.OpenPackage(name);
|
||||
package = modFiles.OpenPackage(name);
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -124,12 +127,9 @@ namespace OpenRA
|
||||
|
||||
// PERF: Load the mod YAML once outside the loop, and reuse it when resolving each maps custom YAML.
|
||||
var modDataRules = modData.GetRulesYaml();
|
||||
var gridType = modData.GetOrCreate<MapGrid>().Type;
|
||||
foreach (var kv in MapLocations)
|
||||
{
|
||||
foreach (var map in kv.Key.Contents)
|
||||
LoadMapInternal(map, kv.Key, kv.Value, null, gridType, modDataRules);
|
||||
}
|
||||
|
||||
// We only want to track maps in runtime, not at loadtime
|
||||
LastModifiedMap = null;
|
||||
@@ -148,7 +148,7 @@ namespace OpenRA
|
||||
{
|
||||
using (new PerfTimer(map))
|
||||
{
|
||||
mapPackage = package.OpenPackage(map, modData.ModFiles);
|
||||
mapPackage = package.OpenPackage(map, modFiles);
|
||||
if (mapPackage != null)
|
||||
{
|
||||
var uid = Map.ComputeUID(mapPackage);
|
||||
@@ -179,7 +179,7 @@ namespace OpenRA
|
||||
public IEnumerable<IReadWritePackage> EnumerateMapDirPackages(MapClassification classification = MapClassification.System)
|
||||
{
|
||||
// Enumerate map directories
|
||||
foreach (var kv in modData.Manifest.MapFolders)
|
||||
foreach (var kv in manifest.MapFolders)
|
||||
{
|
||||
if (!Enum.TryParse(kv.Value, out MapClassification packageClassification))
|
||||
continue;
|
||||
@@ -197,7 +197,7 @@ namespace OpenRA
|
||||
if (resolved.StartsWith(Platform.SupportDir, StringComparison.Ordinal) && (!Directory.Exists(resolved) || !File.Exists(resolved)))
|
||||
continue;
|
||||
|
||||
using (var package = (IReadWritePackage)modData.ModFiles.OpenPackage(name))
|
||||
using (var package = (IReadWritePackage)modFiles.OpenPackage(name))
|
||||
yield return package;
|
||||
}
|
||||
}
|
||||
@@ -217,11 +217,11 @@ namespace OpenRA
|
||||
|
||||
foreach (var mapDirPackage in mapDirPackages)
|
||||
foreach (var map in mapDirPackage.Contents)
|
||||
if (mapDirPackage.OpenPackage(map, modData.ModFiles) is IReadWritePackage mapPackage)
|
||||
if (mapDirPackage.OpenPackage(map, modFiles) is IReadWritePackage mapPackage)
|
||||
yield return mapPackage;
|
||||
}
|
||||
|
||||
public void GenerateMap(MapGenerationArgs args)
|
||||
public void GenerateMap(ModData modData, MapGenerationArgs args)
|
||||
{
|
||||
var p = previews[args.Uid];
|
||||
if (p.Class == MapClassification.Generated)
|
||||
|
||||
Reference in New Issue
Block a user