diff options
| author | Shauren <shauren.trinity@gmail.com> | 2012-07-14 23:39:12 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2012-07-14 23:39:12 +0200 |
| commit | 27ea130b55dd3d16092a3d58f2093b99abc0a46b (patch) | |
| tree | dd6d8c1e0271bf24f849f5125726f5e4c0f8a6e0 /src/server/game/Entities | |
| parent | 2d144e49254c39e2a8cbf20c5f93ff4d422b5ce1 (diff) | |
Core/Movement
* Updated movement flags
* Cleaned up MovementStatusElements enum
* Updated and enabled MSG_MOVE_START_FORWARD
Diffstat (limited to 'src/server/game/Entities')
| -rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 15 | ||||
| -rwxr-xr-x | src/server/game/Entities/Object/Object.h | 4 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 5 | ||||
| -rwxr-xr-x | src/server/game/Entities/Transport/Transport.cpp | 3 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 11 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 43 | ||||
| -rwxr-xr-x | src/server/game/Entities/Vehicle/Vehicle.cpp | 2 |
7 files changed, 42 insertions, 41 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index d9d8c3c461a..6894928b551 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -47,6 +47,7 @@ #include "OutdoorPvPMgr.h" #include "MovementPacketBuilder.h" #include "DynamicTree.h" +#include "Unit.h" uint32 GuidHigh2TypeId(uint32 guid_hi) { @@ -331,13 +332,13 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const data->WriteBit(0); data->WriteBit(!((movementFlags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (movementFlagsExtra & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))); // Has pitch - data->WriteBit(movementFlags & MOVEMENTFLAG_SPLINE_ENABLED); // Has spline data + data->WriteBit(self->IsSplineEnabled()); // Has spline data data->WriteBit(movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_TURNING);// Has fall data data->WriteBit(!(movementFlags & MOVEMENTFLAG_SPLINE_ELEVATION)); // Has spline elevation data->WriteBit(guid[5]); - data->WriteBit(movementFlags & MOVEMENTFLAG_ONTRANSPORT); // Has transport data + data->WriteBit(self->m_movementInfo.t_guid); // Has transport data data->WriteBit(0); // Is missing time - if (movementFlags & MOVEMENTFLAG_ONTRANSPORT) + if (self->m_movementInfo.t_guid) { ObjectGuid transGuid = self->m_movementInfo.t_guid; @@ -354,7 +355,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const } data->WriteBit(guid[4]); - if (movementFlags & MOVEMENTFLAG_SPLINE_ENABLED) + if (self->IsSplineEnabled()) { data->WriteBit(1); // Has extended spline data Movement::PacketBuilder::WriteCreateBits(*self->movespline, *data); @@ -440,12 +441,12 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (movementFlags & MOVEMENTFLAG_SPLINE_ELEVATION) *data << float(self->m_movementInfo.splineElevation); - if (movementFlags & MOVEMENTFLAG_SPLINE_ENABLED) + if (self->IsSplineEnabled()) Movement::PacketBuilder::WriteCreateData(*self->movespline, *data); *data << float(self->GetPositionZMinusOffset()); data->WriteByteSeq(guid[5]); - if (movementFlags & MOVEMENTFLAG_ONTRANSPORT) + if (self->m_movementInfo.t_guid) { ObjectGuid transGuid = self->m_movementInfo.t_guid; @@ -1298,7 +1299,7 @@ void MovementInfo::OutDebug() sLog->outString("flags2 %u", flags2); sLog->outString("time %u current time " UI64FMTD "", flags2, uint64(::time(NULL))); sLog->outString("position: `%s`", pos.ToString().c_str()); - if (flags & MOVEMENTFLAG_ONTRANSPORT) + if (t_guid) { sLog->outString("TRANSPORT:"); sLog->outString("guid: " UI64FMTD, t_guid); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 01ad11ba2df..8e1677991f4 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -529,16 +529,16 @@ struct MovementInfo // transport uint64 t_guid; Position t_pos; + int8 t_seat; uint32 t_time; uint32 t_time2; uint32 t_time3; - int8 t_seat; // swimming/flying float pitch; // falling uint32 fallTime; // jumping - float j_zspeed, j_sinAngle, j_cosAngle, j_xyspeed; + float j_zspeed, j_cosAngle, j_sinAngle, j_xyspeed; // spline float splineElevation; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e5df31734a4..88f2170fdfb 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2176,15 +2176,14 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (m_transport) { - if (options & TELE_TO_NOT_LEAVE_TRANSPORT) - AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - else + if (!(options & TELE_TO_NOT_LEAVE_TRANSPORT)) { m_transport->RemovePassenger(this); m_transport = NULL; m_movementInfo.t_pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f); m_movementInfo.t_time = 0; m_movementInfo.t_seat = -1; + m_movementInfo.t_guid = 0; } } diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index ef3e1331a4c..e44f67f128d 100755 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -642,8 +642,7 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, } creature->SetTransport(this); - creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - creature->m_movementInfo.guid = GetGUID(); + creature->m_movementInfo.t_guid = GetGUID(); creature->m_movementInfo.t_pos.Relocate(x, y, z, o); if (anim) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2435a403408..19a8ab32ac1 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -396,7 +396,7 @@ void Unit::UpdateSplineMovement(uint32 t_diff) m_movesplineTimer.Reset(POSITION_UPDATE_DELAY); Movement::Location loc = movespline->ComputePosition(); - if (HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) + if (GetTransGUID()) { Position& pos = m_movementInfo.t_pos; pos.m_positionX = loc.x; @@ -420,7 +420,7 @@ void Unit::UpdateSplineMovement(uint32 t_diff) void Unit::DisableSpline() { - m_movementInfo.RemoveMovementFlag(MovementFlags(MOVEMENTFLAG_SPLINE_ENABLED|MOVEMENTFLAG_FORWARD)); + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FORWARD); movespline->_Interrupt(); } @@ -17644,7 +17644,7 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const *data << GetPositionZMinusOffset(); *data << GetOrientation(); - bool onTransport = GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT; + bool onTransport = m_movementInfo.t_guid != 0; bool hasInterpolatedMovement = m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT; bool time3 = false; bool swimming = ((GetUnitMovementFlags() & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) @@ -18180,3 +18180,8 @@ void Unit::SendMovementCanFlyChange() BuildMovementPacket(&data); SendMessageToSet(&data, false); } + +bool Unit::IsSplineEnabled() const +{ + return !movespline->Finalized(); +} diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 6d188fe3593..7471ae603f6 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -675,28 +675,26 @@ enum MovementFlags MOVEMENTFLAG_PITCH_UP = 0x00000040, MOVEMENTFLAG_PITCH_DOWN = 0x00000080, MOVEMENTFLAG_WALKING = 0x00000100, // Walking - MOVEMENTFLAG_ONTRANSPORT = 0x00000200, // Used for flying on some creatures - MOVEMENTFLAG_DISABLE_GRAVITY = 0x00000400, // Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible. - MOVEMENTFLAG_ROOT = 0x00000800, // Must not be set along with MOVEMENTFLAG_MASK_MOVING - MOVEMENTFLAG_FALLING = 0x00001000, // damage dealt on that type of falling - MOVEMENTFLAG_FALLING_FAR = 0x00002000, - MOVEMENTFLAG_PENDING_STOP = 0x00004000, - MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x00008000, - MOVEMENTFLAG_PENDING_FORWARD = 0x00010000, - MOVEMENTFLAG_PENDING_BACKWARD = 0x00020000, - MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x00040000, - MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x00080000, - MOVEMENTFLAG_PENDING_ROOT = 0x00100000, - MOVEMENTFLAG_SWIMMING = 0x00200000, // appears with fly flag also - MOVEMENTFLAG_ASCENDING = 0x00400000, // press "space" when flying - MOVEMENTFLAG_DESCENDING = 0x00800000, - MOVEMENTFLAG_CAN_FLY = 0x01000000, // Appears when unit can fly AND also walk - MOVEMENTFLAG_FLYING = 0x02000000, // unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity - MOVEMENTFLAG_SPLINE_ELEVATION = 0x04000000, // used for flight paths - MOVEMENTFLAG_SPLINE_ENABLED = 0x08000000, // used for flight paths - MOVEMENTFLAG_WATERWALKING = 0x10000000, // prevent unit from falling through water - MOVEMENTFLAG_FALLING_SLOW = 0x20000000, // active rogue safe fall spell (passive) - MOVEMENTFLAG_HOVER = 0x40000000, // hover, cannot jump + MOVEMENTFLAG_DISABLE_GRAVITY = 0x00000200, // Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible. + MOVEMENTFLAG_ROOT = 0x00000400, // Must not be set along with MOVEMENTFLAG_MASK_MOVING + MOVEMENTFLAG_FALLING = 0x00000800, // damage dealt on that type of falling + MOVEMENTFLAG_FALLING_FAR = 0x00001000, + MOVEMENTFLAG_PENDING_STOP = 0x00002000, + MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x00004000, + MOVEMENTFLAG_PENDING_FORWARD = 0x00008000, + MOVEMENTFLAG_PENDING_BACKWARD = 0x00010000, + MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x00020000, + MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x00040000, + MOVEMENTFLAG_PENDING_ROOT = 0x00080000, + MOVEMENTFLAG_SWIMMING = 0x00100000, // appears with fly flag also + MOVEMENTFLAG_ASCENDING = 0x00200000, // press "space" when flying + MOVEMENTFLAG_DESCENDING = 0x00400000, + MOVEMENTFLAG_CAN_FLY = 0x00800000, // Appears when unit can fly AND also walk + MOVEMENTFLAG_FLYING = 0x01000000, // unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity + MOVEMENTFLAG_SPLINE_ELEVATION = 0x02000000, // used for flight paths + MOVEMENTFLAG_WATERWALKING = 0x04000000, // prevent unit from falling through water + MOVEMENTFLAG_FALLING_SLOW = 0x08000000, // active rogue safe fall spell (passive) + MOVEMENTFLAG_HOVER = 0x10000000, // hover, cannot jump // TODO: Check if PITCH_UP and PITCH_DOWN really belong here.. MOVEMENTFLAG_MASK_MOVING = @@ -2103,6 +2101,7 @@ class Unit : public WorldObject uint16 HasExtraUnitMovementFlag(uint16 f) const { return m_movementInfo.flags2 & f; } uint16 GetExtraUnitMovementFlags() const { return m_movementInfo.flags2; } void SetExtraUnitMovementFlags(uint16 f) { m_movementInfo.flags2 = f; } + bool IsSplineEnabled() const; float GetPositionZMinusOffset() const { diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index eb50f3fe229..3d36f6ccda5 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -342,7 +342,6 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId) if (seat->second.SeatInfo->m_flags && !(seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING)) unit->AddUnitState(UNIT_STATE_ONVEHICLE); - unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); VehicleSeatEntry const* veSeat = seat->second.SeatInfo; unit->m_movementInfo.t_pos.m_positionX = veSeat->m_attachmentOffsetX; unit->m_movementInfo.t_pos.m_positionY = veSeat->m_attachmentOffsetY; @@ -419,7 +418,6 @@ void Vehicle::RemovePassenger(Unit* unit) if (_me->IsInWorld()) { - unit->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); unit->m_movementInfo.t_pos.Relocate(0, 0, 0, 0); unit->m_movementInfo.t_time = 0; unit->m_movementInfo.t_seat = 0; |
