[7836] Fixes for distance range checks. Author: VladimirMangos

* ignore 0.0f min range limit (this correct case when 2 object overlapped)

    Also use int32 for temporary store GetSessionDbLocaleIndex result.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-05-17 10:09:06 -05:00
parent 98e32a041d
commit d99e66d931
2 changed files with 23 additions and 11 deletions

View File

@@ -1311,9 +1311,13 @@ bool WorldObject::IsInRange(WorldObject const* obj, float minRange, float maxRan
float sizefactor = GetObjectSize() + obj->GetObjectSize();
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
// check only for real range
if(minRange > 0.0f)
{
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist;
@@ -1327,9 +1331,13 @@ bool WorldObject::IsInRange2d(float x, float y, float minRange, float maxRange)
float sizefactor = GetObjectSize();
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
// check only for real range
if(minRange > 0.0f)
{
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist;
@@ -1344,9 +1352,13 @@ bool WorldObject::IsInRange3d(float x, float y, float z, float minRange, float m
float sizefactor = GetObjectSize();
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
// check only for real range
if(minRange > 0.0f)
{
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist;