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>();
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 VZ_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>();
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 VZ_CORE_TRACE(...)
trace: lowest level, for detailed debug information
Definition Log.h:35
ProjectionType
Definition SceneCamera.h:9