reflector.get_or_create_class<Entity>();
reflector.get_or_create_class<Component>();
+ reflector.get_or_create_class<System>();
}
// Hide ~unique_ptr<Stage> from the header
template<typename T, typename... Args>
inline T &Stage::add_system(Args &&... args)
{
- // 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);
+ auto &sys = static_cast<T &>(*systems.emplace_back(std::make_unique<T>(*this, std::forward<Args>(args)...)));
+ reflector.get_or_create_class<T>().template set_polymorphic_base<System>(sys);
+ scheduler.add_system(sys);
pending_reschedule = true;
- return static_cast<T &>(*sys);
+ return sys;
}
template<typename T>