]> git.tdb.fi Git - libs/game.git/commitdiff
Identify stages with a name
authorMikko Rasa <tdb@tdb.fi>
Thu, 8 Jun 2023 08:29:07 +0000 (11:29 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 8 Jun 2023 08:29:07 +0000 (11:29 +0300)
source/game/director.cpp
source/game/director.h
source/game/stage.cpp
source/game/stage.h

index 820a6fcadef53ab9fa14af3fcfc1e073efc64b92..410aa0aa936553b664f71c69554028613901dc49 100644 (file)
@@ -27,9 +27,9 @@ Director::Director(DataFile::Collection &r):
 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;
@@ -43,6 +43,12 @@ void Director::activate_stage(Stage &s)
        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);
index 80377883bf947b5be851704d929b459e0cdf6e7a..9ae322cda6d47c3dbcefb42500c80d4d6a0d5d0c 100644 (file)
@@ -52,8 +52,9 @@ public:
        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();
index 3a2f5cda9d243c294ce455e28a11a405087ac87b..d3ca0cbafadd5f9e8b76c3baaf69ee05a58f2612 100644 (file)
@@ -10,7 +10,8 @@ using namespace std;
 
 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),
index 03a8adebc2531e605e5e7e3a58f8ca1dfb573c36..b06006ba579a121eff10072ac91bc06c9a764448 100644 (file)
@@ -25,6 +25,7 @@ public:
                Events::ComponentCreated, Events::ComponentDestroyed, Events::CameraChanged>;
 
 private:
+       std::string name;
        Reflection::Reflector &reflector;
        DataFile::Collection &resources;
        PoolPool pools;
@@ -40,9 +41,10 @@ private:
        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; }