Merge pull request #3146 from Havenard/fix0001
Reimplement WorldObject::IsInBetween() to work as intented.
This commit is contained in:
@@ -1526,17 +1526,22 @@ bool Position::HasInArc(float arc, const Position* obj) const
|
|||||||
|
|
||||||
bool WorldObject::IsInBetween(const WorldObject* obj1, const WorldObject* obj2, float size) const
|
bool WorldObject::IsInBetween(const WorldObject* obj1, const WorldObject* obj2, float size) const
|
||||||
{
|
{
|
||||||
if (GetPositionX() > std::max(obj1->GetPositionX(), obj2->GetPositionX())
|
if (!obj1 || !obj2)
|
||||||
|| GetPositionX() < std::min(obj1->GetPositionX(), obj2->GetPositionX())
|
return false;
|
||||||
|| GetPositionY() > std::max(obj1->GetPositionY(), obj2->GetPositionY())
|
|
||||||
|| GetPositionY() < std::min(obj1->GetPositionY(), obj2->GetPositionY()))
|
float dist = GetExactDist2d(obj1->GetPositionX(), obj1->GetPositionY());
|
||||||
|
|
||||||
|
// not using sqrt() for performance
|
||||||
|
if ((dist * dist) >= obj1->GetExactDist2dSq(obj2->GetPositionX(), obj2->GetPositionY()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!size)
|
if (!size)
|
||||||
size = GetObjectSize() / 2;
|
size = GetObjectSize() / 2;
|
||||||
|
|
||||||
float angle = obj1->GetAngle(this) - obj1->GetAngle(obj2);
|
float angle = obj1->GetAngle(obj2);
|
||||||
return fabs(sin(angle)) * GetExactDist2d(obj1->GetPositionX(), obj1->GetPositionY()) < size;
|
|
||||||
|
// not using sqrt() for performance
|
||||||
|
return (size * size) >= GetExactDist2dSq(obj1->GetPositionX() + cos(angle) * dist, obj1->GetPositionY() + sin(angle) * dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WorldObject::isInFront(WorldObject const* target, float distance, float arc) const
|
bool WorldObject::isInFront(WorldObject const* target, float distance, float arc) const
|
||||||
|
|||||||
Reference in New Issue
Block a user