package Ġnet . ake hur st . kotlin . gui . kor ui . views Ċ Ċ import Ġcom . so y wiz . k ds . iter ators . fast ForEach Ċ import Ġcom . so y wiz . k lock . DateTime Ċ import Ġcom . so y wiz . k lock . Time Provider Ċ import Ġcom . so y wiz . k lock . TimeSpan Ċ import Ġcom . so y wiz . k lock . hr . HR Time Provider Ċ import Ġcom . so y wiz . k lock . milliseconds Ċ import Ġcom . so y wiz . k ore v .* Ċ import Ġcom . so y wiz . k orge . K orge Ċ import Ġcom . so y wiz . k orge . input . Input Ċ import Ġcom . so y wiz . k orge . input . keys Ċ import Ġcom . so y wiz . k orge . input . mouse Ċ import Ġcom . so y wiz . k orge . internal . K orge Internal Ċ import Ġcom . so y wiz . k orge . logger . configure Logger From Properties Ċ import Ġcom . so y wiz . k orge . resources . Resources Root Ċ import Ġcom . so y wiz . k orge . scene . Empty Scene Ċ import Ġcom . so y wiz . k orge . scene . Module Ċ import Ġcom . so y wiz . k orge . scene . Scene Ċ import Ġcom . so y wiz . k orge . stat . Stats Ċ import Ġcom . so y wiz . k orge . time . to Time Provider Ċ import Ġcom . so y wiz . k orge . view . Container Ċ import Ġcom . so y wiz . k orge . view . Views Ċ import Ġcom . so y wiz . k orge . view . addTo Ċ import Ġcom . so y wiz . k orge 3 d .* Ċ import Ġcom . so y wiz . k org w . Create Default Game Window Ċ import Ġcom . so y wiz . k org w . Game Window Ċ import Ġcom . so y wiz . k org w . configure Ċ import Ġcom . so y wiz . kor im . bitmap . Bitmap Ċ import Ġcom . so y wiz . kor im . color . Colors Ċ import Ġcom . so y wiz . kor im . color . RGBA Ċ import Ġcom . so y wiz . kor im . format .* Ċ import Ġcom . so y wiz . kor im . vector . Sized Drawable Ċ import Ġcom . so y wiz . kor im . vector . render Ċ import Ġcom . so y wiz . kor inject . Async Injector Ċ import Ġcom . so y wiz . kor inject . Async Injector Context Ċ import Ġcom . so y wiz . kor io . async . delay Ċ import Ġcom . so y wiz . kor io . async . launch Immediate ly Ċ import Ġcom . so y wiz . kor io . dynamic . K Dynamic Ċ import Ġcom . so y wiz . kor io . file . std . local Current Dir V fs Ċ import Ġcom . so y wiz . kor io . file . std . resources V fs Ċ import Ġcom . so y wiz . kor io . lang . printStackTrace Ċ import Ġcom . so y wiz . kor io . util . OS Ċ import Ġcom . so y wiz . k orm a . geom .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . coroutines . coroutine Context Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠCamera Configuration Ġ{ ĊĠĠĠ Ġvar Ġkey Zoom In Ġ= ĠKey . EQUAL ĊĠĠĠ Ġvar Ġkey Zoom Out Ġ= ĠKey . MINUS Ċ } Ċ Ċ class ĠWindow Configuration Ġ{ ĊĠĠĠ Ġval Ġcamera Ġ= ĠCamera Configuration () ĊĠĠĠ Ġvar Ġinitial X Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġinitial Y Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġinitial Z Ġ= Ġ- 5 0 . 0 Ċ } Ċ Ċ class ĠWindow ( ĊĠĠĠĠĠĠĠ Ġvar Ġtitle : ĠString Ġ= Ġ" K orge ", ĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġ 1 2 8 0 , ĊĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġ 7 2 0 , ĊĠĠĠĠĠĠĠ Ġval Ġvirtual Width : ĠInt Ġ= Ġwidth , ĊĠĠĠĠĠĠĠ Ġval Ġvirtual Height : ĠInt Ġ= Ġheight , ĊĠĠĠĠĠĠĠ Ġval Ġicon : ĠBitmap ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġicon Path : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġicon Drawable : ĠSized Drawable ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġimage Formats : ĠImage Format Ġ= ĠImage Formats ( PNG ), ĊĠĠĠĠĠĠĠ Ġval Ġquality : ĠGame Window . Quality Ġ= ĠGame Window . Quality . AUT OM AT IC , ĊĠĠĠĠĠĠĠ Ġval Ġtarget F ps : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġval Ġscale Anchor : ĠAnchor Ġ= ĠAnchor . MIDDLE _ CENTER , ĊĠĠĠĠĠĠĠ Ġval Ġscale Mode : ĠScale Mode Ġ= ĠScale Mode . SHOW _ ALL , ĊĠĠĠĠĠĠĠ Ġval Ġclip B orders : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġval Ġbgcolor : ĠRGBA Ġ= ĠColors . BLACK , ĊĠĠĠĠĠĠĠ Ġval Ġdebug : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġfullscreen : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġargs : ĠArray < String > Ġ= ĠarrayOf (), ĊĠĠĠĠĠĠĠ Ġval Ġgame Window : ĠGame Window ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġtime Provider : ĠHR Time Provider Ġ= ĠHR Time Provider , ĊĠĠĠĠĠĠĠ Ġval Ġinjector : ĠAsync Injector Ġ= ĠAsync Injector () Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġconfiguration Ġ= ĠWindow Configuration () ĊĊĠĠĠ Ġvar Ġis Visible Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġcontent Ġ= Ġobject Ġ: ĠContainer () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġwidth : ĠDouble Ġ= Ġthis @ Window . width . toDouble () ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġheight : ĠDouble Ġ= Ġthis @ Window . height . toDouble () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstage 3 D View Ġ= Ġcontent . scene 3 D Ġ{ ĊĠĠĠĠĠĠĠ Ġlight (). position ( 0 , Ġ 1 0 , Ġ+ 1 0 ). set To ( Colors . RED ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcontent 3 D Ġ= ĠUI Container (). addTo ( stage 3 D View . stage 3 D ) ĊĊĠĠĠ Ġsuspend Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . x Ġ= Ġconfiguration . initial X ĊĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . y Ġ= Ġconfiguration . initial Y ĊĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . z Ġ= Ġconfiguration . initial Z ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! OS . is Js Browser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Logger From Properties ( local Current Dir V fs [" k logger . properties "]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreal Game Window Ġ= Ġ( window . game Window Ġ?: Ġcoroutine Context [ Game Window ] Ġ?: ĠCreate Default Game Window ()) ĊĠĠĠĠĠĠĠ Ġreal Game Window . loop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgame Window Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( OS . is Native ) Ġprintln (" K or ui [ 0 ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreal Game Window . configure ( window . width , Ġwindow . height , Ġwindow . title , Ġwindow . icon , Ġwindow . fullscreen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . icon Drawable Ġ!= Ġnull Ġ-> Ġthis . icon Ġ= Ġwindow . icon Drawable . render () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . icon Path Ġ!= Ġnull Ġ-> Ġthis . icon Ġ= Ġresources V fs [ window . icon Path ]. read Bitmap Optim ized ( window . image Formats ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . logger . error Ġ{ Ġ" Couldn 't Ġget Ġthe Ġapplication Ġicon " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . quality Ġ= Ġwindow . quality ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( OS . is Native ) Ġprintln (" Canvas Application Ex . IN [ 0 ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠInput () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= ĠStats () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthis Ġonce ĠK org w Ġis Ġon Ġ 1 . 1 2 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġviews Ġ= ĠViews ( game Window . get Coroutine Dispatcher With Current Context () Ġ+ ĠSuper visor Job (), Ġag , Ġinjector , Ġinput , Ġtime Provider , Ġstats , Ġgame Window ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠViews ( coroutine Context Ġ+ Ġgame Window . coroutine Dispatcher Ġ+ ĠAsync Injector Context ( window . injector ) Ġ+ ĠSuper visor Job (), Ġag , Ġwindow . injector , Ġinput , Ġwindow . time Provider , Ġstats , Ġgame Window ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( OS . is Js Browser ) ĠK Dynamic Ġ{ Ġglobal [" views "] Ġ= Ġviews Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . injector ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Instance ( K orge . Module Args ( window . args )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Instance ( Game Window :: class , Ġgame Window ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Instance < Module >( object Ġ: ĠModule () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġtitle Ġ= Ġwindow . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġfullscreen : ĠBoolean ? Ġ= Ġwindow . fullscreen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġwindow Size Ġ= ĠSize Int ( window . width , Ġwindow . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize Ġ= ĠSize Int ( window . virtual Width , Ġwindow . virtual Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . debug Views Ġ= Ġwindow . debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . set Virtual Size ( window . virtual Width , Ġwindow . virtual Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . scale Anchor Ġ= Ġwindow . scale Anchor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . scale Mode Ġ= Ġwindow . scale Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . clip B orders Ġ= Ġwindow . clip B orders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . target F ps Ġ= Ġwindow . target F ps ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . prepare Views ( views , Ġgame Window , Ġwindow . bg color Ġ!= Ġnull , Ġwindow . bg color Ġ?: ĠColors . TRANSP ARENT _ BLACK , ĠwaitFor First Render Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . launch Immediate ly Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . addTo ( views . stage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( OS . is Native ) Ġprintln (" Canvas Application Ex . IN [ 1 ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( OS . is Native ) Ġprintln (" K or ui [ 1 ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Rotate Ġ= Ġ 0 . 0 . degrees ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Rotate Ġ= Ġ 0 . 0 . degrees ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġz Rotate Ġ= Ġ 0 . 0 . degrees ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . stage . keys Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( Key . UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . shift Ġ-> Ġstage 3 D View . stage 3 D . camera . y Ġ+= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . alt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Rotate Ġ= Ġx Rotate . plus ( 1 . 0 . degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . rotation ( x Ġ= Ġx Rotate , Ġy Ġ= Ġy Rotate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( Key . DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . shift Ġ-> Ġstage 3 D View . stage 3 D . camera . y Ġ-= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . alt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Rotate Ġ= Ġx Rotate . plus (- ( 1 . 0 ). degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . rotation ( x Ġ= Ġx Rotate , Ġy Ġ= Ġy Rotate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( Key . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . shift Ġ-> Ġstage 3 D View . stage 3 D . camera . x Ġ-= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . alt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Rotate Ġ= Ġy Rotate . plus ( 1 . 0 . degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . rotation ( x Ġ= Ġx Rotate , Ġy Ġ= Ġy Rotate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( Key . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . shift Ġ-> Ġstage 3 D View . stage 3 D . camera . x Ġ+= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . alt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Rotate Ġ= Ġy Rotate . plus ((- 1 . 0 ). degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . rotation ( x Ġ= Ġx Rotate , Ġy Ġ= Ġy Rotate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( configuration . camera . key Zoom In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . z Ġ+= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown New ( configuration . camera . key Zoom Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . z Ġ-= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . stage . mouse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdown Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Ġ&& Ġit . is Shift Down Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġit . last Pos Global . x Ġ- Ġit . current Pos Global . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġit . last Pos Global . y Ġ- Ġit . current Pos Global . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . x Ġ-= Ġdx / 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . camera . y Ġ-= Ġdy / 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Ġ&& Ġit . is Alt Down Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġit . last Pos Global . x Ġ- Ġit . current Pos Global . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġit . last Pos Global . y Ġ- Ġit . current Pos Global . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Rotate Ġ= Ġx Rotate . plus (( dy / 1 0 0 ). degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Rotate Ġ= Ġy Rotate . plus (- ( dx / 1 0 0 ). degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage 3 D View . stage 3 D . rotation ( x Ġ= Ġx Rotate , Ġy Ġ= Ġy Rotate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( async : Boolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( async ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠwaitFor Show () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( isVisible . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 . milliseconds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠGame Window . wait Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 . milliseconds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ K orge Internal ĊĠĠĠ Ġfun Ġprepare Views Base ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews : ĠViews , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Dispatcher : ĠEvent Dispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Each Frame : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbgcolor : ĠRGBA Ġ= ĠColors . TRANSP ARENT _ BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Size Step : ĠTimeSpan Ġ= ĠTimeSpan . NIL ĊĠĠĠ Ġ): ĠComp letable Deferred < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= Ġviews . injector ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( views ) ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( views . ag ) ĊĠĠĠĠĠĠĠ Ġinjector . map Singleton ( Resources Root :: class ) Ġ{ ĠResources Root () Ġ} ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( views . input ) ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( views . stats ) ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( Coroutine Context :: class , Ġviews . coroutine Context ) ĊĠĠĠĠĠĠĠ Ġinjector . map Prototype ( Empty Scene :: class ) Ġ{ ĠEmpty Scene () Ġ} ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( Time Provider :: class , Ġviews . time Provider . to Time Provider ()) Ġ// ĠDeprecated ĊĠĠĠĠĠĠĠ Ġinjector . map Instance ( HR Time Provider :: class , Ġviews . time Provider ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġviews . input ĊĠĠĠĠĠĠĠ Ġval Ġag Ġ= Ġviews . ag ĊĠĠĠĠĠĠĠ Ġval Ġdown Pos Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġval Ġup Pos Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġvar Ġdown Time Ġ= ĠDateTime . EPOCH ĊĠĠĠĠĠĠĠ Ġvar Ġmove Time Ġ= ĠDateTime . EPOCH ĊĠĠĠĠĠĠĠ Ġvar Ġup Time Ġ= ĠDateTime . EPOCH ĊĠĠĠĠĠĠĠ Ġvar Ġmove Mouse Outside In Next Frame Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġmouse Touch Id Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ// Ġdevice Pixel Ratio Ġmight Ġchange Ġat Ġruntime Ġby Ġchanging Ġthe Ġresolution Ġor Ġchanging Ġthe Ġscreen Ġof Ġthe Ġwindow ĊĠĠĠĠĠĠĠ Ġfun Ġget Real X ( x : ĠDouble , Ġscale Coords : ĠBoolean ) Ġ= Ġif Ġ( scale Coords ) Ġx Ġ* Ġag . device Pixel Ratio Ġelse Ġx ĊĠĠĠĠĠĠĠ Ġfun Ġget Real Y ( y : ĠDouble , Ġscale Coords : ĠBoolean ) Ġ= Ġif Ġ( scale Coords ) Ġy Ġ* Ġag . device Pixel Ratio Ġelse Ġy ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Touch ( id : ĠInt , Ġx : ĠDouble , Ġy : ĠDouble , Ġstart : ĠBoolean , Ġend : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtouch Ġ= Ġinput . get Touch ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDateTime . now () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . active Ġ= Ġ! end ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . startTime Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . start . set To ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . currentTime Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch . current . set To ( x , Ġy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . update Tou ches () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmouse Down ( type : ĠString , Ġx : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse Buttons Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse . set To ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mouse Updated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown Pos . copyFrom ( views . input . mouse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse Inside Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmouse Up ( type : ĠString , Ġx : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Console . log (" mouse Up : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse Buttons Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse . set To ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mouse Updated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup Pos . copyFrom ( views . input . mouse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ" on Touch End ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Time Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( down Time Ġ- Ġup Time ) Ġ<= Ġ 4 0 . milliseconds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Console . log (" mouse Click : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( MouseEvent ( MouseEvent . Type . CLICK )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmouse Move ( type : ĠString , Ġx : ĠDouble , Ġy : ĠDouble , Ġinside : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse . set To ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse Inside Ġ= Ġinside ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Mouse Outside In Next Frame Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mouse Updated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Time Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmouse Drag ( type : ĠString , Ġx : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse . set To ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mouse Updated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Time Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < MouseEvent > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" MOUSE : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . logger . trace Ġ{ Ġ" event Dispatcher . addEventListener < MouseEvent >: $ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġget Real X ( e . x . toDouble (), Ġe . scale Coords ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġget Real Y ( e . y . toDouble (), Ġe . scale Coords ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Down (" mouse Down ", Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Touch ( mouse Touch Id , Ġx , Ġy , Ġstart Ġ= Ġtrue , Ġend Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Up (" mouse Up ", Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Touch ( mouse Touch Id , Ġx , Ġy , Ġstart Ġ= Ġfalse , Ġend Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . DR AG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Drag (" on Mouse Drag ", Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Touch ( mouse Touch Id , Ġx , Ġy , Ġstart Ġ= Ġfalse , Ġend Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . MOVE Ġ-> Ġmouse Move (" mouse Move ", Ġx , Ġy , Ġinside Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . CLICK Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . ENTER Ġ-> Ġmouse Move (" mouse Enter ", Ġx , Ġy , Ġinside Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . EXIT Ġ-> Ġmouse Move (" mouse Exit ", Ġx , Ġy , Ġinside Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMouseEvent . Type . SCROLL Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < KeyEvent > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . logger . trace Ġ{ Ġ" event Dispatcher . addEventListener < KeyEvent >: $ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Resume Event > Ġ{ Ġe Ġ-> Ġviews . dispatch ( e ) Ġ} ĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Pause Event > Ġ{ Ġe Ġ-> Ġviews . dispatch ( e ) Ġ} ĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Stop Event > Ġ{ Ġe Ġ-> Ġviews . dispatch ( e ) Ġ} ĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Destroy Event > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . launch Immediate ly Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠTO UCH ĊĠĠĠĠĠĠĠ Ġfun Ġtouch ( e : ĠTouch Event , Ġstart : ĠBoolean , Ġend : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġe . to uches . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġt . current . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġt . current . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Touch ( t . id , Ġx , Ġy , Ġstart , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Down (" on Touch Start ", Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Up (" on Touch End ", Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Mouse Outside In Next Frame Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Move (" on Touch Move ", Ġx , Ġy , Ġinside Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Touch Event > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . logger . trace Ġ{ Ġ" event Dispatcher . addEventListener < Touch Event >: $ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtouch Ġ= Ġe . to uches . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġix Ġ= Ġget Real X ( touch . current . x , Ġe . scale Coords ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiy Ġ= Ġget Real X ( touch . current . y , Ġe . scale Coords ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Event . Type . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch ( e , Ġstart Ġ= Ġtrue , Ġend Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( MouseEvent ( MouseEvent . Type . DOWN , Ġ 0 , Ġix , Ġiy , ĠMouse Button . LEFT , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Event . Type . MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch ( e , Ġstart Ġ= Ġfalse , Ġend Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( MouseEvent ( MouseEvent . Type . DR AG , Ġ 0 , Ġix , Ġiy , ĠMouse Button . LEFT , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Event . Type . END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch ( e , Ġstart Ġ= Ġfalse , Ġend Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( MouseEvent ( MouseEvent . Type . UP , Ġ 0 , Ġix , Ġiy , ĠMouse Button . LEFT , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" DISPATCH ĠMouseEvent ( MouseEvent . Type . UP )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgame pad Updated ( e : ĠGame Pad Update Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . gamepad s . fast ForEach Ġ{ Ġgame pad Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . gamepad s [ gamepad . index ]. copyFrom ( gamepad ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . update Connected Gamepad s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Game Pad Connection Event > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK orge . logger . trace Ġ{ Ġ" event Dispatcher . addEventListener < Game Pad Connection Event >: $ e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Game Pad Update Event > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame pad Updated ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . dispatch ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addEventListener < Res hape Event > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// try Ġ{ Ġthrow ĠException () Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ Ġe . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" event Dispatcher . addEventListener < Res hape Event >: Ġ${ ag . back Width } x ${ ag . back Height } Ġ: Ġ${ e . width } x ${ e . height }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . res ized ( ag . back Width , Ġag . back Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// println (" event Dispatcher . dispatch ( Res hape Event ( 0 , Ġ 0 , Ġviews . native Width , Ġviews . native Height )) Ġ: Ġ${ views . native Width } x ${ views . native Height }") ĊĠĠĠĠĠĠĠ Ġevent Dispatcher . dispatch ( Res hape Event ( 0 , Ġ 0 , Ġviews . native Width , Ġviews . native Height )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġrender Shown Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġviews . clear Each Frame Ġ= Ġclear Each Frame ĊĠĠĠĠĠĠĠ Ġviews . clear Color Ġ= Ġbgcolor ĊĠĠĠĠĠĠĠ Ġval Ġfirst Render Deferred Ġ= ĠComp letable Deferred < Unit >() ĊĠĠĠĠĠĠĠ Ġviews . game Window . addEventListener < Render Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" Render Event : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! render Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" !!!!!!!! !!!! ! Ġviews . game Window . addEventListener < Render Event >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Render Deferred . complete ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . frame Update And Render ( fixed Size Step Ġ= Ġfixed Size Step ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Mouse Outside In Next Frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Mouse Outside In Next Frame Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . input . mouse Inside Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mouse Updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Render Deferred ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ K orge Internal ĊĠĠĠ Ġsuspend Ġfun Ġprepare Views ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews : ĠViews , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Dispatcher : ĠEvent Dispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Each Frame : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbgcolor : ĠRGBA Ġ= ĠColors . TRANSP ARENT _ BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Size Step : ĠTimeSpan Ġ= ĠTimeSpan . NIL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor First Render : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Render Deferred Ġ= Ġprepare Views Base ( views , Ġevent Dispatcher , Ġclear Each Frame , Ġbgcolor , Ġfixed Size Step ) ĊĠĠĠĠĠĠĠ Ġif Ġ( waitFor First Render ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Render Deferred . await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConfig ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule : ĠModule , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠArray < String > Ġ= ĠarrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Formats : ĠImage Format Ġ= ĠRegistered Image Formats , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgame Window : ĠGame Window ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġevent Dispatcher : ĠEvent Dispatcher Ġ= Ġgame Window Ġ?: ĠDummy EventDispatcher , Ġ// ĠRemoved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Class : ĠK Class < out ĠScene > Ġ= Ġmodule . main Scene , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Inject s : ĠList < Any > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Provider : ĠHR Time Provider Ġ= ĠHR Time Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinjector : ĠAsync Injector Ġ= ĠAsync Injector (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdebug : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrace : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfullscreen : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructed Views : Ġ( Views ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠModule Args ( val Ġargs : ĠArray < String >) Ċ }