aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-02-07 12:47:39 +0100
committerShauren <shauren.trinity@gmail.com>2025-02-07 12:47:39 +0100
commit0f5d634e381b2bf6d4062c0ebd31551d98f64a32 (patch)
tree4c0df8d9507048d7768d0af60f4eda22fba67c64 /src/server/game
parentfc4ce2af88cdcf2433555e73f5c9a37139062734 (diff)
Scripts: Remove unneccessary DoublePosition from AreaBoundary
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Maps/AreaBoundary.cpp68
-rw-r--r--src/server/game/Maps/AreaBoundary.h165
2 files changed, 110 insertions, 123 deletions
diff --git a/src/server/game/Maps/AreaBoundary.cpp b/src/server/game/Maps/AreaBoundary.cpp
index 720dc8cb4b7..469e6d54a8b 100644
--- a/src/server/game/Maps/AreaBoundary.cpp
+++ b/src/server/game/Maps/AreaBoundary.cpp
@@ -16,52 +16,53 @@
*/
#include "AreaBoundary.h"
-#include "Unit.h"
+#include "Errors.h"
// ---== RECTANGLE ==---
RectangleBoundary::RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted) :
AreaBoundary(isInverted), _minX(southX), _maxX(northX), _minY(eastY), _maxY(westY) { }
+
bool RectangleBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- return !(
- pos->GetPositionX() < _minX ||
- pos->GetPositionX() > _maxX ||
- pos->GetPositionY() < _minY ||
- pos->GetPositionY() > _maxY
- );
+ return pos->GetPositionX() >= _minX && pos->GetPositionX() <= _maxX
+ && pos->GetPositionY() >= _minY && pos->GetPositionY() <= _maxY;
}
// ---== CIRCLE ==---
-CircleBoundary::CircleBoundary(Position const& center, double radius, bool isInverted) :
- AreaBoundary(isInverted), _center(center), _radiusSq(radius*radius) { }
+CircleBoundary::CircleBoundary(Position const& center, float radius, bool isInverted) :
+ AreaBoundary(isInverted), _center(center), _radiusSq(radius * radius) { }
+
CircleBoundary::CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted) :
- AreaBoundary(isInverted), _center(center), _radiusSq(_center.GetDoubleExactDist2dSq(pointOnCircle)) { }
+ AreaBoundary(isInverted), _center(center), _radiusSq(_center.GetExactDist2dSq(pointOnCircle)) { }
+
bool CircleBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- double offX = _center.GetDoublePositionX() - pos->GetPositionX();
- double offY = _center.GetDoublePositionY() - pos->GetPositionY();
- return offX*offX+offY*offY <= _radiusSq;
+ return _center.GetExactDistSq(pos) <= _radiusSq;
}
// ---== ELLIPSE ==---
-EllipseBoundary::EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted) :
- AreaBoundary(isInverted), _center(center), _radiusYSq(radiusY*radiusY), _scaleXSq(_radiusYSq / (radiusX*radiusX)) { }
+EllipseBoundary::EllipseBoundary(Position const& center, float radiusX, float radiusY, bool isInverted) :
+ AreaBoundary(isInverted), _center(center), _radiusYSq(radiusY * radiusY), _scaleXSq(_radiusYSq / (radiusX * radiusX)) { }
+
bool EllipseBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- double offX = _center.GetDoublePositionX() - pos->GetPositionX();
- double offY = _center.GetDoublePositionY() - pos->GetPositionY();
- return (offX*offX)*_scaleXSq + (offY*offY) <= _radiusYSq;
+ float offX = _center.GetPositionX() - pos->GetPositionX();
+ float offY = _center.GetPositionY() - pos->GetPositionY();
+ return (offX * offX) * _scaleXSq + (offY * offY) <= _radiusYSq;
}
// ---== TRIANGLE ==---
TriangleBoundary::TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted) :
- AreaBoundary(isInverted), _a(pointA), _b(pointB), _c(pointC), _abx(_b.GetDoublePositionX()-_a.GetDoublePositionX()), _bcx(_c.GetDoublePositionX()-_b.GetDoublePositionX()), _cax(_a.GetDoublePositionX() - _c.GetDoublePositionX()), _aby(_b.GetDoublePositionY()-_a.GetDoublePositionY()), _bcy(_c.GetDoublePositionY()-_b.GetDoublePositionY()), _cay(_a.GetDoublePositionY() - _c.GetDoublePositionY()) { }
+ AreaBoundary(isInverted), _a(pointA), _b(pointB), _c(pointC),
+ _abx(_b.GetPositionX() - _a.GetPositionX()), _bcx(_c.GetPositionX() - _b.GetPositionX()), _cax(_a.GetPositionX() - _c.GetPositionX()),
+ _aby(_b.GetPositionY() - _a.GetPositionY()), _bcy(_c.GetPositionY() - _b.GetPositionY()), _cay(_a.GetPositionY() - _c.GetPositionY()) { }
+
bool TriangleBoundary::IsWithinBoundaryArea(Position const* pos) const
{
// half-plane signs
- bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0;
- bool sign2 = ((-_c.GetDoublePositionX() + pos->GetPositionX()) * _bcy - (-_c.GetDoublePositionY() + pos->GetPositionY()) * _bcx) < 0;
- bool sign3 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _cay - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _cax) < 0;
+ bool sign1 = ((-_b.GetPositionX() + pos->GetPositionX()) * _aby - (-_b.GetPositionY() + pos->GetPositionY()) * _abx) < 0;
+ bool sign2 = ((-_c.GetPositionX() + pos->GetPositionX()) * _bcy - (-_c.GetPositionY() + pos->GetPositionY()) * _bcx) < 0;
+ bool sign3 = ((-_a.GetPositionX() + pos->GetPositionX()) * _cay - (-_a.GetPositionY() + pos->GetPositionY()) * _cax) < 0;
// if all signs are the same, the point is inside the triangle
return ((sign1 == sign2) && (sign2 == sign3));
@@ -69,14 +70,18 @@ bool TriangleBoundary::IsWithinBoundaryArea(Position const* pos) const
// ---== PARALLELOGRAM ==---
ParallelogramBoundary::ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted) :
- AreaBoundary(isInverted), _a(cornerA), _b(cornerB), _d(cornerD), _c(DoublePosition(_d.GetDoublePositionX() + (_b.GetDoublePositionX() - _a.GetDoublePositionX()), _d.GetDoublePositionY() + (_b.GetDoublePositionY() - _a.GetDoublePositionY()))), _abx(_b.GetDoublePositionX() - _a.GetDoublePositionX()), _dax(_a.GetDoublePositionX() - _d.GetDoublePositionX()), _aby(_b.GetDoublePositionY() - _a.GetDoublePositionY()), _day(_a.GetDoublePositionY() - _d.GetDoublePositionY()) { }
+ AreaBoundary(isInverted), _a(cornerA), _b(cornerB), _d(cornerD),
+ _c(_d.GetPositionX() + (_b.GetPositionX() - _a.GetPositionX()), _d.GetPositionY() + (_b.GetPositionY() - _a.GetPositionY())),
+ _abx(_b.GetPositionX() - _a.GetPositionX()), _dax(_a.GetPositionX() - _d.GetPositionX()),
+ _aby(_b.GetPositionY() - _a.GetPositionY()), _day(_a.GetPositionY() - _d.GetPositionY()) { }
+
bool ParallelogramBoundary::IsWithinBoundaryArea(Position const* pos) const
{
// half-plane signs
- bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0;
- bool sign2 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _day - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _dax) < 0;
- bool sign3 = ((-_d.GetDoublePositionY() + pos->GetPositionY()) * _abx - (-_d.GetDoublePositionX() + pos->GetPositionX()) * _aby) < 0; // AB = -CD
- bool sign4 = ((-_c.GetDoublePositionY() + pos->GetPositionY()) * _dax - (-_c.GetDoublePositionX() + pos->GetPositionX()) * _day) < 0; // DA = -BC
+ bool sign1 = ((-_b.GetPositionX() + pos->GetPositionX()) * _aby - (-_b.GetPositionY() + pos->GetPositionY()) * _abx) < 0;
+ bool sign2 = ((-_a.GetPositionX() + pos->GetPositionX()) * _day - (-_a.GetPositionY() + pos->GetPositionY()) * _dax) < 0;
+ bool sign3 = ((-_d.GetPositionY() + pos->GetPositionY()) * _abx - (-_d.GetPositionX() + pos->GetPositionX()) * _aby) < 0; // AB = -CD
+ bool sign4 = ((-_c.GetPositionY() + pos->GetPositionY()) * _dax - (-_c.GetPositionX() + pos->GetPositionX()) * _day) < 0; // DA = -BC
// if all signs are equal, the point is inside
return ((sign1 == sign2) && (sign2 == sign3) && (sign3 == sign4));
@@ -85,9 +90,10 @@ bool ParallelogramBoundary::IsWithinBoundaryArea(Position const* pos) const
// ---== Z RANGE ==---
ZRangeBoundary::ZRangeBoundary(float minZ, float maxZ, bool isInverted) :
AreaBoundary(isInverted), _minZ(minZ), _maxZ(maxZ) { }
+
bool ZRangeBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- return (_minZ <= pos->GetPositionZ() && pos->GetPositionZ() <= _maxZ);
+ return pos->GetPositionZ() >= _minZ && pos->GetPositionZ() <= _maxZ;
}
// ---== POLYGON ==---
@@ -105,14 +111,16 @@ BoundaryUnionBoundary::BoundaryUnionBoundary(AreaBoundary const* b1, AreaBoundar
{
ASSERT(b1 && b2);
}
+
BoundaryUnionBoundary::~BoundaryUnionBoundary()
{
delete _b1;
delete _b2;
}
+
bool BoundaryUnionBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- return (_b1->IsWithinBoundary(pos) || _b2->IsWithinBoundary(pos));
+ return _b1->IsWithinBoundary(pos) || _b2->IsWithinBoundary(pos);
}
// ---== INTERSECTION OF 2 BOUNDARIES ==---
@@ -130,5 +138,5 @@ BoundaryIntersectionBoundary::~BoundaryIntersectionBoundary()
bool BoundaryIntersectionBoundary::IsWithinBoundaryArea(Position const* pos) const
{
- return (_b1->IsWithinBoundary(pos) && _b2->IsWithinBoundary(pos));
+ return _b1->IsWithinBoundary(pos) && _b2->IsWithinBoundary(pos);
}
diff --git a/src/server/game/Maps/AreaBoundary.h b/src/server/game/Maps/AreaBoundary.h
index c28dafa77f1..69f9e9cfcdf 100644
--- a/src/server/game/Maps/AreaBoundary.h
+++ b/src/server/game/Maps/AreaBoundary.h
@@ -23,132 +23,103 @@
class TC_GAME_API AreaBoundary
{
- public:
- bool IsWithinBoundary(Position const* pos) const { return pos && (IsWithinBoundaryArea(pos) != _isInvertedBoundary); }
- bool IsWithinBoundary(Position const& pos) const { return IsWithinBoundary(&pos); }
-
- virtual ~AreaBoundary() { }
-
- protected:
- explicit AreaBoundary(bool isInverted) : _isInvertedBoundary(isInverted) { }
-
- struct DoublePosition : Position
- {
- DoublePosition(double x = 0.0, double y = 0.0, double z = 0.0, float o = 0.0f)
- : Position(float(x), float(y), float(z), o), DoublePosX(x), DoublePosY(y), DoublePosZ(z) { }
-
- DoublePosition(float x, float y = 0.0f, float z = 0.0f, float o = 0.0f)
- : Position(x, y, z, o), DoublePosX(x), DoublePosY(y), DoublePosZ(z) { }
-
- DoublePosition(Position const & pos)
- : Position(pos), DoublePosX(pos.m_positionX), DoublePosY(pos.m_positionY), DoublePosZ(pos.m_positionZ) { }
-
- double GetDoublePositionX() const { return DoublePosX; }
- double GetDoublePositionY() const { return DoublePosY; }
- double GetDoublePositionZ() const { return DoublePosZ; }
+public:
+ bool IsWithinBoundary(Position const* pos) const { return pos && (IsWithinBoundaryArea(pos) != _isInvertedBoundary); }
+ bool IsWithinBoundary(Position const& pos) const { return IsWithinBoundary(&pos); }
- double GetDoubleExactDist2dSq(DoublePosition const& pos) const {
- double const offX = GetDoublePositionX() - pos.GetDoublePositionX();
- double const offY = GetDoublePositionY() - pos.GetDoublePositionY();
- return (offX * offX) + (offY * offY);
- }
+ AreaBoundary(AreaBoundary const&) = delete;
+ AreaBoundary(AreaBoundary&&) = delete;
+ AreaBoundary& operator=(AreaBoundary const&) = delete;
+ AreaBoundary& operator=(AreaBoundary&&) = delete;
- Position* sync()
- {
- m_positionX = float(DoublePosX);
- m_positionY = float(DoublePosY);
- m_positionZ = float(DoublePosZ);
- return this;
- }
+ virtual ~AreaBoundary() = default;
- double DoublePosX;
- double DoublePosY;
- double DoublePosZ;
- };
+protected:
+ explicit AreaBoundary(bool isInverted) : _isInvertedBoundary(isInverted) { }
- virtual bool IsWithinBoundaryArea(Position const* pos) const = 0;
+ virtual bool IsWithinBoundaryArea(Position const* pos) const = 0;
- private:
- bool _isInvertedBoundary;
+private:
+ bool const _isInvertedBoundary;
};
class TC_GAME_API RectangleBoundary : public AreaBoundary
{
- public:
- // X axis is north/south, Y axis is east/west, larger values are northwest
- RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted = false);
+public:
+ // X axis is north/south, Y axis is east/west, larger values are northwest
+ RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- float const _minX, _maxX, _minY, _maxY;
+private:
+ float const _minX, _maxX, _minY, _maxY;
};
class TC_GAME_API CircleBoundary : public AreaBoundary
{
- public:
- CircleBoundary(Position const& center, double radius, bool isInverted = false);
- CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted = false);
+public:
+ CircleBoundary(Position const& center, float radius, bool isInverted = false);
+ CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- DoublePosition const _center;
- double const _radiusSq;
+private:
+ Position const _center;
+ float const _radiusSq;
};
class TC_GAME_API EllipseBoundary : public AreaBoundary
{
- public:
- EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted = false);
+public:
+ EllipseBoundary(Position const& center, float radiusX, float radiusY, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- DoublePosition const _center;
- double const _radiusYSq, _scaleXSq;
+private:
+ Position const _center;
+ float const _radiusYSq, _scaleXSq;
};
class TC_GAME_API TriangleBoundary : public AreaBoundary
{
- public:
- TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted = false);
+public:
+ TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- DoublePosition const _a, _b, _c;
- double const _abx, _bcx, _cax, _aby, _bcy, _cay;
+private:
+ Position const _a, _b, _c;
+ float const _abx, _bcx, _cax, _aby, _bcy, _cay;
};
class TC_GAME_API ParallelogramBoundary : public AreaBoundary
{
- public:
- // Note: AB must be orthogonal to AD
- ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted = false);
+public:
+ // Note: AB must be orthogonal to AD
+ ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- DoublePosition const _a, _b, _d, _c;
- double const _abx, _dax, _aby, _day;
+private:
+ Position const _a, _b, _d, _c;
+ float const _abx, _dax, _aby, _day;
};
class TC_GAME_API ZRangeBoundary : public AreaBoundary
{
- public:
- ZRangeBoundary(float minZ, float maxZ, bool isInverted = false);
+public:
+ ZRangeBoundary(float minZ, float maxZ, bool isInverted = false);
- protected:
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- float const _minZ, _maxZ;
+private:
+ float const _minZ, _maxZ;
};
class TC_GAME_API PolygonBoundary : public AreaBoundary
@@ -166,22 +137,30 @@ private:
class TC_GAME_API BoundaryUnionBoundary : public AreaBoundary
{
- public:
- BoundaryUnionBoundary(AreaBoundary const* b1, AreaBoundary const* b2, bool isInverted = false);
+public:
+ BoundaryUnionBoundary(AreaBoundary const* b1, AreaBoundary const* b2, bool isInverted = false);
+ BoundaryUnionBoundary(BoundaryUnionBoundary const&) = delete;
+ BoundaryUnionBoundary(BoundaryUnionBoundary&&) = delete;
+ BoundaryUnionBoundary& operator=(BoundaryUnionBoundary const&) = delete;
+ BoundaryUnionBoundary& operator=(BoundaryUnionBoundary&&) = delete;
- protected:
- virtual ~BoundaryUnionBoundary();
- bool IsWithinBoundaryArea(Position const* pos) const override;
+protected:
+ virtual ~BoundaryUnionBoundary();
+ bool IsWithinBoundaryArea(Position const* pos) const override;
- private:
- AreaBoundary const* const _b1;
- AreaBoundary const* const _b2;
+private:
+ AreaBoundary const* const _b1;
+ AreaBoundary const* const _b2;
};
class TC_GAME_API BoundaryIntersectionBoundary : public AreaBoundary
{
public:
BoundaryIntersectionBoundary(AreaBoundary const* b1, AreaBoundary const* b2, bool isInverted = false);
+ BoundaryIntersectionBoundary(BoundaryIntersectionBoundary const&) = delete;
+ BoundaryIntersectionBoundary(BoundaryIntersectionBoundary&&) = delete;
+ BoundaryIntersectionBoundary& operator=(BoundaryIntersectionBoundary const&) = delete;
+ BoundaryIntersectionBoundary& operator=(BoundaryIntersectionBoundary&&) = delete;
protected:
virtual ~BoundaryIntersectionBoundary();