From 045f6c0ff483f36b808dd16a3ffc24e2ec9338d0 Mon Sep 17 00:00:00 2001 From: VaDiM Date: Tue, 5 Mar 2024 23:42:23 +0300 Subject: [PATCH] Add Texture2DArray loading via typetree --- AssetStudio/AssetsManager.cs | 4 ++- AssetStudio/Classes/Texture2DArray.cs | 37 ++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index 2d1ab92..bc6964f 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -572,7 +572,9 @@ namespace AssetStudio : new Texture2D(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); break; case ClassIDType.Texture2DArray: - obj = new Texture2DArray(objectReader); + obj = objectReader.serializedType?.m_Type == null + ? new Texture2DArray(objectReader) + : new Texture2DArray(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); break; case ClassIDType.Transform: obj = new Transform(objectReader); diff --git a/AssetStudio/Classes/Texture2DArray.cs b/AssetStudio/Classes/Texture2DArray.cs index a1fbf9f..59fcca5 100644 --- a/AssetStudio/Classes/Texture2DArray.cs +++ b/AssetStudio/Classes/Texture2DArray.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using Newtonsoft.Json; +using System.Collections; +using System.Collections.Generic; namespace AssetStudio { @@ -16,6 +18,8 @@ namespace AssetStudio public StreamingInfo m_StreamData; public List TextureList; + public Texture2DArray() { } + public Texture2DArray(ObjectReader reader) : base(reader) { m_ColorSpace = reader.ReadInt32(); @@ -39,14 +43,29 @@ namespace AssetStudio m_StreamData = new StreamingInfo(reader); } - if (!string.IsNullOrEmpty(m_StreamData?.path)) - { - image_data = new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, (int)m_StreamData.size); - } - else - { - image_data = new ResourceReader(reader, reader.BaseStream.Position, image_data_size); - } + image_data = !string.IsNullOrEmpty(m_StreamData?.path) + ? new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, (int)m_StreamData.size) + : new ResourceReader(reader, reader.BaseStream.Position, image_data_size); + + TextureList = new List(); + } + + public Texture2DArray(ObjectReader reader, IDictionary typeDict) : base(reader) + { + var parsedTex2dArray = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(typeDict)); + m_Width = parsedTex2dArray.m_Width; + m_Height = parsedTex2dArray.m_Height; + m_Depth = parsedTex2dArray.m_Depth; + m_Format = parsedTex2dArray.m_Format; + m_MipCount = parsedTex2dArray.m_MipCount; + m_DataSize = parsedTex2dArray.m_DataSize; + m_TextureSettings = parsedTex2dArray.m_TextureSettings; + m_StreamData = parsedTex2dArray.m_StreamData; + + image_data = !string.IsNullOrEmpty(m_StreamData?.path) + ? new ResourceReader(m_StreamData.path, assetsFile, m_StreamData.offset, m_StreamData.size) + : new ResourceReader(reader, parsedTex2dArray.image_data.Offset, parsedTex2dArray.image_data.Size); + typeDict.Clear(); TextureList = new List(); }