mirror of
https://github.com/aelurum/AssetStudio.git
synced 2026-11-14 11:18:47 -05:00
170 lines
5.9 KiB
C#
170 lines
5.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace AssetStudio
|
|
{
|
|
public sealed class SpriteBone
|
|
{
|
|
public string name;
|
|
public string guid;
|
|
public Vector3 position;
|
|
public Quaternion rotation;
|
|
public float length;
|
|
public int parentId;
|
|
public Color color;
|
|
|
|
public SpriteBone(ObjectReader reader)
|
|
{
|
|
name = reader.ReadAlignedString();
|
|
guid = reader.ReadAlignedString();
|
|
position = reader.ReadVector3();
|
|
rotation = reader.ReadQuaternion();
|
|
length = reader.ReadSingle();
|
|
parentId = reader.ReadInt32();
|
|
color = reader.ReadColor4();
|
|
}
|
|
}
|
|
|
|
public sealed class SpriteInstanceData
|
|
{
|
|
public string spriteName;
|
|
public Rectf rect;
|
|
public Vector4 border;
|
|
public Vector2 pivot;
|
|
public float pixelsToUnits;
|
|
public int m_IndexFormat;
|
|
public List<SubMesh> m_SubMeshes;
|
|
public byte[] m_IndexBuffer;
|
|
public VertexData m_VertexData;
|
|
public Matrix4x4[] m_Bindpose;
|
|
public BlendShapeData m_BlendShapes;
|
|
public List<SpriteBone> spriteBones;
|
|
public List<Vector2[]> physicsShape;
|
|
|
|
public SpriteInstanceData(ObjectReader reader)
|
|
{
|
|
spriteName = reader.ReadAlignedString();
|
|
rect = new Rectf(reader);
|
|
border = reader.ReadVector4();
|
|
pivot = reader.ReadVector2();
|
|
pixelsToUnits = reader.ReadSingle();
|
|
m_IndexFormat = reader.ReadInt32();
|
|
|
|
var m_SubMeshesCount = reader.ReadInt32();
|
|
m_SubMeshes = new List<SubMesh>();
|
|
for (var i = 0; i < m_SubMeshesCount; i++)
|
|
{
|
|
m_SubMeshes.Add(new SubMesh(reader));
|
|
}
|
|
|
|
m_IndexBuffer = reader.ReadUInt8Array();
|
|
reader.AlignStream();
|
|
m_VertexData = new VertexData(reader);
|
|
m_Bindpose = reader.ReadMatrixArray();
|
|
m_BlendShapes = new BlendShapeData(reader);
|
|
|
|
var spriteBonesCount = reader.ReadInt32();
|
|
spriteBones = new List<SpriteBone>();
|
|
for (var i = 0; i < spriteBonesCount; i++)
|
|
{
|
|
spriteBones.Add(new SpriteBone(reader));
|
|
}
|
|
|
|
var physicsShapeCount = reader.ReadInt32();
|
|
physicsShape = new List<Vector2[]>();
|
|
for (var i = 0; i < physicsShapeCount; i++)
|
|
{
|
|
physicsShape.Add(reader.ReadVector2Array());
|
|
}
|
|
}
|
|
}
|
|
|
|
public sealed class SpriteAtlasData
|
|
{
|
|
public PPtr<Texture2D> texture;
|
|
public PPtr<Texture2D> alphaTexture;
|
|
public Rectf textureRect;
|
|
public Vector2 textureRectOffset;
|
|
public Vector2 atlasRectOffset;
|
|
public Vector4 uvTransform;
|
|
public float downscaleMultiplier;
|
|
public SpriteSettings settingsRaw;
|
|
public List<SecondarySpriteTexture> secondaryTextures;
|
|
public SpriteInstanceData spriteInstanceData;
|
|
|
|
public SpriteAtlasData(ObjectReader reader)
|
|
{
|
|
var version = reader.version;
|
|
texture = new PPtr<Texture2D>(reader);
|
|
alphaTexture = new PPtr<Texture2D>(reader);
|
|
textureRect = new Rectf(reader);
|
|
textureRectOffset = reader.ReadVector2();
|
|
if (version >= (2017, 2)) //2017.2 and up
|
|
{
|
|
atlasRectOffset = reader.ReadVector2();
|
|
}
|
|
uvTransform = reader.ReadVector4();
|
|
downscaleMultiplier = reader.ReadSingle();
|
|
settingsRaw = new SpriteSettings(reader);
|
|
if (version >= (2020, 2)) //2020.2 and up
|
|
{
|
|
var secondaryTexturesCount = reader.ReadInt32();
|
|
secondaryTextures = new List<SecondarySpriteTexture>();
|
|
for (var i = 0; i < secondaryTexturesCount; i++)
|
|
{
|
|
secondaryTextures.Add(new SecondarySpriteTexture(reader));
|
|
}
|
|
reader.AlignStream();
|
|
}
|
|
if (version >= (6000, 6)) //6000.6.0a3 and up
|
|
{
|
|
spriteInstanceData = new SpriteInstanceData(reader);
|
|
}
|
|
}
|
|
}
|
|
|
|
public sealed class SpriteAtlas : NamedObject
|
|
{
|
|
public List<PPtr<Sprite>> m_PackedSprites = new List<PPtr<Sprite>>();
|
|
public string[] m_PackedSpriteNamesToIndex;
|
|
[JsonConverter(typeof(JsonConverterHelper.RenderDataMapConverter))]
|
|
public Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData> m_RenderDataMap;
|
|
public string m_Tag;
|
|
public bool m_IsVariant;
|
|
public Guid m_Guid;
|
|
|
|
public SpriteAtlas(ObjectReader reader) : base(reader)
|
|
{
|
|
if (version < (6000, 6)) //6000.6 down
|
|
{
|
|
var m_PackedSpritesCount = reader.ReadInt32();
|
|
for (var i = 0; i < m_PackedSpritesCount; i++)
|
|
{
|
|
m_PackedSprites.Add(new PPtr<Sprite>(reader));
|
|
}
|
|
|
|
m_PackedSpriteNamesToIndex = reader.ReadStringArray();
|
|
}
|
|
|
|
var m_RenderDataMapCount = reader.ReadInt32();
|
|
m_RenderDataMap = new Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData>();
|
|
for (var i = 0; i < m_RenderDataMapCount; i++)
|
|
{
|
|
var first = new Guid(reader.ReadBytes(16));
|
|
var second = reader.ReadInt64();
|
|
var value = new SpriteAtlasData(reader);
|
|
m_RenderDataMap.Add(new KeyValuePair<Guid, long>(first, second), value);
|
|
}
|
|
m_Tag = reader.ReadAlignedString();
|
|
m_IsVariant = reader.ReadBoolean();
|
|
reader.AlignStream();
|
|
|
|
if (version >= (6000, 5)) //6000.5.0a4 and up
|
|
{
|
|
m_Guid = new Guid(reader.ReadBytes(16));
|
|
}
|
|
}
|
|
}
|
|
}
|