throw std::invalid_argument("Owned::Owned");
Stage &stage = get_stage(*parent);
- Pool<T> &pool = stage.get_pools().get_pool<T>();
+ Pool<T> &pool = stage.get_pools().get_or_create_pool<T>();
this->ptr = pool.create(parent, std::forward<Args>(args)...);
if constexpr(std::is_base_of_v<Component, T>)
{
parent->remove_child(*this);
}
- Pool<T> &pool = stage.get_pools().get_pool<T>();
+ Pool<T> &pool = stage.get_pools().get_or_create_pool<T>();
pool.destroy(this->ptr);
}
static unsigned get_type_id() { static unsigned id = get_next_id(); return id; }
template<typename T>
- Pool<T> &get_pool();
+ Pool<T> &get_or_create_pool();
};
template<typename T>
-inline Pool<T> &PoolPool::get_pool()
+inline Pool<T> &PoolPool::get_or_create_pool()
{
unsigned id = get_type_id<T>();
if(pools.size()<=id)
template<typename T, typename F>
inline void Stage::iterate_objects(const F &func)
{
- pools.get_pool<T>().iterate_objects(func);
+ pools.get_or_create_pool<T>().iterate_objects(func);
}
template<typename T, typename... Args>
if(auto shape = dynamic_handle_cast<Game::Shape>(event.component))
if(!shape->get_technique_name().empty())
{
- RenderedEntity &re = get_rendered_entity(event.component->get_entity());
+ RenderedEntity &re = get_or_create_rendered_entity(event.component->get_entity());
if(!re.generated_mesh)
{
const GL::Technique &tech = stage.get_resources().get<GL::Technique>(shape->get_technique_name());
auto dyn_mesh_src = dynamic_handle_cast<DynamicMeshSource>(event.component);
if(mesh_source || dyn_mesh_src)
{
- RenderedEntity &re = get_rendered_entity(event.component->get_entity());
+ RenderedEntity &re = get_or_create_rendered_entity(event.component->get_entity());
if(!re.mesh_renderer)
{
const GL::Object &object = dyn_mesh_src ? dyn_mesh_src->get_object() :
auto light = dynamic_handle_cast<Game::Light>(event.component);
if(light)
{
- RenderedEntity &re = get_rendered_entity(event.component->get_entity());
+ RenderedEntity &re = get_or_create_rendered_entity(event.component->get_entity());
if(!re.light_emitter)
{
re.light_emitter = Game::Owned<LightEmitter>(re.entity, light->get_type());
}
}
-Renderer::RenderedEntity &Renderer::get_rendered_entity(Game::Handle<Game::Entity> entity)
+Renderer::RenderedEntity &Renderer::get_or_create_rendered_entity(Game::Handle<Game::Entity> entity)
{
auto i = lower_bound_member(entities, entity, &RenderedEntity::entity);
if(i!=entities.end() && i->entity==entity)
void create_sequence();
void component_created(const Game::Events::ComponentCreated &);
- RenderedEntity &get_rendered_entity(Game::Handle<Game::Entity>);
+ RenderedEntity &get_or_create_rendered_entity(Game::Handle<Game::Entity>);
void component_destroyed(const Game::Events::ComponentDestroyed &);
void camera_changed(const Game::Events::CameraChanged &);