diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-02 23:24:42 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-02 23:24:42 +0100 |
commit | 0026706e8333c79f8baae341b94e65e1eac484ca (patch) | |
tree | f2a72f743a5034c3d557edb44e613553d1a5948b /src/server/game/Movement/MotionMaster.cpp | |
parent | 7209f1cbf9881932ccff9cafc92f7abf86671674 (diff) |
Core/Movement: Extend MovePoint with new arguments
* Forced speed
* Speed selection mode (walk, run or default)
* Distance from target point that is considered close enough to finalize movement
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 41 |
1 files changed, 12 insertions, 29 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 329eadb43e5..86f88038035 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -656,23 +656,17 @@ void MotionMaster::MoveFleeing(Unit* enemy, uint32 time) Add(new FleeingMovementGenerator<Player>(enemy->GetGUID())); } -void MotionMaster::MovePoint(uint32 id, Position const& pos, bool generatePath/* = true*/, Optional<float> finalOrient/* = {}*/) +void MotionMaster::MovePoint(uint32 id, Position const& pos, bool generatePath/* = true*/, Optional<float> finalOrient/* = {}*/, Optional<float> speed /*= {}*/, + MovementWalkRunSpeedSelectionMode speedSelectionMode /*= MovementWalkRunSpeedSelectionMode::Default*/, Optional<float> closeEnoughDistance /*= {}*/) { - MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, finalOrient); + MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, finalOrient, speed, speedSelectionMode, closeEnoughDistance); } -void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath, Optional<float> finalOrient) +void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath /*= true*/, Optional<float> finalOrient /*= {}*/, Optional<float> speed /*= {}*/, + MovementWalkRunSpeedSelectionMode speedSelectionMode /*= MovementWalkRunSpeedSelectionMode::Default*/, Optional<float> closeEnoughDistance /*= {}*/) { - if (_owner->GetTypeId() == TYPEID_PLAYER) - { - TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MovePoint: '{}', targeted point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - Add(new PointMovementGenerator<Player>(id, x, y, z, generatePath, 0.0f, finalOrient)); - } - else - { - TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MovePoint: '{}', targeted point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - Add(new PointMovementGenerator<Creature>(id, x, y, z, generatePath, 0.0f, finalOrient)); - } + TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MovePoint: '{}', targeted point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); + Add(new PointMovementGenerator(id, x, y, z, generatePath, speed, finalOrient, nullptr, nullptr, speedSelectionMode, closeEnoughDistance)); } void MotionMaster::MoveCloserAndStop(uint32 id, Unit* target, float distance) @@ -733,22 +727,11 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed /*= SPEED_C if (_slot[MOTION_SLOT_CONTROLLED] && _slot[MOTION_SLOT_CONTROLLED]->GetMovementGeneratorType() != DISTRACT_MOTION_TYPE) return; */ - if (_owner->GetTypeId() == TYPEID_PLAYER) - { - TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveCharge: '{}', charging point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - PointMovementGenerator<Player>* movement = new PointMovementGenerator<Player>(id, x, y, z, generatePath, speed, {}, target, spellEffectExtraData); - movement->Priority = MOTION_PRIORITY_HIGHEST; - movement->BaseUnitState = UNIT_STATE_CHARGING; - Add(movement); - } - else - { - TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveCharge: '{}', charging point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - PointMovementGenerator<Creature>* movement = new PointMovementGenerator<Creature>(id, x, y, z, generatePath, speed, {}, target, spellEffectExtraData); - movement->Priority = MOTION_PRIORITY_HIGHEST; - movement->BaseUnitState = UNIT_STATE_CHARGING; - Add(movement); - } + TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveCharge: '{}', charging point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, x, y, z); + PointMovementGenerator* movement = new PointMovementGenerator(id, x, y, z, generatePath, speed, {}, target, spellEffectExtraData); + movement->Priority = MOTION_PRIORITY_HIGHEST; + movement->BaseUnitState = UNIT_STATE_CHARGING; + Add(movement); } void MotionMaster::MoveCharge(PathGenerator const& path, float speed /*= SPEED_CHARGE*/, Unit const* target /*= nullptr*/, |