// ComponentFactory.h #pragma once #include #include #include #include #include "entity.h" #include "component.h" #include "components/identity_component.h" #include "components/render_component.h" #include "components/transform_component.h" #include "components/physics_component.h" #include "components/shader_component.h" #include "components/model_path_component.h" class ComponentFactory { public: static ComponentFactory& Get() { static ComponentFactory instance; return instance; } template void EnregistrerComposant(const std::string& typeName) { m_creators[typeName] = [](std::shared_ptr entity) -> std::shared_ptr { return entity->AddComponent(); }; } std::shared_ptr CreerComposant(const std::string& typeName, std::shared_ptr entity) { auto it = m_creators.find(typeName); if (it != m_creators.end()) { return it->second(entity); } return nullptr; } private: std::unordered_map(std::shared_ptr)>> m_creators; }; // Fonction d'initialisation pour enregistrer tous les composants inline void EnregistrerTousLesComposants() { auto& factory = ComponentFactory::Get(); factory.EnregistrerComposant("TransformComponent"); factory.EnregistrerComposant("PhysicsComponent"); factory.EnregistrerComposant("ShaderComponent"); factory.EnregistrerComposant("ModelPathComponent"); factory.EnregistrerComposant("IdentityComponent"); factory.EnregistrerComposant("RenderComponent"); // Ajouter d'autres composants ici }