#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()
{ }
+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)