/* * AILayerTransitionRule.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 "../../AIGateway.h" #include "../Actions/BoatActions.h" #include "../Actions/AdventureSpellCastMovementActions.h" #include "../../../../CCallback.h" #include "../../../../lib/mapObjects/MapObjects.h" #include "../../../../lib/pathfinder/PathfindingRules.h" namespace NKAI { namespace AIPathfinding { class AILayerTransitionRule : public LayerTransitionRule { private: CPlayerSpecificInfoCallback * cb; Nullkiller * ai; std::map> virtualBoats; std::shared_ptr nodeStorage; std::map> summonableVirtualBoats; std::map> waterWalkingActions; std::map> airWalkingActions; public: AILayerTransitionRule( CPlayerSpecificInfoCallback * cb, Nullkiller * ai, std::shared_ptr nodeStorage); virtual void process( const PathNodeInfo & source, CDestinationNodeInfo & destination, const PathfinderConfig * pathfinderConfig, CPathfinderHelper * pathfinderHelper) const override; private: void setup(); void collectVirtualBoats(); std::shared_ptr findVirtualBoat( CDestinationNodeInfo & destination, const PathNodeInfo & source) const; bool tryUseSpecialAction( CDestinationNodeInfo & destination, const PathNodeInfo & source, std::shared_ptr specialAction, EPathNodeAction targetAction) const; }; } }