package Ġme . anno . io . zip Ċ Ċ import Ġme . anno . ecs . pref ab . Prefab Ċ import Ġme . anno . ecs . pref ab . Prefab Readable Ċ import Ġme . anno . image . Image Ċ import Ġme . anno . io . files . File Reference Ċ import Ġme . anno . io . files . Invalid Ref Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ Ċ /** Ċ Ġ* Ġa Ġfile , Ġwhich Ġis Ġinside Ġanother Ġfile , Ċ Ġ* Ġe . g . Ġinside Ġa Ġzip Ġfile , Ġor Ġinside Ġa Ġmesh Ċ Ġ* Ġ*/ Ċ open Ġclass ĠInner Folder ( ĊĠĠĠ Ġabsolute Path : ĠString , ĊĠĠĠ Ġrelative Path : ĠString , ĊĠĠĠ Ġ_ parent : ĠFile Reference Ċ ) Ġ: ĠInner File ( absolute Path , Ġrelative Path , Ġtrue , Ġ_ parent ) Ġ{ ĊĊĠĠĠ Ġconstructor ( root : ĠFile Reference ) Ġ: Ġthis ( root . absolute Path , Ġ"", Ġroot . getParent () Ġ?: ĠInvalid Ref ) ĊĊĠĠĠ Ġconstructor ( parent : ĠInner Folder , Ġname : ĠString ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( append Path ( parent . absolute Path , Ġname ), Ġappend Path ( parent . relative Path , Ġname ), Ġparent ) ĊĊĠĠĠ Ġval Ġchildren Ġ= ĠHashMap < String , ĠInner File >() ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( fileName : ĠString ) Ġ= ĠfileName Ġin Ġchildren ĊĊĠĠĠ Ġoverride Ġfun Ġlist Children (): ĠList < File Reference > Ġ= Ġchildren . values . toList () ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . invalidate () ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġchildren . values ) Ġchild . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget InputStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIOException (" File Ġis Ġdirectory ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child ( name : ĠString ): ĠFile Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(' \\ ' Ġin Ġname Ġ|| Ġ'/' Ġin Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Reference ( this , Ġname ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc 0 Ġ= Ġchildren . values . filter Ġ{ Ġit . name . equals ( name , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc 0 . first OrNull Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ?: Ġc 0 . first OrNull () Ġ?: ĠInvalid Ref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Lc ( path : ĠString ): ĠFile Reference ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġpath . indexOf ('/') ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren [ path ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġpath . substring ( 0 , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpath . substring ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren [ parent ]?. get Lc ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sub Name ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( relative Path . isEmpty ()) Ġname ĊĠĠĠĠĠĠĠ Ġelse Ġ"$ relative Path /$ name " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Or Put ( name : ĠString , Ġcreate : Ġ() Ġ-> ĠInner File ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren . get Or Put ( name , Ġcreate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Child ( name : ĠString , Ġrelative Path : ĠString Ġ= Ġget Sub Name ( name )): ĠInner Folder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] Ġas ĠInner Folder ĊĠĠĠĠĠĠĠ Ġval Ġabsolute Path Ġ= Ġ"$ absolute Path /$ name " ĊĠĠĠĠĠĠĠ Ġreturn ĠInner Folder ( absolute Path , Ġrelative Path , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Child ( name : ĠString , Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġ"$ relative Path /$ name " ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Child ( name , Ġrelative Path ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġcreate Child ( name , Ġrelative Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Text Child ( name : ĠString , Ġcontent : ĠString , Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Text Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Text File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Prefab Child ( name : ĠString , Ġcontent : ĠPref ab , Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Prefab Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Prefab File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Byte Child ( name : ĠString , Ġcontent : ĠByteArray , Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Byte Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Byte File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġfun Ġcreate Byte Child ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġcontent : ĠLazy < ByteArray >, ĊĠĠĠĠĠĠĠ Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Byte Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Lazy Byte File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Image Child ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġcontent : ĠImage , ĊĠĠĠĠĠĠĠ Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Image Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Image File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Stream Child ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġcontent : Ġ() Ġ-> ĠInputStream , ĊĠĠĠĠĠĠĠ Ġregistry : ĠHashMap < String , ĠInner File >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠInner File Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġchildren ) Ġreturn Ġchildren [ name ] !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġget Sub Name ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry ?. get Or Put ( relative Path ) Ġ{ Ġcreate Stream Child ( name , Ġcontent , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠInner Stream File ("$ absolute Path /$ name ", Ġrelative Path , Ġthis , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġse al Pref abs () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġlist Children ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠPref ab Readable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . read Prefab (). se al From Mod ifications () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠInner Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . se al Pref abs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }