void Territory::calculateDistances(Territory* newTerritory, std::list<Territory*> &frontier, std::set<Territory*> &visited, int depthOfFrontier){ Territory* expandingTerritory; std::list<Territory*> newFrontier; while(!frontier.empty()){ expandingTerritory = frontier.front(); frontier.pop_front(); if(visited.count(expandingTerritory) == 0){ visited.insert(expandingTerritory); distanceArr[territoryToDistanceIndex[newTerritory]][territoryToDistanceIndex[expandingTerritory]] = depthOfFrontier; for(std::list<Territory*>::iterator iter = expandingTerritory->adjacentTerritories->begin(); iter != expandingTerritory->adjacentTerritories->end(); iter++){ newFrontier.push_back(*iter); } } if(newFrontier.empty()){ return; } calculateDistances(newTerritory, newFrontier, visited, depthOfFrontier + 1); } }
short pathingDistance(short x1, short y1, short x2, short y2, unsigned long blockingTerrainFlags) { short retval, **distanceMap = allocGrid(); calculateDistances(distanceMap, x2, y2, blockingTerrainFlags, NULL, true, true); retval = distanceMap[x1][y1]; freeGrid(distanceMap); return retval; }
WaypointAnimator(ISceneManager* smgr, Waypoints const& points, u32 const& duration, int const& loop = 0, std::tr1::function<void()>const& cb = 0, s32 const& delayTime = 0, bool const& isClosed = false) :WaypointAnimatorBase(smgr, 0, 0, duration, loop, cb, delayTime), waypoints_(points), now_waypoint_index_(waypoints_.size()/2) { if( waypoints_.size() < 2 ) { std::cout << "WaypointAnimator: no point to go! (you at least need 2 points!)" << std::endl; return; } if( isClosed && waypoints_.front() != waypoints_.back() ) waypoints_.push_back( waypoints_.front() ); calculateDistances(); }
void DeterministicGameState::precalculateAllDistances() { ROS_DEBUG_STREAM("Pre-calculating all distances"); for (int i = 0 ; i < width_ ; i++) { for (int j = 0 ; j < height_ ; j++) { if( map_[j][i] != WALL ) { precalculated_distances_[std::make_pair(i, j)] = calculateDistances(i, j); } } } ROS_DEBUG_STREAM("Pre-calculated all distances"); }
void Territory::calculateAllDistances(){ if(testingFlags::TEST_CALC_RUNTIME) { Territory::startTime = clock(); } unsigned int iterCount = 0; setDistanceIndices(); for(std::list<Territory*>::iterator iter = allTerritoryList.begin(); iter != allTerritoryList.end(); iter++){ if(testingFlags::TEST_CALC_RUNTIME) { double elapsedTime = double(clock() - Territory::startTime)/CLOCKS_PER_SEC; qDebug() << "calculateAllDistances() at loop " << ++iterCount << ", " << elapsedTime << " seconds from starting..."; } calculateDistances(*iter); } if(testingFlags::TEST_CALC_RUNTIME) { double elapsedTime = double(clock() - Territory::startTime)/CLOCKS_PER_SEC; qDebug() << "calculateAllDistances() took " << elapsedTime << " seconds"; } }
void Territory::calculateDistances(Territory* newTerritory){ std::list<Territory*> frontier; std::set<Territory*> visited; frontier.push_back(newTerritory); calculateDistances(newTerritory, frontier, visited, 0); }