aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Object/Position.cpp19
-rw-r--r--src/server/game/Entities/Object/Position.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp15
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
4 files changed, 12 insertions, 26 deletions
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index dc8c24c78b0..b969a5492a9 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -62,25 +62,6 @@ Position Position::GetPositionWithOffset(Position const& offset) const
return ret;
}
-void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos) const
-{
- float dx = GetPositionX() - x;
- float dy = GetPositionY() - y;
-
- if (std::fabs(dx) < 0.001f && std::fabs(dy) < 0.001f)
- {
- float o = NormalizeOrientation(GetOrientation() - M_PI);
- vcos = std::cos(o);
- vsin = std::sin(o);
- }
- else
- {
- float dist = std::sqrt((dx*dx) + (dy*dy));
- vcos = dx / dist;
- vsin = dy / dist;
- }
-}
-
bool Position::IsWithinBox(Position const& center, float xradius, float yradius, float zradius) const
{
// rotate the WorldObject position instead of rotating the whole cube, that way we can make a simplified
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index b082e661d51..0954169e756 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -138,8 +138,6 @@ public:
float GetRelativeAngle(Position const& pos) const { return ToRelativeAngle(GetAbsoluteAngle(pos)); }
float GetRelativeAngle(Position const* pos) const { return ToRelativeAngle(GetAbsoluteAngle(pos)); }
- void GetSinCos(float x, float y, float &vsin, float &vcos) const;
-
bool IsInDist2d(float x, float y, float dist) const { return GetExactDist2dSq(x, y) < dist * dist; }
bool IsInDist2d(Position const* pos, float dist) const { return GetExactDist2dSq(pos) < dist * dist; }
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index ef3e30948f1..3659f304091 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11526,7 +11526,7 @@ void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float
player->GetSession()->SendPacket(moveKnockBack.Write());
}
-void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/)
+void Unit::KnockbackFrom(Position const& origin, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/)
{
Player* player = ToPlayer();
if (!player)
@@ -11540,11 +11540,18 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement
}
if (!player)
- GetMotionMaster()->MoveKnockbackFrom(x, y, speedXY, speedZ, spellEffectExtraData);
+ GetMotionMaster()->MoveKnockbackFrom(origin, speedXY, speedZ, spellEffectExtraData);
else
{
- float vcos, vsin;
- GetSinCos(x, y, vsin, vcos);
+ float o = GetPosition() == origin ? GetOrientation() + M_PI : origin.GetRelativeAngle(this);
+ if (speedXY < 0)
+ {
+ speedXY = -speedXY;
+ o = o - M_PI;
+ }
+
+ float vcos = std::cos(o);
+ float vsin = std::sin(o);
SendMoveKnockBack(player, speedXY, -speedZ, vcos, vsin);
}
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index b05419ead5f..71bd838afd2 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1185,7 +1185,7 @@ class TC_GAME_API Unit : public WorldObject
void UpdateHeight(float newZ);
void SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin);
- void KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData = nullptr);
+ void KnockbackFrom(Position const& origin, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData = nullptr);
void JumpTo(float speedXY, float speedZ, bool forward = true);
void JumpTo(WorldObject* obj, float speedZ, bool withOrientation = false);