AILayerTransitionRule.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * AILayerTransitionRule.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "../AINodeStorage.h"
  12. #include "../../AIGateway.h"
  13. #include "../Actions/BoatActions.h"
  14. #include "../../../../CCallback.h"
  15. #include "../../../../lib/mapObjects/MapObjects.h"
  16. namespace NKAI
  17. {
  18. namespace AIPathfinding
  19. {
  20. class AILayerTransitionRule : public LayerTransitionRule
  21. {
  22. private:
  23. CPlayerSpecificInfoCallback * cb;
  24. Nullkiller * ai;
  25. std::map<int3, std::shared_ptr<const BuildBoatAction>> virtualBoats;
  26. std::shared_ptr<AINodeStorage> nodeStorage;
  27. std::map<const CGHeroInstance *, std::shared_ptr<const SummonBoatAction>> summonableVirtualBoats;
  28. public:
  29. AILayerTransitionRule(CPlayerSpecificInfoCallback * cb, Nullkiller * ai, std::shared_ptr<AINodeStorage> nodeStorage);
  30. virtual void process(
  31. const PathNodeInfo & source,
  32. CDestinationNodeInfo & destination,
  33. const PathfinderConfig * pathfinderConfig,
  34. CPathfinderHelper * pathfinderHelper) const override;
  35. private:
  36. void setup();
  37. std::shared_ptr<const VirtualBoatAction> findVirtualBoat(
  38. CDestinationNodeInfo & destination,
  39. const PathNodeInfo & source) const;
  40. bool tryEmbarkVirtualBoat(
  41. CDestinationNodeInfo & destination,
  42. const PathNodeInfo & source,
  43. std::shared_ptr<const VirtualBoatAction> virtualBoat) const;
  44. };
  45. }
  46. }