diff --git a/engine/include/engine/scene/scene.h b/engine/include/engine/scene/scene.h index f1bad76..03d103a 100644 --- a/engine/include/engine/scene/scene.h +++ b/engine/include/engine/scene/scene.h @@ -25,11 +25,15 @@ public: Entity(const Entity& other) = default; template - void AddComponent(Args&&... args) { + decltype(auto) AddComponent(Args&&... args) { assert(m_entity != entt::null && "Entity is empty"); assert(m_scene && "Scene has not been assigned to the entity"); - m_scene->m_registry.emplace(m_entity, std::forward(args)...); + if constexpr (std::is_void_vm_registry.emplace(m_entity, std::forward(args)...))>) { + m_scene->m_registry.emplace(m_entity, std::forward(args)...); + } else { + return m_scene->m_registry.emplace(m_entity, std::forward(args)...); + } } template diff --git a/sandbox/src/main.cpp b/sandbox/src/main.cpp index be4c0a9..836f506 100644 --- a/sandbox/src/main.cpp +++ b/sandbox/src/main.cpp @@ -53,20 +53,14 @@ public: modelEntity.AddComponent(); assert(modelEntity.HasComponent() && "model doesn't have any mesh!"); - // Object* grass = Object::LoadFile("./assets/common/cube/cube.obj"); - // const auto cubeEntity = scene->m_registry.create(); - // scene->m_registry.emplace(cubeEntity, glm::vec3(-1.5f, 0.4f, 0.f)); - // scene->m_registry.emplace(cubeEntity, std::shared_ptr(grass)); - // Cube template (use shared object to avoid reloading 1000 times) std::shared_ptr cubeObj = std::shared_ptr(Object::LoadFile("./assets/grass_block/grass_block.obj")); auto batchEntt = scene->CreateEntity(); - batchEntt.AddComponent(); - auto& cubeBatch = batchEntt.GetComponent(); + auto& cubeBatch = batchEntt.AddComponent(); + // auto& cubeBatch = batchEntt.GetComponent(); batchEntt.AddComponent(cubeObj); assert(batchEntt.HasComponent() && "batch doesn't have any batch component!"); assert(batchEntt.HasComponent() && "batch doesn't have any mesh component!"); - // auto cubeBatch = scene->m_registry.get(batchEntt); // Generate 1000 random cubes for (int i = 0; i < 1000; ++i) { auto cubeEntity = scene->CreateEntity();