using System.Collections.Generic; using System.IO; using System.Collections.ObjectModel; using UnityEngine; namespace UnityEditor.U2D.Aseprite { /// /// Parsed representation of an Aseprite Old Palette chunk. /// /// Not supported yet. internal class OldPaletteChunk : BaseChunk, IPaletteProvider { public override ChunkTypes chunkType => ChunkTypes.OldPalette; /// /// Array of palette entries. /// public ReadOnlyCollection entries => System.Array.AsReadOnly(m_Entries); PaletteEntry[] m_Entries; internal OldPaletteChunk(uint chunkSize) : base(chunkSize) { } protected override void InternalRead(BinaryReader reader) { var noOfPackets = reader.ReadUInt16(); var colorEntries = new List(); var colorIndex = 0; for (var i = 0; i < noOfPackets; ++i) { var noOfColorsToSkip = reader.ReadByte(); colorIndex += noOfColorsToSkip; int noOfColorsInEntry = reader.ReadByte(); if (noOfColorsInEntry == 0) noOfColorsInEntry = 256; // If j + colorIndex >= 256 it means that the color chunk is invalid, so we stop reading. for (var j = 0; j < noOfColorsInEntry && (j + colorIndex < 256); ++j) { var r = reader.ReadByte(); var g = reader.ReadByte(); var b = reader.ReadByte(); colorEntries.Add(new PaletteEntry("", new Color32(r, g, b, 255))); } } m_Entries = colorEntries.ToArray(); } } }