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
{
@ -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;
}
}

View File

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

View File

@ -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;