Implement extension importer.

This commit is contained in:
2023-05-29 15:04:19 +08:00
parent 7deff3c6be
commit 4310b67e7b
6 changed files with 43 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ namespace Cryville.Crtr.Browsing {
return _localRes; return _localRes;
} }
public static void Init(string rootPath) { 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 asms = AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName().Name).ToHashSet();
var modules = new Queue<ModuleItem>(); var modules = new Queue<ModuleItem>();
var extensionDir = new DirectoryInfo(Path.Combine(rootPath, "extensions")); var extensionDir = new DirectoryInfo(Path.Combine(rootPath, "extensions"));

View File

@@ -1,6 +1,7 @@
using Cryville.Common; using Cryville.Common;
using Cryville.Common.Unity; using Cryville.Common.Unity;
using Cryville.Crtr.Extension; using Cryville.Crtr.Extension;
using Cryville.Crtr.Extensions;
using Cryville.Crtr.Extensions.Umg; using Cryville.Crtr.Extensions.Umg;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
@@ -153,8 +154,14 @@ namespace Cryville.Crtr.Browsing {
else if (res is FileResource) { else if (res is FileResource) {
var tres = (FileResource)res; var tres = (FileResource)res;
DirectoryInfo dest; DirectoryInfo dest;
bool singleFileFlag = false;
if (res is ChartResource) if (res is ChartResource)
dest = new DirectoryInfo(_rootPath + "/charts/" + res.Name); 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) else if (res is RulesetResource)
dest = new DirectoryInfo(_rootPath + "/rulesets/" + res.Name); dest = new DirectoryInfo(_rootPath + "/rulesets/" + res.Name);
else if (res is SkinResource) else if (res is SkinResource)
@@ -165,10 +172,11 @@ namespace Cryville.Crtr.Browsing {
LogAndPopup(3, "Attempt to import unsupported file resource: {0}", res); LogAndPopup(3, "Attempt to import unsupported file resource: {0}", res);
continue; continue;
} }
if (!dest.Exists) { if (singleFileFlag || !dest.Exists) {
dest.Create(); 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) { foreach (var attachment in tres.Attachments) {
if (singleFileFlag) throw new InvalidOperationException("Internal error");
attachment.CopyTo(Path.Combine(dest.FullName, attachment.Name)); attachment.CopyTo(Path.Combine(dest.FullName, attachment.Name));
} }
} }

View File

@@ -1,10 +1,12 @@
using Cryville.Crtr.Extension; using Cryville.Crtr.Extension;
using Cryville.Crtr.Extensions.Umg;
using System.Collections.Generic; using System.Collections.Generic;
namespace Cryville.Crtr.Extensions.Umg { namespace Cryville.Crtr.Extensions {
public class Extension : ExtensionInterface { public class Extension : ExtensionInterface {
public override IEnumerable<ResourceConverter> GetResourceConverters() { public override IEnumerable<ResourceConverter> GetResourceConverters() {
return new ResourceConverter[] { return new ResourceConverter[] {
new ExtensionImporter(),
new ChartResourceImporter(), new ChartResourceImporter(),
new RulesetResourceImporter(), new RulesetResourceImporter(),
new SkinResourceImporter(), new SkinResourceImporter(),

View File

@@ -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) { }
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c048eb442e4b9304eb0637599be1084d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: