X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fdirector.cpp;h=53b2e7f9a3a0c8668580a139355133eebe7b3f61;hb=3b551a2caabdfebaac592b5fcbbeb6cbfe2fd43f;hp=741965bc290988a7f73210bf453d5cb081533f98;hpb=248d62f7240d342982ade65a510be912b867fe49;p=libs%2Fgame.git diff --git a/source/game/director.cpp b/source/game/director.cpp index 741965b..53b2e7f 100644 --- a/source/game/director.cpp +++ b/source/game/director.cpp @@ -1,18 +1,45 @@ #include "director.h" #include #include +#include "component.h" +#include "entity.h" #include "stage.h" using namespace std; namespace Msp::Game { +Director::Director(DataFile::Collection &r): + resources(r), + event_source(event_bus) +{ +#if DEBUG + access_guard.emplace(); +#endif + + reflector.get_or_create_class().set_polymorphic_base(); + reflector.get_or_create_class().set_polymorphic_base(); +} + +// Hide ~unique_ptr from the header +Director::~Director() +{ } + Stage &Director::create_stage() { - stages.emplace_back(std::make_unique()); + stages.emplace_back(std::make_unique(std::ref(reflector), std::ref(resources))); + event_source.emit(std::ref(*stages.back())); return *stages.back(); } +void Director::activate_stage(Stage &s) +{ + if(active_stage) + event_source.emit(std::ref(s)); + active_stage = &s; + event_source.emit(std::ref(s)); +} + void Director::tick() { Time::TimeStamp now = Time::now();