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