Example #1
0
void Server::spawnPlayer(Player *player)
{
	std::vector<SpawnpointMarker*> validPositions;
	SpawnpointMarker *bestSpawn;
	
	for(SpawnPool::iterator ii = spawns.begin(); ii != spawns.end(); ++ii)
	{
		bool isSpawnOK = true;
		
		for (Entpool::iterator jj = entities.begin(); jj != entities.end(); ++jj)
		{
			if(jj->second->getEntId() == (*ii)->getEntId())
				continue;
			
			Vector2D displacement = (jj->second->getPosition().positionVector() - (*ii)->getPosition().positionVector());
			
			if (displacement.getMagnitude() < 40.0f) {
				isSpawnOK = false;
				break;
			}
		}
		if((*ii)->team != team_free && (*ii)->team != player->getTeam())
			isSpawnOK = false;
		
		if (isSpawnOK)
			validPositions.push_back(*ii);
	}
	if(spawns.size() == 0)
	{
		player->setPosition(Position(0,0));
	}
	else if(validPositions.size() == 0)  // All spawn points are filled, so pick
	{                               // one at random. - This causes ships to spawn on top of each other [eric]
		bestSpawn = spawns[ rand()%spawns.size() ];
		player->setPosition(bestSpawn->getPosition());
	}
	else
	{
		bestSpawn = validPositions[ rand()%validPositions.size() ];
		player->setPosition(bestSpawn->getPosition());
	}

}
Example #2
0
double Vector2D::getAngleBetween(const Vector2D &other) const {
    double rad = this->dotProduct(other) / (this->getMagnitude() * other.getMagnitude());
    return radiansToDegrees(acos(rad));
}