diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-26 12:22:41 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-26 12:22:41 +0200 |
commit | 8bf3bc071ba0de9405f9e573541251d5fcd63cf3 (patch) | |
tree | 04e731bfe42c639444053d45ed36094445168b64 /src/server/game/Movement/MotionMaster.cpp | |
parent | b68d66104da1851a9c6a370841dacb68fb0ee27f (diff) |
Core/Movement: Allow passing tier transition id (db2 id) to land/takeoff movement
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 6eeeb48ef78..4afc3a0f610 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -692,28 +692,54 @@ void MotionMaster::MoveCloserAndStop(uint32 id, Unit* target, float distance) } } -void MotionMaster::MoveLand(uint32 id, Position const& pos, Optional<float> velocity /*= {}*/) +void MotionMaster::MoveLand(uint32 id, Position const& pos, Optional<int32> tierTransitionId /*= {}*/, Optional<float> velocity /*= {}*/, + MovementWalkRunSpeedSelectionMode speedSelectionMode /*= MovementWalkRunSpeedSelectionMode::Default*/) { TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveLand: '{}', landing point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); std::function<void(Movement::MoveSplineInit&)> initializer = [=](Movement::MoveSplineInit& init) { init.MoveTo(PositionToVector3(pos), false); - init.SetAnimation(AnimTier::Ground); + init.SetAnimation(AnimTier::Ground, tierTransitionId.value_or(0)); + switch (speedSelectionMode) + { + case MovementWalkRunSpeedSelectionMode::ForceRun: + init.SetWalk(false); + break; + case MovementWalkRunSpeedSelectionMode::ForceWalk: + init.SetWalk(true); + break; + case MovementWalkRunSpeedSelectionMode::Default: + default: + break; + } if (velocity) init.SetVelocity(*velocity); }; Add(new GenericMovementGenerator(std::move(initializer), EFFECT_MOTION_TYPE, id)); } -void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, Optional<float> velocity /*= {}*/) +void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, Optional<int32> tierTransitionId /*= {}*/, Optional<float> velocity /*= {}*/, + MovementWalkRunSpeedSelectionMode speedSelectionMode /*= MovementWalkRunSpeedSelectionMode::Default*/) { TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveTakeoff: '{}', landing point Id: {} (X: {}, Y: {}, Z: {})", _owner->GetGUID().ToString(), id, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); std::function<void(Movement::MoveSplineInit&)> initializer = [=](Movement::MoveSplineInit& init) { init.MoveTo(PositionToVector3(pos), false); - init.SetAnimation(AnimTier::Hover); + init.SetAnimation(AnimTier::Hover, tierTransitionId.value_or(0)); + switch (speedSelectionMode) + { + case MovementWalkRunSpeedSelectionMode::ForceRun: + init.SetWalk(false); + break; + case MovementWalkRunSpeedSelectionMode::ForceWalk: + init.SetWalk(true); + break; + case MovementWalkRunSpeedSelectionMode::Default: + default: + break; + } if (velocity) init.SetVelocity(*velocity); }; |