package Ġfeature a . bundler Ċ Ċ import Ġfeature a .* Ċ import Ġfeature a . content . Content Ċ import Ġfeature a . content . Resource Tag Ċ import Ġfeature a . content . main Project Ċ import Ġfeature a . jvm . normalized Path Ċ import Ġfeature a . jvm . read Bytes Ċ import Ġfeature a . jvm . relative To Ċ import Ġfeature a . r ml . writer . R ml Deserializer Ċ import Ġfeature a . runtime . Container Ċ Ċ // Ġcreate Ġbundle Ġfrom Ġr ml File Ċ class ĠBund ler ( container : ĠContainer ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontent : ĠContent Ġ= Ġcontainer . import () ĊĠĠĠ Ġprivate Ġval Ġr ml Deserializer : ĠR ml Deserializer Ġ= Ġcontainer . import () ĊĠĠĠ Ġprivate Ġval Ġsystem : ĠSystem Ġ= Ġcontainer . import () ĊĊĠĠĠ Ġsuspend Ġfun Ġcreate Bundle ( options : ĠBundle Options , Ġconfig : Ġ( Bundle ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( project File , Ġbundle File , Ġcontent Roots ) Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġval Ġproject Path : ĠString Ġ= Ġproject File . normalized Path ĊĠĠĠĠĠĠĠ Ġprintln ("[ Bund ler ] Ġcreate Bundle : Ġ$ project Path , Ġ$ bundle File , Ġ${ content Roots . join ToString () }") ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġsystem . content Roots . addAll ( content Roots ) ĊĠĠĠĠĠĠĠ Ġcontent . provided Resources . add (" package . properties ") Ġ// Ġjust Ġfor Ġnow Ġtodo Ġdelete Ġthis ĊĊĠĠĠĠĠĠĠ Ġprintln (" progress : Ġ 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġproject Tag Ġ= Ġcreate Project Tag ( bundle , Ġproject Path ) ĊĠĠĠĠĠĠĠ Ġprintln (" progress : Ġ 0 . 2 5 ") ĊĠĠĠĠĠĠĠ Ġinit Bundle Manifest ( bundle , Ġproject Tag ) ĊĠĠĠĠĠĠĠ Ġcontent . flush ( bundle ) ĊĠĠĠĠĠĠĠ Ġprintln (" progress : Ġ 0 . 5 ") ĊĠĠĠĠĠĠĠ Ġcreate Bundle Entries ( bundle ) ĊĠĠĠĠĠĠĠ Ġconfig ( bundle ) ĊĠĠĠĠĠĠĠ Ġcreate Bundle Manifest Entry ( bundle ) ĊĠĠĠĠĠĠĠ Ġprintln (" progress : Ġ 0 . 7 5 ") ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle File . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= ĠBundle Serializer . serialize Bundle ( bundle , Ġbundle File ) ĊĠĠĠĠĠĠĠ Ġprintln (" progress : Ġ 1 . 0 ") ĊĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Bund ler ] Ġcreate Bundle : Ġ${ bundle File . absolute Path }") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Bund ler ] Ġcreate Bundle : Ġfailure ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* internals */ ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Project Tag ( bundle : ĠBundle , Ġproject Path : ĠString ): ĠResource Tag Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovided Resources Ġ= ĠArrayList ( content . provided Resources ) ĊĠĠĠĠĠĠĠ Ġval Ġproject Tag Ġ= Ġr ml Deserializer . deserialize ( project Path , Ġbundle ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( provided Resource Ġin Ġprovided Resources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġquick fix Ġtodo Ġreplace Ġ`_ ` Ġwith Ġsome Ġconcept ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . write If Accept ( project Tag , Ġ"_ ", Ġprovided Resource , Ġbundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproject Tag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bundle Manifest ( bundle : ĠBundle , Ġproject Tag : ĠResource Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . manifest . main Project Ġ= Ġsystem . relative To ( project Tag . filePath ) ĊĠĠĠĠĠĠĠ Ġbundle . manifest . put All ( project Tag . attributes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Bundle Entries ( bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( provided Resource Ġin Ġcontent . provided Resources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġcontent . find Resource ( provided Resource , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( resource File Ġin Ġresource . files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Bundle Entry ( bundle , Ġresource File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Manifest File Ġ= Ġresource . manifest File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource Manifest File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Bundle Entry ( bundle , Ġresource Manifest File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Bundle Entry ( bundle : ĠBundle , Ġentry Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle . entries . containsKey ( entry Path )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġsystem . read Bytes ( entry Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Path Ġ= Ġentry Path . replace Suffix (" Tr ansp iled . shader ", Ġ". shader ") Ġ// Ġquick fix Ġtodo Ġimprove ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . entries [ entry Path ] Ġ= Ġbytes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Bundle Manifest Entry ( bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanifest Properties Text Ġ= Ġbundle . to Manifest Properties Text ( content . provided Resources ) ĊĠĠĠĠĠĠĠ Ġbundle . entries [" manifest . properties "] Ġ= Ġmanifest Properties Text . encode To ByteArray () ĊĠĠĠ Ġ} Ċ Ċ } Ċ