diff options
| author | Traesh <Traesh@users.noreply.github.com> | 2021-08-15 11:09:46 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-15 11:09:46 +0200 |
| commit | fb6761c273d518eae6bab72fc9c2a2b6f93eec83 (patch) | |
| tree | c2dc8907691bf0da898a62448058df38892d9333 /src/server/game/Entities/Object | |
| parent | 4725941567f9dae583fc27b52b51a23aa84cd098 (diff) | |
Core/Spells Implement targets 133, 134, 135 : TARGET_UNIT_LINE_CASTER_TO_DEST_*** (#26786)
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Position.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.h | 5 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp index 6afdb283c1b..daffd7a9b52 100644 --- a/src/server/game/Entities/Object/Position.cpp +++ b/src/server/game/Entities/Object/Position.cpp @@ -154,7 +154,7 @@ bool Position::IsWithinDoubleVerticalCylinder(Position const* center, float radi return IsInDist2d(center, radius) && std::abs(verticalDelta) <= height; } -bool Position::HasInArc(float arc, Position const* obj, float border) const +bool Position::HasInArc(float arc, Position const* obj, float border, Optional<float> orientation) const { // always have self in arc if (obj == this) @@ -164,7 +164,7 @@ bool Position::HasInArc(float arc, Position const* obj, float border) const arc = NormalizeOrientation(arc); float angle = GetAngle(obj); - angle -= m_orientation; + angle -= orientation.is_initialized() ? *orientation : GetOrientation(); // move angle to range -pi ... +pi angle = NormalizeOrientation(angle); @@ -176,13 +176,13 @@ bool Position::HasInArc(float arc, Position const* obj, float border) const return ((angle >= lborder) && (angle <= rborder)); } -bool Position::HasInLine(Position const* pos, float objSize, float width) const +bool Position::HasInLine(Position const* pos, float objSize, float width, Optional<float> orientation) const { - if (!HasInArc(float(M_PI), pos)) + if (!HasInArc(float(M_PI), pos, 2.0f, orientation)) return false; width += objSize; - float angle = GetRelativeAngle(pos); + float angle = GetAngle(pos) - (orientation.is_initialized() ? *orientation : GetOrientation()); return std::fabs(std::sin(angle)) * GetExactDist2d(pos->GetPositionX(), pos->GetPositionY()) < width; } diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h index 9f2218397e9..fbf9f87d753 100644 --- a/src/server/game/Entities/Object/Position.h +++ b/src/server/game/Entities/Object/Position.h @@ -19,6 +19,7 @@ #define Trinity_game_Position_h__ #include "Define.h" +#include "Optional.h" #include <string> #include <cmath> @@ -215,8 +216,8 @@ public: search using this relation: dist2d < radius && abs(dz) < height */ bool IsWithinDoubleVerticalCylinder(Position const* center, float radius, float height) const; - bool HasInArc(float arcangle, Position const* pos, float border = 2.0f) const; - bool HasInLine(Position const* pos, float objSize, float width) const; + bool HasInArc(float arcangle, Position const* pos, float border = 2.0f, Optional<float> orientation = Optional<float>()) const; + bool HasInLine(Position const* pos, float objSize, float width, Optional<float> orientation = Optional<float>()) const; std::string ToString() const; // modulos a radian orientation to the range of 0..2PI |
