declare_dependency<Game::Camera>(READ_FRESH);
declare_dependency<MeshRenderer>(WRITE);
- event_observer.observe<Game::Events::EntityCreated>([this](auto &e){ entity_created(e); });
+ event_observer.observe<Game::Events::ComponentCreated>([this](auto &e){ component_created(e); });
event_observer.observe<Game::Events::EntityDestroyed>([this](auto &e){ entity_destroyed(e); });
event_observer.observe<Game::Events::CameraChanged>([this](auto &e){ camera_changed(e); });
Renderer::~Renderer()
{ }
-void Renderer::entity_created(const Game::Events::EntityCreated &event)
+void Renderer::component_created(const Game::Events::ComponentCreated &event)
{
- Game::Handle<Game::MeshSource> mesh_source = event.entity->get_component<Game::MeshSource>();
- Game::Handle<MeshRenderer> mesh_renderer = event.entity->get_component<MeshRenderer>();
- if(mesh_source && !mesh_renderer)
+ Game::Handle<Game::MeshSource> mesh_source = dynamic_handle_cast<Game::MeshSource>(event.component);
+ if(mesh_source)
{
- auto i = lower_bound_member(entities, event.entity, &RenderedEntity::entity);
- const GL::Object &object = stage.get_resources().get<GL::Object>(mesh_source->get_object_name());
- i = entities.emplace(i, entity, Game::Owned<MeshRenderer>(entity, object));
- scene.add(i->mesh_renderer->get_instance());
+ Game::Handle<Game::Entity> entity = mesh_source->get_entity();
+ if(!entity->get_component<MeshRenderer>())
+ {
+ auto i = lower_bound_member(entities, entity, &RenderedEntity::entity);
+ const GL::Object &object = stage.get_resources().get<GL::Object>(mesh_source->get_object_name());
+ i = entities.emplace(i, entity, Game::Owned<MeshRenderer>(entity, object));
+ scene.add(i->mesh_renderer->get_instance());
+ }
}
}