/* * 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 "../../../lib/pathfinder/CPathfinder.h" namespace AIPathfinding { std::vector> makeRuleset( CPlayerSpecificInfoCallback * cb, VCAI * ai, std::shared_ptr nodeStorage) { std::vector> rules = { std::make_shared(cb, ai, nodeStorage), std::make_shared(), std::make_shared(nodeStorage), std::make_shared(), std::make_shared(nodeStorage), std::make_shared(cb, nodeStorage) }; return rules; } AIPathfinderConfig::AIPathfinderConfig( CPlayerSpecificInfoCallback * cb, VCAI * ai, std::shared_ptr nodeStorage) :PathfinderConfig(nodeStorage, cb, makeRuleset(cb, ai, nodeStorage)), hero(nodeStorage->getHero()) { options.ignoreGuards = false; options.useEmbarkAndDisembark = true; options.useTeleportTwoWay = true; options.useTeleportOneWay = true; options.useTeleportOneWayRandom = true; options.useTeleportWhirlpool = true; } AIPathfinderConfig::~AIPathfinderConfig() = default; CPathfinderHelper * AIPathfinderConfig::getOrCreatePathfinderHelper(const PathNodeInfo & source, CGameState * gs) { if(!helper) { helper.reset(new CPathfinderHelper(gs, hero, options)); } return helper.get(); } }