#include "SHpch.h" #include "SHSerializationHelper.hpp" #include "SHSerialization.h" #include #include "Scene/SHSceneManager.h" #include "Tools/SHException.h" #include "Math/Transform/SHTransformComponent.h" namespace SHADE { void SHSerialization::SerializeSceneToFile(std::filesystem::path const& path) { } std::string SHSerialization::SerializeSceneToString() { YAML::Emitter out; SerializeSceneToEmitter(out); return std::string(out.c_str()); } void SHSerialization::SerializeSceneToEmitter(YAML::Emitter& out) { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); auto root = sceneGraph.GetRoot(); SHASSERT(root != nullptr, "Root is null. Failed to serialize scene to node."); auto const& children = root->GetChildren(); out << YAML::BeginDoc; for (auto child : children) { out << YAML::BeginSeq; out << SerializeEntityToNode(child); out << YAML::EndSeq; } out << YAML::EndDoc; } std::string SHSerialization::SerializeEntityToString() { return std::string(); } void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) { } YAML::Node SHSerialization::SerializeEntityToNode(SHSceneNode* sceneNode) { YAML::Node node; if (!sceneNode) { node = YAML::Null; return node; } auto eid = sceneNode->GetEntityID(); node["EID"] = eid; node["isActive"] = sceneNode->IsActive(); auto const& children = sceneNode->GetChildren(); node["NumberOfChildren"] = children.size(); YAML::Node components; if (const auto transform = SHComponentManager::GetComponent_s(eid)) { components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(transform); } node["Components"] = components; return node; } }