1 #ifndef MSP_GAME_STAGE_H_
2 #define MSP_GAME_STAGE_H_
5 #include <msp/time/timedelta.h>
18 std::vector<std::unique_ptr<System>> systems;
24 PoolPool &get_pools() { return pools; }
25 Handle<Root> get_root() { return Handle<Root>::from_object(&root); }
27 template<typename T, typename F>
28 void iterate_objects(const F &);
30 template<typename T, typename... Args>
31 T &add_system(Args &&...);
33 const std::vector<std::unique_ptr<System>> &get_systems() const { return systems; }
35 void tick(Time::TimeDelta);
38 template<typename T, typename F>
39 void Stage::iterate_objects(const F &func)
41 pools.get_pool<T>().iterate_objects(func);
44 template<typename T, typename... Args>
45 T &Stage::add_system(Args &&... args)
47 systems.emplace_back(std::make_unique<T>(*this, std::forward<Args>(args)...));
48 return static_cast<T &>(*systems.back());
51 } // namespace Msp::Game