| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | /** ExploreNeighbourTile.cpp, part of VCMI engine** Authors: listed in file AUTHORS in main folder** License: GNU General Public License v2.0 or later* Full text of license available in license.txt file, in main folder**/#include "StdInc.h"#include "ExploreNeighbourTile.h"#include "../AIGateway.h"#include "../AIUtility.h"#include "../Helpers/ExplorationHelper.h"namespace NKAI{using namespace Goals;bool ExploreNeighbourTile::operator==(const ExploreNeighbourTile & other) const{	return false;}void ExploreNeighbourTile::accept(AIGateway * ai){	ExplorationHelper h(hero, ai->nullkiller.get(), true);	for(int i = 0; i < tilesToExplore && ai->myCb->getObj(hero->id, false) && hero->movementPointsRemaining() > 0; i++)	{		int3 pos = hero->visitablePos();		float value = 0;		int3 target = int3(-1);		foreach_neighbour(pos, [&](int3 tile)			{				auto pathInfo = ai->myCb->getPathsInfo(hero)->getPathInfo(tile);				if(pathInfo->turns > 0)					return;				if(pathInfo->accessible == EPathAccessibility::ACCESSIBLE)				{					float newValue = h.howManyTilesWillBeDiscovered(tile);					newValue /= std::min(0.1f, pathInfo->getCost());					if(newValue > value)					{						value = newValue;						target = tile;					}				}			});		if(!target.valid())		{			return;		}		auto danger = ai->nullkiller->dangerEvaluator->evaluateDanger(target, hero, true);		if(danger > 0 || !ai->moveHeroToTile(target, hero))		{			return;		}	}}std::string ExploreNeighbourTile::toString() const{	return "Explore neighbour tiles by " + hero->getNameTranslated();}}
 |