feat(Core/Movement): added orientation input for Point movement (#3456)
This commit is contained in:
@@ -349,7 +349,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath, bool forceDestination, MovementSlot slot)
|
void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath, bool forceDestination, MovementSlot slot, float orientation /* = 0.0f*/)
|
||||||
{
|
{
|
||||||
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
|
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
|
||||||
if (_owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE))
|
if (_owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE))
|
||||||
@@ -360,7 +360,7 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
|
|||||||
#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS)
|
#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS)
|
||||||
sLog->outStaticDebug("Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z);
|
sLog->outStaticDebug("Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z);
|
||||||
#endif
|
#endif
|
||||||
Mutate(new PointMovementGenerator<Player>(id, x, y, z, 0.0f, NULL, generatePath, forceDestination), slot);
|
Mutate(new PointMovementGenerator<Player>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -368,7 +368,7 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
|
|||||||
sLog->outStaticDebug("Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)",
|
sLog->outStaticDebug("Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)",
|
||||||
_owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z);
|
_owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z);
|
||||||
#endif
|
#endif
|
||||||
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, 0.0f, NULL, generatePath, forceDestination), slot);
|
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,7 +553,7 @@ void MotionMaster::MoveFall(uint32 id /*=0*/, bool addFlagForNPC)
|
|||||||
Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
|
Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, const Movement::PointsArray* path, bool generatePath)
|
void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, const Movement::PointsArray* path, bool generatePath, float orientation /* = 0.0f*/)
|
||||||
{
|
{
|
||||||
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
|
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
|
||||||
if (_owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE))
|
if (_owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE))
|
||||||
@@ -567,7 +567,7 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id,
|
|||||||
#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS)
|
#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS)
|
||||||
sLog->outStaticDebug("Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z);
|
sLog->outStaticDebug("Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z);
|
||||||
#endif
|
#endif
|
||||||
Mutate(new PointMovementGenerator<Player>(id, x, y, z, speed, path, generatePath, generatePath), MOTION_SLOT_CONTROLLED);
|
Mutate(new PointMovementGenerator<Player>(id, x, y, z, speed, orientation, path, generatePath, generatePath), MOTION_SLOT_CONTROLLED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -575,7 +575,7 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id,
|
|||||||
sLog->outStaticDebug("Creature (Entry: %u GUID: %u) charge point (X: %f Y: %f Z: %f)",
|
sLog->outStaticDebug("Creature (Entry: %u GUID: %u) charge point (X: %f Y: %f Z: %f)",
|
||||||
_owner->GetEntry(), _owner->GetGUIDLow(), x, y, z);
|
_owner->GetEntry(), _owner->GetGUIDLow(), x, y, z);
|
||||||
#endif
|
#endif
|
||||||
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, speed, path, generatePath, generatePath), MOTION_SLOT_CONTROLLED);
|
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, speed, orientation, path, generatePath, generatePath), MOTION_SLOT_CONTROLLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -168,8 +168,8 @@ class MotionMaster //: private std::stack<MovementGenerator *>
|
|||||||
void MoveConfused();
|
void MoveConfused();
|
||||||
void MoveFleeing(Unit* enemy, uint32 time = 0);
|
void MoveFleeing(Unit* enemy, uint32 time = 0);
|
||||||
void MovePoint(uint32 id, const Position &pos, bool generatePath = true, bool forceDestination = true)
|
void MovePoint(uint32 id, const Position &pos, bool generatePath = true, bool forceDestination = true)
|
||||||
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, forceDestination); }
|
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, forceDestination, MOTION_SLOT_ACTIVE, pos.GetOrientation()); }
|
||||||
void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE);
|
void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE, float orientation = 0.0f);
|
||||||
void MoveSplinePath(Movement::PointsArray* path);
|
void MoveSplinePath(Movement::PointsArray* path);
|
||||||
|
|
||||||
// These two movement types should only be used with creatures having landing/takeoff animations
|
// These two movement types should only be used with creatures having landing/takeoff animations
|
||||||
@@ -178,7 +178,7 @@ class MotionMaster //: private std::stack<MovementGenerator *>
|
|||||||
void MoveTakeoff(uint32 id, Position const& pos, float speed);
|
void MoveTakeoff(uint32 id, Position const& pos, float speed);
|
||||||
void MoveTakeoff(uint32 id, float x, float y, float z, float speed); // pussywizard: added for easy calling by passing 3 floats x, y, z
|
void MoveTakeoff(uint32 id, float x, float y, float z, float speed); // pussywizard: added for easy calling by passing 3 floats x, y, z
|
||||||
|
|
||||||
void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, const Movement::PointsArray* path = NULL, bool generatePath = false);
|
void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, const Movement::PointsArray* path = NULL, bool generatePath = false, float orientation = 0.0f);
|
||||||
void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ);
|
void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ);
|
||||||
void MoveJumpTo(float angle, float speedXY, float speedZ);
|
void MoveJumpTo(float angle, float speedXY, float speedZ);
|
||||||
void MoveJump(Position const& pos, float speedXY, float speedZ, uint32 id = 0)
|
void MoveJump(Position const& pos, float speedXY, float speedZ, uint32 id = 0)
|
||||||
|
|||||||
@@ -59,6 +59,12 @@ void PointMovementGenerator<T>::DoInitialize(T* unit)
|
|||||||
}
|
}
|
||||||
if (speed > 0.0f)
|
if (speed > 0.0f)
|
||||||
init.SetVelocity(speed);
|
init.SetVelocity(speed);
|
||||||
|
|
||||||
|
if (i_orientation > 0.0f)
|
||||||
|
{
|
||||||
|
init.SetFacing(i_orientation);
|
||||||
|
}
|
||||||
|
|
||||||
init.Launch();
|
init.Launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,6 +107,12 @@ bool PointMovementGenerator<T>::DoUpdate(T* unit, uint32 /*diff*/)
|
|||||||
init.MoveTo(i_x, i_y, i_z);
|
init.MoveTo(i_x, i_y, i_z);
|
||||||
if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit
|
if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit
|
||||||
init.SetVelocity(speed);
|
init.SetVelocity(speed);
|
||||||
|
|
||||||
|
if (i_orientation > 0.0f)
|
||||||
|
{
|
||||||
|
init.SetFacing(i_orientation);
|
||||||
|
}
|
||||||
|
|
||||||
init.Launch();
|
init.Launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ template<class T>
|
|||||||
class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator<T> >
|
class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator<T> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f, const Movement::PointsArray* _path = NULL, bool generatePath = false, bool forceDestination = false) : id(_id),
|
PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr, bool generatePath = false, bool forceDestination = false) : id(_id),
|
||||||
i_x(_x), i_y(_y), i_z(_z), speed(_speed), _generatePath(generatePath), _forceDestination(forceDestination)
|
i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination)
|
||||||
{
|
{
|
||||||
if (_path)
|
if (_path)
|
||||||
m_precomputedPath = *_path;
|
m_precomputedPath = *_path;
|
||||||
@@ -37,6 +37,7 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG
|
|||||||
uint32 id;
|
uint32 id;
|
||||||
float i_x, i_y, i_z;
|
float i_x, i_y, i_z;
|
||||||
float speed;
|
float speed;
|
||||||
|
float i_orientation;
|
||||||
bool i_recalculateSpeed;
|
bool i_recalculateSpeed;
|
||||||
Movement::PointsArray m_precomputedPath;
|
Movement::PointsArray m_precomputedPath;
|
||||||
bool _generatePath;
|
bool _generatePath;
|
||||||
|
|||||||
Reference in New Issue
Block a user