aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-11-23 18:12:44 +0100
committerShauren <shauren.trinity@gmail.com>2018-03-08 23:13:51 +0100
commit2baa81065ba27f0a6d278a8dd8a79b7c831e0a2b (patch)
treee8d4960ec63da14aeee2afaed037a64bd5835859 /src/server/game/Entities/Unit
parent2840e096fc42faa80b839f16edaedc977b12bfee (diff)
Core/Movement: Fixed creature hover
Closes #15177
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp17
-rw-r--r--src/server/game/Entities/Unit/Unit.h7
2 files changed, 9 insertions, 15 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index e811a87e227..c55e6f49459 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -545,7 +545,7 @@ bool Unit::IsWithinMeleeRange(Unit const* obj) const
float dx = GetPositionX() - obj->GetPositionX();
float dy = GetPositionY() - obj->GetPositionY();
- float dz = GetPositionZMinusOffset() - obj->GetPositionZMinusOffset();
+ float dz = GetPositionZ() - obj->GetPositionZ();
float distsq = dx*dx + dy*dy + dz*dz;
float maxdist = GetMeleeRange(obj);
@@ -11979,15 +11979,6 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id)
}
}
-float Unit::GetPositionZMinusOffset() const
-{
- float offset = 0.0f;
- if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- offset = GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
-
- return GetPositionZ() - offset;
-}
-
void Unit::SetControlled(bool apply, UnitState state)
{
if (apply)
@@ -13549,7 +13540,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
void Unit::BuildMovementPacket(ByteBuffer *data) const
{
- Unit::BuildMovementPacket(Position(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), GetOrientation()), m_movementInfo.transport.pos, m_movementInfo, data);
+ Unit::BuildMovementPacket(*this, m_movementInfo.transport.pos, m_movementInfo, data);
}
void Unit::BuildMovementPacket(Position const& pos, Position const& transportPos, MovementInfo const& movementInfo, ByteBuffer* data)
@@ -13959,7 +13950,7 @@ void Unit::SetFacingTo(float ori, bool force)
return;
Movement::MoveSplineInit init(this);
- init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), false);
+ init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ(), false);
if (HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && GetTransGUID())
init.DisableTransportPathTransformations(); // It makes no sense to target global orientation
init.SetFacing(ori);
@@ -13974,7 +13965,7 @@ void Unit::SetFacingToObject(WorldObject const* object, bool force)
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
Movement::MoveSplineInit init(this);
- init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), false);
+ init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ(), false);
init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
init.Launch();
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index d464861f2ea..9186551a23d 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1596,8 +1596,6 @@ class TC_GAME_API Unit : public WorldObject
uint16 GetExtraUnitMovementFlags() const { return m_movementInfo.flags2; }
void SetExtraUnitMovementFlags(uint16 f) { m_movementInfo.flags2 = f; }
- float GetPositionZMinusOffset() const;
-
void SetControlled(bool apply, UnitState state);
void ApplyControlStatesIfNeeded();
@@ -1675,6 +1673,11 @@ class TC_GAME_API Unit : public WorldObject
bool IsFalling() const;
virtual bool CanSwim() const;
+ float GetHoverOffset() const
+ {
+ return HasUnitMovementFlag(MOVEMENTFLAG_HOVER) ? GetFloatValue(UNIT_FIELD_HOVERHEIGHT) : 0.0f;
+ }
+
void RewardRage(uint32 damage, uint32 weaponSpeedHitFactor, bool attacker);
virtual float GetFollowAngle() const { return static_cast<float>(M_PI/2); }