1
0
forked from 0ad/0ad

fix a bug in the HierarchicalPathfinder revealed by changes in 9b0ed97d05, patch by wraitii

This was SVN commit r17293.
This commit is contained in:
mimo 2015-11-20 19:45:48 +00:00
parent 08df9e8533
commit 5b335442fb

View File

@ -21,6 +21,7 @@
#include "graphics/Overlay.h"
#include "ps/Profile.h"
#include "ps/CLogger.h"
// Find the root ID of a region, used by InitRegions
inline u16 RootID(u16 x, const std::vector<u16>& v)
@ -226,8 +227,8 @@ bool HierarchicalPathfinder::Chunk::RegionNearestNavcellInGoal(u16 r, u16 i0, u1
{
iOut = gi;
jOut = gj;
dist2Best = (gi + m_ChunkI*CHUNK_SIZE - i0)*(gi + m_ChunkI*CHUNK_SIZE - i0)
+ (gj + m_ChunkJ*CHUNK_SIZE - j0)*(gj + m_ChunkJ*CHUNK_SIZE - j0);
dist2Best = (gi - i0)*(gi - i0)
+ (gj - j0)*(gj - j0);
return true;
}
return false;
@ -237,10 +238,10 @@ bool HierarchicalPathfinder::Chunk::RegionNearestNavcellInGoal(u16 r, u16 i0, u1
{
// restrict ourselves to a square surrounding the goal.
int radius = (std::max(goal.hw*3/2,goal.hh*3/2) >> Pathfinding::NAVCELL_SIZE_LOG2).ToInt_RoundToInfinity();
int imin = std::max(0, gi-radius);
int imax = std::min((int)CHUNK_SIZE, gi+radius+1);
int jmin = std::max(0, gj-radius);
int jmax = std::min((int)CHUNK_SIZE, gj+radius+1);
int imin = std::max(0, gi-m_ChunkI*CHUNK_SIZE-radius);
int imax = std::min((int)CHUNK_SIZE, gi-m_ChunkI*CHUNK_SIZE+radius+1);
int jmin = std::max(0, gj-m_ChunkJ*CHUNK_SIZE-radius);
int jmax = std::min((int)CHUNK_SIZE, gj-m_ChunkJ*CHUNK_SIZE+radius+1);
bool found = false;
u32 dist2;
for (u16 j = jmin; j < jmax; ++j)