diff --git a/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs b/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs new file mode 100644 index 0000000..bd59212 --- /dev/null +++ b/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; + +namespace Cryville.Crtr.Browsing { + public abstract class ExtensionInterface { + public abstract IEnumerable GetResourceConverters(); + public abstract IEnumerable GetResourceFinders(); + } +} diff --git a/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs.meta b/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs.meta new file mode 100644 index 0000000..c5c3cf4 --- /dev/null +++ b/Assets/Cryville/Crtr/Browsing/ExtensionInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ffe72fef6ebb9e4da3571b4117f0d6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs b/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs index 4ec8cdd..971ca8e 100644 --- a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs +++ b/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs @@ -25,13 +25,26 @@ namespace Cryville.Crtr.Browsing { static LegacyResourceManager() { foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var type in asm.GetTypes()) { - if (type.IsSubclassOf(typeof(ResourceConverter))) { - var converter = (ResourceConverter)Activator.CreateInstance(type); - foreach (var f in converter.GetSupportedFormats()) { + if (!type.IsSubclassOf(typeof(ExtensionInterface))) continue; + var ext = (ExtensionInterface)Activator.CreateInstance(type); + try { + var cs = ext.GetResourceConverters(); + if (cs != null) { + foreach (var c in cs) { + var fs = c.GetSupportedFormats(); + if (fs == null) continue; + foreach (var f in fs) { + if (f == null) continue; if (!converters.ContainsKey(f)) - converters.Add(f, new List { converter }); - else converters[f].Add(converter); + converters.Add(f, new List { c }); + else converters[f].Add(c); + } + } } + Logger.Log("main", 1, "Resource", "Loaded extension {0}", ReflectionHelper.GetNamespaceQualifiedName(type)); + } + catch (Exception ex) { + Logger.Log("main", 4, "Resource", "Failed to initialize extension {0}: {1}", ReflectionHelper.GetNamespaceQualifiedName(type), ex); } } } diff --git a/Assets/Cryville/Crtr/Extensions/Extensions.cs b/Assets/Cryville/Crtr/Extensions/Extensions.cs new file mode 100644 index 0000000..69145e9 --- /dev/null +++ b/Assets/Cryville/Crtr/Extensions/Extensions.cs @@ -0,0 +1,27 @@ +using Cryville.Crtr.Browsing; +using Cryville.Crtr.Extensions.Bestdori; +using Cryville.Crtr.Extensions.Malody; +using Cryville.Crtr.Extensions.osu; +using Cryville.Crtr.Extensions.Quaver; +using System.Collections.Generic; + +namespace Cryville.Crtr.Extensions { + public class Extensions : ExtensionInterface { + public override IEnumerable GetResourceConverters() { + return new ResourceConverter[] { + new BestdoriChartConverter(), + new MalodyChartConverter(), + new osuChartConverter(), + new QuaverChartConverter(), + }; + } + + public override IEnumerable GetResourceFinders() { + return new LocalResourceFinder[] { + new MalodyChartFinder(), + new osuChartFinder(), + new QuaverChartFinder(), + }; + } + } +} diff --git a/Assets/Cryville/Crtr/Extensions/Extensions.cs.meta b/Assets/Cryville/Crtr/Extensions/Extensions.cs.meta new file mode 100644 index 0000000..555da9b --- /dev/null +++ b/Assets/Cryville/Crtr/Extensions/Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23377bf2926d93a4b8e3f3ab6040c7f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: