diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-02-07 12:47:39 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-02-07 12:47:39 +0100 |
| commit | 0f5d634e381b2bf6d4062c0ebd31551d98f64a32 (patch) | |
| tree | 4c0df8d9507048d7768d0af60f4eda22fba67c64 /src/server/game | |
| parent | fc4ce2af88cdcf2433555e73f5c9a37139062734 (diff) | |
Scripts: Remove unneccessary DoublePosition from AreaBoundary
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Maps/AreaBoundary.cpp | 68 | ||||
| -rw-r--r-- | src/server/game/Maps/AreaBoundary.h | 165 |
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(); |
