From 7350b76756d9460837c4d83cb2afc7d9bb877e82 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 20 Feb 2026 22:11:23 +0100 Subject: [PATCH] Core/Movement: Reduce code duplication in few MotionMaster::*Clear functions (cherry picked from commit 76fe8ba73901b61856d1fdf2c28911275a6e6440) --- src/server/game/Movement/MotionMaster.cpp | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 41e7295627..0d99d11736 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -415,14 +415,7 @@ void MotionMaster::Remove(MovementGeneratorType type, MovementSlot slot/* = MOTI DirectClearDefault(); break; case MOTION_SLOT_ACTIVE: - do - { - auto itr = std::ranges::find(_generators, type, - [](MovementGenerator const* a) { return a->GetMovementGeneratorType(); }); - if (itr == _generators.end()) - break; - Remove(itr, GetCurrentMovementGenerator() == *itr, false); - } while (true); + DirectClear([type](MovementGenerator const* a) { return a->GetMovementGeneratorType() == type; }); break; default: break; @@ -491,11 +484,7 @@ void MotionMaster::Clear(MovementGeneratorPriority priority) if (Empty()) return; - std::function criteria = [priority](MovementGenerator* a) -> bool - { - return a->Priority == priority; - }; - DirectClear(criteria); + DirectClear([priority](MovementGenerator const* a) { return a->Priority == priority; }); } void MotionMaster::PropagateSpeedChange() @@ -1241,15 +1230,11 @@ void MotionMaster::DirectClearDefault() void MotionMaster::DirectClear(std::function const& filter) { + MovementGenerator const* top = GetCurrentMovementGenerator(); for (auto itr = _generators.begin(); itr != _generators.end();) { if (filter(*itr)) - { - MovementGenerator const* top = GetCurrentMovementGenerator(); // erase may change top, get fresh value on every removal - MovementGenerator* movement = *itr; - itr = _generators.erase(itr); - Delete(movement, movement == top, false); - } + Remove(itr, *itr == top, false); else ++itr; }