[Orxonox-commit 3897] r8571 - code/branches/spacerace/src/orxonox/gametypes
dafrick at orxonox.net
dafrick at orxonox.net
Wed May 25 18:07:35 CEST 2011
Author: dafrick
Date: 2011-05-25 18:07:35 +0200 (Wed, 25 May 2011)
New Revision: 8571
Modified:
code/branches/spacerace/src/orxonox/gametypes/Gametype.cc
Log:
Fixing possible bug in Gametype.
Modified: code/branches/spacerace/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/branches/spacerace/src/orxonox/gametypes/Gametype.cc 2011-05-25 09:02:54 UTC (rev 8570)
+++ code/branches/spacerace/src/orxonox/gametypes/Gametype.cc 2011-05-25 16:07:35 UTC (rev 8571)
@@ -305,33 +305,32 @@
SpawnPoint* Gametype::getBestSpawnPoint(PlayerInfo* player) const
{
+ // If there is at least one SpawnPoint.
if (this->spawnpoints_.size() > 0)
{
+ // Fallback spawn point if there is no active one, choose a random one.
SpawnPoint* fallbackSpawnPoint = NULL;
unsigned int randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(this->spawnpoints_.size())));
unsigned int index = 0;
- std::set<SpawnPoint*> activeSpawnPoints = this->spawnpoints_;
+ std::vector<SpawnPoint*> activeSpawnPoints;
for (std::set<SpawnPoint*>::const_iterator it = this->spawnpoints_.begin(); it != this->spawnpoints_.end(); ++it)
{
if (index == randomspawn)
fallbackSpawnPoint = (*it);
- if (!(*it)->isActive())
- activeSpawnPoints.erase(*it);
+ if (*it != NULL && (*it)->isActive())
+ activeSpawnPoints.push_back(*it);
++index;
}
- randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(this->spawnpoints_.size())));
- index = 0;
- for (std::set<SpawnPoint*>::const_iterator it = activeSpawnPoints.begin(); it != activeSpawnPoints.end(); ++it)
+ if(activeSpawnPoints.size() > 0)
{
- if (index == randomspawn)
- return (*it);
-
- ++index;
+ randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(activeSpawnPoints.size())));
+ return activeSpawnPoints[randomspawn];
}
+ COUT(2) << "Warning: Fallback SpawnPoint was used, because there were no active SpawnPoints." << endl;
return fallbackSpawnPoint;
}
return 0;
More information about the Orxonox-commit
mailing list