Add ModData.GetLoaders()
Extract sound loaders and sprite loaders creation into a generic method to avoid code duplication.
This commit is contained in:
@@ -61,29 +61,8 @@ namespace OpenRA
|
||||
RulesetCache.LoadingProgress += HandleLoadingProgress;
|
||||
MapCache = new MapCache(this);
|
||||
|
||||
var soundLoaders = new List<ISoundLoader>();
|
||||
foreach (var format in Manifest.SoundFormats)
|
||||
{
|
||||
var loader = ObjectCreator.FindType(format + "Loader");
|
||||
if (loader == null || !loader.GetInterfaces().Contains(typeof(ISoundLoader)))
|
||||
throw new InvalidOperationException("Unable to find a sound loader for type '{0}'.".F(format));
|
||||
|
||||
soundLoaders.Add((ISoundLoader)ObjectCreator.CreateBasic(loader));
|
||||
}
|
||||
|
||||
SoundLoaders = soundLoaders.ToArray();
|
||||
|
||||
var spriteLoaders = new List<ISpriteLoader>();
|
||||
foreach (var format in Manifest.SpriteFormats)
|
||||
{
|
||||
var loader = ObjectCreator.FindType(format + "Loader");
|
||||
if (loader == null || !loader.GetInterfaces().Contains(typeof(ISpriteLoader)))
|
||||
throw new InvalidOperationException("Unable to find a sprite loader for type '{0}'.".F(format));
|
||||
|
||||
spriteLoaders.Add((ISpriteLoader)ObjectCreator.CreateBasic(loader));
|
||||
}
|
||||
|
||||
SpriteLoaders = spriteLoaders.ToArray();
|
||||
SoundLoaders = GetLoaders<ISoundLoader>(Manifest.SoundFormats, "sound");
|
||||
SpriteLoaders = GetLoaders<ISpriteLoader>(Manifest.SpriteFormats, "sprite");
|
||||
|
||||
var sequenceFormat = Manifest.Get<SpriteSequenceFormat>();
|
||||
var sequenceLoader = ObjectCreator.FindType(sequenceFormat.Type + "Loader");
|
||||
@@ -126,6 +105,21 @@ namespace OpenRA
|
||||
CursorProvider = new CursorProvider(this);
|
||||
}
|
||||
|
||||
TLoader[] GetLoaders<TLoader>(IEnumerable<string> formats, string name)
|
||||
{
|
||||
var loaders = new List<TLoader>();
|
||||
foreach (var format in formats)
|
||||
{
|
||||
var loader = ObjectCreator.FindType(format + "Loader");
|
||||
if (loader == null || !loader.GetInterfaces().Contains(typeof(TLoader)))
|
||||
throw new InvalidOperationException("Unable to find a {0} loader for type '{1}'.".F(name, format));
|
||||
|
||||
loaders.Add((TLoader)ObjectCreator.CreateBasic(loader));
|
||||
}
|
||||
|
||||
return loaders.ToArray();
|
||||
}
|
||||
|
||||
public IEnumerable<string> Languages { get; private set; }
|
||||
|
||||
void LoadTranslations(Map map)
|
||||
|
||||
Reference in New Issue
Block a user