示例#1
0
文件: territory.cpp 项目: lpalac4/POW
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);
    }
}
示例#2
0
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;
}
示例#3
0
    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");
}
示例#5
0
文件: territory.cpp 项目: lpalac4/POW
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";
    }
}
示例#6
0
文件: territory.cpp 项目: lpalac4/POW
void Territory::calculateDistances(Territory* newTerritory){
    std::list<Territory*> frontier;
    std::set<Territory*> visited;
    frontier.push_back(newTerritory);
    calculateDistances(newTerritory, frontier, visited, 0);
}