Core/Movement: Reduce code duplication in few MotionMaster::*Clear functions

(cherry picked from commit 76fe8ba73901b61856d1fdf2c28911275a6e6440)
This commit is contained in:
Shauren
2026-06-30 13:56:26 +02:00
parent aada290c8c
commit 7350b76756
+4 -19
View File
@@ -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<bool(MovementGenerator*)> 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<bool(MovementGenerator*)> 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;
}