From c721d667c8bfc8b103028504f164450b7b314239 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 21 Jan 2023 20:44:36 +0200 Subject: [PATCH] Refactor Renderer to pick up components instead of entities This makes more sense since there isn't an entity class which always contains a MeshSource. --- source/gameview/renderer.cpp | 21 ++++++++++++--------- source/gameview/renderer.h | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/source/gameview/renderer.cpp b/source/gameview/renderer.cpp index cef857d..35f9c6f 100644 --- a/source/gameview/renderer.cpp +++ b/source/gameview/renderer.cpp @@ -20,7 +20,7 @@ Renderer::Renderer(Game::Stage &s, GL::View &v): declare_dependency(READ_FRESH); declare_dependency(WRITE); - event_observer.observe([this](auto &e){ entity_created(e); }); + event_observer.observe([this](auto &e){ component_created(e); }); event_observer.observe([this](auto &e){ entity_destroyed(e); }); event_observer.observe([this](auto &e){ camera_changed(e); }); @@ -32,16 +32,19 @@ Renderer::Renderer(Game::Stage &s, GL::View &v): Renderer::~Renderer() { } -void Renderer::entity_created(const Game::Events::EntityCreated &event) +void Renderer::component_created(const Game::Events::ComponentCreated &event) { - Game::Handle mesh_source = event.entity->get_component(); - Game::Handle mesh_renderer = event.entity->get_component(); - if(mesh_source && !mesh_renderer) + Game::Handle mesh_source = dynamic_handle_cast(event.component); + if(mesh_source) { - auto i = lower_bound_member(entities, event.entity, &RenderedEntity::entity); - const GL::Object &object = stage.get_resources().get(mesh_source->get_object_name()); - i = entities.emplace(i, entity, Game::Owned(entity, object)); - scene.add(i->mesh_renderer->get_instance()); + Game::Handle entity = mesh_source->get_entity(); + if(!entity->get_component()) + { + auto i = lower_bound_member(entities, entity, &RenderedEntity::entity); + const GL::Object &object = stage.get_resources().get(mesh_source->get_object_name()); + i = entities.emplace(i, entity, Game::Owned(entity, object)); + scene.add(i->mesh_renderer->get_instance()); + } } } diff --git a/source/gameview/renderer.h b/source/gameview/renderer.h index ca45b21..f369158 100644 --- a/source/gameview/renderer.h +++ b/source/gameview/renderer.h @@ -39,7 +39,7 @@ public: ~Renderer(); private: - void entity_created(const Game::Events::EntityCreated &); + void component_created(const Game::Events::ComponentCreated &); void entity_destroyed(const Game::Events::EntityDestroyed &); void camera_changed(const Game::Events::CameraChanged &); -- 2.45.2