Refactoring to remove static Rules & SequenceProvider
This commit is contained in:
37
OpenRA.Game/ModData.cs
Executable file → Normal file
37
OpenRA.Game/ModData.cs
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -25,11 +25,14 @@ namespace OpenRA
|
||||
public readonly WidgetLoader WidgetLoader;
|
||||
public readonly MapCache MapCache;
|
||||
public ILoadScreen LoadScreen = null;
|
||||
public SheetBuilder SheetBuilder;
|
||||
public SpriteLoader SpriteLoader;
|
||||
public VoxelLoader VoxelLoader;
|
||||
public ModSequenceProvider SequenceProvider;
|
||||
public ModRules Rules;
|
||||
public readonly RulesetCache RulesetCache;
|
||||
public CursorProvider CursorProvider { get; private set; }
|
||||
|
||||
Lazy<ModRuleset> modRules;
|
||||
public ModRuleset ModRules { get { return modRules.Value; } }
|
||||
Lazy<MapRuleset> defaultRules;
|
||||
public MapRuleset DefaultRules { get { return defaultRules.Value; } }
|
||||
|
||||
public ModData(string mod)
|
||||
{
|
||||
@@ -40,14 +43,16 @@ namespace OpenRA
|
||||
LoadScreen.Init(Manifest, Manifest.LoadScreen.NodesDict.ToDictionary(x => x.Key, x => x.Value.Value));
|
||||
LoadScreen.Display();
|
||||
WidgetLoader = new WidgetLoader(this);
|
||||
MapCache = new MapCache(Manifest);
|
||||
SequenceProvider = new ModSequenceProvider(this);
|
||||
Rules = new ModRules(this);
|
||||
RulesetCache = new RulesetCache(this);
|
||||
MapCache = new MapCache(this);
|
||||
|
||||
// HACK: Mount only local folders so we have a half-working environment for the asset installer
|
||||
GlobalFileSystem.UnmountAll();
|
||||
foreach (var dir in Manifest.Folders)
|
||||
GlobalFileSystem.Mount(dir);
|
||||
|
||||
modRules = Exts.Lazy(() => RulesetCache.LoadModRules());
|
||||
defaultRules = Exts.Lazy(() => RulesetCache.LoadDefaultRules());
|
||||
}
|
||||
|
||||
public void InitializeLoaders()
|
||||
@@ -56,10 +61,9 @@ namespace OpenRA
|
||||
// horribly when you use ModData in unexpected ways.
|
||||
ChromeMetrics.Initialize(Manifest.ChromeMetrics);
|
||||
ChromeProvider.Initialize(Manifest.Chrome);
|
||||
SheetBuilder = new SheetBuilder(SheetType.Indexed);
|
||||
SpriteLoader = new SpriteLoader(new string[0], SheetBuilder);
|
||||
VoxelLoader = new VoxelLoader();
|
||||
CursorProvider.Initialize(Manifest.Cursors);
|
||||
|
||||
CursorProvider = new CursorProvider(this);
|
||||
}
|
||||
|
||||
public IEnumerable<string> Languages { get; private set; }
|
||||
@@ -79,7 +83,7 @@ namespace OpenRA
|
||||
var yaml = Manifest.Translations.Select(MiniYaml.FromFile).Aggregate(MiniYaml.MergeLiberal);
|
||||
Languages = yaml.Select(t => t.Key).ToArray();
|
||||
|
||||
yaml = MiniYaml.MergeLiberal(map.Translations, yaml);
|
||||
yaml = MiniYaml.MergeLiberal(map.TranslationDefinitions, yaml);
|
||||
|
||||
foreach (var y in yaml)
|
||||
{
|
||||
@@ -122,14 +126,11 @@ namespace OpenRA
|
||||
// Mount map package so custom assets can be used. TODO: check priority.
|
||||
GlobalFileSystem.Mount(GlobalFileSystem.OpenPackage(map.Path, null, int.MaxValue));
|
||||
|
||||
using (new Support.PerfTimer("Rules.ActivateMap"))
|
||||
Rules.ActivateMap(map);
|
||||
SpriteLoader = new SpriteLoader(Rules.TileSets[map.Tileset].Extensions, SheetBuilder);
|
||||
using (new Support.PerfTimer("Map.LoadRules"))
|
||||
map.PreloadRules();
|
||||
|
||||
using (new Support.PerfTimer("SequenceProvider.ActivateMap"))
|
||||
SequenceProvider.ActivateMap(map);
|
||||
VoxelProvider.Initialize(Manifest.VoxelSequences, map.VoxelSequenceDefinitions);
|
||||
|
||||
VoxelProvider.Initialize(Manifest.VoxelSequences, map.VoxelSequences);
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user