Make the terrain analysis slightly more efficient for pathfinding passability classes, and fix a mistake introduced in 1709353e2c
.
This was SVN commit r16787.
This commit is contained in:
parent
155c6e6ccd
commit
989f164500
@ -564,17 +564,22 @@ void CCmpPathfinder::UpdateGrid()
|
|||||||
|
|
||||||
// Expand the impassability grid, for any class with non-zero clearance,
|
// Expand the impassability grid, for any class with non-zero clearance,
|
||||||
// so that we can stop units getting too close to impassable navcells
|
// so that we can stop units getting too close to impassable navcells
|
||||||
|
std::map<int, u16> clearancesMasks;
|
||||||
for (PathfinderPassability& passability : m_PassClasses)
|
for (PathfinderPassability& passability : m_PassClasses)
|
||||||
{
|
{
|
||||||
if (passability.m_Clearance != fixed::Zero())
|
if (passability.m_Clearance == fixed::Zero())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// TODO: if multiple classes have the same clearance, we should
|
|
||||||
// only bother doing this once for them all
|
|
||||||
int clearance = (passability.m_Clearance / Pathfinding::NAVCELL_SIZE).ToInt_RoundToInfinity();
|
int clearance = (passability.m_Clearance / Pathfinding::NAVCELL_SIZE).ToInt_RoundToInfinity();
|
||||||
if (clearance > 0)
|
|
||||||
ExpandImpassableCells(*m_Grid, clearance, passability.m_Mask);
|
auto it = clearancesMasks.find(clearance);
|
||||||
|
if (it == clearancesMasks.end())
|
||||||
|
clearancesMasks[clearance] = passability.m_Mask;
|
||||||
|
else
|
||||||
|
it->second |= passability.m_Mask;
|
||||||
}
|
}
|
||||||
|
for (auto& pair : clearancesMasks)
|
||||||
|
ExpandImpassableCells(*m_Grid, pair.first, pair.second);
|
||||||
|
|
||||||
// Store the updated terrain-only grid
|
// Store the updated terrain-only grid
|
||||||
*m_TerrainOnlyGrid = *m_Grid;
|
*m_TerrainOnlyGrid = *m_Grid;
|
||||||
|
Loading…
Reference in New Issue
Block a user