#include "eventsource.h"
#include "handle.h"
#include "reflection.h"
+#include "systemscheduler.h"
namespace Msp::Game {
to put it in a pool. */
std::unique_ptr<Root> root;
std::vector<std::unique_ptr<System>> systems;
+ SystemScheduler scheduler;
Handle<Camera> active_camera;
+ bool pending_reschedule = false;
public:
Stage(Reflection::Reflector &, DataFile::Collection &);
template<typename T, typename... Args>
inline T &Stage::add_system(Args &&... args)
{
- systems.emplace_back(std::make_unique<T>(*this, std::forward<Args>(args)...));
- return static_cast<T &>(*systems.back());
+ // Ensure that a reflected class exists for scheduling
+ reflector.get_or_create_class<T>();
+
+ auto &sys = systems.emplace_back(std::make_unique<T>(*this, std::forward<Args>(args)...));
+ scheduler.add_system(*sys);
+ pending_reschedule = true;
+ return static_cast<T &>(*sys);
}
template<typename T>