text: /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
  /* If you are missing that file, acquire a complete release at teeworlds.com.                */
  
  #include "entity.h"
  #include "gamecontext.h"
  
  //////////////////////////////////////////////////
  // Entity
  //////////////////////////////////////////////////
  CEntity::CEntity(CGameWorld *pGameWorld, int ObjType)
  {
  	m_pGameWorld = pGameWorld;
  
  	m_ObjType = ObjType;
  	m_Pos = vec2(0,0);
  	m_ProximityRadius = 0;
  
  	m_MarkedForDestroy = false;
  	m_ID = Server()->SnapNewID();
  
  	m_pPrevTypeEntity = 0;
  	m_pNextTypeEntity = 0;
  }
  
  CEntity::~CEntity()
  {
  	GameWorld()->RemoveEntity(this);
  	Server()->SnapFreeID(m_ID);
  }
  
  int CEntity::NetworkClipped(int SnappingClient)
  {
  	return NetworkClipped(SnappingClient, m_Pos);
  }
  
  int CEntity::NetworkClipped(int SnappingClient, vec2 CheckPos)
  {
  	if(SnappingClient == -1)
  		return 0;
  
  	float dx = GameServer()->m_apPlayers[SnappingClient]->m_ViewPos.x-CheckPos.x;
  	float dy = GameServer()->m_apPlayers[SnappingClient]->m_ViewPos.y-CheckPos.y;
  
  	if(absolute(dx) > 1000.0f || absolute(dy) > 800.0f)
  		return 1;
  
  	if(distance(GameServer()->m_apPlayers[SnappingClient]->m_ViewPos, CheckPos) > 4000.0f)
  		return 1;
  	return 0;
  }
  
  bool CEntity::GameLayerClipped(vec2 CheckPos)
  {
  	return round_to_int(CheckPos.x)/32 < -200 || round_to_int(CheckPos.x)/32 > GameServer()->Collision()->GetWidth()+200 ||
  			round_to_int(CheckPos.y)/32 < -200 || round_to_int(CheckPos.y)/32 > GameServer()->Collision()->GetHeight()+200 ? true : false;
  }
  