#ifndef MSP_GAME_SYSTEM_H_
#define MSP_GAME_SYSTEM_H_
+#include <functional>
#include <msp/time/timedelta.h>
namespace Msp::Game {
{
protected:
Stage &stage;
+ std::vector<std::function<void()>> deferred_queue;
System(Stage &s): stage(s) { }
public:
Stage &get_stage() const { return stage; }
virtual void tick(Time::TimeDelta) = 0;
+ virtual void deferred_tick();
+
+protected:
+ template<typename F>
+ void defer(F &&f) { deferred_queue.emplace_back(std::forward<F>(f)); }
};
} // namespace Msp::Game