fixed SpriteAtlas

This commit is contained in:
Perfare 2019-04-26 10:48:24 +08:00
parent cefdf08873
commit afcbba8182
3 changed files with 57 additions and 2 deletions

View File

@ -1,4 +1,6 @@
namespace AssetStudio using System;
namespace AssetStudio
{ {
public sealed class PPtr<T> where T : Object public sealed class PPtr<T> where T : Object
{ {
@ -86,5 +88,44 @@
result = null; result = null;
return false; 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;
} }
} }

View File

@ -33,14 +33,16 @@ namespace AssetStudio
public sealed class SpriteAtlas : NamedObject public sealed class SpriteAtlas : NamedObject
{ {
public PPtr<Sprite>[] m_PackedSprites;
public Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData> m_RenderDataMap; public Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData> m_RenderDataMap;
public SpriteAtlas(ObjectReader reader) : base(reader) public SpriteAtlas(ObjectReader reader) : base(reader)
{ {
var m_PackedSpritesSize = reader.ReadInt32(); var m_PackedSpritesSize = reader.ReadInt32();
m_PackedSprites = new PPtr<Sprite>[m_PackedSpritesSize];
for (int i = 0; i < m_PackedSpritesSize; i++) for (int i = 0; i < m_PackedSpritesSize; i++)
{ {
new PPtr<Sprite>(reader); m_PackedSprites[i] = new PPtr<Sprite>(reader);
} }
var m_PackedSpriteNamesToIndex = reader.ReadStringArray(); var m_PackedSpriteNamesToIndex = reader.ReadStringArray();

View File

@ -168,6 +168,18 @@ namespace AssetStudioGUI
ab = m_AssetBundle; ab = m_AssetBundle;
assetItem.Text = ab.m_Name; assetItem.Text = ab.m_Name;
break; 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: case NamedObject m_NamedObject:
assetItem.Text = m_NamedObject.m_Name; assetItem.Text = m_NamedObject.m_Name;
break; break;