2020-02-17 02:44:21 +00:00
using Newtonsoft.Json ;
2020-02-23 19:50:01 +00:00
using RecrownedGTK.Pipeline.Information ;
2020-02-17 02:44:21 +00:00
using RecrownedGTK.Tools.CommandProcessor ;
using System ;
using System.IO ;
namespace RecrownedGTK.Tools.NinePatchTools
{
public class NinePatchCommand : EngineCommand
{
public NinePatchCommand ( ) : base ( "9p" , "ninepatch" , "9patch" )
{
help = "Generates a 9 patch file for a given image." ;
commandArguments = new EngineCommandArgument [ 6 ] ;
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 ( "-t" , "top patch." , true ) ;
commandArguments [ 5 ] = new EngineCommandArgument ( "-b" , "bottom 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 ( IndexOfArgument ( "-i" , arguments ) + 1 > = arguments . Length ) throw new ArgumentException ( "Missing -i path after argument." ) ;
imagePath = arguments [ IndexOfArgument ( "-i" , arguments ) + 1 ] ;
if ( ! File . Exists ( imagePath ) ) throw new ArgumentException ( "Input file does not exist at " + imagePath + "." ) ;
if ( HasArgument ( commandArguments [ 1 ] , arguments ) )
{
if ( IndexOfArgument ( "-o" , arguments ) + 1 > = arguments . Length ) throw new ArgumentException ( "Missing -o path after argument." ) ;
outPath = arguments [ IndexOfArgument ( "-o" , arguments ) + 1 ] ;
} else
{
outPath = imagePath . Substring ( 0 , imagePath . Length - Path . GetExtension ( imagePath ) . Length ) ;
}
if ( IndexOfArgument ( "-l" , arguments ) + 1 > = arguments . Length | | ! int . TryParse ( arguments [ IndexOfArgument ( "-l" , arguments ) + 1 ] , out leftBound ) ) throw new ArgumentException ( "Missing -l argument bound." ) ;
if ( IndexOfArgument ( "-r" , arguments ) + 1 > = arguments . Length | | ! int . TryParse ( arguments [ IndexOfArgument ( "-r" , arguments ) + 1 ] , out rightBound ) ) throw new ArgumentException ( "Missing -r argument bound." ) ;
if ( IndexOfArgument ( "-t" , arguments ) + 1 > = arguments . Length | | ! int . TryParse ( arguments [ IndexOfArgument ( "-t" , arguments ) + 1 ] , out topBound ) ) throw new ArgumentException ( "Missing -u argument bound." ) ;
if ( IndexOfArgument ( "-b" , arguments ) + 1 > = arguments . Length | | ! int . TryParse ( arguments [ IndexOfArgument ( "-b" , arguments ) + 1 ] , out bottomBound ) ) throw new ArgumentException ( "Missing -d argument bound." ) ;
2020-02-23 19:50:01 +00:00
NinePatchInfo npData = new NinePatchInfo ( Path . GetFileName ( imagePath ) , leftBound , rightBound , bottomBound , topBound ) ;
2020-02-17 02:44:21 +00:00
string serialized = JsonConvert . SerializeObject ( npData , Formatting . Indented ) ;
string modifiedPath = Directory . GetParent ( imagePath ) + Path . PathSeparator . ToString ( ) + Path . GetFileNameWithoutExtension ( imagePath ) + "-texture" + Path . GetExtension ( imagePath ) ;
File . Move ( imagePath , modifiedPath ) ;
File . WriteAllText ( outPath + ".9p" , serialized ) ;
ConsoleUtilities . WriteWrappedLine ( "Done. Written to \"" + outPath + "\" with values: left = " + leftBound + " right = " + rightBound + " top = " + topBound + " bottom = " + bottomBound ) ;
ConsoleUtilities . WriteWrappedLine ( "Image renamed to: " + Path . GetFileName ( modifiedPath ) ) ;
}
}
}