public static ExportResult ExportSpriteMapping(SpriteSheet spriteSheet, List <Animation> animations, string path) { if (spriteSheet.Frames.Count == 0) { return(ExportResult.Nothing); } bool spriteSheetFinalIsCopy = false; SpriteSheet spriteSheetFinal; if (Configuration.PackSpriteSheetWhenExportingSpriteMap) { SpriteSheetPacker packer = new SpriteSheetPacker(); if (packer.PackSpriteSheet(spriteSheet, Configuration.ForcePowTwo, Configuration.ForceSquare, Configuration.Padding, true, Application.Instance.MaxTexSize.Width, Application.Instance.MaxTexSize.Height, out spriteSheetFinal)) { string spriteSheetFileName = Path.GetFileName(spriteSheetFinal.FullPath); string pathToExport = Path.GetDirectoryName(spriteSheetFinal.FullPath); if (pathToExport != null && spriteSheetFileName != null) { spriteSheetFileName = spriteSheetFileName.Insert((spriteSheetFileName.Length - 1) - 3, "_packed"); pathToExport = Path.Combine(pathToExport, spriteSheetFileName); spriteSheetFinal.FullPath = pathToExport; spriteSheetFinalIsCopy = true; } else { return(ExportResult.Nothing); } } else { return(ExportResult.Nothing); } } else { spriteSheetFinal = spriteSheet; } bool noFrames = false; XMLWriter xmlWriter = new XMLWriter(path); xmlWriter.CreateDocWithRoot("SpriteMapping", "::Sprite Mapping generated by Sprite Vortex::"); xmlWriter.OpenNewElement("Texture"); xmlWriter.AddAttribute("Path", PathHelper.MakeRelativePath(spriteSheetFinal.FullPath, path)); xmlWriter.AddAttribute("Name", PathHelper.GetFileName(spriteSheetFinal.FullPath)); xmlWriter.CloseCurrentElement(); xmlWriter.OpenNewElement("TransparentColors"); if (!Configuration.OverwriteImageWhenTransparencyModified) { if (spriteSheet.TransparentColors.Count > 0) { foreach (var color in spriteSheetFinal.TransparentColors) { xmlWriter.AddCompleteElementWithAttribute("Color", "Value", color.Argb.ToString()); } } } xmlWriter.CloseCurrentElement(); xmlWriter.OpenNewElement("Sprites"); foreach (SpriteSheetFrame spriteSheetFrame in spriteSheetFinal.Frames) { xmlWriter.OpenNewElement("Sprite"); xmlWriter.AddAttribute("Name", spriteSheetFrame.TagName); xmlWriter.AddAttribute("Id", spriteSheetFrame.Id.ToString()); xmlWriter.OpenNewElement("Coordinates"); xmlWriter.AddCompleteElmentWithInnerText("X", spriteSheetFrame.X.ToString()); xmlWriter.AddCompleteElmentWithInnerText("Y", spriteSheetFrame.Y.ToString()); xmlWriter.AddCompleteElmentWithInnerText("Width", spriteSheetFrame.Width.ToString()); xmlWriter.AddCompleteElmentWithInnerText("Height", spriteSheetFrame.Height.ToString()); xmlWriter.CloseCurrentElement(); xmlWriter.CloseCurrentElement(); } xmlWriter.CloseCurrentElement(); if (animations != null) { bool hasFrames = false; foreach (var animation in animations) { if (animation.Frames.Count > 0) { hasFrames = true; break; } } if (hasFrames) { xmlWriter.OpenNewElement("Animations"); foreach (var animation in animations) { xmlWriter.OpenNewElement("Animation"); xmlWriter.AddAttribute("Name", animation.Name); xmlWriter.AddAttribute("FrameRate", animation.FrameRate.ToString()); xmlWriter.AddAttribute("Loop", animation.Loop.ToString()); xmlWriter.AddAttribute("PingPong", animation.PingPong.ToString()); xmlWriter.OpenNewElement("Frames"); foreach (var frame in animation.Frames) { xmlWriter.OpenNewElement("Frame"); xmlWriter.AddAttribute("SpriteId", frame.SpriteFrame.SpriteFrameId.ToString()); xmlWriter.AddAttribute("OriginX", frame.OriginX.ToString()); xmlWriter.AddAttribute("OriginY", frame.OriginY.ToString()); xmlWriter.AddAttribute("OffSetX", frame.OffSetX.ToString()); xmlWriter.AddAttribute("OffSetY", frame.OffSetY.ToString()); xmlWriter.AddAttribute("Duration", GlobalizationHelper.FormatNumber(frame.FrameDuration)); xmlWriter.CloseCurrentElement(); } xmlWriter.CloseCurrentElement(); xmlWriter.CloseCurrentElement(); } } else { noFrames = true; } } if (Configuration.PackSpriteSheetWhenExportingSpriteMap || (Configuration.OverwriteImageWhenTransparencyModified && spriteSheetFinal.TransparentColors.Count > 0)) { ExportSpriteSheetImage(spriteSheetFinal, spriteSheetFinal.FullPath); } xmlWriter.Save(); if (spriteSheetFinalIsCopy) { spriteSheetFinal.Texture.Dispose(); } return(noFrames ? ExportResult.ExportedOnlySpriteMap : ExportResult.ExportedAll); }