// src/Components/GameObject.h #pragma once #include #include #include #include "Component.h" #include "Transform.h" #include "Mesh.h" #include // GetComponent() class GameObject { public: int id; std::string name; std::unordered_map> components; int GetComponentCount() const; GameObject(int id, const std::string &name); void AddComponent(const std::shared_ptr &component); std::shared_ptr GetComponentByName(const std::string &name) const; template std::shared_ptr GetComponent() { auto it = components.find(T::GetStaticName()); if (it != components.end()) { return std::dynamic_pointer_cast(it->second); } return nullptr; } // Serialization methods YAML::Node Serialize(); void Deserialize(const YAML::Node &node); };