]> git.tdb.fi Git - libs/game.git/commitdiff
Refactor Renderer to pick up components instead of entities
authorMikko Rasa <tdb@tdb.fi>
Sat, 21 Jan 2023 18:44:36 +0000 (20:44 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sat, 21 Jan 2023 18:46:37 +0000 (20:46 +0200)
This makes more sense since there isn't an entity class which always
contains a MeshSource.

source/gameview/renderer.cpp
source/gameview/renderer.h

index cef857daa902baed17b9fa4027791c8745737ca5..35f9c6fbb7ceead3050b879ccaadcf7630431857 100644 (file)
@@ -20,7 +20,7 @@ Renderer::Renderer(Game::Stage &s, GL::View &v):
        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); });
 
@@ -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<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());
+               }
        }
 }
 
index ca45b21b7657c113b30ff1ffb3cf86ef4d5f7067..f3691586eb068b8a9fd3edc6778ec4445ece4bfc 100644 (file)
@@ -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 &);