]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/stage.cpp
Add a view sub-library, including a Camera component
[libs/game.git] / source / game / stage.cpp
index 0eb4238fcff375709404b00e52061730e0694cae..1c56c7e8a159abe3e41f32bb3b4b629eb4ffb533 100644 (file)
@@ -1,14 +1,24 @@
 #include "stage.h"
+#include "camera.h"
 #include "root.h"
 #include "system.h"
 
+using namespace std;
+
 namespace Msp::Game {
 
 Stage::Stage(DataFile::Collection &r):
        resources(r),
        event_source(event_bus),
+       event_observer(event_bus),
        root(std::make_unique<Root>(*this))
-{ }
+{
+       event_observer.observe<Events::ComponentCreated>([this](auto &e){
+               if(!active_camera)
+                       if(Handle<Camera> camera = dynamic_handle_cast<Camera>(e.component))
+                               set_active_camera(camera);
+       });
+}
 
 // Hide unique_ptr destructors from the header
 Stage::~Stage()
@@ -19,6 +29,12 @@ void Stage::remove_system(System &s)
        erase_if(systems, [&s](auto &p){ return p.get()==&s; });
 }
 
+void Stage::set_active_camera(Handle<Camera> c)
+{
+       active_camera = c;
+       event_source.emit<Events::CameraChanged>(active_camera);
+}
+
 void Stage::tick(Time::TimeDelta dt)
 {
        for(const auto &s: systems)