/* * AIPathfinderConfig.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 "AIPathfinderConfig.h" #include "Rules/AILayerTransitionRule.h" #include "Rules/AIMovementAfterDestinationRule.h" #include "Rules/AIMovementToDestinationRule.h" #include "Rules/AIPreviousNodeRule.h" #include "../Engine//Nullkiller.h" #include "../../../lib/pathfinder/CPathfinder.h" namespace NKAI { namespace AIPathfinding { std::vector> makeRuleset( CPlayerSpecificInfoCallback * cb, Nullkiller * ai, std::shared_ptr nodeStorage, bool allowBypassObjects) { std::vector> rules = { std::make_shared(cb, ai, nodeStorage), std::make_shared(), std::make_shared(nodeStorage, allowBypassObjects), std::make_shared(), std::make_shared(nodeStorage), std::make_shared(ai, cb, nodeStorage, allowBypassObjects) }; return rules; } AIPathfinderConfig::AIPathfinderConfig( CPlayerSpecificInfoCallback * cb, Nullkiller * ai, std::shared_ptr nodeStorage, bool allowBypassObjects) :PathfinderConfig(nodeStorage, makeRuleset(cb, ai, nodeStorage, allowBypassObjects)), aiNodeStorage(nodeStorage) { options.canUseCast = true; options.allowLayerTransitioningAfterBattle = true; options.useTeleportWhirlpool = true; options.forceUseTeleportWhirlpool = true; } AIPathfinderConfig::~AIPathfinderConfig() = default; CPathfinderHelper * AIPathfinderConfig::getOrCreatePathfinderHelper(const PathNodeInfo & source, CGameState * gs) { auto hero = aiNodeStorage->getHero(source.node); auto & helper = pathfindingHelpers[hero]; if(!helper) { helper.reset(new CPathfinderHelper(gs, hero, options)); } return helper.get(); } } }