Skip to content

Commit fc1bd62

Browse files
authored
Fixes #4347 - Colshape desync on parent move (#4429)
Refactor hit detection methods to use GetPosition()
1 parent c3a1ddf commit fc1bd62

File tree

6 files changed

+16
-12
lines changed

6 files changed

+16
-12
lines changed

Server/mods/deathmatch/logic/CColCircle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ CElement* CColCircle::Clone(bool* bAddEntity, CResource* pResource)
3535
bool CColCircle::DoHitDetection(const CVector& vecNowPosition)
3636
{
3737
// Do a simple distance check between now position and our position
38-
return IsPointNearPoint2D(vecNowPosition, m_vecPosition, m_fRadius);
38+
return IsPointNearPoint2D(vecNowPosition, GetPosition(), m_fRadius);
3939
}
4040

4141
bool CColCircle::ReadSpecialData(const int iLine)

Server/mods/deathmatch/logic/CColCuboid.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ bool CColCuboid::DoHitDetection(const CVector& vecNowPosition)
3030
{
3131
// FIXME: What about radius?
3232

33-
// See if the now position is within our cube
34-
return (vecNowPosition.fX >= m_vecPosition.fX && vecNowPosition.fX <= m_vecPosition.fX + m_vecSize.fX && vecNowPosition.fY >= m_vecPosition.fY &&
35-
vecNowPosition.fY <= m_vecPosition.fY + m_vecSize.fY && vecNowPosition.fZ >= m_vecPosition.fZ &&
36-
vecNowPosition.fZ <= m_vecPosition.fZ + m_vecSize.fZ);
33+
// See if the now position is within our cube
34+
const CVector& vecPosition = GetPosition();
35+
return (vecNowPosition.fX >= vecPosition.fX && vecNowPosition.fX <= vecPosition.fX + m_vecSize.fX && vecNowPosition.fY >= vecPosition.fY &&
36+
vecNowPosition.fY <= vecPosition.fY + m_vecSize.fY && vecNowPosition.fZ >= vecPosition.fZ &&
37+
vecNowPosition.fZ <= vecPosition.fZ + m_vecSize.fZ);
3738
}
3839

3940
bool CColCuboid::ReadSpecialData(const int iLine)

Server/mods/deathmatch/logic/CColPolygon.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,9 @@ void CColPolygon::CalculateRadius(const CVector2D& vecPoint)
160160

161161
bool CColPolygon::IsInBounds(CVector vecPoint)
162162
{
163-
float fDistanceX = vecPoint.fX - m_vecPosition.fX;
164-
float fDistanceY = vecPoint.fY - m_vecPosition.fY;
163+
const CVector& vecPosition = GetPosition();
164+
float fDistanceX = vecPoint.fX - vecPosition.fX;
165+
float fDistanceY = vecPoint.fY - vecPosition.fY;
165166

166167
float fDist = sqrt(fDistanceX * fDistanceX + fDistanceY * fDistanceY);
167168

Server/mods/deathmatch/logic/CColRectangle.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ bool CColRectangle::DoHitDetection(const CVector& vecNowPosition)
3434
// FIXME: What about radius?
3535

3636
// See if the now position is within our cube
37-
return (vecNowPosition.fX >= m_vecPosition.fX && vecNowPosition.fX <= m_vecPosition.fX + m_vecSize.fX && vecNowPosition.fY >= m_vecPosition.fY &&
38-
vecNowPosition.fY <= m_vecPosition.fY + m_vecSize.fY);
37+
const CVector& vecPosition = GetPosition();
38+
return (vecNowPosition.fX >= vecPosition.fX && vecNowPosition.fX <= vecPosition.fX + m_vecSize.fX && vecNowPosition.fY >= vecPosition.fY &&
39+
vecNowPosition.fY <= vecPosition.fY + m_vecSize.fY);
3940
}
4041

4142
bool CColRectangle::ReadSpecialData(const int iLine)

Server/mods/deathmatch/logic/CColSphere.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ CElement* CColSphere::Clone(bool* bAddEntity, CResource* pResource)
3030
bool CColSphere::DoHitDetection(const CVector& vecNowPosition)
3131
{
3232
// Do a simple distance check between now position and our position
33-
return IsPointNearPoint3D(vecNowPosition, m_vecPosition, m_fRadius);
33+
return IsPointNearPoint3D(vecNowPosition, GetPosition(), m_fRadius);
3434
}
3535

3636
bool CColSphere::ReadSpecialData(const int iLine)

Server/mods/deathmatch/logic/CColTube.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ bool CColTube::DoHitDetection(const CVector& vecNowPosition)
3232
// FIXME: What about radius in height?
3333

3434
// First see if we're within the circle. Then see if we're within its height
35-
return (IsPointNearPoint2D(vecNowPosition, m_vecPosition, m_fRadius) && vecNowPosition.fZ >= m_vecPosition.fZ &&
36-
vecNowPosition.fZ <= m_vecPosition.fZ + m_fHeight);
35+
const CVector& vecPosition = GetPosition();
36+
return (IsPointNearPoint2D(vecNowPosition, vecPosition, m_fRadius) && vecNowPosition.fZ >= vecPosition.fZ &&
37+
vecNowPosition.fZ <= vecPosition.fZ + m_fHeight);
3738
}
3839

3940
bool CColTube::ReadSpecialData(const int iLine)

0 commit comments

Comments
 (0)