Малък фикс в TimerMgr
Проблем: Когато таймера е стопиран в предишния цикъл на main loop-a на Engine чрез TimerClient::stopTimer() и изтече в този - ще се генерира onTimerTimeout с Id на таймер който вече е спрян, също така ще намали броя на итерации в цикъл
for(auto& [id, data] : m_TimerMap) {
        data.m_Remaining -= elapsed_ms;
        if (0 > data.m_Remaining) {
            onTimerTimeout(id, data);
        }
  }
Вариант 1:
Предлагам малка промяна в реда на TimerMgr::process() метода - removeTimers() да се премети в началото на фунията.
Вариант 2:
В stopTimer и в detachTimerClient да се извиква removeTimers() преди края на методите.
Да, абасолютно си прав!
Супер сте, колеги :)