(GameRes): added priorities to format imports.

This commit is contained in:
morkt 2018-09-06 10:25:49 +04:00
parent 50606a056a
commit 0ed70e3595
2 changed files with 18 additions and 3 deletions

View File

@ -41,11 +41,8 @@ namespace GameRes
private static readonly FormatCatalog m_instance = new FormatCatalog(); private static readonly FormatCatalog m_instance = new FormatCatalog();
#pragma warning disable 649 #pragma warning disable 649
[ImportMany(typeof(ArchiveFormat))]
private IEnumerable<ArchiveFormat> m_arc_formats; private IEnumerable<ArchiveFormat> m_arc_formats;
[ImportMany(typeof(ImageFormat))]
private IEnumerable<ImageFormat> m_image_formats; private IEnumerable<ImageFormat> m_image_formats;
[ImportMany(typeof(AudioFormat))]
private IEnumerable<AudioFormat> m_audio_formats; private IEnumerable<AudioFormat> m_audio_formats;
[ImportMany(typeof(ScriptFormat))] [ImportMany(typeof(ScriptFormat))]
private IEnumerable<ScriptFormat> m_script_formats; private IEnumerable<ScriptFormat> m_script_formats;
@ -100,8 +97,12 @@ namespace GameRes
//Create the CompositionContainer with the parts in the catalog //Create the CompositionContainer with the parts in the catalog
using (var container = new CompositionContainer (catalog)) using (var container = new CompositionContainer (catalog))
{ {
m_arc_formats = ImportWithPriorities<ArchiveFormat> (container);
m_image_formats = ImportWithPriorities<ImageFormat> (container);
m_audio_formats = ImportWithPriorities<AudioFormat> (container);
//Fill the imports of this object //Fill the imports of this object
container.ComposeParts (this); container.ComposeParts (this);
AddResourceImpl (m_image_formats, container); AddResourceImpl (m_image_formats, container);
AddResourceImpl (m_arc_formats, container); AddResourceImpl (m_arc_formats, container);
AddResourceImpl (m_audio_formats, container); AddResourceImpl (m_audio_formats, container);
@ -136,6 +137,14 @@ namespace GameRes
} }
} }
private IEnumerable<Format> ImportWithPriorities<Format> (ExportProvider provider)
{
return provider.GetExports<Format, IResourceMetadata>()
.OrderByDescending (f => f.Metadata.Priority)
.Select (f => f.Value)
.ToArray();
}
private void AddAliases (ExportProvider provider) private void AddAliases (ExportProvider provider)
{ {
foreach (var alias in provider.GetExports<ResourceAlias, IResourceAliasMetadata>()) foreach (var alias in provider.GetExports<ResourceAlias, IResourceAliasMetadata>())

View File

@ -195,6 +195,12 @@ namespace GameRes
string Type { get; } string Type { get; }
} }
public interface IResourceMetadata
{
[DefaultValue(0)]
int Priority { get; }
}
public delegate void ParametersRequestEventHandler (object sender, ParametersRequestEventArgs e); public delegate void ParametersRequestEventHandler (object sender, ParametersRequestEventArgs e);
public class ParametersRequestEventArgs : EventArgs public class ParametersRequestEventArgs : EventArgs