diff --git a/src/timer/timer_game_tick.cpp b/src/timer/timer_game_tick.cpp index 34a1a3227c..ed7df50279 100644 --- a/src/timer/timer_game_tick.cpp +++ b/src/timer/timer_game_tick.cpp @@ -51,7 +51,7 @@ void TimeoutTimer::Elapsed(TimerGameTick::TElapsed delta) template<> void TimerManager::Elapsed(TimerGameTick::TElapsed delta) { - for (auto timer : TimerManager::GetTimers()) { + for (auto timer : TimerManager::GetTimerVector()) { timer->Elapsed(delta); } } diff --git a/src/timer/timer_manager.h b/src/timer/timer_manager.h index 75493edfc9..08fbac018d 100644 --- a/src/timer/timer_manager.h +++ b/src/timer/timer_manager.h @@ -117,6 +117,19 @@ private: static btree::btree_set *, base_timer_sorter> timers; return timers; } + + /** List of active timers, as a std::vector, to allow for timers to be added/removed during iteration. */ + static std::vector *> GetTimerVector() + { + std::vector *> result; + + const auto &timers = TimerManager::GetTimers(); + result.reserve(timers.size()); + for (BaseTimer * timer : timers) { + result.push_back(timer); + } + return result; + } }; #endif /* TIMER_MANAGER_H */