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;
try
{
asset = VersionManager.GetHandler(Version).AssetFactory.CreateAsset(assetInfo, Version);
asset = VersionManager.AssetFactory.CreateAsset(assetInfo, Version);
}
catch (TypeLoadException typeLoadException)
{

View File

@ -121,7 +121,7 @@ namespace AssetRipper.Core.Parser.Files.SerializedFiles
public T CreateAsset<T>(ClassIDType classID) where T : IUnityObjectBase
{
AssetInfo assetInfo = CreateAssetInfo(classID);
IUnityObjectBase asset = VersionManager.GetHandler(Version).AssetFactory.CreateAsset(assetInfo, Version);
IUnityObjectBase? asset = VersionManager.AssetFactory.CreateAsset(assetInfo, Version);
if (asset == null)
{
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; }
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))
{
return VersionManager.GetHandler(version).AssetFactory.CreateEngineAsset(this.Name);
return VersionManager.AssetFactory.CreateEngineAsset(this.Name);
}
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.Logging;
using AssetRipper.Core.Parser.Files;
using AssetRipper.Core.Utils;
using AssetRipper.Core.Parser.Asset;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace AssetRipper.Core.VersionHandling
{
public static class VersionManager
{
public static UnityHandlerBase LegacyHandler { get; set; }
public static UnityHandlerBase GetHandler(UnityVersion version)
private static AssetFactoryBase? _assetFactory;
public static AssetFactoryBase AssetFactory
{
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.Importers;
using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Parser.Files.SerializedFiles;
using AssetRipper.Core.Project.Exporters;

View File

@ -1,6 +1,5 @@
using AssetRipper.Core.Classes.Meta;
using AssetRipper.Core.Classes.Misc;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Logging;
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.Misc;
using AssetRipper.Core.Importers;
using AssetRipper.Core.Interfaces;
using AssetRipper.Core.Parser.Files.SerializedFiles;
using AssetRipper.Core.Project;

View File

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

View File

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