mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-14 10:12:59 +02:00
117 lines
2.9 KiB
C++
117 lines
2.9 KiB
C++
|
/*
|
||
|
* PathfindingRules.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
|
||
|
|
||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||
|
|
||
|
struct CDestinationNodeInfo;
|
||
|
struct PathNodeInfo;
|
||
|
|
||
|
class CPathfinderHelper;
|
||
|
class PathfinderConfig;
|
||
|
|
||
|
class IPathfindingRule
|
||
|
{
|
||
|
public:
|
||
|
virtual ~IPathfindingRule() = default;
|
||
|
virtual void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const = 0;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE MovementCostRule : public IPathfindingRule
|
||
|
{
|
||
|
public:
|
||
|
void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const override;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE LayerTransitionRule : public IPathfindingRule
|
||
|
{
|
||
|
public:
|
||
|
void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const override;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE DestinationActionRule : public IPathfindingRule
|
||
|
{
|
||
|
public:
|
||
|
void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const override;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE PathfinderBlockingRule : public IPathfindingRule
|
||
|
{
|
||
|
public:
|
||
|
void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const override;
|
||
|
|
||
|
protected:
|
||
|
enum class BlockingReason
|
||
|
{
|
||
|
NONE = 0,
|
||
|
SOURCE_GUARDED = 1,
|
||
|
DESTINATION_GUARDED = 2,
|
||
|
SOURCE_BLOCKED = 3,
|
||
|
DESTINATION_BLOCKED = 4,
|
||
|
DESTINATION_BLOCKVIS = 5,
|
||
|
DESTINATION_VISIT = 6
|
||
|
};
|
||
|
|
||
|
virtual BlockingReason getBlockingReason(
|
||
|
const PathNodeInfo & source,
|
||
|
const CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
const CPathfinderHelper * pathfinderHelper) const = 0;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE MovementAfterDestinationRule : public PathfinderBlockingRule
|
||
|
{
|
||
|
public:
|
||
|
void process(
|
||
|
const PathNodeInfo & source,
|
||
|
CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
CPathfinderHelper * pathfinderHelper) const override;
|
||
|
|
||
|
protected:
|
||
|
BlockingReason getBlockingReason(
|
||
|
const PathNodeInfo & source,
|
||
|
const CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
const CPathfinderHelper * pathfinderHelper) const override;
|
||
|
};
|
||
|
|
||
|
class DLL_LINKAGE MovementToDestinationRule : public PathfinderBlockingRule
|
||
|
{
|
||
|
protected:
|
||
|
BlockingReason getBlockingReason(
|
||
|
const PathNodeInfo & source,
|
||
|
const CDestinationNodeInfo & destination,
|
||
|
const PathfinderConfig * pathfinderConfig,
|
||
|
const CPathfinderHelper * pathfinderHelper) const override;
|
||
|
};
|
||
|
|
||
|
VCMI_LIB_NAMESPACE_END
|