2018-12-29 06:30:09 +00:00
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using RecrownedAthenaeum.Pipeline.NinePatch;
|
|
|
|
|
using RecrownedAthenaeum.Tools.CommandProcessor;
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace RecrownedAthenaeum.Tools.NinePatchTools
|
|
|
|
|
{
|
|
|
|
|
public class NinePatchCommand : EngineCommand
|
|
|
|
|
{
|
2019-01-04 18:23:42 +00:00
|
|
|
|
private enum SupportedExtensions
|
|
|
|
|
{
|
|
|
|
|
jpeg, jpg, png
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-29 06:30:09 +00:00
|
|
|
|
public NinePatchCommand() : base("9p", "ninepatch", "9patch")
|
|
|
|
|
{
|
|
|
|
|
help = "Generates a 9 patch file for a given image.";
|
|
|
|
|
|
2019-01-13 19:55:08 +00:00
|
|
|
|
commandArguments = new EngineCommandArgument[6];
|
2018-12-29 06:30:09 +00:00
|
|
|
|
|
2019-01-13 19:55:08 +00:00
|
|
|
|
commandArguments[0] = new EngineCommandArgument("-i", "defines the path to the texture to be used for the nine patch.", true);
|
|
|
|
|
commandArguments[1] = new EngineCommandArgument("-o", "defines path of output file.");
|
|
|
|
|
commandArguments[2] = new EngineCommandArgument("-l", "left patch.", true);
|
|
|
|
|
commandArguments[3] = new EngineCommandArgument("-r", "right patch.", true);
|
|
|
|
|
commandArguments[4] = new EngineCommandArgument("-u", "up patch.", true);
|
|
|
|
|
commandArguments[5] = new EngineCommandArgument("-d", "down patch.", true);
|
2018-12-29 06:30:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
2019-01-13 06:23:44 +00:00
|
|
|
|
if (IndexOfArgumentIn("-i", arguments) + 1 >= arguments.Length) throw new ArgumentException("Missing -i path after argument.");
|
2018-12-29 06:30:09 +00:00
|
|
|
|
imagePath = arguments[IndexOfArgumentIn("-i", arguments) + 1];
|
|
|
|
|
|
2019-01-13 19:55:08 +00:00
|
|
|
|
if (HasArgument(commandArguments[1], arguments))
|
2019-01-13 06:23:44 +00:00
|
|
|
|
{
|
|
|
|
|
if (IndexOfArgumentIn("-o", arguments) + 1 >= arguments.Length) throw new ArgumentException("Missing -o path after argument.");
|
|
|
|
|
outPath = arguments[IndexOfArgumentIn("-o", arguments) + 1];
|
|
|
|
|
} else
|
|
|
|
|
{
|
2019-01-13 19:55:08 +00:00
|
|
|
|
outPath = imagePath.Substring(0, imagePath.Length - Path.GetExtension(imagePath).Length);
|
2019-01-13 06:23:44 +00:00
|
|
|
|
}
|
2018-12-29 06:30:09 +00:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
2019-01-13 19:55:08 +00:00
|
|
|
|
if (!File.Exists(imagePath)) throw new ArgumentException("Input file does not exist at " + imagePath + ".");
|
2019-01-04 18:23:42 +00:00
|
|
|
|
SupportedExtensions extension;
|
2019-01-13 19:55:08 +00:00
|
|
|
|
if (!Enum.TryParse<SupportedExtensions>(Path.GetExtension(imagePath).ToLower().Substring(1), out extension)) throw new ArgumentException("Input file extension \"" + Path.GetExtension(imagePath).ToLower().Substring(1) + "\" not supported.");
|
|
|
|
|
|
|
|
|
|
File.WriteAllText(outPath + ".9p", serialized);
|
|
|
|
|
|
|
|
|
|
ConsoleUtilities.WriteWrappedLine("Done. Written to \"" + outPath + "\"");
|
2018-12-29 06:30:09 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|