package Ġcom . so y wiz . k orge . view . tiles Ċ Ċ import Ġcom . so y wiz . k ds . IntArray 2 Ċ import Ġcom . so y wiz . k mem .* Ċ import Ġcom . so y wiz . k orge . render .* Ċ import Ġcom . so y wiz . k orge . util . to IntArray 2 Ċ import Ġcom . so y wiz . k orge . view .* Ċ import Ġcom . so y wiz . kor im . bitmap .* Ċ import Ġcom . so y wiz . kor im . color . Rg ba Array Ċ import Ġcom . so y wiz . k orm a . geom .* Ċ Ċ inline Ġfun ĠContainer . tile Map ( map : ĠInt Array 2 , Ġtile set : ĠTile Set , Ġrepeat X : ĠTile Map . Repeat Ġ= ĠTile Map . Repeat . NONE , Ġrepeat Y : ĠTile Map . Repeat Ġ= Ġrepeat X , Ġcallback : Ġ@ Views Dsl Marker ĠTile Map . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= Ċ ĉ Tile Map ( map , Ġtile set ). addTo ( this ). repeat ( repeat X , Ġrepeat Y ). apply ( callback ) Ċ Ċ inline Ġfun ĠContainer . tile Map ( map : ĠBitmap 3 2 , Ġtile set : ĠTile Set , Ġrepeat X : ĠTile Map . Repeat Ġ= ĠTile Map . Repeat . NONE , Ġrepeat Y : ĠTile Map . Repeat Ġ= Ġrepeat X , Ġcallback : Ġ@ Views Dsl Marker ĠTile Map . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= Ċ ĉ Tile Map ( map . to IntArray 2 (), Ġtile set ). addTo ( this ). repeat ( repeat X , Ġrepeat Y ). apply ( callback ) Ċ Ċ open Ġclass ĠTile Map ( val Ġint Map : ĠInt Array 2 , Ġval Ġtile set : ĠTile Set ) Ġ: ĠView () Ġ{ Ċ ĉ @ Deprecated (" ke pt Ġfor Ġcompat ib l ity ") Ċ ĉ val Ġmap Ġby Ġlazy Ġ{ ĠBitmap 3 2 ( int Map . width , Ġint Map . height , ĠR g ba Array ( int Map . data )) Ġ} Ċ ĉ constructor ( map : ĠBitmap 3 2 , Ġtile set : ĠTile Set ) Ġ: Ġthis ( map . to IntArray 2 (), Ġtile set ) ĊĊ ĉ val Ġtile Width Ġ= Ġtile set . width . toDouble () Ċ ĉ val Ġtile Height Ġ= Ġtile set . height . toDouble () Ċ ĉ var Ġsmoothing Ġ= Ġtrue ĊĊ ĉ enum Ġclass ĠRepeat ( val Ġget : Ġ( v : ĠInt , Ġmax : ĠInt ) Ġ-> ĠInt ) Ġ{ Ċĉ ĉ NONE ({ Ġv , Ġmax Ġ-> Ġv Ġ}), Ċĉ ĉ REPEAT ({ Ġv , Ġmax Ġ-> Ġv Ġum od Ġmax Ġ}), Ċĉ ĉ MIR ROR ({ Ġv , Ġmax Ġ-> Ċĉĉ ĉ val Ġr Ġ= Ġv Ġum od Ġmax Ċĉĉ ĉ if Ġ(( v Ġ/ Ġmax ) Ġ% Ġ 2 Ġ== Ġ 0 ) Ġr Ġelse Ġmax Ġ- Ġ 1 Ġ- Ġr Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ var Ġrepeat X Ġ= ĠRepeat . NONE Ċ ĉ var Ġrepeat Y Ġ= ĠRepeat . NONE ĊĊ ĉ private Ġval Ġt 0 Ġ= ĠPoint ( 0 , Ġ 0 ) Ċ ĉ private Ġval Ġtt 0 Ġ= ĠPoint ( 0 , Ġ 0 ) Ċ ĉ private Ġval Ġtt 1 Ġ= ĠPoint ( 0 , Ġ 0 ) Ċ ĉ private Ġval Ġtemp Point Pool Ġ= ĠPoint Area ( 1 6 ) ĊĊ ĉ private Ġfun Ġcompute Vertex If Required ( ctx : ĠRender Context ) Ġ{ Ċĉ ĉ if Ġ(! dirty Vertices ) Ġreturn Ċĉ ĉ dirty Vertices Ġ= Ġfalse Ċĉ ĉ val Ġm Ġ= Ġglobal Matrix ĊĊĉ ĉ val Ġrender Tiles Counter Ġ= Ġctx . stats . counter (" rendered Tiles ") ĊĊĉ ĉ val Ġpos Ġ= Ġm . transform ( 0 . 0 , Ġ 0 . 0 ) Ċĉ ĉ val Ġd U Ġ= Ġm . transform ( tile Width , Ġ 0 . 0 ) Ġ- Ġpos Ċĉ ĉ val Ġd V Ġ= Ġm . transform ( 0 . 0 , Ġtile Height ) Ġ- Ġpos ĊĊĉ ĉ val Ġcol Mul Ġ= Ġrender Color Mul Ċĉ ĉ val Ġcol Add Ġ= Ġrender Color Add ĊĊĊĉ ĉ // Ġ@ TODO : ĠBounds Ġin Ġcli pped Ġview Ċĉ ĉ val Ġpp 0 Ġ= Ġglobal ToLocal ( t 0 . set To ( current Virtual Rect . left , Ġcurrent Virtual Rect . top ), Ġtt 0 ) Ċĉ ĉ val Ġpp 1 Ġ= Ġglobal ToLocal ( t 0 . set To ( current Virtual Rect . right , Ġcurrent Virtual Rect . bottom ), Ġtt 1 ) Ċĉ ĉ val Ġmx 0 Ġ= Ġ(( pp 0 . x Ġ/ Ġtile Width ) Ġ- Ġ 1 ). toInt () Ċĉ ĉ val Ġmx 1 Ġ= Ġ(( pp 1 . x Ġ/ Ġtile Width ) Ġ+ Ġ 1 ). toInt () Ċĉ ĉ val Ġmy 0 Ġ= Ġ(( pp 0 . y Ġ/ Ġtile Height ) Ġ- Ġ 1 ). toInt () Ċĉ ĉ val Ġmy 1 Ġ= Ġ(( pp 1 . y Ġ/ Ġtile Height ) Ġ+ Ġ 1 ). toInt () ĊĊĉ ĉ val Ġy height Ġ= Ġmy 1 Ġ- Ġmy 0 Ċĉ ĉ val Ġx width Ġ= Ġmx 1 Ġ- Ġmx 0 Ċĉ ĉ val Ġn tiles Ġ= Ġx width Ġ* Ġy height Ċĉ ĉ vertices Per Tex . clear () ĊĊĉ ĉ var Ġcount Ġ= Ġ 0 Ċĉ ĉ for Ġ( y Ġin Ġmy 0 Ġuntil Ġmy 1 ) Ġ{ Ċĉĉ ĉ for Ġ( x Ġin Ġmx 0 Ġuntil Ġmx 1 ) Ġ{ Ċĉĉĉ ĉ val Ġrx Ġ= Ġrepeat X . get ( x , Ġint Map . width ) Ċĉĉĉ ĉ val Ġry Ġ= Ġrepeat Y . get ( y , Ġint Map . height ) ĊĊĉĉĉ ĉ if Ġ( rx Ġ< Ġ 0 Ġ|| Ġrx Ġ>= Ġint Map . width ) Ġcontinue Ċĉĉĉ ĉ if Ġ( ry Ġ< Ġ 0 Ġ|| Ġry Ġ>= Ġint Map . height ) Ġcontinue ĊĊĉĉĉ ĉ val Ġtex Ġ= Ġtile set [ int Map [ rx , Ġry ]] Ġ?: Ġcontinue ĊĊĉĉĉ ĉ val Ġinfo Ġ= Ġvertices Per Tex . get Or Put ( tex . bmp ) Ġ{ Ċĉĉĉĉ ĉ val Ġindices Ġ= ĠText ured VertexArray . quad Indices ( nt iles ) Ċĉĉĉĉ ĉ // println ( indices . toList ()) Ċĉĉĉĉ ĉ Info ( Text ured VertexArray ( nt iles Ġ* Ġ 4 , Ġindices )) Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ temp Point Pool Ġ{ Ċĉĉĉĉ ĉ val Ġp 0 Ġ= Ġpos Ġ+ Ġ( d U Ġ* Ġx ) Ġ+ Ġ( d V Ġ* Ġy ) Ċĉĉĉĉ ĉ val Ġp 1 Ġ= Ġp 0 Ġ+ Ġd U Ċĉĉĉĉ ĉ val Ġp 2 Ġ= Ġp 0 Ġ+ Ġd U Ġ+ Ġd V Ċĉĉĉĉ ĉ val Ġp 3 Ġ= Ġp 0 Ġ+ Ġd V ĊĊĉĉĉĉ ĉ info . vertices . select ( info . v count ++ ). xy ( p 0 . x , Ġp 0 . y ). uv ( tex . tl _ x , Ġtex . tl _ y ). cols ( col Mul , Ġcol Add ) Ċĉĉĉĉ ĉ info . vertices . select ( info . v count ++ ). xy ( p 1 . x , Ġp 1 . y ). uv ( tex . tr _ x , Ġtex . tr _ y ). cols ( col Mul , Ġcol Add ) Ċĉĉĉĉ ĉ info . vertices . select ( info . v count ++ ). xy ( p 2 . x , Ġp 2 . y ). uv ( tex . br _ x , Ġtex . br _ y ). cols ( col Mul , Ġcol Add ) Ċĉĉĉĉ ĉ info . vertices . select ( info . v count ++ ). xy ( p 3 . x , Ġp 3 . y ). uv ( tex . bl _ x , Ġtex . bl _ y ). cols ( col Mul , Ġcol Add ) Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ info . ic ount Ġ+= Ġ 6 Ċĉĉĉ ĉ count ++ Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ render Tiles Counter ?. increment ( count ) Ċ ĉ } ĊĊ ĉ // Ġ@ TO OD : ĠUse Ġa ĠTexture VertexBuffer Ġor Ġsomething Ċ ĉ class ĠInfo ( val Ġvertices : ĠText ured VertexArray ) Ġ{ Ċĉ ĉ var Ġv count Ġ= Ġ 0 Ċĉ ĉ var Ġic ount Ġ= Ġ 0 Ċ ĉ } ĊĊ ĉ private Ġval Ġvertices Per Tex Ġ= ĠLinkedHashMap < Bitmap , ĠInfo >() ĊĊ ĉ private Ġvar Ġlast Virtual Rect Ġ= ĠRectangle (- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ) Ċ ĉ private Ġvar Ġcurrent Virtual Rect Ġ= ĠRectangle (- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ) ĊĊ ĉ override Ġfun Ġrender Internal ( ctx : ĠRender Context ) Ġ{ Ċĉ ĉ if Ġ(! visible ) Ġreturn Ċĉ ĉ current Virtual Rect . setBounds ( ctx . virtual Left , Ġctx . virtual Top , Ġctx . virtual Right , Ġctx . virtual Bottom ) Ċĉ ĉ if Ġ( current Virtual Rect Ġ!= Ġlast Virtual Rect ) Ġ{ Ċĉĉ ĉ dirty Vertices Ġ= Ġtrue Ċĉĉ ĉ last Virtual Rect . copyFrom ( current Virtual Rect ) Ċĉ ĉ } Ċĉ ĉ compute Vertex If Required ( ctx ) ĊĊĉ ĉ for Ġ(( tex , Ġbuffer ) Ġin Ġvertices Per Tex ) Ġ{ Ċĉĉ ĉ ctx . batch . draw Vertices ( Ċĉĉĉ ĉ buffer . vertices , Ġctx . get Tex ( tex ), Ġsmoothing , Ġrender Blend Mode . factors , Ġbuffer . v count , Ġbuffer . ic ount Ċĉĉ ĉ ) Ċĉ ĉ } Ċĉ ĉ ctx . flush () Ċ ĉ } ĊĊ ĉ override Ġfun Ġget Local Bounds Internal ( out : ĠRectangle ) Ġ{ Ċĉ ĉ out . set To ( 0 , Ġ 0 , Ġtile Width Ġ* Ġint Map . width , Ġtile Height Ġ* Ġint Map . height ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġhit Test ( x : ĠDouble , Ġy : ĠDouble ): ĠView ? Ġ{ Ċĉ ĉ return Ġif Ġ( check Global Bounds ( x , Ġy , Ġ 0 . 0 , Ġ 0 . 0 , Ġtile Width Ġ* Ġint Map . width , Ġtile Height Ġ* Ġint Map . height )) Ġthis Ġelse Ġnull Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T Ġ: ĠTile Map > ĠT . repeat ( repeat X : ĠTile Map . Repeat , Ġrepeat Y : ĠTile Map . Repeat Ġ= Ġrepeat X ): ĠT Ġ= Ġthis . apply Ġ{ Ċ ĉ this . repeat X Ġ= Ġrepeat X Ċ ĉ this . repeat Y Ġ= Ġrepeat Y Ċ } ĊĊ