18 #ifndef INCLUDED_CCMPPATHFINDER_COMMON 19 #define INCLUDED_CCMPPATHFINDER_COMMON 53 #define PATHFIND_DEBUG 0 55 #define PATHFIND_DEBUG 1 111 std::atomic<size_t> m_NextPathToCompute = 0;
113 std::atomic<bool> m_ComputeDone =
true;
117 if (m_Results.size() == m_Requests.size())
120 m_Requests.erase(m_Requests.end() - m_Results.size(), m_Requests.end());
129 size_t n = m_Requests.size();
132 m_NextPathToCompute = 0;
134 m_ComputeDone = n == 0;
138 void Compute(
const CCmpPathfinder& cmpPathfinder,
const U& pathfinder);
149 return "<a:component type='system'/><empty/>";
169 std::map<std::string, pass_class_t>& nonPathfindingPassClasses,
170 std::map<std::string, pass_class_t>& pathfindingPassClasses)
const override;
188 if (passability.m_Clearance > max)
189 max = passability.m_Clearance;
240 template <
typename T>
241 std::vector<T>
GetMovesToProcess(std::vector<T>& requests,
bool useMax =
false,
size_t maxMoves = 0);
243 template <
typename T>
261 void TerrainUpdateHelper(
bool expandPassability =
true,
int itile0 = -1,
int jtile0 = -1,
int itile1 = -1,
int jtile1 = -1);
281 for (
size_t j = 0; j < h; ++j)
283 for (
size_t i = 0; i < w; ++i)
298 #endif // INCLUDED_CCMPPATHFINDER_COMMON PathRequests< ShortPathRequest > m_ShortPathRequests
Definition: CCmpPathfinder_Common.h:141
An entity initialisation parameter node.
Definition: ParamNode.h:150
void SerializeCommon(S &serialize)
Definition: CCmpPathfinder.cpp:154
void SubscribeToMessageType(MessageTypeId mtid)
Subscribe the current component type to the given message type.
Definition: ComponentManager.cpp:549
A simple fixed-point number class.
Definition: Fixed.h:119
bool CheckMovement(const IObstructionTestFilter &filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, pass_class_t passClass) const override
Check whether the given movement line is valid and doesn't hit any obstructions or impassable terrain...
Definition: CCmpPathfinder.cpp:860
entity_pos_t GetClearance(pass_class_t passClass) const override
Definition: CCmpPathfinder_Common.h:174
Interface for ICmpObstructionManager Test functions to filter out unwanted shapes.
Definition: ICmpObstructionManager.h:351
pass_class_t m_PassClass
Definition: CCmpPathfinder_Common.h:270
static void ClassInit(CComponentManager &componentManager)
Definition: CCmpPathfinder_Common.h:64
u8 G
Definition: SColor.h:33
Implementation of ICmpPathfinder.
Definition: CCmpPathfinder_Common.h:61
u16 pass_class_t
Definition: Pathfinding.h:27
T & get(std::pair< u16, u16 > coords)
Definition: Grid.h:222
void ClearComputed()
Definition: CCmpPathfinder_Common.h:115
static CFixed Zero()
Definition: Fixed.h:131
Definition: Pathfinding.cpp:27
static std::string GetSchema()
Definition: CCmpPathfinder_Common.h:147
Definition: Pathfinding.h:213
Returned path.
Definition: Pathfinding.h:66
std::vector< PathfinderPassability > m_PassClasses
Definition: CCmpPathfinder_Common.h:80
void GetDebugData(u32 &steps, double &time, Grid< u8 > &grid) const override
Returns some stats about the last ComputePath.
Definition: CCmpPathfinder.cpp:230
uint16_t u16
Definition: types.h:38
const CCmpPathfinder * m_Pathfinder
Definition: CCmpPathfinder_Common.h:269
std::vector< T > GetMovesToProcess(std::vector< T > &requests, bool useMax=false, size_t maxMoves=0)
Serialization interface; see serialization overview.
Definition: ISerializer.h:120
#define IS_PASSABLE(item, classmask)
Definition: Pathfinding.h:127
ICmpObstruction::EFoundationCheck CheckUnitPlacement(const IObstructionTestFilter &filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool onlyCenterPoint) const override
Check whether a unit placed here is valid and doesn't hit any obstructions or impassable terrain...
Definition: CCmpPathfinder.cpp:878
void StartProcessingMoves(bool useMax) override
Tell asynchronous pathfinder threads that they can begin computing paths.
Definition: CCmpPathfinder.cpp:826
pass_class_t GetPassabilityClass(const std::string &name) const override
Get the tag for a given passability class name.
Definition: CCmpPathfinder.cpp:247
void SetHierDebugOverlay(bool enabled) override
Toggle the storage and rendering of debug info for the hierarchical pathfinder.
Definition: CCmpPathfinder.cpp:225
std::vector< Future< void > > m_Futures
Definition: CCmpPathfinder_Common.h:103
Definition: ShaderDefines.cpp:30
Pathfinder goal.
Definition: PathGoal.h:32
ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter &filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass) const override
Check whether a building placed here is valid and doesn't hit any obstructions or impassable terrain...
Definition: CCmpPathfinder.cpp:903
Basic 2D array, intended for storing tile data, plus support for lazy updates by ICmpObstructionManag...
Definition: TerritoryBoundary.h:27
EFoundationCheck
Definition: ICmpObstruction.h:33
std::vector< T > m_Requests
Definition: CCmpPathfinder_Common.h:108
u8 B
Definition: SColor.h:34
void Init(const CParamNode ¶mNode) override
Definition: CCmpPathfinder.cpp:50
Definition: Components.h:83
uint8_t u8
Definition: types.h:37
Pathfinder algorithms.
Definition: ICmpPathfinder.h:59
void FlushAIPathfinderDirtinessInformation() override
Definition: CCmpPathfinder_Common.h:201
GridUpdateInformation m_AIPathfinderDirtinessInformation
Definition: CCmpPathfinder_Common.h:95
void RenderSubmit(SceneCollector &collector)
Definition: CCmpPathfinder.cpp:208
void MinimalTerrainUpdate(int itile0, int jtile0, int itile1, int jtile1)
Updates the terrain-only grid without updating the dirtiness informations.
Definition: CCmpPathfinder.cpp:577
This interface accepts renderable objects.
Definition: Scene.h:89
u8 A
Definition: SColor.h:35
WaypointPath ComputeShortPathImmediate(const ShortPathRequest &request) const override
Definition: CCmpPathfinder.cpp:761
Definition: LongPathfinder.h:164
Grid< NavcellData > * m_Grid
Definition: CCmpPathfinder_Common.h:88
Definition: Components.h:70
uint32_t u32
Definition: types.h:39
Definition: Pathfinding.h:43
Definition: HierarchicalPathfinder.h:60
Definition: ComponentManager.h:39
Grid< NavcellData > * m_TerrainOnlyGrid
Definition: CCmpPathfinder_Common.h:89
std::unique_ptr< HierarchicalPathfinder > m_PathfinderHier
Definition: CCmpPathfinder_Common.h:99
u16 m_MaxSameTurnMoves
Definition: CCmpPathfinder_Common.h:81
fixed m_Clearance
Definition: Pathfinding.h:225
Definition: VertexPathfinder.h:75
void SetDebugPath(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass) override
If the debug overlay is enabled, render the path that will computed by ComputePath.
Definition: CCmpPathfinder.cpp:214
Definition: Components.h:85
u16 m_GridSize
Definition: CCmpPathfinder_Common.h:87
Definition: Components.h:81
u32 ComputeShortPathAsync(entity_pos_t x0, entity_pos_t z0, entity_pos_t clearance, entity_pos_t range, const PathGoal &goal, pass_class_t passClass, bool avoidMovingUnits, entity_id_t controller, entity_id_t notify) override
Request a short path computation, asynchronously.
Definition: CCmpPathfinder.cpp:747
entity_pos_t GetMaximumClearance() const override
Get the larger clearance in all passability classes.
Definition: CCmpPathfinder_Common.h:183
void GetPassabilityClasses(std::map< std::string, pass_class_t > &passClasses) const override
Get the list of all known passability classes.
Definition: CCmpPathfinder.cpp:259
u16 NavcellData
Definition: ICmpObstructionManager.h:32
void SetDebugOverlay(bool enabled) override
Toggle the storage and rendering of debug info.
Definition: CCmpPathfinder.cpp:219
Corresponds to std::future.
Definition: Future.h:145
const GridUpdateInformation & GetAIPathfinderDirtinessInformation() const override
Get the accumulated dirtiness information since the last time the AI accessed and flushed it...
Definition: CCmpPathfinder_Common.h:196
#define DEFAULT_COMPONENT_ALLOCATOR(cname)
Definition: Component.h:39
AtlasOverlay * m_AtlasOverlay
Definition: CCmpPathfinder_Common.h:145
u8 R
Definition: SColor.h:32
Definition: CCmpPathfinder_Common.h:266
void PushRequestsToWorkers(std::vector< T > &from)
#define T(string_literal)
Definition: secure_crt.cpp:77
std::map< std::string, pass_class_t > m_PassClassMasks
Definition: CCmpPathfinder_Common.h:79
~CCmpPathfinder()
Definition: CCmpPathfinder.cpp:102
bool IsGoalReachable(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass) override
Definition: CCmpPathfinder.cpp:848
constexpr entity_pos_t CLEARANCE_EXTENSION_RADIUS
To make sure the long-range pathfinder is more strict than the short-range one, we need to slightly o...
Definition: Pathfinding.h:157
void ComputePathImmediate(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass, WaypointPath &ret) const override
Definition: CCmpPathfinder.cpp:756
const Grid< NavcellData > & GetPassabilityGrid() override
Definition: CCmpPathfinder.cpp:286
constexpr int NAVCELLS_PER_TERRAIN_TILE
The terrain grid is coarser, and it is often convenient to convert from one to the other...
Definition: Pathfinding.h:150
GridUpdateInformation m_DirtinessInformation
Definition: CCmpPathfinder_Common.h:93
std::unique_ptr< LongPathfinder > m_LongPathfinder
Definition: CCmpPathfinder_Common.h:100
void PrepareForComputation(u16 max)
Definition: CCmpPathfinder_Common.h:127
Definition: CCmpPathfinder_Common.h:106
void BuildTextureRGBA(u8 *data, size_t w, size_t h) override
Called each frame to generate the texture to render on the terrain.
Definition: CCmpPathfinder_Common.h:277
PathRequests< LongPathRequest > m_LongPathRequests
Definition: CCmpPathfinder_Common.h:140
Base class for texture-based terrain overlays, with an arbitrary number of texels per terrain tile...
Definition: TerrainOverlay.h:197
void Deinit() override
Definition: CCmpPathfinder.cpp:104
void Deserialize(const CParamNode ¶mNode, IDeserializer &deserialize) override
Definition: CCmpPathfinder.cpp:167
Definition: Components.h:72
void HandleMessage(const CMessage &msg, bool global) override
Definition: CCmpPathfinder.cpp:174
void SetAtlasOverlay(bool enable, pass_class_t passClass=0) override
Sets up the pathfinder passability overlay in Atlas.
Definition: CCmpPathfinder.cpp:235
std::vector< VertexPathfinder > m_VertexPathfinders
Definition: CCmpPathfinder_Common.h:98
void UpdateGrid() override
Regenerates the grid based on the current obstruction list, if necessary.
Definition: CCmpPathfinder.cpp:484
AtlasOverlay(const CCmpPathfinder *pathfinder, pass_class_t passClass)
Definition: CCmpPathfinder_Common.h:272
Grid< u16 > ComputeShoreGrid(bool expandOnWater=false) override
Get a grid representing the distance to the shore of the terrain tile.
Definition: CCmpPathfinder.cpp:367
const PathfinderPassability * GetPassabilityFromMask(pass_class_t passClass) const
Definition: CCmpPathfinder.cpp:275
std::vector< PathResult > m_Results
Definition: CCmpPathfinder_Common.h:109
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
bool m_TerrainDirty
Definition: CCmpPathfinder_Common.h:96
u32 ComputePathAsync(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass, entity_id_t notify) override
Asynchronous version of ComputePath.
Definition: CCmpPathfinder.cpp:740
u32 m_NextAsyncTicket
Definition: CCmpPathfinder_Common.h:143
void Serialize(ISerializer &serialize) override
Definition: CCmpPathfinder.cpp:162
void SendRequestedPaths() override
Finish computing asynchronous path requests and send the CMessagePathResult messages.
Definition: CCmpPathfinder.cpp:793
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34
void TerrainUpdateHelper(bool expandPassability=true, int itile0=-1, int jtile0=-1, int itile1=-1, int jtile1=-1)
Regenerates the terrain-only grid.
Definition: CCmpPathfinder.cpp:582