From 46c7e1c993fa3259e109aaa9c554583d384dc37d Mon Sep 17 00:00:00 2001 From: lights Date: Sat, 3 Jan 2026 11:30:27 +0800 Subject: [PATCH] read tileset userdatas --- .../Aseprite/Types/AsepriteTileset.cs | 9 ++++++++ .../AsepriteDotNet/IO/AsepriteFileLoader.cs | 21 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/source/AsepriteDotNet/Aseprite/Types/AsepriteTileset.cs b/source/AsepriteDotNet/Aseprite/Types/AsepriteTileset.cs index d4202e1..fe2292a 100644 --- a/source/AsepriteDotNet/Aseprite/Types/AsepriteTileset.cs +++ b/source/AsepriteDotNet/Aseprite/Types/AsepriteTileset.cs @@ -47,6 +47,9 @@ public sealed class AsepriteTileset /// public ReadOnlySpan Pixels => _pixels; + public AsepriteUserData UserData { get; } + public AsepriteUserData[] TileUserDatas { get; } + internal AsepriteTileset(AsepriteTilesetProperties tilesetProperties, string name, Rgba32[] pixels) { ID = (int)tilesetProperties.Id; @@ -57,5 +60,11 @@ internal AsepriteTileset(AsepriteTilesetProperties tilesetProperties, string nam TileSize = new Size(tilesetProperties.TileWidth, tilesetProperties.TileHeight); Name = name; _pixels = pixels; + UserData = new AsepriteUserData(); + TileUserDatas = new AsepriteUserData[TileCount]; + for(var i=0;i tags = new List(); List slices = new List(); List tilesets = new List(); + int tilesetUserDataIndex = 0; + AsepriteUserData spriteUserData = new AsepriteUserData(); // Read frame-by-frame until all frames are read. @@ -508,8 +510,22 @@ private static AsepriteFile LoadFile(string fileName, AsepriteBinaryReader reade { color = reader.ReadUnsafe(Rgba32.StructSize); } - - if (currentUserData is null && paletteRead) + if (lastReadChunkType == ASE_CHUNK_TILESET) + { + var lasttileset = tilesets.Last(); + if (tilesetUserDataIndex == -1) + { + lasttileset.UserData.Text = text; + lasttileset.UserData.Color = color; + } + else + { + lasttileset.TileUserDatas[tilesetUserDataIndex].Text = text; + lasttileset.TileUserDatas[tilesetUserDataIndex].Color = color; + } + tilesetUserDataIndex++; + } + else if (currentUserData is null && paletteRead) { spriteUserData.Text = text; spriteUserData.Color = color; @@ -603,6 +619,7 @@ private static AsepriteFile LoadFile(string fileName, AsepriteBinaryReader reade AsepriteTileset tileset = new AsepriteTileset(properties, tilesetName, pixels); tilesets.Add(tileset); lastReadChunkType = chunkHeader.ChunkType; + tilesetUserDataIndex = -1; } break;