/* * AIPathfinder.h, 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 * */ #pragma once #include "AINodeStorage.h" #include "ObjectGraph.h" #include "GraphPaths.h" #include "../AIUtility.h" namespace NKAI { class Nullkiller; struct PathfinderSettings { bool useHeroChain; uint8_t scoutTurnDistanceLimit; uint8_t mainTurnDistanceLimit; bool allowBypassObjects; PathfinderSettings() :useHeroChain(false), scoutTurnDistanceLimit(255), mainTurnDistanceLimit(255), allowBypassObjects(true) { } }; class AIPathfinder { private: std::shared_ptr storage; CPlayerSpecificInfoCallback * cb; Nullkiller * ai; static std::map> heroGraphs; public: AIPathfinder(CPlayerSpecificInfoCallback * cb, Nullkiller * ai); void calculatePathInfo(std::vector & paths, const int3 & tile, bool includeGraph = false) const; bool isTileAccessible(const HeroPtr & hero, const int3 & tile) const; void updatePaths(const std::map & heroes, PathfinderSettings pathfinderSettings); void updateGraphs(const std::map & heroes, uint8_t mainScanDepth, uint8_t scoutScanDepth); void calculateQuickPathsWithBlocker(std::vector & result, const std::vector & heroes, const int3 & tile); void init(); std::shared_ptrgetStorage() { return storage; } std::vector getPathInfo(const int3 & tile, bool includeGraph = false) { std::vector result; calculatePathInfo(result, tile, includeGraph); return result; } }; }