diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-11-23 18:12:44 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-03-08 23:13:51 +0100 |
| commit | 2baa81065ba27f0a6d278a8dd8a79b7c831e0a2b (patch) | |
| tree | e8d4960ec63da14aeee2afaed037a64bd5835859 /src/server/game/Entities/Unit | |
| parent | 2840e096fc42faa80b839f16edaedc977b12bfee (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.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 7 |
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); } |
