private static void CompileSpriteToFile(string spriteDir, Dictionary <string, byte[]> spriteData, int num, int form, int shiny, int gender) { //check to see if files exist string[] pngs = Directory.GetFiles(spriteDir, "*.png", SearchOption.TopDirectoryOnly); if (pngs.Length < 1) { return; } string outForm = "r"; if (form >= 0) { outForm += "-" + form; if (shiny >= 0) { outForm += "-" + shiny; if (gender >= 0) { outForm += "-" + gender; } } } try { SpriteSheet sprite = CompileSpriteInternal(spriteDir); using (MemoryStream spriteStream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(spriteStream)) { //Go through each frame type, get metadata, sprite data foreach (FrameType frameType in Enum.GetValues(typeof(FrameType))) { if (!SpriteSheet.IsFrameTypeDirectionless(frameType)) { for (int j = 0; j < 8; j++) { Maps.Direction8 dir = (Maps.Direction8)j; int frameCountSize = sprite.FrameData.GetFrameCount(frameType, dir); TileSheet anim = sprite.GetSheet(frameType, dir); // Add frame count size writer.Write(frameCountSize); int sheetSize = 0; byte[] memStreamArray = new byte[0]; if (anim != null) { using (MemoryStream memoryStream = new MemoryStream()) { anim.Save(memoryStream, ImageFormat.Png); memStreamArray = memoryStream.ToArray(); sheetSize = memStreamArray.Length; } anim.Dispose(); } // Add the animation size writer.Write(sheetSize); //add the animation itself if (sheetSize > 0) { spriteStream.Write(memStreamArray, 0, memStreamArray.Length); } } } else { int frameCountSize = sprite.FrameData.GetFrameCount(frameType, Maps.Direction8.Down); TileSheet anim = sprite.GetSheet(frameType, Maps.Direction8.Down); // Add frame count size writer.Write(frameCountSize); int sheetSize = 0; byte[] memStreamArray = new byte[0]; if (anim != null) { using (MemoryStream memoryStream = new MemoryStream()) { anim.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); memStreamArray = memoryStream.ToArray(); sheetSize = memStreamArray.Length; } anim.Dispose(); } // Add the animation size writer.Write(sheetSize); //add the animation itself if (sheetSize > 0) { spriteStream.Write(memStreamArray, 0, memStreamArray.Length); } } } } byte[] writingBytes = spriteStream.ToArray(); spriteData.Add(outForm, writingBytes); } } catch (Exception ex) { throw new Exception("Error compiling sprite" + spriteDir + "\n", ex); } }
private static void CompilePortraitToFile(string spriteDir, Dictionary <string, byte[]> spriteData, int num, int form, int shiny, int gender) { //check to see if files exist string[] pngs = Directory.GetFiles(spriteDir, "*.png", SearchOption.TopDirectoryOnly); if (pngs.Length < 1) { return; } String outForm = "r"; if (form >= 0) { outForm += "-" + form; if (shiny >= 0) { outForm += "-" + shiny; if (gender >= 0) { outForm += "-" + gender; } } } try { TileSheet sprite = CompilePortraitInternal(spriteDir, out int totalFrames); using (MemoryStream spriteStream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(spriteStream)) { writer.Write(totalFrames); int sheetSize = 0; byte[] memStreamArray = new byte[0]; if (sprite != null) { using (MemoryStream memoryStream = new MemoryStream()) { sprite.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); memStreamArray = memoryStream.ToArray(); sheetSize = memStreamArray.Length; } sprite.Dispose(); } // Add the animation size writer.Write(sheetSize); //add the animation itself if (sheetSize > 0) { spriteStream.Write(memStreamArray, 0, memStreamArray.Length); } } byte[] writingBytes = spriteStream.ToArray(); spriteData.Add(outForm, writingBytes); } } catch (Exception ex) { throw new Exception("Error compiling portait" + spriteDir + "\n", ex); } }