Director::~Director()
{ }
-Stage &Director::create_stage()
+Stage &Director::create_stage(const string &n)
{
- Stage &stage = *stages.emplace_back(std::make_unique<Stage>(reflector, resources));
+ Stage &stage = *stages.emplace_back(std::make_unique<Stage>(n, reflector, resources));
stage.add_system<TransformPropagator>();
event_source.emit<Events::StageCreated>(stage);
return stage;
event_source.emit<Events::StageActivated>(s);
}
+Stage *Director::find_stage(const string &n) const
+{
+ auto i = ranges::find_if(stages, [&n](const auto &s){ return s->get_name()==n; });
+ return (i!=stages.end() ? i->get() : nullptr);
+}
+
void Director::tick()
{
io_dispatcher.tick(Time::zero);
EventSource &get_event_source() { return event_source; }
const std::vector<std::unique_ptr<Stage>> &get_stages() const { return stages; }
- Stage &create_stage();
+ Stage &create_stage(const std::string &);
void activate_stage(Stage &);
+ Stage *find_stage(const std::string &) const;
Stage *get_active_stage() const { return active_stage; }
void tick();
namespace Msp::Game {
-Stage::Stage(Reflection::Reflector &f, DataFile::Collection &r):
+Stage::Stage(const string &n, Reflection::Reflector &f, DataFile::Collection &r):
+ name(n),
reflector(f),
resources(r),
pools(reflector),
Events::ComponentCreated, Events::ComponentDestroyed, Events::CameraChanged>;
private:
+ std::string name;
Reflection::Reflector &reflector;
DataFile::Collection &resources;
PoolPool pools;
bool pending_reschedule = false;
public:
- Stage(Reflection::Reflector &, DataFile::Collection &);
+ Stage(const std::string &, Reflection::Reflector &, DataFile::Collection &);
~Stage();
+ const std::string &get_name() const { return name; }
Reflection::Reflector &get_reflector() const { return reflector; }
DataFile::Collection &get_resources() const { return resources; }
PoolPool &get_pools() { return pools; }