package Ġcom . github . dw ur ste is en . min ig dx Ċ Ċ import Ġcom . github . dw ur ste is en . min ig dx . file . File Handler Ċ import Ġcom . github . dw ur ste is en . min ig dx . file . File Handler Common Ċ import Ġcom . github . dw ur ste is en . min ig dx . file . Platform File Handler Ċ import Ġcom . github . dw ur ste is en . min ig dx . game . Game Ċ import Ġcom . github . dw ur ste is en . min ig dx . game . Game Wrapper Ċ import Ġcom . github . dw ur ste is en . min ig dx . graphics . Fill Viewport Strategy Ċ import Ġcom . github . dw ur ste is en . min ig dx . graphics . Viewport Strategy Ċ import Ġcom . github . dw ur ste is en . min ig dx . input . Input Handler Ċ import Ġcom . github . dw ur ste is en . min ig dx . input . Lwjgl Input Ċ import Ġcom . github . dw ur ste is en . min ig dx . logger . Java Logging Logger Ċ import Ġcom . github . dw ur ste is en . min ig dx . logger . Logger Ċ import Ġorg . lwjgl . glfw . GLFW Ċ import Ġorg . lwjgl . opengl . GL 1 1 Ċ import Ġorg . lwjgl . opengl . GL 1 1 . GL _ FRONT _ AND _ BACK Ċ import Ġorg . lwjgl . opengl . GL 1 1 . GL _ LINE Ċ import Ġorg . lwjgl . system . Memory Util Ċ import Ġkotlin . math . min Ċ Ċ actual Ġopen Ġclass ĠPlatform Context Common Ġactual Ġconstructor ( actual Ġoverride Ġval Ġconfiguration : ĠGame Configuration ) Ġ: ĊĠĠĠ ĠPlatform Context Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġpost Render Loop : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġprivate Ġfun Ġis Mac Os (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġos Name Ġ= ĠSystem . getProperty (" os . name ") ?. toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġos Name ?. indexOf (" mac ") Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġindex Ġ>= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate GL (): ĠGL Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠL wjgl GL () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate File Handler ( logger : ĠLogger , Ġgame Context : ĠGame Context ): ĠFile Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Handler Common ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplatform File Handler Ġ= ĠPlatform File Handler ( logger ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Ġ= Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context Ġ= Ġgame Context ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate Input Handler ( logger : ĠLogger , Ġgame Context : ĠGame Context ): ĠInput Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠL wjgl Input ( logger , Ġgame Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate Viewport Strategy ( logger : ĠLogger ): ĠView port Strategy Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFill Viewport Strategy ( logger ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate Logger (): ĠLogger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJava Logging Logger ( configuration . window . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcreate Options (): ĠOptions Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOptions ( configuration . debug ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġtime Ġin Ġmilliseconds ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġsystem Ġtime Ġin Ġmilliseconds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetTime (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSystem . nano Time () Ġ/ Ġ 1 0 0 0 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Delta (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠgetTime () ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġ( time Ġ- Ġlast Frame ) ĊĠĠĠĠĠĠĠ Ġlast Frame Ġ= Ġtime ĊĠĠĠĠĠĠĠ Ġreturn Ġmin ( delta Ġ/ Ġ 1 0 0 0 f , Ġ 1 Ġ/ Ġ 6 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Frame : ĠLong Ġ= ĠgetTime () ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġstart ( game Factory : Ġ( Game Context ) Ġ-> ĠGame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Mac Os ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" WARNING Ġ: ĠYou 're Ġrun ing Ġa Ġgame Ġon ĠMac ĠOS . ĠIf Ġthe Ġgame Ġcrash Ġat Ġstart , Ġadd Ġ- X start On First Thread Ġas ĠJVM Ġarguments Ġto Ġyour Ġprogram . """" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! GLFW . glfw Init ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unable Ġto Ġinitialize ĠGLFW ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw Default Window Hints () Ġ// Ġoptional , Ġthe Ġcurrent Ġwindow Ġhints Ġare Ġalready Ġthe Ġdefault ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw Window Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . GLFW _ VISIBLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . GLFW _ FALSE ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġthe Ġwindow Ġwill Ġstay Ġhidden Ġafter Ġcreation ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Window Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . GLFW _ RE SIZ ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . GLFW _ TRUE ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġthe Ġwindow Ġwill Ġbe Ġres izable ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġwindow ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= ĠGLFW . glfw Create Window ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . window . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . window . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . window . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMemory Util . NULL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMemory Util . NULL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( window Ġ== ĠMemory Util . NULL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġcreate Ġthe ĠGLFW Ġwindow ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġresolution Ġof Ġthe Ġprimary Ġmonitor ĊĠĠĠĠĠĠĠ Ġval Ġvid mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . glfw Get Video Mode ( GLFW . glfw Get Primary Monitor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" No Ġprimary Ġmonitor Ġfound ") ĊĠĠĠĠĠĠĠ Ġ// ĠCenter Ġour Ġwindow ĊĠĠĠĠĠĠĠ ĠGLFW . glfw SetWindow Pos ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( vid mode . width () Ġ- Ġconfiguration . window . width ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( vid mode . height () Ġ- Ġconfiguration . window . height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġthe ĠOpenGL Ġcontext Ġcurrent ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Make Context Current ( window ) ĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġv - sync ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Swap Interval ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġorg . lwjgl . opengl . GL . create Capabilities () ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġthe Ġwindow Ġvisible ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Show Window ( window ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġsize Ġof Ġthe Ġdevice Ġwindow ĊĠĠĠĠĠĠĠ Ġval Ġtmp Width Ġ= ĠMemory Util . mem Alloc Int ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġtmp Height Ġ= ĠMemory Util . mem Alloc Int ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLFW . glfw GetWindow Size ( window , Ġtmp Width , Ġtmp Height ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe ĠGame ĠResolution Ġregarding Ġthe Ġconfiguration ĊĠĠĠĠĠĠĠ Ġval Ġgame Resolution Ġ= Ġconfiguration . game Screen Configuration . screen ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Width . get ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Height . get ( 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġgame Context Ġ= ĠGame Context ( this , Ġgame Resolution ) ĊĠĠĠĠĠĠĠ Ġgame Context . log Platform () ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġdevice Ġscreen Ġregarding Ġthe Ġactual Ġsize Ġof Ġthe Ġwindow . ĊĠĠĠĠĠĠĠ Ġgame Context . device Screen . width Ġ= Ġtmp Width . get ( 0 ) ĊĠĠĠĠĠĠĠ Ġgame Context . device Screen . height Ġ= Ġtmp Height . get ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġframebuffer Ġscreen Ġwith Ġthe Ġactual Ġsize Ġof Ġthe Ġframebuffer ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Get Framebuffer Size ( window , Ġtmp Width , Ġtmp Height ) ĊĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . width Ġ= Ġtmp Width . get ( 0 ) ĊĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . height Ġ= Ġtmp Height . get ( 0 ) ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw SetWindow Size Callback ( window ) Ġ{ Ġ_, Ġwidth , Ġheight Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . device Screen . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . device Screen . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw Set Framebuffer Size Callback ( window ) Ġ{ Ġ_, Ġwidth , Ġheight Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . viewport . update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . gl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw SetWindow Pos Callback ( window ) Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġwindow Ġmoved . ĠThe Ġviewport Ġneeds Ġto Ġbe Ġref reshed Ġin Ġthis Ġsituation Ġtoo . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . viewport . update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . gl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAttach Ġinput Ġbefore Ġgame Ġcreation . ĊĠĠĠĠĠĠĠ Ġval Ġinput Manager Ġ= Ġgame Context . input Ġas ĠL wjgl Input ĊĠĠĠĠĠĠĠ Ġinput Manager . attach Handler ( window ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= ĠGame Wrapper ( game Context , Ġgame Factory ( game Context )) ĊĊĠĠĠĠĠĠĠ Ġgame . create () ĊĠĠĠĠĠĠĠ Ġgame . resume () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWire frame Ġmode ĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . wire frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL 1 1 . gl Polygon Mode ( GL _ FRONT _ AND _ BACK , ĠGL _ LINE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgame Context . viewport . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . gl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . frame Buffer Screen . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Context . game Screen . height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠRender Ġloop ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! GLFW . glfw Window Should Close ( window )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġget Delta () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġlast Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Manager . record () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdv ance Ġthe Ġgame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . render ( delta ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . glfw Swap Buffers ( window ) Ġ// Ġswap Ġthe Ġcolor Ġbuffers ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLFW . glfw Poll Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Manager . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Render Loop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Render Loop Ġ= Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgame . pause () ĊĠĠĠĠĠĠĠ Ġgame . destroy () ĊĠĠĠ Ġ} Ċ } Ċ