[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