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();
}
}
}