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)
#define DEFAULT_COMPONENT_ALLOCATOR(cname)
Definition: Component.h:39
u16 NavcellData
Definition: ICmpObstructionManager.h:32
#define IS_PASSABLE(item, classmask)
Definition: Pathfinding.h:127
u16 pass_class_t
Definition: Pathfinding.h:29
Definition: CCmpPathfinder_Common.h:267
const CCmpPathfinder * m_Pathfinder
Definition: CCmpPathfinder_Common.h:269
pass_class_t m_PassClass
Definition: CCmpPathfinder_Common.h:270
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
AtlasOverlay(const CCmpPathfinder *pathfinder, pass_class_t passClass)
Definition: CCmpPathfinder_Common.h:272
Definition: CCmpPathfinder_Common.h:106
void ClearComputed()
Definition: CCmpPathfinder_Common.h:115
void PrepareForComputation(u16 max)
Definition: CCmpPathfinder_Common.h:127
std::vector< T > m_Requests
Definition: CCmpPathfinder_Common.h:108
std::vector< PathResult > m_Results
Definition: CCmpPathfinder_Common.h:109
Implementation of ICmpPathfinder.
Definition: CCmpPathfinder_Common.h:62
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:857
GridUpdateInformation m_DirtinessInformation
Definition: CCmpPathfinder_Common.h:93
void StartProcessingMoves(bool useMax) override
Tell asynchronous pathfinder threads that they can begin computing paths.
Definition: CCmpPathfinder.cpp:823
void Deserialize(const CParamNode ¶mNode, IDeserializer &deserialize) override
Definition: CCmpPathfinder.cpp:164
void HandleMessage(const CMessage &msg, bool global) override
Definition: CCmpPathfinder.cpp:171
void Serialize(ISerializer &serialize) override
Definition: CCmpPathfinder.cpp:159
static std::string GetSchema()
Definition: CCmpPathfinder_Common.h:147
u16 m_GridSize
Definition: CCmpPathfinder_Common.h:87
void MinimalTerrainUpdate(int itile0, int jtile0, int itile1, int jtile1)
Updates the terrain-only grid without updating the dirtiness informations.
Definition: CCmpPathfinder.cpp:574
GridUpdateInformation m_AIPathfinderDirtinessInformation
Definition: CCmpPathfinder_Common.h:95
AtlasOverlay * m_AtlasOverlay
Definition: CCmpPathfinder_Common.h:145
entity_pos_t GetMaximumClearance() const override
Get the larger clearance in all passability classes.
Definition: CCmpPathfinder_Common.h:183
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
void SetDebugOverlay(bool enabled) override
Toggle the storage and rendering of debug info.
Definition: CCmpPathfinder.cpp:216
void GetPassabilityClasses(std::map< std::string, pass_class_t > &passClasses) const override
Get the list of all known passability classes.
Definition: CCmpPathfinder.cpp:256
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:579
u16 m_MaxSameTurnMoves
Definition: CCmpPathfinder_Common.h:81
std::vector< Future< void > > m_Futures
Definition: CCmpPathfinder_Common.h:103
void UpdateGrid() override
Regenerates the grid based on the current obstruction list, if necessary.
Definition: CCmpPathfinder.cpp:481
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:211
static void ClassInit(CComponentManager &componentManager)
Definition: CCmpPathfinder_Common.h:64
void SendRequestedPaths() override
Finish computing asynchronous path requests and send the CMessagePathResult messages.
Definition: CCmpPathfinder.cpp:790
void SetHierDebugOverlay(bool enabled) override
Toggle the storage and rendering of debug info for the hierarchical pathfinder.
Definition: CCmpPathfinder.cpp:222
std::vector< PathfinderPassability > m_PassClasses
Definition: CCmpPathfinder_Common.h:80
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:744
Grid< NavcellData > * m_TerrainOnlyGrid
Definition: CCmpPathfinder_Common.h:89
void SerializeCommon(S &serialize)
Definition: CCmpPathfinder.cpp:151
void SetAtlasOverlay(bool enable, pass_class_t passClass=0) override
Sets up the pathfinder passability overlay in Atlas.
Definition: CCmpPathfinder.cpp:232
void RenderSubmit(SceneCollector &collector)
Definition: CCmpPathfinder.cpp:205
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:875
const PathfinderPassability * GetPassabilityFromMask(pass_class_t passClass) const
Definition: CCmpPathfinder.cpp:272
std::unique_ptr< LongPathfinder > m_LongPathfinder
Definition: CCmpPathfinder_Common.h:100
pass_class_t GetPassabilityClass(const std::string &name) const override
Get the tag for a given passability class name.
Definition: CCmpPathfinder.cpp:244
entity_pos_t GetClearance(pass_class_t passClass) const override
Definition: CCmpPathfinder_Common.h:174
void ComputePathImmediate(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass, WaypointPath &ret) const override
Definition: CCmpPathfinder.cpp:753
std::map< std::string, pass_class_t > m_PassClassMasks
Definition: CCmpPathfinder_Common.h:79
std::vector< T > GetMovesToProcess(std::vector< T > &requests, bool useMax=false, size_t maxMoves=0)
PathRequests< ShortPathRequest > m_ShortPathRequests
Definition: CCmpPathfinder_Common.h:141
bool IsGoalReachable(entity_pos_t x0, entity_pos_t z0, const PathGoal &goal, pass_class_t passClass) override
Definition: CCmpPathfinder.cpp:845
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:900
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:737
void FlushAIPathfinderDirtinessInformation() override
Definition: CCmpPathfinder_Common.h:201
void Init(const CParamNode ¶mNode) override
Definition: CCmpPathfinder.cpp:50
~CCmpPathfinder()
Definition: CCmpPathfinder.cpp:102
std::unique_ptr< HierarchicalPathfinder > m_PathfinderHier
Definition: CCmpPathfinder_Common.h:99
void GetDebugData(u32 &steps, double &time, Grid< u8 > &grid) const override
Returns some stats about the last ComputePath.
Definition: CCmpPathfinder.cpp:227
void PushRequestsToWorkers(std::vector< T > &from)
Grid< u16 > ComputeShoreGrid(bool expandOnWater=false) override
Get a grid representing the distance to the shore of the terrain tile.
Definition: CCmpPathfinder.cpp:364
std::vector< VertexPathfinder > m_VertexPathfinders
Definition: CCmpPathfinder_Common.h:98
u32 m_NextAsyncTicket
Definition: CCmpPathfinder_Common.h:143
bool m_TerrainDirty
Definition: CCmpPathfinder_Common.h:96
void Deinit() override
Definition: CCmpPathfinder.cpp:104
Grid< NavcellData > * m_Grid
Definition: CCmpPathfinder_Common.h:88
WaypointPath ComputeShortPathImmediate(const ShortPathRequest &request) const override
Definition: CCmpPathfinder.cpp:758
PathRequests< LongPathRequest > m_LongPathRequests
Definition: CCmpPathfinder_Common.h:140
const Grid< NavcellData > & GetPassabilityGrid() override
Definition: CCmpPathfinder.cpp:283
Definition: ComponentManager.h:40
void SubscribeToMessageType(MessageTypeId mtid)
Subscribe the current component type to the given message type.
Definition: ComponentManager.cpp:551
A simple fixed-point number class.
Definition: Fixed.h:120
static CFixed Zero()
Definition: Fixed.h:131
An entity initialisation parameter node.
Definition: ParamNode.h:151
Corresponds to std::future.
Definition: Future.h:165
Basic 2D array, intended for storing tile data, plus support for lazy updates by ICmpObstructionManag...
Definition: Grid.h:38
T & get(std::pair< u16, u16 > coords)
Definition: Grid.h:222
Definition: HierarchicalPathfinder.h:61
EFoundationCheck
Definition: ICmpObstruction.h:33
Pathfinder algorithms.
Definition: ICmpPathfinder.h:60
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:35
Interface for ICmpObstructionManager Test functions to filter out unwanted shapes.
Definition: ICmpObstructionManager.h:352
Serialization interface; see serialization overview.
Definition: ISerializer.h:121
Definition: LongPathfinder.h:165
Pathfinder goal.
Definition: PathGoal.h:33
Definition: Pathfinding.h:214
fixed m_Clearance
Definition: Pathfinding.h:225
This interface accepts renderable objects.
Definition: Scene.h:90
Base class for texture-based terrain overlays, with an arbitrary number of texels per terrain tile,...
Definition: TerrainOverlay.h:198
Definition: VertexPathfinder.h:76
Definition: Pathfinding.cpp:28
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
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
Definition: ShaderDefines.cpp:31
#define T(string_literal)
Definition: secure_crt.cpp:77
u32 entity_id_t
Entity ID type.
Definition: Entity.h:29
u8 R
Definition: SColor.h:32
u8 B
Definition: SColor.h:34
u8 G
Definition: SColor.h:33
u8 A
Definition: SColor.h:35
Definition: Pathfinding.h:44
Returned path.
Definition: Pathfinding.h:67
uint8_t u8
Definition: types.h:37
uint16_t u16
Definition: types.h:38
uint32_t u32
Definition: types.h:39