[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