recrownedgtk/RecrownedAthenaeum.ConsoleTools/TextureAtlasTools/TexturePackerCommand.cs

81 lines
3.8 KiB
C#
Raw Normal View History

using RecrownedAthenaeum.Tools.CommandProcessor;
2018-12-08 23:06:11 +00:00
using RecrownedAthenaeum.Tools.TextureAtlas;
using System;
using System.Collections.Generic;
2018-12-08 23:06:11 +00:00
using System.IO;
using System.Text;
namespace RecrownedAthenaeum.Tools.TextureAtlasTools
{
class TexturePackerCommand : EngineCommand
{
2018-12-09 03:28:58 +00:00
2018-12-29 00:52:52 +00:00
public TexturePackerCommand() : base("texturepacker")
2018-12-09 03:28:58 +00:00
{
2018-12-29 00:52:52 +00:00
arguments = new EngineCommandArgument[6] {
new EngineCommandArgument("-i", "for input directory containing the textures. Required."),
new EngineCommandArgument("-o", "Path for output files. Points to non-existent file. Will create texture and definitions file with name. Required."),
new EngineCommandArgument("-9p", "Can be used multiple times for defining a 9patch. This parameter requires a name, left patch, right patch, top patch, and bottom patch in the format name,a,b,c,d. Optional."),
new EngineCommandArgument("-sp", "Starting power for one side of the texture. Default is 8."),
new EngineCommandArgument("-mp", "Maximum power for one side of the texture. Default is 8."),
new EngineCommandArgument("-dau", "Disables automatically upscaling the texture."),
};
help = "Packs a given directory composed of png and jpg files into an atlas. Can also add 9patch properties. Runnig without arguments triggers interactive mode.";
2018-12-09 03:28:58 +00:00
}
public override void Run(string[] arguments)
{
2018-12-29 00:52:52 +00:00
TexturePacker texturePacker = null;
string path = null;
int mp = 8;
int sp = 8;
bool dau = false;
string output = null;
2018-12-29 00:52:52 +00:00
if (arguments == null)
2018-12-08 23:06:11 +00:00
{
2018-12-08 23:06:11 +00:00
}
2018-12-29 00:52:52 +00:00
path = arguments[1 + IndexOfArgumentIn("-i", arguments)];
int.TryParse(arguments[IndexOfArgumentIn("-mp", arguments) + 1], out mp);
int.TryParse(arguments[IndexOfArgumentIn("-sp", arguments) + 1], out sp);
output = arguments[IndexOfArgumentIn("-o", arguments) + 1];
if (HasArgument("-dau", arguments)) dau = true;
texturePacker = new TexturePacker(path, mp, sp);
ConsoleUtilities.WriteWrappedLine("Calculated minimum texture size: " + texturePacker.TextureLength + "x" + texturePacker.TextureLength + " with a total of " + texturePacker.TexturesFound + " textures.");
2018-12-29 00:52:52 +00:00
try
2018-12-08 23:06:11 +00:00
{
2018-12-29 00:52:52 +00:00
texturePacker.Build(!dau);
}
catch (InvalidOperationException e)
{
throw new ArgumentException(e.Message);
}
2018-12-29 00:52:52 +00:00
for (int i = 0; i < arguments.Length; i++)
{
if (arguments[i] == "-9p")
2018-12-08 23:06:11 +00:00
{
2018-12-29 00:52:52 +00:00
if (i + 5 >= arguments.Length) throw new ArgumentException("-9p is not followed by proper specifiers for a 9Patch (format: \"-9p textureName,a,b,c,d\" where a, b, c, and d are integers definining the border regions for the 9patch.)");
string[] nPatchArgs = arguments[i + 1].Split(',');
try
2018-12-08 23:06:11 +00:00
{
2018-12-29 00:52:52 +00:00
texturePacker.SetNinePatch(nPatchArgs[0], int.Parse(nPatchArgs[1]), int.Parse(nPatchArgs[2]), int.Parse(nPatchArgs[3]), int.Parse(nPatchArgs[4]));
}
catch (FormatException)
{
throw new ArgumentException("-9p argument parameters must be in the format \"-9p textureName,a,b,c,d\" where a, b, c, and d are integers definining the border regions for the 9patch.");
2018-12-08 23:06:11 +00:00
}
}
}
2018-12-29 00:52:52 +00:00
texturePacker.Save(Path.GetDirectoryName(output), Path.GetFileName(output));
Console.WriteLine("Complete. Final texture size: " + texturePacker.TextureLength + "x" + texturePacker.TextureLength + ".");
}
}
}