const std::vector<std::unique_ptr<System>> &get_systems() const { return systems; }
+ template<typename T>
+ T *get_system() const;
+
void tick(Time::TimeDelta);
};
template<typename T, typename F>
-void Stage::iterate_objects(const F &func)
+inline void Stage::iterate_objects(const F &func)
{
pools.get_pool<T>().iterate_objects(func);
}
template<typename T, typename... Args>
-T &Stage::add_system(Args &&... 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());
}
+template<typename T>
+inline T *Stage::get_system() const
+{
+ for(const auto &s: systems)
+ if(T *ts = dynamic_cast<T *>(s.get()))
+ return ts;
+ return nullptr;
+}
+
} // namespace Msp::Game
#endif