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." ;
arguments = new EngineCommandArgument [ 6 ] ;
arguments [ 0 ] = new EngineCommandArgument ( "-i" , "defines the path to the texture to be used for the nine patch." ) ;
arguments [ 1 ] = new EngineCommandArgument ( "-o" , "defines path of output file." ) ;
arguments [ 2 ] = new EngineCommandArgument ( "-l" , "left patch." ) ;
arguments [ 3 ] = new EngineCommandArgument ( "-r" , "right patch." ) ;
arguments [ 4 ] = new EngineCommandArgument ( "-u" , "up patch." ) ;
arguments [ 5 ] = new EngineCommandArgument ( "-d" , "down patch." ) ;
}
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 argument path." ) ;
imagePath = arguments [ IndexOfArgumentIn ( "-i" , arguments ) + 1 ] ;
if ( IndexOfArgumentIn ( "-o" , arguments ) + 1 > = arguments . Length ) throw new ArgumentException ( "Missing -o argument path." ) ;
outPath = arguments [ IndexOfArgumentIn ( "-o" , arguments ) + 1 ] ;
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-04 18:23:42 +00:00
if ( ! File . Exists ( imagePath ) ) throw new ArgumentException ( "Input file does not exist." ) ;
SupportedExtensions extension ;
if ( ! Enum . TryParse < SupportedExtensions > ( Path . GetExtension ( imagePath ) . ToLower ( ) . Substring ( 1 ) , out extension ) ) throw new ArgumentException ( "Input file extension not supported." ) ;
2018-12-29 07:09:49 +00:00
using ( StreamWriter stringWriter = new StreamWriter ( outPath + ".9p" ) )
2018-12-29 06:30:09 +00:00
{
stringWriter . WriteLine ( serialized ) ;
}
}
}
}