From afcbba818298b33772c853910826b35a7acc494a Mon Sep 17 00:00:00 2001 From: Perfare Date: Fri, 26 Apr 2019 10:48:24 +0800 Subject: [PATCH] fixed SpriteAtlas --- AssetStudio/Classes/PPtr.cs | 43 +++++++++++++++++++++++++++++- AssetStudio/Classes/SpriteAtlas.cs | 4 ++- AssetStudioGUI/Studio.cs | 12 +++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/AssetStudio/Classes/PPtr.cs b/AssetStudio/Classes/PPtr.cs index c84139a..75d76e9 100644 --- a/AssetStudio/Classes/PPtr.cs +++ b/AssetStudio/Classes/PPtr.cs @@ -1,4 +1,6 @@ -namespace AssetStudio +using System; + +namespace AssetStudio { public sealed class PPtr where T : Object { @@ -86,5 +88,44 @@ result = null; return false; } + + public void Set(T m_Object) + { + var name = m_Object.assetsFile.upperFileName; + if (string.Equals(assetsFile.upperFileName, name, StringComparison.Ordinal)) + { + m_FileID = 0; + } + else + { + m_FileID = assetsFile.m_Externals.FindIndex(x => string.Equals(x.fileName, name, StringComparison.OrdinalIgnoreCase)); + if (m_FileID == -1) + { + assetsFile.m_Externals.Add(new FileIdentifier + { + fileName = m_Object.assetsFile.fileName + }); + m_FileID = assetsFile.m_Externals.Count; + } + else + { + m_FileID += 1; + } + } + + var assetsManager = assetsFile.assetsManager; + var assetsFileList = assetsManager.assetsFileList; + var assetsFileIndexCache = assetsManager.assetsFileIndexCache; + + if (!assetsFileIndexCache.TryGetValue(name, out index)) + { + index = assetsFileList.FindIndex(x => x.upperFileName == name); + assetsFileIndexCache.Add(name, index); + } + + m_PathID = m_Object.m_PathID; + } + + public bool IsNull() => m_PathID == 0 || m_FileID < 0; } } diff --git a/AssetStudio/Classes/SpriteAtlas.cs b/AssetStudio/Classes/SpriteAtlas.cs index c0cc60b..7ec795e 100644 --- a/AssetStudio/Classes/SpriteAtlas.cs +++ b/AssetStudio/Classes/SpriteAtlas.cs @@ -33,14 +33,16 @@ namespace AssetStudio public sealed class SpriteAtlas : NamedObject { + public PPtr[] m_PackedSprites; public Dictionary, SpriteAtlasData> m_RenderDataMap; public SpriteAtlas(ObjectReader reader) : base(reader) { var m_PackedSpritesSize = reader.ReadInt32(); + m_PackedSprites = new PPtr[m_PackedSpritesSize]; for (int i = 0; i < m_PackedSpritesSize; i++) { - new PPtr(reader); + m_PackedSprites[i] = new PPtr(reader); } var m_PackedSpriteNamesToIndex = reader.ReadStringArray(); diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index 6b80874..aecfef6 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -168,6 +168,18 @@ namespace AssetStudioGUI ab = m_AssetBundle; assetItem.Text = ab.m_Name; break; + case SpriteAtlas m_SpriteAtlas: + foreach (var m_PackedSprite in m_SpriteAtlas.m_PackedSprites) + { + if (m_PackedSprite.TryGet(out var m_Sprite)) + { + if (m_Sprite.m_SpriteAtlas.IsNull()) + { + m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas); + } + } + } + break; case NamedObject m_NamedObject: assetItem.Text = m_NamedObject.m_Name; break;