declare_dependency<MeshRenderer>(WRITE);
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::ComponentDestroyed>([this](auto &e){ component_destroyed(e); });
event_observer.observe<Game::Events::CameraChanged>([this](auto &e){ camera_changed(e); });
stage.synthesize_initial_events(event_observer);
return *entities.emplace(i, entity);
}
-void Renderer::entity_destroyed(const Game::Events::EntityDestroyed &event)
+void Renderer::component_destroyed(const Game::Events::ComponentDestroyed &event)
{
- auto i = lower_bound_member(entities, event.entity, &RenderedEntity::entity);
- if(i!=entities.end() && i->entity==event.entity)
- entities.erase(i);
+ Game::Handle<Game::Entity> entity = event.component->get_entity();
+ auto i = lower_bound_member(entities, entity, &RenderedEntity::entity);
+ if(i!=entities.end() && i->entity==entity)
+ {
+ if(dynamic_handle_cast<Game::MeshSource>(event.component))
+ i->mesh_renderer = nullptr;
+ if(dynamic_handle_cast<Game::Light>(event.component))
+ i->light_emitter = nullptr;
+ }
}
void Renderer::camera_changed(const Game::Events::CameraChanged &event)
private:
void component_created(const Game::Events::ComponentCreated &);
RenderedEntity &get_rendered_entity(Game::Handle<Game::Entity>);
- void entity_destroyed(const Game::Events::EntityDestroyed &);
+ void component_destroyed(const Game::Events::ComponentDestroyed &);
void camera_changed(const Game::Events::CameraChanged &);
public: