Clean up unity version handling code

This commit is contained in:
Jeremy Pritts 2022-05-16 16:44:55 -04:00
parent 97e57a4bea
commit 21f4c5d2ae
15 changed files with 17 additions and 135 deletions

View File

@ -336,7 +336,7 @@ namespace AssetRipper.Core.Parser.Files.SerializedFiles
IUnityObjectBase? asset; IUnityObjectBase? asset;
try try
{ {
asset = VersionManager.GetHandler(Version).AssetFactory.CreateAsset(assetInfo, Version); asset = VersionManager.AssetFactory.CreateAsset(assetInfo, Version);
} }
catch (TypeLoadException typeLoadException) catch (TypeLoadException typeLoadException)
{ {

View File

@ -121,7 +121,7 @@ namespace AssetRipper.Core.Parser.Files.SerializedFiles
public T CreateAsset<T>(ClassIDType classID) where T : IUnityObjectBase public T CreateAsset<T>(ClassIDType classID) where T : IUnityObjectBase
{ {
AssetInfo assetInfo = CreateAssetInfo(classID); AssetInfo assetInfo = CreateAssetInfo(classID);
IUnityObjectBase asset = VersionManager.GetHandler(Version).AssetFactory.CreateAsset(assetInfo, Version); IUnityObjectBase? asset = VersionManager.AssetFactory.CreateAsset(assetInfo, Version);
if (asset == null) if (asset == null)
{ {
throw new ArgumentException($"Could not create asset with id: {classID}", nameof(classID)); throw new ArgumentException($"Could not create asset with id: {classID}", nameof(classID));

View File

@ -26,12 +26,4 @@ namespace AssetRipper.Core.Project
BuildTarget ExportPlatform { get; } BuildTarget ExportPlatform { get; }
TransferInstructionFlags ExportFlags { get; } TransferInstructionFlags ExportFlags { get; }
} }
public static class ExportContainerExtensions
{
public static UnityHandlerBase GetExportHandler(this IExportContainer container)
{
return VersionManager.GetHandler(container.ExportVersion);
}
}
} }

View File

@ -45,7 +45,7 @@ namespace AssetRipper.Core.Structure.Assembly.Serializable
{ {
if (MonoUtils.IsEngineStruct(this.Namespace, this.Name)) if (MonoUtils.IsEngineStruct(this.Namespace, this.Name))
{ {
return VersionManager.GetHandler(version).AssetFactory.CreateEngineAsset(this.Name); return VersionManager.AssetFactory.CreateEngineAsset(this.Name);
} }
if (this.IsEnginePointer()) if (this.IsEnginePointer())
{ {

View File

@ -1,41 +0,0 @@
using AssetRipper.Core.Parser.Asset;
using AssetRipper.Core.Parser.Files;
using System;
using System.Collections.Generic;
namespace AssetRipper.Core.VersionHandling
{
public abstract class UnityHandlerBase
{
public UnityVersion UnityVersion { get; protected set; }
protected Type ClassIDTypeEnum { get; set; }
public AssetFactoryBase AssetFactory { get; protected set; }
protected Dictionary<uint, string> CommonStringDictionary { get; set; }
public string GetCommonString(uint index)
{
if (CommonStringDictionary?.TryGetValue(index, out string result) ?? false)
return result;
else
return null;
}
public string GetClassName(int idNumber)
{
return Enum.GetName(ClassIDTypeEnum, idNumber);
}
public int GetIdNumber(string className)
{
if (Enum.TryParse(ClassIDTypeEnum, className, out var result))
return (int)result;
else
return -1;
}
public int[] GetAllValidIdNumbers()
{
return (int[])Enum.GetValues(ClassIDTypeEnum);
}
}
}

View File

@ -1,21 +1,21 @@
using AssetRipper.Core.Attributes; using AssetRipper.Core.Parser.Asset;
using AssetRipper.Core.Logging;
using AssetRipper.Core.Parser.Files;
using AssetRipper.Core.Utils;
using System; using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace AssetRipper.Core.VersionHandling namespace AssetRipper.Core.VersionHandling
{ {
public static class VersionManager public static class VersionManager
{ {
public static UnityHandlerBase LegacyHandler { get; set; } private static AssetFactoryBase? _assetFactory;
public static AssetFactoryBase AssetFactory
public static UnityHandlerBase GetHandler(UnityVersion version)
{ {
return LegacyHandler; get
{
return _assetFactory ?? throw new Exception("AssetFactory not set");
}
set
{
_assetFactory = value;
}
} }
} }
} }

View File

@ -1,12 +0,0 @@
using AssetRipper.Core.Classes.Meta.Importers;
using AssetRipper.Core.Layout;
namespace AssetRipper.Core.Importers
{
public interface IAssetImporterFactory
{
IDefaultImporter CreateDefaultImporter(LayoutInfo layout);
IMonoImporter CreateMonoImporter(LayoutInfo layout);
INativeFormatImporter CreateNativeFormatImporter(LayoutInfo layout);
}
}

View File

@ -1,17 +0,0 @@
namespace AssetRipper.Core.Importers
{
public static class ImporterVersionHandler
{
private static IAssetImporterFactory legacyImporter;
public static void SetLegacyImporter(IAssetImporterFactory importerFactory)
{
legacyImporter = importerFactory;
}
public static IAssetImporterFactory GetImporterFactory(UnityVersion version)
{
return legacyImporter;
}
}
}

View File

@ -1,5 +1,4 @@
using AssetRipper.Core.Classes.Meta; using AssetRipper.Core.Classes.Meta;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Interfaces; using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Parser.Files.SerializedFiles; using AssetRipper.Core.Parser.Files.SerializedFiles;
using AssetRipper.Core.Project.Exporters; using AssetRipper.Core.Project.Exporters;

View File

@ -1,6 +1,5 @@
using AssetRipper.Core.Classes.Meta; using AssetRipper.Core.Classes.Meta;
using AssetRipper.Core.Classes.Misc; using AssetRipper.Core.Classes.Misc;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Interfaces; using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Logging; using AssetRipper.Core.Logging;
using AssetRipper.Core.Parser.Asset; using AssetRipper.Core.Parser.Asset;

View File

@ -1,24 +0,0 @@
using AssetRipper.Core.Classes.Meta.Importers;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Layout;
namespace AssetRipper.Core.Parser.Asset
{
public class LegacyImporterFactory : IAssetImporterFactory
{
public IDefaultImporter CreateDefaultImporter(LayoutInfo layout)
{
return new DefaultImporter(layout);
}
public IMonoImporter CreateMonoImporter(LayoutInfo layout)
{
return new MonoImporter(layout);
}
public INativeFormatImporter CreateNativeFormatImporter(LayoutInfo layout)
{
return new NativeFormatImporter(layout);
}
}
}

View File

@ -1,13 +0,0 @@
using AssetRipper.Core.Parser.Asset;
namespace AssetRipper.Core.VersionHandling
{
public class LegacyHandler : UnityHandlerBase
{
public LegacyHandler()
{
this.AssetFactory = new AssetFactory();
ClassIDTypeEnum = typeof(ClassIDType);
}
}
}

View File

@ -1,6 +1,5 @@
using AssetRipper.Core.Classes.Meta; using AssetRipper.Core.Classes.Meta;
using AssetRipper.Core.Classes.Misc; using AssetRipper.Core.Classes.Misc;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Interfaces; using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Parser.Files.SerializedFiles; using AssetRipper.Core.Parser.Files.SerializedFiles;
using AssetRipper.Core.Project; using AssetRipper.Core.Project;

View File

@ -49,8 +49,7 @@ namespace AssetRipper.Library
{ {
static Ripper() static Ripper()
{ {
VersionManager.LegacyHandler = new LegacyHandler(); VersionManager.AssetFactory = new AssetFactory();
Core.Importers.ImporterVersionHandler.SetLegacyImporter(new LegacyImporterFactory());
} }
public Ripper() : this(new()) { } public Ripper() : this(new()) { }

View File

@ -2,7 +2,8 @@
## 0.2.0.2 ## 0.2.0.2
* Bug fixing * Bug fixing
* TextureImporter Yaml * ~~TextureImporter Yaml~~
* ~~Other Importers~~
* Mesh export - STL, OBJ, FBX, PLY, GLB * Mesh export - STL, OBJ, FBX, PLY, GLB
* Convert Unified Exporter to the new system * Convert Unified Exporter to the new system
* Convert GLB Exporter to the new system * Convert GLB Exporter to the new system