[Orxonox-commit 5302] r9965 - code/trunk/src/modules/gametypes

landauf at orxonox.net landauf at orxonox.net
Fri Jan 3 21:57:52 CET 2014


Author: landauf
Date: 2014-01-03 21:57:52 +0100 (Fri, 03 Jan 2014)
New Revision: 9965

Modified:
   code/trunk/src/modules/gametypes/SpaceRaceController.cc
Log:
simplified algorithm. turns out this code actually tries to find the minimal distance (but it only worked with max 3 possible next checkpoints)

Modified: code/trunk/src/modules/gametypes/SpaceRaceController.cc
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRaceController.cc	2014-01-03 20:44:23 UTC (rev 9964)
+++ code/trunk/src/modules/gametypes/SpaceRaceController.cc	2014-01-03 20:57:52 UTC (rev 9965)
@@ -221,36 +221,23 @@
      */
     RaceCheckPoint* SpaceRaceController::nextPointFind(RaceCheckPoint* raceCheckpoint)
     {
-        float distances[] = {-1, -1, -1};
-        int temp_i = 0;
-        for (std::set<int>::iterator it =raceCheckpoint->getNextCheckpoints().begin(); it!= raceCheckpoint->getNextCheckpoints().end(); ++it)
+        float minDistance = 0;
+        RaceCheckPoint* minNextRaceCheckPoint = NULL;
+
+        // find the next checkpoint with the minimal distance
+        for (std::set<int>::iterator it = raceCheckpoint->getNextCheckpoints().begin(); it != raceCheckpoint->getNextCheckpoints().end(); ++it)
         {
-            distances[temp_i] = recCalculateDistance(findCheckpoint(*it), this->getControllableEntity()->getPosition());
-            temp_i++;
-        }
-        if (distances[0] > distances[1] && distances[1] >= 0)
-        {
-            if (distances[2] < distances[1] && distances[2] >= 0)
+            RaceCheckPoint* nextRaceCheckPoint = findCheckpoint(*it);
+            float distance = recCalculateDistance(nextRaceCheckPoint, this->getControllableEntity()->getPosition());
+
+            if (distance < minDistance || minNextRaceCheckPoint == NULL)
             {
-                return findCheckpoint(*raceCheckpoint->getNextCheckpoints().end()); // return checkpoint with ID of raceCheckpoint->getNextCheckpoints() [2]
+                minDistance = distance;
+                minNextRaceCheckPoint = nextRaceCheckPoint;
             }
-            else
-            {
-                std::set<int>::iterator temp = raceCheckpoint->getNextCheckpoints().begin();
-                return findCheckpoint(*(++temp)); // return [1]
-            }
         }
-        else
-        {
-            if (distances[2] < distances[0] && distances[2] >= 0)
-            {
-                return findCheckpoint(*raceCheckpoint->getNextCheckpoints().end()); // return [2]
-            }
-            else
-            {
-                return findCheckpoint(*raceCheckpoint->getNextCheckpoints().begin()); // return [0]
-            }
-        }
+
+        return minNextRaceCheckPoint;
     }
 
     /*




More information about the Orxonox-commit mailing list