package Ġxyz . lo uis chan . sh og i board Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroid . widget . TextView Ċ import Ġxyz . lo uis chan . sh og i board . R . layout . piece Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġmodel : ĠBoard ViewModel ĊĠĠĠ Ġval Ġpiece Map Ġ= Ġhash Map Of < String , ĠPiece View >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠfindViewById < Relative Layout >( R . id . main _ layout ) ĊĊĠĠĠĠĠĠĠ Ġmodel Ġ= ĠViewModel Providers . of ( this ). get ( Board ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġrender Pieces ( model . board . all Pieces (), Ġlayout ) ĊĊĠĠĠĠĠĠĠ Ġmodel . observe Moves Ġ{ Ġpiece : ĠPiece Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Piece ( piece ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Pieces ( pieces : ĠIterable < Piece >, Ġlayout : ĠRelative Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( piece Ġin Ġpieces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . addView ( Piece View ( piece ). view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Piece ( piece : ĠPiece ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpiece View Ġ= Ġpiece Map [ piece . identifier ()] ĊĠĠĠĠĠĠĠ Ġif Ġ( piece View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Piece To ( piece View . view , Ġpiece . coords ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove Piece To ( piece : ĠRelative Layout , Ġcoords : ĠSh og i Coordinate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdim ens Ġ= ĠCoord s As Dim ens ( coords ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dim ens . file Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( piece , Ġ" x ", Ġdim ens . left Margin . toFloat ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( dim ens . rank Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( piece , Ġ" y ", Ġdim ens . top Margin . toFloat ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠPiece View ( piece : ĠPiece ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġview : ĠRelative Layout Ġ= Ġlayout Inflater . inflate ( R . layout . piece , Ġnull ) Ġas ĠRelative Layout ĊĠĠĠĠĠĠĠ Ġval Ġidentifier : ĠString Ġ= Ġpiece . identifier () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . piece _ text ). text Ġ= ĠgetString ( piece . type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdim ens Ġ= ĠCoord s As Dim ens ( piece . coords ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . piece _ width ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . piece _ height ). toInt ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . margin Start Ġ= Ġdim ens . left Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Margin Ġ= Ġdim ens . left Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . top Margin Ġ= Ġdim ens . top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . layout Params Ġ= Ġlayout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( piece . owner Ġ== ĠWH ITE PLAYER ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . rotation Ġ= Ġ 1 8 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpiece Map [ identifier ] Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCoord s As Dim ens ( coords : ĠSh og i Coordinate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcoords . get Ind File () ĊĠĠĠĠĠĠĠ Ġval Ġrank Ġ= Ġcoords . get Ind Rank () ĊĠĠĠĠĠĠĠ Ġval Ġleft Margin Ġ= Ġresources . get Dimension ( R . dim en . piece _ top left _ left Margin ). toInt () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ* Ġresources . get Dimension ( R . dim en . piece _ file _ separ ation ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġtop Margin Ġ= Ġresources . get Dimension ( R . dim en . piece _ top left _ top Margin ). toInt () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrank Ġ* Ġresources . get Dimension ( R . dim en . piece _ rank _ separ ation ). toInt () ĊĠĠĠ Ġ} Ċ } Ċ