[CLI] Partial assets reading

This commit is contained in:
VaDiM 2023-03-08 17:49:26 +03:00
parent 10b7e84ffb
commit 16a7107d4e
2 changed files with 37 additions and 0 deletions

View File

@ -12,6 +12,7 @@ namespace AssetStudio
{ {
public string SpecifyUnityVersion; public string SpecifyUnityVersion;
public List<SerializedFile> assetsFileList = new List<SerializedFile>(); public List<SerializedFile> assetsFileList = new List<SerializedFile>();
private List<ClassIDType> filteredAssetTypesList = new List<ClassIDType>();
internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
internal Dictionary<string, BinaryReader> resourceFileReaders = new Dictionary<string, BinaryReader>(StringComparer.OrdinalIgnoreCase); internal Dictionary<string, BinaryReader> resourceFileReaders = new Dictionary<string, BinaryReader>(StringComparer.OrdinalIgnoreCase);
@ -21,6 +22,37 @@ namespace AssetStudio
private HashSet<string> noexistFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> noexistFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
public void SetAssetFilter(ClassIDType classIDType)
{
if (filteredAssetTypesList.Count == 0)
{
filteredAssetTypesList.AddRange(new List<ClassIDType>
{
ClassIDType.AssetBundle,
ClassIDType.ResourceManager,
});
}
if (classIDType == ClassIDType.MonoBehaviour)
{
filteredAssetTypesList.AddRange(new List<ClassIDType>
{
ClassIDType.MonoScript,
ClassIDType.MonoBehaviour
});
}
else
{
filteredAssetTypesList.Add(classIDType);
}
}
public void SetAssetFilter(List<ClassIDType> classIDTypeList)
{
foreach (ClassIDType classIDType in classIDTypeList)
SetAssetFilter(classIDType);
}
public void LoadFiles(params string[] files) public void LoadFiles(params string[] files)
{ {
var path = Path.GetDirectoryName(Path.GetFullPath(files[0])); var path = Path.GetDirectoryName(Path.GetFullPath(files[0]));
@ -404,6 +436,10 @@ namespace AssetStudio
var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo); var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo);
try try
{ {
if (filteredAssetTypesList.Count > 0 && !filteredAssetTypesList.Contains(objectReader.type))
{
continue;
}
Object obj; Object obj;
switch (objectReader.type) switch (objectReader.type)
{ {

View File

@ -31,6 +31,7 @@ namespace AssetStudioCLI
{ {
var isLoaded = false; var isLoaded = false;
assetsManager.SpecifyUnityVersion = options.o_unityVersion.Value; assetsManager.SpecifyUnityVersion = options.o_unityVersion.Value;
assetsManager.SetAssetFilter(options.o_exportAssetTypes.Value);
if (Directory.Exists(options.inputPath)) if (Directory.Exists(options.inputPath))
{ {