GLvoid CImp::checkNearestForClaiming() { if(m_impState != IS_IDLE) return; std::vector<CBlock*> unclaimedBlocks,claimedBlocks,possBlocks; std::vector<CBlock*>::iterator unclaimedBlocksIter, claimedBlocksIter; CBlock *block; if(CV_GAME_MANAGER->getLevelManager()->isBlockTypeNear(CV_BLOCK_TYPE_UNCLAIMED_LAND_ID,cml::vector2i((int)floor(mPosition[0]/CV_BLOCK_WIDTH),(int)floor(mPosition[2]/CV_BLOCK_DEPTH)),true,CV_PLAYER_UNDEFINED,&unclaimedBlocks)) { int oldSearchLimit = CV_GAME_MANAGER->getPathManager()->getSearchLimit(); CV_GAME_MANAGER->getPathManager()->setSearchLimit(2); for(unclaimedBlocksIter=unclaimedBlocks.begin(); unclaimedBlocksIter!=unclaimedBlocks.end(); unclaimedBlocksIter++) { block = *unclaimedBlocksIter; if(block->isTaken()) continue; claimedBlocks.clear(); if(CV_GAME_MANAGER->getLevelManager()->isBlockClaimable(block->getLogicalPosition(),this->getOwner(),&claimedBlocks)) { path.clear(); if(CV_GAME_MANAGER->getPathManager()->findPath(cml::vector2i((int)floor(mPosition[0]/CV_BLOCK_WIDTH),(int)floor(mPosition[2]/CV_BLOCK_DEPTH)),block->getLogicalPosition(),&path)) possBlocks.push_back(block); } } CV_GAME_MANAGER->getPathManager()->setSearchLimit(oldSearchLimit); if(possBlocks.size()>0) { GLint blockNum = rand()%possBlocks.size(); path.clear(); mCurrentBlock = possBlocks[blockNum]; path.push_back(mCurrentBlock->getLogicalPosition()); mCurrentBlock->setTaken(true); m_impState = IS_GOING_TO_CLAIMING_DESTINATION; return; } } }