Skip to content

Commit bd375c5

Browse files
committed
switch to ImmediateMovementGenerator
1 parent 590320b commit bd375c5

4 files changed

Lines changed: 15 additions & 42 deletions

File tree

src/server/game/Entities/Player/Player.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1571,7 +1571,6 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
15711571
SetUnitMovementFlags(GetUnitMovementFlags() & MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE);
15721572
DisableSpline();
15731573
GetMotionMaster()->Remove(EFFECT_MOTION_TYPE);
1574-
GetMotionMaster()->Remove(FACE_MOTION_TYPE);
15751574

15761575
if (Transport* transport = GetTransport())
15771576
{

src/server/game/Entities/Unit/Unit.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,14 +247,13 @@ enum UnitState : uint32
247247
UNIT_STATE_FOLLOW_MOVE = 0x08000000,
248248
UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
249249
UNIT_STATE_FOLLOW_FORMATION_MOVE = 0x20000000,
250-
UNIT_STATE_FACING = 0x40000000,
251250

252251
UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_CHARMED | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE
253252
| UNIT_STATE_FOCUSING | UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED
254253
| UNIT_STATE_DISTRACTED | UNIT_STATE_ISOLATED | UNIT_STATE_ATTACK_PLAYER | UNIT_STATE_CASTING
255254
| UNIT_STATE_POSSESSED | UNIT_STATE_CHARGING | UNIT_STATE_JUMPING | UNIT_STATE_MOVE | UNIT_STATE_ROTATING
256255
| UNIT_STATE_EVADE | UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE
257-
| UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_IGNORE_PATHFINDING | UNIT_STATE_FOLLOW_FORMATION_MOVE | UNIT_STATE_FACING,
256+
| UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_IGNORE_PATHFINDING | UNIT_STATE_FOLLOW_FORMATION_MOVE,
258257

259258
UNIT_STATE_UNATTACKABLE = UNIT_STATE_IN_FLIGHT,
260259
UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_FOLLOW_FORMATION_MOVE,

src/server/game/Movement/MotionMaster.cpp

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,6 @@ MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType() const
202202
return movement->GetMovementGeneratorType();
203203
}
204204

205-
MovementGeneratorPriority MotionMaster::GetCurrentMovementGeneratorPriority() const
206-
{
207-
if (Empty())
208-
return MOTION_PRIORITY_NONE;
209-
210-
MovementGenerator const* movement = GetCurrentMovementGenerator();
211-
if (!movement)
212-
return MOTION_PRIORITY_NONE;
213-
214-
return MovementGeneratorPriority(movement->Priority);
215-
}
216-
217205
MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType(MovementSlot slot) const
218206
{
219207
if (Empty() || IsInvalidMovementSlot(slot))
@@ -1045,47 +1033,35 @@ void MotionMaster::MoveFormation(Unit* leader, float range, float angle, uint32
10451033
}
10461034
}
10471035

1048-
void MotionMaster::MoveFace(WorldObject const* object, uint32 id/* = EVENT_FACE*/)
1036+
void MotionMaster::MoveFace(WorldObject const* object, uint32 id /*= EVENT_FACE*/)
10491037
{
1050-
if (!object || GetCurrentMovementGeneratorPriority() == MOTION_PRIORITY_HIGHEST)
1038+
if (!object)
10511039
return;
10521040

1053-
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveFace: '{}', faces '{}'", _owner->GetGUID().ToString(), object->GetGUID().ToString());
1041+
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveFace: '{}', faces '{}'", _owner->GetGUID(), object->GetGUID());
10541042

1055-
std::function<void(Movement::MoveSplineInit&)> initializer = [=, this](Movement::MoveSplineInit& init)
1043+
std::function<void(Movement::MoveSplineInit&)> initializer = [owner = _owner, object](Movement::MoveSplineInit& init)
10561044
{
1057-
init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ(), false);
1058-
if (object)
1059-
init.SetFacing(_owner->GetAbsoluteAngle(object)); // when on transport, GetAbsoluteAngle will still return global coordinates (and angle) that needs transforming
1045+
init.MoveTo(owner->GetPositionX(), owner->GetPositionY(), owner->GetPositionZ(), false);
1046+
init.SetFacing(owner->GetAbsoluteAngle(object)); // when on transport, GetAbsoluteAngle will still return global coordinates (and angle) that needs transforming
10601047
};
10611048

1062-
GenericMovementGenerator* movement = new GenericMovementGenerator(std::move(initializer), FACE_MOTION_TYPE, id);
1063-
movement->Priority = MOTION_PRIORITY_NORMAL;
1064-
movement->Mode = MOTION_MODE_OVERRIDE;
1065-
movement->BaseUnitState = UNIT_STATE_FACING;
1066-
Add(movement);
1049+
Add(new ImmediateMovementGenerator(std::move(initializer), FACE_MOTION_TYPE, id));
10671050
}
10681051

1069-
void MotionMaster::MoveFace(float const orientation, uint32 id/* = EVENT_FACE*/)
1052+
void MotionMaster::MoveFace(float orientation, uint32 id /*= EVENT_FACE*/)
10701053
{
1071-
if (GetCurrentMovementGeneratorPriority() == MOTION_PRIORITY_HIGHEST)
1072-
return;
1054+
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveFace: '{}', faces '{}'", _owner->GetGUID(), orientation);
10731055

1074-
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveFace: '{}', faces '{}'", _owner->GetGUID().ToString(), orientation);
1075-
1076-
std::function<void(Movement::MoveSplineInit&)> initializer = [=, this](Movement::MoveSplineInit& init)
1056+
std::function<void(Movement::MoveSplineInit&)> initializer = [owner = _owner, orientation](Movement::MoveSplineInit& init)
10771057
{
1078-
init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ(), false);
1079-
if (_owner->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && !_owner->GetTransGUID().IsEmpty())
1058+
init.MoveTo(owner->GetPositionX(), owner->GetPositionY(), owner->GetPositionZ(), false);
1059+
if (owner->GetTransport())
10801060
init.DisableTransportPathTransformations(); // It makes no sense to target global orientation
10811061
init.SetFacing(orientation);
10821062
};
10831063

1084-
GenericMovementGenerator* movement = new GenericMovementGenerator(std::move(initializer), FACE_MOTION_TYPE, id);
1085-
movement->Priority = MOTION_PRIORITY_NORMAL;
1086-
movement->Mode = MOTION_MODE_OVERRIDE;
1087-
movement->BaseUnitState = UNIT_STATE_FACING;
1088-
Add(movement);
1064+
Add(new ImmediateMovementGenerator(std::move(initializer), FACE_MOTION_TYPE, id));
10891065
}
10901066

10911067
void MotionMaster::LaunchMoveSpline(std::function<void(Movement::MoveSplineInit& init)>&& initializer, uint32 id/*= 0*/, MovementGeneratorPriority priority/* = MOTION_PRIORITY_NORMAL*/, MovementGeneratorType type/*= EFFECT_MOTION_TYPE*/)

src/server/game/Movement/MotionMaster.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ class TC_GAME_API MotionMaster
124124
MovementSlot GetCurrentSlot() const;
125125
MovementGenerator* GetCurrentMovementGenerator() const;
126126
MovementGeneratorType GetCurrentMovementGeneratorType() const;
127-
MovementGeneratorPriority GetCurrentMovementGeneratorPriority() const;
128127
MovementGeneratorType GetCurrentMovementGeneratorType(MovementSlot slot) const;
129128
MovementGenerator* GetCurrentMovementGenerator(MovementSlot slot) const;
130129
// Returns first found MovementGenerator that matches the given criteria
@@ -192,7 +191,7 @@ class TC_GAME_API MotionMaster
192191
void MoveRotate(uint32 id, uint32 time, RotateDirection direction);
193192
void MoveFormation(Unit* leader, float range, float angle, uint32 point1, uint32 point2);
194193
void MoveFace(WorldObject const* object, uint32 id = EVENT_FACE);
195-
void MoveFace(float const orientation, uint32 id = EVENT_FACE);
194+
void MoveFace(float orientation, uint32 id = EVENT_FACE);
196195

197196
void LaunchMoveSpline(std::function<void(Movement::MoveSplineInit& init)>&& initializer, uint32 id = 0, MovementGeneratorPriority priority = MOTION_PRIORITY_NORMAL, MovementGeneratorType type = EFFECT_MOTION_TYPE);
198197
private:

0 commit comments

Comments
 (0)