package Ġcom . ke mp . core . playground Ċ Ċ import Ġcom . art emis . Component Mapper Ċ import Ġcom . art emis . annotations . All Ċ import Ġcom . art emis . systems . Iter ating System Ċ import Ġcom . ke mp . core . Position Ċ import Ġcom . ke mp . core . Rotation Ċ import Ġcom . ke mp . core . ecs . components . Node Component Ċ import Ġcom . ke mp . core . ecs . components . Touch Elements Component Ċ import Ġcom . ke mp . core . ecs . components . Transform Component Ċ import Ġcom . ke mp . core . input . touch . Touch Stick Ċ import Ġcom . ke mp . core . utils .* Ċ import Ġkotlin . math .* Ċ Ċ @ All ( Transform Component :: class , ĠNode Component :: class , ĠTouch Elements Component :: class , ĠPlayer Component :: class ) Ċ class ĠPlayer Controller System Ġ: ĠIter ating System () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransform Mapper : ĠComponent Mapper < Transform Component > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtouch Elements Mapper : ĠComponent Mapper < Touch Elements Component > ĊĊĠĠĠ Ġprivate Ġvar Ġmovement Ġ= ĠFloat 3 () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Angle Ġ= Ġ 0 f ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( entityId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransform Component Ġ= Ġtransform Mapper . get ( entityId ) ĊĠĠĠĠĠĠĠ Ġval Ġtransform Ġ= Ġtransform Component . transform ĊĊĠĠĠĠĠĠĠ Ġval Ġtouch St icks Component Ġ= Ġtouch Elements Mapper . get ( entityId ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtouch Stick Ġ= Ġtouch St icks Component . touch Elements [" rotation "] Ġas ? ĠTouch Stick ? ĊĊĠĠĠĠĠĠĠ Ġif Ġ( touch Stick Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . movement . x Ġ= Ġtouch Stick . stick Vector . x Ġ/ Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . movement . y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . movement . z Ġ= Ġtouch Stick . stick Vector . y Ġ/ Ġ 1 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovement Speed Ġ= Ġlength ( movement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movement Speed Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġdegrees ( atan 2 ( movement . z , Ġmovement . x )) Ġ+ Ġ 9 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Delta Ġ= Ġangle Delta ( dir , Ġcurrent Angle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangular Speed Ġ= Ġ 0 . 1 f Ġ* Ġangle Delta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Angle Ġ+= Ġangular Speed ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform . rotate ( Rotation ( 0 f , Ġ- angular Speed , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translate ( Position ( 0 f , Ġ 0 f , Ġ- movement Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġangle Delta ( x : ĠFloat , Ġy : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġarg : ĠFloat Ġ= Ġ( y Ġ- Ġx ) Ġ% Ġ 3 6 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ< Ġ 0 f ) Ġarg Ġ+= Ġ 3 6 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ> Ġ 1 8 0 f ) Ġarg Ġ-= Ġ 3 6 0 f ĊĠĠĠĠĠĠĠ Ġreturn Ġ- arg ĊĠĠĠ Ġ} Ċ }