SHADE_Y3/SHADE_Engine/src/Serialization/SHSerialization.cpp

80 lines
1.9 KiB
C++
Raw Normal View History

2022-09-26 21:08:59 +08:00
#include "SHpch.h"
#include "SHSerialization.h"
#include <yaml-cpp/yaml.h>
#include "Scene/SHSceneManager.h"
#include "Tools/SHException.h"
#include "SHSerializationHelper.hpp"
#include "Math/Transform/SHTransformComponent.h"
namespace SHADE
{
namespace SHSerialization
{
void SerializeSceneToFile(std::filesystem::path const& path)
{
}
std::string SerializeSceneToString()
{
YAML::Emitter out;
SerializeSceneToEmitter(out);
return std::string(out.c_str());
}
void 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 SerializeEntityToString()
{
return std::string();
}
void SerializeEntityToFile(std::filesystem::path const& path)
{
}
YAML::Node 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<SHTransformComponent>(eid))
{
components[rttr::type::get<SHTransformComponent>().get_name().data()] = SerializeComponentToNode(transform);
}
node["Components"] = components;
return node;
}
}
}