X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fstage.h;h=d7793e22f60ec21fd52acab1b8af9aafbe2f4d94;hb=c3ac50ad3e79b26d1d99bd222a7e43adb86c2c1e;hp=80e7a4b72c25e51141d43718c6bed196ffdf712c;hpb=f90804b7a1042a1266cbe3075631e4fcc18b9a8a;p=libs%2Fgame.git diff --git a/source/game/stage.h b/source/game/stage.h index 80e7a4b..d7793e2 100644 --- a/source/game/stage.h +++ b/source/game/stage.h @@ -45,22 +45,34 @@ public: const std::vector> &get_systems() const { return systems; } + template + T *get_system() const; + void tick(Time::TimeDelta); }; template -void Stage::iterate_objects(const F &func) +inline void Stage::iterate_objects(const F &func) { pools.get_pool().iterate_objects(func); } template -T &Stage::add_system(Args &&... args) +inline T &Stage::add_system(Args &&... args) { systems.emplace_back(std::make_unique(*this, std::forward(args)...)); return static_cast(*systems.back()); } +template +inline T *Stage::get_system() const +{ + for(const auto &s: systems) + if(T *ts = dynamic_cast(s.get())) + return ts; + return nullptr; +} + } // namespace Msp::Game #endif