package Ġcom . dark yen . resource packer . tasks Ċ Ċ import Ġcom . dark yen . resource packer . Resource . Resource File Ċ import Ġcom . dark yen . resource packer . Task Ċ import Ġcom . dark yen . resource packer . util .* Ċ import Ġcom . es ot eric software . min log . Log Ċ import Ġorg . lwjgl . system . Platform Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . nio . file . Files Ċ Ċ /** Ċ Ġ* ĠConverts Ġobj Ġand Ġf bx Ġfiles Ġto Ġg 3 db Ġor Ġdifferent Ġformat . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠ ĠAdd Ġoptions : Ċ Ġ* ĠĠ Ġoptions Ġ- option 1 Ġ- option 2 Ċ Ġ* Ċ Ġ* ĠĠ ĠSet Ġoutput Ġformat : Ċ Ġ* ĠĠ Ġto Ġ< format > Ċ Ġ* Ċ Ġ* ĠĠ ĠSupported Ġformats : Ċ Ġ* ĠĠ Ġf bx Ċ Ġ* ĠĠ Ġg 3 dj Ċ Ġ* ĠĠ Ġg 3 db Ġ<- Ġdefault Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ author ĠDark yen Ċ Ġ*/ Ċ object ĠConvert Models Task Ġ: ĠTask () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠM tl Lib Regex Ġ= ĠRegex (" mt l lib Ġ(( ?: \\ w | / |- | \\. )+ \\ w \\. mt l )") ĊĠĠĠ Ġprivate Ġval ĠTexture Regex Ġ= ĠRegex (" map _ Kd Ġ(( ?: \\ w | / |- | \\. )+ \\ w \\ .( ?: png | jpg | jpeg )) ") ĊĊĠĠĠ Ġprivate Ġfun Ġfind Dependent Files ( file : ĠResource File , Ġregex : ĠRegex ): ĠList < Resource File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Resource File >() ĊĠĠĠĠĠĠĠ Ġfor Ġ(( dependency FileName ) Ġin Ġfile . file . read Lines ( Charsets . UTF _ 8 ). map NotNull Ġ{ Ġregex . match Ent ire ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġdependency FileName . split ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdirectory Ġ= Ġfile . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sub directory Ġin Ġparts . drop Last ( 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġdirectory . getChild Directory ( sub directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory Ġ= Ġdir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . error ( Name , Ġ" File Ġreferences Ġnon - existing Ġfile . Ġ$ file Ġ-> Ġ$ dependency FileName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependent File Ġ= Ġdirectory . getChild File ( parts . last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dependent File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( dependent File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . error ( Name , Ġ" File Ġreferences Ġnon - existing Ġfile . Ġ$ file Ġ-> Ġ$ dependency FileName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Obj File ( file : ĠResource File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( mt l File Ġin Ġfind Dependent Files ( file , ĠM tl Lib Regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( texture File Ġin Ġfind Dependent Files ( mt l File , ĠTexture Regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture File . parent . removeChild ( texture File ) Ġ// TODO ĠIs Ġthis Ġcorrect ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmtl File . parent . removeChild ( mt l File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfile . remove From Parent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Obj And Deps Without Spaces ( file : ĠResource File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġnew Folder () ĊĠĠĠĠĠĠĠ Ġval Ġobject File Ġ= ĠFile ( temp , Ġ" object . obj ") ĊĠĠĠĠĠĠĠ Ġfile . file . copy To ( object File ) ĊĠĠĠĠĠĠĠ Ġfile . file Ġ= Ġobject File ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( mt l File Ġin Ġfind Dependent Files ( file , ĠM tl Lib Regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmtl File File Ġ= ĠFile ( temp , Ġmtl File . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmtl File . file . copy To ( mt l File File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmtl File . file Ġ= Ġmtl File File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( texture File Ġin Ġfind Dependent Files ( mt l File , ĠTexture Regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture File File Ġ= ĠFile ( temp , Ġtexture File . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture File . file . copy To ( texture File File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture File . file Ġ= Ġtexture File File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠOptions Regex Ġ= ĠRegex (" options Ġ? (( ?: \\ w | Ġ|- )+ )") ĊĊĠĠĠ Ġprivate Ġval ĠConversion Options Regex Ġ= ĠRegex (" to Ġ( fb x | g 3 dj | g 3 db )") ĊĊĠĠĠ Ġoverride Ġfun Ġoperate ( file : ĠResource File ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file . extension Ġ!= Ġ" obj " Ġ&& Ġfile . extension Ġ!= Ġ" fb x ") Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġis Obj Ġ= Ġfile . extension Ġ== Ġ" obj " ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġfile . flags . match First ( Options Regex ) Ġ{ Ġ( opts ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopts . trim () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval ĠconvertTo Ġ= Ġfile . flags . match First ( Conversion Options Regex ) Ġ{ Ġ( format ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . toUpperCase () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Obj ) Ġcopy Obj And Deps Without Spaces ( file ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput FilePath Ġ= Ġfile . file . canonical Path ĊĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Post fix Ġ= Ġ".$ convertTo " ĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( new Folder (), Ġfile . name Ġ+ ĠoutputFile Post fix ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput FilePath Ġ= ĠoutputFile . canonical Path ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġargs . add ("- o ") ĊĠĠĠĠĠĠĠ Ġargs . add ( convertTo ) ĊĠĠĠĠĠĠĠ Ġargs . add ( options ) ĊĠĠĠĠĠĠĠ Ġargs . add ( input FilePath ) ĊĠĠĠĠĠĠĠ Ġargs . add ( output FilePath ) ĊĊĠĠĠĠĠĠĠ ĠLog . info ( Name , Ġ" Con verting Ġ" Ġ+ Ġfile . extension Ġ+ Ġ" Ġfile . Ġ" Ġ+ Ġfile Ġ+ Ġ" Ġ" Ġ+ Ġargs Ġ+ Ġ" Ġ" Ġ+ Ġoptions Ġ+ Ġ" Ġ" Ġ+ Ġfile . flags . join ToString (". ")) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( Platform . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . MAC OSX Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Command ( args , Ġlink F bx Sdk Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . WINDOWS Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Command ( args , Ġlink F bx Sdk Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . LINUX Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Command ( args , Ġlink F bx Sdk Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . error ( Name , Ġ" Unknown Ġplatform Ġreported Ġby ĠL WJ GL : Ġ" Ġ+ ĠPlatform . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Obj ) Ġremove Obj File ( file ) ĊĠĠĠĠĠĠĠ Ġelse Ġfile . remove From Parent () ĊĊĠĠĠĠĠĠĠ Ġfile . parent . addChild ( outputFile ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Resource To Folder ( destination : ĠFile , Ġresource : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( destination . to Path (). parent ) ĊĠĠĠĠĠĠĠ ĠConvert Models Task :: class . java . class Loader . getResource AsStream ( resource )?. use Ġ{ Ġinp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( destination ). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinp . copy To ( out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdestination . set Executable ( true , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġf bx Conv Executable : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecutable Folder Ġ= Ġnew Folder () ĊĠĠĠĠĠĠĠ Ġval Ġexecutable : ĠFile ĊĠĠĠĠĠĠĠ Ġval Ġplatform Ġ= ĠPlatform . get () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( platform ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . MAC OSX Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Ġ= ĠFile ( executable Folder , Ġ" fb x - conv - mac ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Resource To Folder ( executable , Ġ" fb x conv / osx / fb x - conv - mac ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Resource To Folder ( File ( executable Folder , Ġ" lib fb x sdk . dylib "), Ġ" fb x conv / osx / lib fb x sdk . dylib ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . WINDOWS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Ġ= ĠFile ( executable Folder , Ġ" fb x - conv - win 3 2 . exe ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Resource To Folder ( executable , Ġ" fb x conv / windows / fb x - conv - win 3 2 . exe ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . LINUX Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Ġ= ĠFile ( executable Folder , Ġ" fb x - conv - lin 6 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Resource To Folder ( executable , Ġ" fb x conv / linux / fb x - conv - lin 6 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Resource To Folder ( File ( executable Folder , Ġ" lib fb x sdk . so "), Ġ" fb x conv / linux / lib fb x sdk . so ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Failed Ġto Ġprepare Ġf bx - conv Ġexecutable , Ġunknown Ġplatform : Ġ$ platform ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ lazy Ġexecutable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Command ( arguments : ĠArrayList < String >, Ġlink F bx Sdk : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġf bx Conv Executable . canonical Path ĊĠĠĠĠĠĠĠ ĠLog . info ( Name , Ġ" Executing Ġexternal Ġcommand . Ġ$ command ") ĊĊĠĠĠĠĠĠĠ Ġarguments . add ( 0 , Ġcommand ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprocess Builder Ġ= ĠProcess Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( arguments ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( link F bx Sdk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Builder . environment ()[" LD _ LIBRARY _ PATH "] Ġ= Ġf bx Conv Executable . parent File . canonical Path ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprocess Builder . redirect Output ( Process Builder . Redirect . IN HER IT ) ĊĠĠĠĠĠĠĠ Ġprocess Builder . redirect Error ( Process Builder . Redirect . IN HER IT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= Ġprocess Builder . start () ĊĠĠĠĠĠĠĠ Ġval Ġprocess Result Ġ= Ġprocess . waitFor () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( process Result Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . info ( Name , Ġ" External Ġcommand Ġterminated Ġnormally .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( process Result Ġ== Ġ 1 2 7 ) Ġ{ Ġ// ĠCould Ġnot Ġlink Ġf bx Ġsdk ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . error ( Name , Ġ" Missing ĠF BX ĠSDK Ġor Ġit Ġis Ġnot Ġlinked Ġproperly .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Platform . get () Ġ== ĠPlatform . WINDOWS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . info ( Name , Ġ" Try Ġdownloading Ġand Ġinstalling Ġmanually . ĠFrom : Ġhttp :// www . microsoft . com / en - us / download / confirmation . aspx ? id = 5 5 5 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . warn ( Name , Ġ" External Ġcommand Ġterminated Ġwith Ġun usual Ġcode . Ġ$ process Result ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ