#include "ComponentModule.h" namespace sh::game { auto ComponentModule::GetComponents() -> std::unordered_map>& { return components; } auto ComponentModule::GetComponents() const -> const std::unordered_map>& { return components; } auto ComponentModule::GetComponent(std::string_view name) const -> IComponentType* { auto it = components.find(std::string{ name }); if (it == components.end()) return nullptr; return it->second.get(); } SH_GAME_API void ComponentModule::RegisterWaitingComponents() { for (auto& componentInfo : waitingComponents) components.insert_or_assign(componentInfo.name, std::move(componentInfo.componentType)); waitingComponents.clear(); } SH_GAME_API auto ComponentModule::GetWaitingComponents() const -> const std::vector& { return waitingComponents; } SH_GAME_API void ComponentModule::DestroyComponent(const std::string& name) { auto it = components.find(name); if (it != components.end()) components.erase(it); } SH_GAME_API void ComponentModule::DestroyComponent(const std::string& name, const std::string& group) { std::string fullName{}; if (group.size() == 0) fullName = name; else { fullName.reserve(group.size() + name.size() + 1); fullName = group; fullName += '/'; fullName += name; } auto it = components.find(fullName); if (it != components.end()) components.erase(it); } }