public static UserDataChunk Read(AsepriteStreamReader reader) { //DWORD Flags // 1 = Has text // 2 = Has color var flag = reader.DWORD(); //+ If flags have bit 1 // STRING Text if (reader.FLAG(flag, 1)) { return(new UserDataChunk(reader.STRING())); } //+If flags have bit 2 // BYTE Color Red(0 - 255) // BYTE Color Green(0 - 255) // BYTE Color Blue(0 - 255) // BYTE Color Alpha(0 - 255) if (reader.FLAG(flag, 2)) { return(new UserDataChunk(reader.BYTE(), reader.BYTE(), reader.BYTE(), reader.BYTE())); } return(new UserDataChunk()); }
public static LayerChunk Read(AsepriteStreamReader reader) { // WORD Flags: // 1 = Visible // 2 = Editable // 4 = Lock movement // 8 = Background // 16 = Prefer linked cels // 32 = The layer group should be displayed collapsed // 64 = The layer is a reference layer var flags = (LayerFlags)reader.WORD(); // WORD Layer type // 0 = Normal(image) layer // 1 = Group var type = (LayerTypes)reader.WORD(); // WORD Layer child level(see NOTE.1) var childLevel = reader.WORD(); // WORD Default layer width in pixels(ignored) reader.WORD(); // WORD Default layer height in pixels(ignored) reader.WORD(); // WORD Blend mode(always 0 for layer set) // Normal = 0 // Multiply = 1 // Screen = 2 // Overlay = 3 // Darken = 4 // Lighten = 5 // Color Dodge = 6 // Color Burn = 7 // Hard Light = 8 // Soft Light = 9 // Difference = 10 // Exclusion = 11 // Hue = 12 // Saturation = 13 // Color = 14 // Luminosity = 15 // Addition = 16 // Subtract = 17 // Divide = 18 var blendMode = (BlendModes)reader.WORD(); // BYTE Opacity var opacity = reader.BYTE(); // Note: valid only if file header flags field has bit 1 set // BYTE[3] For future(set to zero) reader.BYTES(3); // STRING Layer name var name = reader.STRING(); return(new LayerChunk(flags, type, childLevel, blendMode, opacity, name)); }
public static PaletteEntry Read(AsepriteStreamReader reader, string defaultName) { // WORD Entry flags: // 1 = Has name bool hasName = reader.FLAG(reader.WORD(), 1); // BYTE Red(0 - 255) var r = reader.BYTE(); // BYTE Green(0 - 255) var g = reader.BYTE(); // BYTE Blue(0 - 255) var b = reader.BYTE(); // BYTE Alpha(0 - 255) var a = reader.BYTE(); // +If has name bit in entry flags // STRING Color name var name = hasName ? reader.STRING() : defaultName; return(new PaletteEntry(r, g, b, a, name)); }
public static SliceChunk Read(AsepriteStreamReader reader) { // DWORD Number of "slice keys" var keyCount = reader.DWORD(); // DWORD Flags // 1 = It's a 9-patches slice // 2 = Has pivot information var flag = reader.DWORD(); // DWORD Reserved reader.DWORD(); // STRING Name var name = reader.STRING(); // + For each slice key var keys = new SliceKey[keyCount]; for (int i = 0; i < keyCount; i++) { keys[i] = SliceKey.Read(reader, (int)flag); } return(new SliceChunk(name, keys)); }
public static Tag Read(AsepriteStreamReader reader) { //WORD From frame var fromFrame = reader.WORD(); //WORD To frame var toFrame = reader.WORD(); //BYTE Loop animation direction // 0 = Forward // 1 = Reverse // 2 = Ping - pong var loopDirection = (LoopDirections)reader.BYTE(); //BYTE[8] For future(set to zero) reader.BYTES(8); //BYTE[3] RGB values of the tag color var color = reader.BYTES(3); //BYTE Extra byte(zero) reader.BYTE(); //STRING Tag name var name = reader.STRING(); return(new Tag(fromFrame, toFrame, loopDirection, color, name)); }