GLvoid CImp::checkNearestForDigging() { if(impState != IS_IDLE) return; std::vector<CBlock*> markedBlocks,possBlocks; std::vector<CBlock*>::iterator markedBlocksIter; CBlock *block; if(CV_GAME_MANAGER->getLevelManager()->isBlockTypeNear(CV_BLOCK_TYPE_EARTH_ID,cml::vector2i((int)floor(position[0]/CV_BLOCK_WIDTH),(int)floor(position[2]/CV_BLOCK_DEPTH)),true,CV_PLAYER_UNDEFINED,&markedBlocks)) { int oldSearchLimit = CV_GAME_MANAGER->getPathManager()->getSearchLimit(); CV_GAME_MANAGER->getPathManager()->setSearchLimit(2); bool oldDiagonalMoves = CV_GAME_MANAGER->getPathManager()->getDiagonalMoves(); CV_GAME_MANAGER->getPathManager()->setDiagonalMoves(false); for(markedBlocksIter=markedBlocks.begin(); markedBlocksIter!=markedBlocks.end(); markedBlocksIter++) { block = *markedBlocksIter; if(!block->isMarked()) continue; path.clear(); if(CV_GAME_MANAGER->getPathManager()->findPath(cml::vector2i((int)floor(position[0]/CV_BLOCK_WIDTH),(int)floor(position[2]/CV_BLOCK_DEPTH)),block->getLogicalPosition(),&path)) possBlocks.push_back(block); } CV_GAME_MANAGER->getPathManager()->setSearchLimit(oldSearchLimit); CV_GAME_MANAGER->getPathManager()->setDiagonalMoves(oldDiagonalMoves); if(possBlocks.size()>0) { GLint blockNum = rand()%possBlocks.size(); currBlock = possBlocks[blockNum]; path.clear(); impState = IS_AT_DIGGING_BLOCK; return; } } }