using System; using System.IO; namespace UnityEditor.U2D.Aseprite { /// /// Flags for layer options. /// [Flags] public enum LayerFlags { /// Flag set if the layer is visible Visible = 1, /// Editable - not in use flag Editable = 2, /// LockMovement - not in use flag LockMovement = 4, /// Background - not in use flag Background = 8, /// PreferLinkedCels - not in use flag PreferLinkedCels = 16, /// DisplayAsCollapsed - not in use flag DisplayAsCollapsed = 32, /// ReferenceLayer - not in use flag ReferenceLayer = 64 } /// /// Layer types. /// public enum LayerTypes { /// Normal layer Normal = 0, /// Group layer Group = 1, /// Tilemap layer Tilemap = 2 } /// /// Layer blend modes. /// public enum BlendModes { /// Normal blend mode Normal = 0, /// Multiply blend mode Multiply = 1, /// Screen blend mode Screen = 2, /// Overlay blend mode Overlay = 3, /// Darken blend mode Darken = 4, /// Lighten blend mode Lighten = 5, /// ColorDodge blend mode ColorDodge = 6, /// ColorBurn blend mode ColorBurn = 7, /// HardLight blend mode HardLight = 8, /// SoftLight blend mode SoftLight = 9, /// Difference blend mode Difference = 10, /// Exclusion blend mode Exclusion = 11, /// Hue blend mode Hue = 12, /// Saturation blend mode Saturation = 13, /// Color blend mode Color = 14, /// Luminosity blend mode Luminosity = 15, /// Addition blend mode Addition = 16, /// Subtract blend mode Subtract = 17, /// Divide blend mode Divide = 18 } /// /// Parsed representation of an Aseprite Layer chunk. /// public class LayerChunk : BaseChunk { /// public override ChunkTypes chunkType => ChunkTypes.Layer; /// /// Layer option flags. /// public LayerFlags flags { get; private set; } /// /// Type of layer. /// public LayerTypes layerType { get; private set; } /// /// The child level is used to show the relationship of this layer with the last one read. /// public ushort childLevel { get; private set; } /// /// Layer blend mode. /// public BlendModes blendMode { get; private set; } /// Layer opacity (0 = transparent, 255 = opaque). public byte opacity { get; private set; } /// /// Layer name. /// public string name { get; private set; } /// /// Tileset index (Only available for Tilemap layers). /// public uint tileSetIndex { get; private set; } internal LayerChunk(uint chunkSize) : base(chunkSize) { } /// /// Read and store the chunk data. /// /// The active binary reader of the file. protected override void InternalRead(BinaryReader reader) { flags = (LayerFlags)reader.ReadUInt16(); layerType = (LayerTypes)reader.ReadUInt16(); childLevel = reader.ReadUInt16(); var defaultLayerWidth = reader.ReadUInt16(); var defaultLayerHeight = reader.ReadUInt16(); blendMode = (BlendModes)reader.ReadUInt16(); opacity = reader.ReadByte(); // Not in use bytes for (var i = 0; i < 3; ++i) reader.ReadByte(); name = AsepriteUtilities.ReadString(reader); if (layerType == LayerTypes.Tilemap) tileSetIndex = reader.ReadUInt32(); } } }