2018-08-12 13:31:31 +02:00
|
|
|
/*
|
|
|
|
* AIhelper.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 "VCAI.h"
|
|
|
|
#include "AINodeStorage.h"
|
|
|
|
|
2018-10-07 13:51:27 +02:00
|
|
|
class IPathfindingManager
|
2018-08-12 13:31:31 +02:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual ~IPathfindingManager() = default;
|
2018-10-09 21:31:44 +02:00
|
|
|
virtual void init(CPlayerSpecificInfoCallback * CB) = 0;
|
2018-08-12 13:31:31 +02:00
|
|
|
virtual void setAI(VCAI * AI) = 0;
|
|
|
|
|
|
|
|
virtual void resetPaths() = 0;
|
|
|
|
virtual Goals::TGoalVec howToVisitTile(HeroPtr hero, int3 tile, bool allowGatherArmy = true) = 0;
|
|
|
|
virtual Goals::TGoalVec howToVisitObj(HeroPtr hero, ObjectIdRef obj, bool allowGatherArmy = true) = 0;
|
|
|
|
virtual Goals::TGoalVec howToVisitTile(int3 tile) = 0;
|
|
|
|
virtual Goals::TGoalVec howToVisitObj(ObjectIdRef obj) = 0;
|
|
|
|
virtual std::vector<AIPath> getPathsToTile(HeroPtr hero, int3 tile) = 0;
|
|
|
|
};
|
|
|
|
|
2018-10-07 13:51:27 +02:00
|
|
|
class PathfindingManager : public IPathfindingManager
|
2018-08-12 13:31:31 +02:00
|
|
|
{
|
|
|
|
friend class AIhelper;
|
|
|
|
|
|
|
|
private:
|
|
|
|
CPlayerSpecificInfoCallback * cb; //this is enough, but we downcast from CCallback
|
|
|
|
VCAI * ai;
|
|
|
|
std::unique_ptr<AIPathfinder> pathfinder;
|
|
|
|
|
|
|
|
public:
|
2018-10-07 13:51:27 +02:00
|
|
|
PathfindingManager() = default;
|
|
|
|
PathfindingManager(CPlayerSpecificInfoCallback * CB, VCAI * AI = nullptr); //for tests only
|
2018-08-12 13:31:31 +02:00
|
|
|
|
|
|
|
Goals::TGoalVec howToVisitTile(HeroPtr hero, int3 tile, bool allowGatherArmy = true) override;
|
|
|
|
Goals::TGoalVec howToVisitObj(HeroPtr hero, ObjectIdRef obj, bool allowGatherArmy = true) override;
|
|
|
|
Goals::TGoalVec howToVisitTile(int3 tile) override;
|
|
|
|
Goals::TGoalVec howToVisitObj(ObjectIdRef obj) override;
|
|
|
|
std::vector<AIPath> getPathsToTile(HeroPtr hero, int3 tile) override;
|
|
|
|
void resetPaths() override;
|
|
|
|
|
|
|
|
private:
|
2018-10-09 21:31:44 +02:00
|
|
|
void init(CPlayerSpecificInfoCallback * CB) override;
|
2018-08-12 13:31:31 +02:00
|
|
|
void setAI(VCAI * AI) override;
|
|
|
|
|
|
|
|
Goals::TGoalVec findPath(
|
|
|
|
HeroPtr hero,
|
|
|
|
crint3 dest,
|
|
|
|
bool allowGatherArmy,
|
|
|
|
const std::function<Goals::TSubgoal(int3)> goalFactory);
|
|
|
|
|
|
|
|
Goals::TSubgoal clearWayTo(HeroPtr hero, int3 firstTileToGet);
|
|
|
|
};
|