package Ġde . fab max . k ool . platform Ċ Ċ import Ġde . fab max . k ool .* Ċ import Ġde . fab max . k ool . modules . audio . Audio Clip Ċ import Ġde . fab max . k ool . pipeline .* Ċ import Ġde . fab max . k ool . scene . ui . Char Map Ċ import Ġde . fab max . k ool . scene . ui . Font Props Ċ import Ġde . fab max . k ool . util . Uint 8 Buffer Ċ import Ġde . fab max . k ool . util . Uint 8 Buffer Impl Ċ import Ġde . fab max . k ool . util . log E Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . lwjgl . Pointer Buffer Ċ import Ġorg . lwjgl . util . n fd . Native FileDialog Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ import Ġjava . util . zip . GZIP InputStream Ċ import Ġjava . util . zip . GZIP OutputStream Ċ import Ġjavax . image io . Image IO Ċ Ċ class ĠJ vm Asset Manager Ġinternal Ġconstructor ( props : ĠL wjgl 3 Context . Init Props , Ġval Ġctx : ĠL wjgl 3 Context ) Ġ: ĠAsset Manager ( props . assets Base Dir ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfont Generator Ġ= ĠFont Map Generator ( MAX _ GENERATED _ TEX _ WIDTH , ĠMAX _ GENERATED _ TEX _ HEIGHT , Ġctx ) ĊĠĠĠ Ġprivate Ġval Ġimage Io Lock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġval Ġis With Http Ġ= Ġprops . is With Http Assets ĊĊĠĠĠ Ġprivate Ġvar Ġfile Chooser Path Ġ= ĠSystem . getProperty (" user . home ") ĊĊĠĠĠ Ġoverride Ġval Ġstorage Ġ= ĠKey Value Storage Jvm ( File ( props . storage Dir )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġin its Ġhttp Ġcache Ġif Ġnot Ġalready Ġhappened ĊĠĠĠĠĠĠĠ Ġif Ġ( is With Http ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Cache . init Cache ( File (". http Cache ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfont Generator . load Custom Fonts ( props , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Raw ( raw Ref : ĠRaw Asset Ref ): ĠLoaded Raw Asset Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( raw Ref . is Local ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Local Raw ( raw Ref ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Http Raw ( raw Ref ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload Local Raw ( local Raw Ref : ĠRaw Asset Ref ): ĠLoaded Raw Asset Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata : ĠUint 8 Buffer Impl ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Local Stream ( local Raw Ref . url ). use Ġ{ Ġdata Ġ= ĠUint 8 Buffer Impl ( it . read Bytes ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Failed Ġloading Ġasset Ġ${ local Raw Ref . url }: Ġ$ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLoaded Raw Asset ( local Raw Ref , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload Http Raw ( http Raw Ref : ĠRaw Asset Ref ): ĠLoaded Raw Asset Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata : ĠUint 8 Buffer Impl ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( http Raw Ref . url . startsWith (" data :", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdecode Data Url ( http Raw Ref . url ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is With Http ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠHttp Cache . load Http Resource ( http Raw Ref . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Failed Ġdownloading Ġ${ http Raw Ref . url }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhat Ġis Ġthe ĠIO Ġdispatcher Ġfor Ġif Ġnot Ġfor Ġthis ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( f ). use Ġ{ Ġdata Ġ= ĠUint 8 Buffer Impl ( it . read Bytes ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Failed Ġloading Ġasset Ġ${ http Raw Ref . url }: Ġ$ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLoaded Raw Asset ( http Raw Ref , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode Data Url ( data Url : ĠString ): ĠUint 8 Buffer Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Idx Ġ= Ġdata Url . indexOf ("; base 6 4 , ") Ġ+ Ġ 8 ĊĠĠĠĠĠĠĠ Ġreturn ĠUint 8 Buffer Impl ( Base 6 4 . get Decoder (). decode ( data Url . substring ( data Idx ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Texture ( texture Ref : ĠTexture Asset Ref ): ĠLoaded Texture Asset Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata : ĠImage Texture Data ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġif Ġ( texture Ref . is Local ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Local Texture ( texture Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Http Texture ( texture Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Failed Ġloading Ġtexture Ġ${ texture Ref . url }: Ġ$ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( texture Ref . is Atlas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoaded Texture Asset ( texture Ref , ĠImage Atlas Texture Data ( data !! , Ġtexture Ref . tiles X , Ġtexture Ref . tiles Y )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoaded Texture Asset ( texture Ref , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Local Texture ( local Texture Ref : ĠTexture Asset Ref ): ĠImage Texture Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Local Stream ( local Texture Ref . url ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠImage IO . read Ġis Ġnot Ġthread Ġsafe ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġsynchronized ( image Io Lock ) Ġ{ ĠImage IO . read ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Texture Data ( img , Ġlocal Texture Ref . fmt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Http Texture ( http Texture Ref : ĠTexture Asset Ref ): ĠImage Texture Data Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is With Http ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException (" HTTP Ġloading Ġis Ġdisabled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠHttp Cache . load Http Resource ( http Texture Ref . url ) !! ĊĠĠĠĠĠĠĠ Ġreturn ĠFileInputStream ( f ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠImage IO . read Ġis Ġnot Ġthread Ġsafe ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġsynchronized ( image Io Lock ) Ġ{ ĠImage IO . read ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Texture Data ( img , Ġhttp Texture Ref . fmt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġopen Local Stream ( asset Path : ĠString ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres Path Ġ= Ġasset Path . replace ('\\ ', Ġ'/') ĊĠĠĠĠĠĠĠ Ġif Ġ( res Path . startsWith ("/ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Path Ġ= Ġres Path . substring ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġin Stream Ġ= ĠClassLoader . getSystem Resource AsStream ( res Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( in Stream Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġasset Ġwasn 't Ġfound Ġin Ġresources Ġtry Ġto Ġload Ġit Ġfrom Ġfile Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Stream Ġ= ĠFileInputStream ( asset Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġin Stream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠwaitFor Fonts () Ġ{ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Char Map ( font Props : ĠFont Props , Ġfont Scale : ĠFloat ) Ġ= Ġfont Generator . get Char Map ( font Props , Ġfont Scale ) ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Char Map ( char Map : ĠChar Map , Ġfont Scale : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfont Generator . update Char Map ( char Map , Ġfont Scale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinf late ( zip Data : ĠUint 8 Buffer ): ĠUint 8 Buffer Ġ= ĠUint 8 Buffer Impl ( GZIP InputStream ( ByteArray InputStream ( zip Data . toArray ())). read Bytes ()) ĊĊĠĠĠ Ġoverride Ġfun Ġdef late ( data : ĠUint 8 Buffer ): ĠUint 8 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠG ZIP OutputStream ( bos ). use Ġ{ Ġit . write ( data . toArray ()) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠUint 8 Buffer Impl ( bos . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload File ByUser (): ĠUint 8 Buffer ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Path Ġ= ĠPointer Buffer . allocate Direct ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠNative FileDialog . N FD _ Open Dialog ( null , Ġfile Chooser Path , Ġout Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== ĠNative FileDialog . N FD _ OK AY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( out Path . string UTF 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser Path Ġ= Ġfile . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUint 8 Buffer Impl ( file . read Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File ByUser ( data : ĠUint 8 Buffer , ĠfileName : ĠString , ĠmimeType : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Path Ġ= ĠPointer Buffer . allocate Direct ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠNative FileDialog . N FD _ Save Dialog ( null , Ġfile Chooser Path , Ġout Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== ĠNative FileDialog . N FD _ OK AY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( out Path . string UTF 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser Path Ġ= Ġfile . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( file ). use Ġ{ Ġit . write ( data . toArray ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Texture Data 2 d ( image Path : ĠString , Ġformat : ĠTex Format ?): ĠTexture Data 2 d Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠJVM Ġimplementation Ġalways Ġloads Ġimages Ġas ĠImage Texture Data , Ġwhich Ġis Ġa Ġsubclass Ġof ĠTexture Data 2 d ĊĠĠĠĠĠĠĠ Ġreturn Ġload Texture Data ( image Path , Ġformat ) Ġas ĠImage Texture Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Texture Data ( tex Data : ĠUint 8 Buffer , ĠmimeType : ĠString ): ĠTexture Data Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimg : ĠBufferedImage ? ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Ġ= Ġsynchronized ( image Io Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhat Ġis Ġthe ĠIO Ġdispatcher Ġfor Ġif Ġnot Ġfor Ġthis ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage IO . read ( ByteArray InputStream ( tex Data . toArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠImage Texture Data ( img !! , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload And Prepare Texture ( asset Path : ĠString , Ġprops : ĠTexture Props ): ĠTexture 2 d Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtex Ġ= ĠTexture 2 d ( props , Ġasset Path To Name ( asset Path )) Ġ{ Ġit . load Texture Data ( asset Path ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġload Texture Data ( asset Path , Ġprops . format ) ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠComp letable Deferred < Texture 2 d >( job ) ĊĠĠĠĠĠĠĠ Ġctx . run On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . render Backend . load Tex 2 d ( tex , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( tex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeferred . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload And Prepare Cube Map ( ft : ĠString , Ġbk : ĠString , Ġlt : ĠString , Ġrt : ĠString , Ġup : ĠString , Ġdn : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops : ĠTexture Props ): ĠTexture Cube Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcube Map Asset Path To Name ( ft , Ġbk , Ġlt , Ġrt , Ġup , Ġdn ) ĊĠĠĠĠĠĠĠ Ġval Ġtex Ġ= ĠTexture Cube ( props , Ġname ) Ġ{ Ġit . load Cube Map Texture Data ( ft , Ġbk , Ġlt , Ġrt , Ġup , Ġdn ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġload Cube Map Texture Data ( ft , Ġbk , Ġlt , Ġrt , Ġup , Ġdn ) ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠComp letable Deferred < Texture Cube >( job ) ĊĠĠĠĠĠĠĠ Ġctx . run On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . render Backend . load Tex Cube ( tex , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( tex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeferred . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload And Prepare Texture ( tex Data : ĠTexture Data , Ġprops : ĠTexture Props , Ġname : ĠString ?): ĠTexture 2 d Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠComp letable Deferred < Texture 2 d >( job ) ĊĠĠĠĠĠĠĠ Ġctx . run On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtex Ġ= ĠTexture 2 d ( props , Ġname ) Ġ{ Ġtex Data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . render Backend . load Tex 2 d ( tex , Ġtex Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( tex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeferred . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload And Prepare Cube Map ( tex Data : ĠTexture Data Cube , Ġprops : ĠTexture Props , Ġname : ĠString ?): ĠTexture Cube Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠComp letable Deferred < Texture Cube >( job ) ĊĠĠĠĠĠĠĠ Ġctx . run On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtex Ġ= ĠTexture Cube ( props , Ġname ) Ġ{ Ġtex Data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . render Backend . load Tex Cube ( tex , Ġtex Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( tex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeferred . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Audio Clip ( asset Path : ĠString ): ĠAudio Clip Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġload Asset ( asset Path ) Ġ?: Ġthrow ĠFileNotFoundException ( asset Path ) ĊĠĠĠĠĠĠĠ Ġreturn ĠAudio Clip ( asset . toArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Texture Async ( loader : Ġsuspend ĠCor outine Scope .( Asset Manager ) Ġ-> ĠTexture Data ): ĠDeferred < Texture Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġasync Ġ{ Ġloader ( this @ Jvm Asset Manager ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ GENERATED _ TEX _ WIDTH Ġ= Ġ 2 0 4 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ GENERATED _ TEX _ HEIGHT Ġ= Ġ 2 0 4 8 ĊĠĠĠ Ġ} Ċ }