Muto 0.0.1
Cross-Platform Application Template
GitHub Repo | Muto Updates | Muto's Author
Loading...
Searching...
No Matches
Muto::SceneSerializer Class Reference

Handles serialization and deserialization of scenes. More...

#include <SceneSerializer.h>

Public Member Functions

bool Deserialize (const std::string &filepath)
 
bool DeserializeRuntime (const std::string &filepath)
 
 SceneSerializer (const Ref< Scene > &scene)
 
void Serialize (const std::string &filepath)
 
void SerializeRuntime (const std::string &filepath)
 

Private Attributes

Ref< Scene > m_Scene
 

Detailed Description

Handles serialization and deserialization of scenes.

Note
Serialization is currently only Text-based (YAML) and is not optimized for performance. Future versions may include a binary format for faster loading times.

Constructor & Destructor Documentation

◆ SceneSerializer()

Muto::SceneSerializer::SceneSerializer ( const Ref< Scene > &  scene)
117 : m_Scene(scene)
118 {
119 }
Ref< Scene > m_Scene
Definition SceneSerializer.h:26
constexpr Scope< T > CreateScope(Args &&... args)
Creates a Scope (unique_ptr) for the given type and constructor arguments.
Definition Defines_Macros.h:51

References SceneSerializer().

Referenced by SceneSerializer().

Member Function Documentation

◆ Deserialize()

bool Muto::SceneSerializer::Deserialize ( const std::string &  filepath)
206 {
207
208 std::ifstream stream(filepath);
209 std::stringstream strStream;
210 strStream << stream.rdbuf();
211
212 YAML::Node data = YAML::Load(strStream.str());
213 if (!data["Scene"])
214 return false;
215
216 std::string sceneName = data["Scene"].as<std::string>();
217 MU_CORE_TRACE("Deserializing scene: {0}", sceneName);
218
219 YAML::Node entities = data["Entities"];
220 if (entities)
221 {
222 for (auto entityNode : entities)
223 {
224 std::string uuid = entityNode["Entity"].as<std::string>();
225 std::string name;
226 YAML::Node nameNode = entityNode["NameComponent"];
227 if (nameNode)
228 name = nameNode.as<std::string>();
229 MU_CORE_TRACE("Deserialized entity with ID: {0}, name: {1}", uuid, name);
230 Entity deserializedEntity = m_Scene->CreateEntity(name, uuid);
231 YAML::Node transformNode = entityNode["TransformComponent"];
232 if (transformNode)
233 {
234 auto& tc = deserializedEntity.GetComponent<TransformComponent>();
235 tc.Translation = transformNode["Translation"].as<glm::vec3>();
236 tc.Rotation = transformNode["Rotation"].as<glm::vec3>();
237 tc.Scale = transformNode["Scale"].as<glm::vec3>();
238 }
239 YAML::Node cameraNode = entityNode["CameraComponent"];
240 if (cameraNode)
241 {
242 auto& cameraComp = deserializedEntity.AddComponent<CameraComponent>();
243 auto& camera = cameraComp.Camera;
244 YAML::Node camProps = cameraNode["Camera"];
245 camera.SetOrthographic(camProps["OrthographicSize"].as<float>(), camProps["OrthographicNear"].as<float>(), camProps["OrthographicFar"].as<float>());
246 camera.SetPerspective(camProps["PerspectiveFOV"].as<float>(), camProps["PerspectiveNear"].as<float>(), camProps["PerspectiveFar"].as<float>());
247 cameraComp.Primary = cameraNode["Primary"].as<bool>();
248 camera.SetProjectionType((SceneCamera::ProjectionType)cameraNode["ProjectionType"].as<int>());
249 cameraComp.FixedAspectRatio = cameraNode["FixedAspectRatio"].as<bool>();
250 }
251 YAML::Node spriteNode = entityNode["SpriteRendererComponent"];
252 if (spriteNode)
253 {
254 auto& src = deserializedEntity.AddComponent<SpriteRendererComponent>();
255 src.Color = spriteNode["Color"].as<glm::vec4>();
256 }
257 }
258 }
259 return true;
260
261 }
#define MU_CORE_TRACE(...)
trace: lowest level, for detailed debug information
Definition Log.h:36
ProjectionType
Definition SceneCamera.h:14

Referenced by Muto::EditorLayer::OnAttach(), and Muto::EditorLayer::OpenScene().

◆ DeserializeRuntime()

bool Muto::SceneSerializer::DeserializeRuntime ( const std::string &  filepath)
264 {
265 MU_CORE_ASSERT(false, "Not implemented");
266 return false;
267 }
#define MU_CORE_ASSERT(x,...)
Definition Asserts.h:32

◆ Serialize()

void Muto::SceneSerializer::Serialize ( const std::string &  filepath)
179 {
180 YAML::Emitter out;
181 out << YAML::BeginMap; // Scene
182 out << YAML::Key << "Scene" << YAML::Value << m_Scene->GetName();
183 out << YAML::Key << "Entities" << YAML::Value << YAML::BeginSeq; // Entities
184 m_Scene->m_Registry.view<entt::entity>().each([&](auto entityID) {
185
186 Entity entity = { entityID, m_Scene.get() };
187 if (!entity)
188 return;
189
190 SerializeEntity(out, entity);
191
192 });
193
194 out << YAML::EndSeq; // Entities
195 out << YAML::EndMap; // Scene
196
197 std::ofstream fout(filepath);
198 fout << out.c_str();
199 }
static void SerializeEntity(YAML::Emitter &out, Entity entity)
Definition SceneSerializer.cpp:121

Referenced by Muto::EditorLayer::SaveSceneAs().

◆ SerializeRuntime()

void Muto::SceneSerializer::SerializeRuntime ( const std::string &  filepath)
202 {
203 MU_CORE_ASSERT(false, "Not implemented");
204 }

Member Data Documentation

◆ m_Scene

Ref<Scene> Muto::SceneSerializer::m_Scene
private

The documentation for this class was generated from the following files: