X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fowned.h;h=d6f9f17a9ce170d7456dbafe08b3e53fe1a29418;hb=f377d216dfc44e36da3697557f38dfedcbec45d1;hp=7159c7d9622a06fd83301b7565dc1d55c0beedcc;hpb=c48c91b722ae2ce34becc1ba975cd3b937f58b83;p=libs%2Fgame.git diff --git a/source/game/owned.h b/source/game/owned.h index 7159c7d..d6f9f17 100644 --- a/source/game/owned.h +++ b/source/game/owned.h @@ -2,6 +2,7 @@ #define MSP_GAME_OWNED_H_ #include +#include "accessguard.h" #include "events.h" #include "handle.h" #include "stage.h" @@ -43,19 +44,28 @@ template template Owned::Owned(Handle

parent, Args &&... args) { +#ifdef DEBUG + AccessGuard::get_instance().check(); +#endif + if(!parent) throw std::invalid_argument("Owned::Owned"); Stage &stage = get_stage(*parent); Pool &pool = stage.get_pools().get_pool(); + bool first_created = !pool.get_capacity(); this->ptr = pool.create(parent, std::forward(args)...); if constexpr(std::is_base_of_v) { + if(first_created) + stage.get_reflector().get_or_create_class().template set_polymorphic_base(**this); parent->add_component(*this); stage.get_event_source().emit(*this); } else { + if(first_created) + stage.get_reflector().get_or_create_class().template set_polymorphic_base(**this); parent->add_child(*this); stage.get_event_source().emit(*this); } @@ -89,6 +99,10 @@ void Owned::destroy() if(!obj) return; +#ifdef DEBUG + AccessGuard::get_instance().check(); +#endif + Stage &stage = get_stage(*obj); if constexpr(std::is_base_of_v)