diff --git a/Assets/Cryville/Crtr/Browsing/ExtensionManager.cs b/Assets/Cryville/Crtr/Browsing/ExtensionManager.cs index 2f8b7ee..3072231 100644 --- a/Assets/Cryville/Crtr/Browsing/ExtensionManager.cs +++ b/Assets/Cryville/Crtr/Browsing/ExtensionManager.cs @@ -26,7 +26,7 @@ namespace Cryville.Crtr.Browsing { return _localRes; } public static void Init(string rootPath) { - LoadExtension(typeof(Extensions.Umg.Extension)); + LoadExtension(typeof(Extensions.Extension)); var asms = AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName().Name).ToHashSet(); var modules = new Queue(); var extensionDir = new DirectoryInfo(Path.Combine(rootPath, "extensions")); diff --git a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs b/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs index a3f4298..e788d57 100644 --- a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs +++ b/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs @@ -1,6 +1,7 @@ using Cryville.Common; using Cryville.Common.Unity; using Cryville.Crtr.Extension; +using Cryville.Crtr.Extensions; using Cryville.Crtr.Extensions.Umg; using Newtonsoft.Json; using System; @@ -153,8 +154,14 @@ namespace Cryville.Crtr.Browsing { else if (res is FileResource) { var tres = (FileResource)res; DirectoryInfo dest; + bool singleFileFlag = false; if (res is ChartResource) dest = new DirectoryInfo(_rootPath + "/charts/" + res.Name); + else if (res is ExtensionResource) { + dest = new DirectoryInfo(_rootPath + "/extensions"); + singleFileFlag = true; + Popup.Create("Please restart the game to reload the extensions"); + } else if (res is RulesetResource) dest = new DirectoryInfo(_rootPath + "/rulesets/" + res.Name); else if (res is SkinResource) @@ -165,10 +172,11 @@ namespace Cryville.Crtr.Browsing { LogAndPopup(3, "Attempt to import unsupported file resource: {0}", res); continue; } - if (!dest.Exists) { + if (singleFileFlag || !dest.Exists) { dest.Create(); - tres.Master.CopyTo(Path.Combine(dest.FullName, tres.Master.Extension)); + tres.Master.CopyTo(Path.Combine(dest.FullName, singleFileFlag ? tres.Master.Name : tres.Master.Extension)); foreach (var attachment in tres.Attachments) { + if (singleFileFlag) throw new InvalidOperationException("Internal error"); attachment.CopyTo(Path.Combine(dest.FullName, attachment.Name)); } } diff --git a/Assets/Cryville/Crtr/Extensions/Umg/Extension.cs b/Assets/Cryville/Crtr/Extensions/Extension.cs similarity index 80% rename from Assets/Cryville/Crtr/Extensions/Umg/Extension.cs rename to Assets/Cryville/Crtr/Extensions/Extension.cs index 4aa11ac..9c4e379 100644 --- a/Assets/Cryville/Crtr/Extensions/Umg/Extension.cs +++ b/Assets/Cryville/Crtr/Extensions/Extension.cs @@ -1,10 +1,12 @@ using Cryville.Crtr.Extension; +using Cryville.Crtr.Extensions.Umg; using System.Collections.Generic; -namespace Cryville.Crtr.Extensions.Umg { +namespace Cryville.Crtr.Extensions { public class Extension : ExtensionInterface { public override IEnumerable GetResourceConverters() { return new ResourceConverter[] { + new ExtensionImporter(), new ChartResourceImporter(), new RulesetResourceImporter(), new SkinResourceImporter(), diff --git a/Assets/Cryville/Crtr/Extensions/Umg/Extension.cs.meta b/Assets/Cryville/Crtr/Extensions/Extension.cs.meta similarity index 100% rename from Assets/Cryville/Crtr/Extensions/Umg/Extension.cs.meta rename to Assets/Cryville/Crtr/Extensions/Extension.cs.meta diff --git a/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs b/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs new file mode 100644 index 0000000..409898a --- /dev/null +++ b/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs @@ -0,0 +1,18 @@ +using Cryville.Crtr.Extension; +using System.IO; + +namespace Cryville.Crtr.Extensions { + internal class ExtensionImporter : ResourceConverter { + static readonly string[] SUPPORTED_FORMATS = { ".dll" }; + public override string[] GetSupportedFormats() { + return SUPPORTED_FORMATS; + } + + public override void Convert(FileInfo file, ConversionSession ses) { + ses.AddResource(new ExtensionResource(file.Name, file)); + } + } + public class ExtensionResource : FileResource { + public ExtensionResource(string name, FileInfo master) : base(name, master) { } + } +} diff --git a/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs.meta b/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs.meta new file mode 100644 index 0000000..194393f --- /dev/null +++ b/Assets/Cryville/Crtr/Extensions/ExtensionImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c048eb442e4b9304eb0637599be1084d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: