@@ -416,14 +416,7 @@ void MotionMaster::Remove(MovementGeneratorType type, MovementSlot slot/* = MOTI
416416 DirectClearDefault ();
417417 break ;
418418 case MOTION_SLOT_ACTIVE:
419- do
420- {
421- auto itr = std::ranges::find (_generators, type,
422- [](MovementGenerator const * a) { return a->GetMovementGeneratorType (); });
423- if (itr == _generators.end ())
424- break ;
425- Remove (itr, GetCurrentMovementGenerator () == *itr, false );
426- } while (true );
419+ DirectClear ([type](MovementGenerator const * a) { return a->GetMovementGeneratorType () == type; });
427420 break ;
428421 default :
429422 break ;
@@ -492,11 +485,7 @@ void MotionMaster::Clear(MovementGeneratorPriority priority)
492485 if (Empty ())
493486 return ;
494487
495- std::function<bool (MovementGenerator*)> criteria = [priority](MovementGenerator* a) -> bool
496- {
497- return a->Priority == priority;
498- };
499- DirectClear (criteria);
488+ DirectClear ([priority](MovementGenerator const * a) { return a->Priority == priority; });
500489}
501490
502491void MotionMaster::PropagateSpeedChange ()
@@ -1115,15 +1104,11 @@ void MotionMaster::DirectClearDefault()
11151104
11161105void MotionMaster::DirectClear (std::function<bool (MovementGenerator*)> const & filter)
11171106{
1107+ MovementGenerator const * top = GetCurrentMovementGenerator ();
11181108 for (auto itr = _generators.begin (); itr != _generators.end ();)
11191109 {
11201110 if (filter (*itr))
1121- {
1122- MovementGenerator const * top = GetCurrentMovementGenerator (); // erase may change top, get fresh value on every removal
1123- MovementGenerator* movement = *itr;
1124- itr = _generators.erase (itr);
1125- Delete (movement, movement == top, false );
1126- }
1111+ Remove (itr, *itr == top, false );
11271112 else
11281113 ++itr;
11291114 }
0 commit comments