From 5cd5542e69076c0e221aca2fb292e49465da60e4 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 15 May 2023 23:38:04 +0300 Subject: [PATCH] Track destruction of individual components in Renderer --- source/gameview/renderer.cpp | 16 +++++++++++----- source/gameview/renderer.h | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/source/gameview/renderer.cpp b/source/gameview/renderer.cpp index f9dae4b..8a4c416 100644 --- a/source/gameview/renderer.cpp +++ b/source/gameview/renderer.cpp @@ -25,7 +25,7 @@ Renderer::Renderer(Game::Stage &s, GL::View &v): declare_dependency(WRITE); event_observer.observe([this](auto &e){ component_created(e); }); - event_observer.observe([this](auto &e){ entity_destroyed(e); }); + event_observer.observe([this](auto &e){ component_destroyed(e); }); event_observer.observe([this](auto &e){ camera_changed(e); }); stage.synthesize_initial_events(event_observer); @@ -77,11 +77,17 @@ Renderer::RenderedEntity &Renderer::get_rendered_entity(Game::Handleentity==event.entity) - entities.erase(i); + Game::Handle 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(event.component)) + i->mesh_renderer = nullptr; + if(dynamic_handle_cast(event.component)) + i->light_emitter = nullptr; + } } void Renderer::camera_changed(const Game::Events::CameraChanged &event) diff --git a/source/gameview/renderer.h b/source/gameview/renderer.h index 23ea5b4..3b39945 100644 --- a/source/gameview/renderer.h +++ b/source/gameview/renderer.h @@ -47,7 +47,7 @@ public: private: void component_created(const Game::Events::ComponentCreated &); RenderedEntity &get_rendered_entity(Game::Handle); - void entity_destroyed(const Game::Events::EntityDestroyed &); + void component_destroyed(const Game::Events::ComponentDestroyed &); void camera_changed(const Game::Events::CameraChanged &); public: -- 2.45.2