Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/helpers/HierarchicalPathfinder.cpp
Show First 20 Lines • Show All 355 Lines • ▼ Show 20 Lines | void HierarchicalPathfinder::RenderSubmit(SceneCollector& collector) | ||||
for (size_t i = 0; i < m_DebugOverlayLines.size(); ++i) | for (size_t i = 0; i < m_DebugOverlayLines.size(); ++i) | ||||
collector.Submit(&m_DebugOverlayLines[i]); | collector.Submit(&m_DebugOverlayLines[i]); | ||||
} | } | ||||
void HierarchicalPathfinder::Recompute(Grid<NavcellData>* grid, | void HierarchicalPathfinder::Recompute(Grid<NavcellData>* grid, | ||||
const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, | const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, | ||||
const std::map<std::string, pass_class_t>& pathfindingPassClassMasks) | const std::map<std::string, pass_class_t>& pathfindingPassClassMasks) | ||||
{ | { | ||||
PROFILE2("Hierarchical Recompute"); | PROFILE3("Hierarchical Recompute"); | ||||
m_PassClassMasks = pathfindingPassClassMasks; | m_PassClassMasks = pathfindingPassClassMasks; | ||||
std::map<std::string, pass_class_t> allPassClasses = m_PassClassMasks; | std::map<std::string, pass_class_t> allPassClasses = m_PassClassMasks; | ||||
allPassClasses.insert(nonPathfindingPassClassMasks.begin(), nonPathfindingPassClassMasks.end()); | allPassClasses.insert(nonPathfindingPassClassMasks.begin(), nonPathfindingPassClassMasks.end()); | ||||
m_W = grid->m_W; | m_W = grid->m_W; | ||||
m_H = grid->m_H; | m_H = grid->m_H; | ||||
▲ Show 20 Lines • Show All 212 Lines • ▼ Show 20 Lines | HierarchicalPathfinder::RegionID HierarchicalPathfinder::Get(u16 i, u16 j, pass_class_t passClass) const | ||||
int ci = i / CHUNK_SIZE; | int ci = i / CHUNK_SIZE; | ||||
int cj = j / CHUNK_SIZE; | int cj = j / CHUNK_SIZE; | ||||
ENSURE(ci < m_ChunksW && cj < m_ChunksH); | ENSURE(ci < m_ChunksW && cj < m_ChunksH); | ||||
return m_Chunks.at(passClass)[cj*m_ChunksW + ci].Get(i % CHUNK_SIZE, j % CHUNK_SIZE); | return m_Chunks.at(passClass)[cj*m_ChunksW + ci].Get(i % CHUNK_SIZE, j % CHUNK_SIZE); | ||||
} | } | ||||
void HierarchicalPathfinder::MakeGoalReachable(u16 i0, u16 j0, PathGoal& goal, pass_class_t passClass) const | void HierarchicalPathfinder::MakeGoalReachable(u16 i0, u16 j0, PathGoal& goal, pass_class_t passClass) const | ||||
{ | { | ||||
PROFILE2("MakeGoalReachable"); | PROFILE3("MakeGoalReachable"); | ||||
RegionID source = Get(i0, j0, passClass); | RegionID source = Get(i0, j0, passClass); | ||||
// Find everywhere that's reachable | // Find everywhere that's reachable | ||||
std::set<RegionID> reachableRegions; | std::set<RegionID> reachableRegions; | ||||
FindReachableRegions(source, reachableRegions, passClass); | FindReachableRegions(source, reachableRegions, passClass); | ||||
// Check whether any reachable region contains the goal | // Check whether any reachable region contains the goal | ||||
// And get the navcell that's the closest to the point | // And get the navcell that's the closest to the point | ||||
▲ Show 20 Lines • Show All 202 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator