/** Ċ MIT ĠLicense Ċ Ċ Copyright Ġ( c ) Ġ 2 0 1 6 ĠSh a un ĠRe ich Ġ< s re ich 0 2 @ gmail . com > Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ of Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ in Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ to Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ copies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ furnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ copies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ IMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ FITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ AUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ LIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ OUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ SOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . ore . in fin ium . systems Ċ Ċ import Ġcom . art emis . Aspect Ċ import Ġcom . art emis . annotations . Wire Ċ import Ġcom . art emis . systems . Iter ating System Ċ import Ġcom . badlogic . gdx . math . Vector 2 Ċ import Ġcom . ore . in fin ium . O re Timer Ċ import Ġcom . ore . in fin ium . O re World Ċ import Ġcom . ore . in fin ium . components . Player Component Ċ import Ġcom . ore . in fin ium . components . Sprite Component Ċ import Ġcom . ore . in fin ium . systems . server . Server Network System Ċ import Ġcom . ore . in fin ium . util . mapper Ċ import Ġcom . ore . in fin ium . util . require Ċ import Ġcom . ore . in fin ium . util . system Ċ Ċ @ Wire ( fail On Null Ġ= Ġfalse ) Ċ class ĠPlayer System ( private Ġval Ġo re World : ĠO re World ) Ġ: ĠIter ating System ( Aspect . all ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Player Ġby Ġrequire < Player Component >() ĊĠĠĠ Ġprivate Ġval Ġm Sprite Ġby Ġmapper < Sprite Component >() ĊĊĠĠĠ Ġprivate Ġval Ġserver Network System Ġby Ġsystem < Server Network System >() ĊĊĠĠĠ Ġprivate Ġval Ġchunk Timer Ġ= ĠO re Timer () ĊĊĠĠĠ Ġoverride Ġfun Ġinserted ( entityId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . inserted ( entityId ) ĊĊĠĠĠĠĠĠĠ Ġ// client Ġdoes Ġnothing Ġas Ġof Ġyet , Ġwith Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( ore World . is Client ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// initial Ġspawn , Ġsend Ġregion ĊĠĠĠĠĠĠĠ Ġcalculate Loaded Viewport ( entityId ) ĊĠĠĠĠĠĠĠ Ġsend Player Block Region ( entityId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( entityId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ore World . is Client ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// clients , Ġfor Ġnow , Ġdo Ġtheir Ġown Ġcollision Ġstuff . Ġmostly . ĊĠĠĠĠĠĠĠ Ġ// FIX ME : Ġclients Ġshould Ġsimulate Ġtheir Ġown Ġplayer 's Ġcollision Ġwith Ġeverything Ġand Ġtell Ġthe Ġserver Ġits ĊĠĠĠĠĠĠĠ Ġ// Ġposition Ġso Ġit Ġcan Ġbroadcast . ĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġnothing Ġelse . ĊĠĠĠĠĠĠĠ Ġ// server Ġwill Ġsimulate Ġeverything Ġelse ( except Ġplayers ), Ġand Ġbroadcast Ġpositions ĊĊĠĠĠĠĠĠĠ Ġ// should Ġnever Ġever , Ġever Ġhappen . ĊĠĠĠĠĠĠĠ Ġassert ( m Sprite . has ( entityId ) Ġ&& Ġm Player . has ( entityId )) ĊĊĠĠĠĠĠĠĠ Ġval Ġc Sprite Ġ= Ġm Sprite . get ( entityId ) ĊĠĠĠĠĠĠĠ Ġval Ġc Player Ġ= Ġm Player . get ( entityId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġviewport Rect Ġ= Ġc Player . loaded Viewport . rect ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġc Sprite . sprite . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġc Sprite . sprite . y ĊĊĠĠĠĠĠĠĠ Ġ// fix me Ġfix me , Ġwe 'll Ġfix Ġthis Ġwhen Ġwe Ġget Ġto Ġchunk ing Ġand Ġcome Ġup Ġwith Ġa Ġproper Ġsolution ĊĠĠĠĠĠĠĠ Ġif Ġ( chunk Timer . reset If Expired ( 6 0 0 L )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Loaded Viewport ( entityId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Loaded Viewport ( player Entity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Player Ġ= Ġm Player . get ( player Entity ) ĊĠĠĠĠĠĠĠ Ġval Ġc Sprite Ġ= Ġm Sprite . get ( player Entity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġloaded Viewport Ġ= Ġc Player . loaded Viewport ĊĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= ĠVector 2 ( c Sprite . sprite . x , Ġc Sprite . sprite . y ) ĊĠĠĠĠĠĠĠ Ġloaded Viewport . center On ( center , Ġo re World ) ĊĊĠĠĠĠĠĠĠ Ġserver Network System . send Player Loaded Viewport Moved ( player Entity ) ĊĊĠĠĠĠĠĠĠ Ġ// todo Ġsend Ġonly Ġpartial s Ġdepending Ġon Ġdirection Ġthey 're Ġtravel ing ( distance Ġfrom Ġorigin ). ĊĠĠĠĠĠĠĠ Ġsend Player Block Region ( player Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Player Block Region ( player Entity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Player Ġ= Ġm Player . get ( player Entity ) ĊĠĠĠĠĠĠĠ Ġval Ġloaded Viewport Ġ= Ġc Player . loaded Viewport ĊĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġloaded Viewport . block Region In Viewport () ĊĊĠĠĠĠĠĠĠ Ġserver Network System . send Player Block Region ( player Entity , Ġregion . x , Ġregion . width , Ġregion . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion . height ) ĊĠĠĠ Ġ} Ċ } Ċ