using Newtonsoft.Json; using RecrownedAthenaeum.Pipeline.NinePatch; using RecrownedAthenaeum.Tools.CommandProcessor; using System; using System.IO; namespace RecrownedAthenaeum.Tools.NinePatchTools { public class NinePatchCommand : EngineCommand { private enum SupportedExtensions { jpeg, jpg, png } public NinePatchCommand() : base("9p", "ninepatch", "9patch") { help = "Generates a 9 patch file for a given image."; arguments = new EngineCommandArgument[6]; arguments[0] = new EngineCommandArgument("-i", "defines the path to the texture to be used for the nine patch.", true); arguments[1] = new EngineCommandArgument("-o", "defines path of output file."); arguments[2] = new EngineCommandArgument("-l", "left patch.", true); arguments[3] = new EngineCommandArgument("-r", "right patch.", true); arguments[4] = new EngineCommandArgument("-u", "up patch.", true); arguments[5] = new EngineCommandArgument("-d", "down patch.", true); } public override void Run(string[] arguments = null) { if (arguments == null) throw new ArgumentException("Missing arguments. Type \"help 9p\" for more information."); int leftBound = 0, rightBound = 0, topBound = 0, bottomBound = 0; string imagePath, outPath; if (IndexOfArgumentIn("-i", arguments) + 1 >= arguments.Length) throw new ArgumentException("Missing -i path after argument."); imagePath = arguments[IndexOfArgumentIn("-i", arguments) + 1]; if (HasArgument(arguments[1], arguments)) { if (IndexOfArgumentIn("-o", arguments) + 1 >= arguments.Length) throw new ArgumentException("Missing -o path after argument."); outPath = arguments[IndexOfArgumentIn("-o", arguments) + 1]; } else { outPath = Path.GetFileNameWithoutExtension(imagePath); } if (IndexOfArgumentIn("-l", arguments) + 1 >= arguments.Length && !int.TryParse(arguments[IndexOfArgumentIn("-l", arguments) + 1], out leftBound)) throw new ArgumentException("Missing -l argument bound."); if (IndexOfArgumentIn("-r", arguments) + 1 >= arguments.Length && !int.TryParse(arguments[IndexOfArgumentIn("-r", arguments) + 1], out rightBound)) throw new ArgumentException("Missing -r argument bound."); if (IndexOfArgumentIn("-u", arguments) + 1 >= arguments.Length && !int.TryParse(arguments[IndexOfArgumentIn("-u", arguments) + 1], out topBound)) throw new ArgumentException("Missing -u argument bound."); if (IndexOfArgumentIn("-d", arguments) + 1 >= arguments.Length && !int.TryParse(arguments[IndexOfArgumentIn("-d", arguments) + 1], out bottomBound)) throw new ArgumentException("Missing -d argument bound."); NinePatchData npData = new NinePatchData(Path.GetFileName(imagePath), leftBound, rightBound, bottomBound, topBound); string serialized = JsonConvert.SerializeObject(npData, Formatting.Indented); if (!File.Exists(imagePath)) throw new ArgumentException("Input file does not exist."); SupportedExtensions extension; if (!Enum.TryParse(Path.GetExtension(imagePath).ToLower().Substring(1), out extension)) throw new ArgumentException("Input file extension not supported."); using (StreamWriter stringWriter = new StreamWriter(outPath + ".9p")) { stringWriter.WriteLine(serialized); } } } }