From afc0f711db2430bc6580b13444829197fe6096ae Mon Sep 17 00:00:00 2001 From: killerwife Date: Mon, 19 Jun 2023 13:26:45 +0200 Subject: [PATCH] Spell: Tryfix trajectory distance calculation by using 2d distance --- src/game/Entities/Object.cpp | 17 +++++++++++++++++ src/game/Entities/Object.h | 2 ++ src/game/Spells/Spell.h | 1 + 3 files changed, 20 insertions(+) diff --git a/src/game/Entities/Object.cpp b/src/game/Entities/Object.cpp index 25282f42d0..d75cb3d754 100644 --- a/src/game/Entities/Object.cpp +++ b/src/game/Entities/Object.cpp @@ -2983,6 +2983,23 @@ float Position::GetDistance(Position const& other) const return distsq; } +float Position::GetDistance2d(Position const& other) const +{ + float dx = GetPositionX() - other.GetPositionX(); + float dy = GetPositionY() - other.GetPositionY(); + float distsq = dx * dx + dy * dy; + + return distsq; +} + +void Position::RelocateOffset(Position const& offset) +{ + x = GetPositionX() + (offset.GetPositionX() * std::cos(GetPositionO()) + offset.GetPositionY() * std::sin(GetPositionO() + float(M_PI))); + y = GetPositionY() + (offset.GetPositionY() * std::cos(GetPositionO()) + offset.GetPositionX() * std::sin(GetPositionO())); + z = GetPositionZ() + offset.GetPositionZ(); + o = GetPositionO() + offset.GetPositionO(); +} + std::string Position::to_string() const { return "X: " + std::to_string(x) + " Y: " + std::to_string(y) + " Z: " + std::to_string(z) + " O: " + std::to_string(o); diff --git a/src/game/Entities/Object.h b/src/game/Entities/Object.h index d4aa3bbfd4..f300cb3083 100644 --- a/src/game/Entities/Object.h +++ b/src/game/Entities/Object.h @@ -317,6 +317,8 @@ struct Position bool IsEmpty() const { return x == 0.f && y == 0.f && z == 0.f; } float GetAngle(const float x, const float y) const; float GetDistance(Position const& other) const; // WARNING: Returns squared distance for performance reasons + float GetDistance2d(Position const& other) const; // WARNING: Returns squared distance for performance reasons + void RelocateOffset(Position const& offset); std::string to_string() const; }; diff --git a/src/game/Spells/Spell.h b/src/game/Spells/Spell.h index 97cd55037f..cdd799001a 100644 --- a/src/game/Spells/Spell.h +++ b/src/game/Spells/Spell.h @@ -135,6 +135,7 @@ class SpellCastTargets Position getDestination() const { return m_destPos; } void getDestination(WorldLocation& loc) { loc.coord_x = m_destPos.x; loc.coord_y = m_destPos.y; loc.coord_z = m_destPos.z; } void getSource(float& x, float& y, float& z) const { x = m_srcPos.x; y = m_srcPos.y; z = m_srcPos.z; } + Position getSource() const { return m_srcPos; } void setGOTarget(GameObject* target); ObjectGuid getGOTargetGuid() const { return m_GOTargetGUID; }