diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-08-29 17:15:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-10-23 15:59:31 +0200 |
commit | 852164132cd7a545b90bf938d02893c1bb01651a (patch) | |
tree | f4653246b2a7f937610d0d9a61ae929f7a840966 | |
parent | d57e74b3b592536ffd32a92a342eb0abc6e05e62 (diff) |
Core/Movement: Some improvements to script interfaces for SplineChainMovementGenerator
(cherry picked from commit e63e0cb6fc6360e6e80874371dd612c46b0c0482)
-rw-r--r-- | src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h | 3 |
2 files changed, 7 insertions, 11 deletions
diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp index 543d40eb332..aad994a8c70 100644 --- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp @@ -211,23 +211,18 @@ SplineChainResumeInfo SplineChainMovementGenerator::GetResumeInfo(Unit const* ow return SplineChainResumeInfo(_id, &_chain, _walk, uint8(_nextIndex - 1), uint8(owner->movespline->_currentSplineIdx()), _msToNext); } -/* static */ void SplineChainMovementGenerator::GetResumeInfo(Unit const* owner, uint32 id, SplineChainResumeInfo& info) +/* static */ void SplineChainMovementGenerator::GetResumeInfo(SplineChainResumeInfo& info, Unit const* owner, Optional<uint32> id) { std::function<bool(MovementGenerator const*)> criteria = [id](MovementGenerator const* movement) -> bool { if (movement->GetMovementGeneratorType() == SPLINE_CHAIN_MOTION_TYPE) - { - SplineChainMovementGenerator const* splineChainMovement = dynamic_cast<SplineChainMovementGenerator const*>(movement); - return splineChainMovement && splineChainMovement->GetId() == id; - } + return (!id || static_cast<SplineChainMovementGenerator const*>(movement)->GetId() == *id); + return false; }; if (MovementGenerator const* activeGenerator = owner->GetMotionMaster()->GetMovementGenerator(criteria)) - { - if (activeGenerator->GetMovementGeneratorType() == SPLINE_CHAIN_MOTION_TYPE) - info = reinterpret_cast<SplineChainMovementGenerator const*>(activeGenerator)->GetResumeInfo(owner); - } + info = static_cast<SplineChainMovementGenerator const*>(activeGenerator)->GetResumeInfo(owner); else - info.Chain = nullptr; + info.Clear(); } diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h index 05ccc6a69fd..4c837a3a1cd 100644 --- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h @@ -20,6 +20,7 @@ #include "SplineChain.h" #include "MovementGenerator.h" +#include "Optional.h" #include <vector> class Unit; @@ -38,7 +39,7 @@ class TC_GAME_API SplineChainMovementGenerator : public MovementGenerator MovementGeneratorType GetMovementGeneratorType() const override; // Builds info that can later be used to resume this spline chain movement at the current position - static void GetResumeInfo(Unit const* owner, uint32 id, SplineChainResumeInfo& info); + static void GetResumeInfo(SplineChainResumeInfo& info, Unit const* owner, Optional<uint32> id = {}); // Leaving the object method public for people that know what they're doing to use // But really, 99% of the time you should be using the static one instead SplineChainResumeInfo GetResumeInfo(Unit const* owner) const; |