From 852164132cd7a545b90bf938d02893c1bb01651a Mon Sep 17 00:00:00 2001 From: Treeston Date: Wed, 29 Aug 2018 17:15:22 +0200 Subject: Core/Movement: Some improvements to script interfaces for SplineChainMovementGenerator (cherry picked from commit e63e0cb6fc6360e6e80874371dd612c46b0c0482) --- .../MovementGenerators/SplineChainMovementGenerator.cpp | 15 +++++---------- .../MovementGenerators/SplineChainMovementGenerator.h | 3 ++- 2 files changed, 7 insertions(+), 11 deletions(-) (limited to 'src') 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 id) { std::function criteria = [id](MovementGenerator const* movement) -> bool { if (movement->GetMovementGeneratorType() == SPLINE_CHAIN_MOTION_TYPE) - { - SplineChainMovementGenerator const* splineChainMovement = dynamic_cast(movement); - return splineChainMovement && splineChainMovement->GetId() == id; - } + return (!id || static_cast(movement)->GetId() == *id); + return false; }; if (MovementGenerator const* activeGenerator = owner->GetMotionMaster()->GetMovementGenerator(criteria)) - { - if (activeGenerator->GetMovementGeneratorType() == SPLINE_CHAIN_MOTION_TYPE) - info = reinterpret_cast(activeGenerator)->GetResumeInfo(owner); - } + info = static_cast(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 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 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; -- cgit v1.2.3