Vesper 0.5.1
Vesper is short form for the Latin word for "Bat", as Vesper is designed to be small, lightweight, and easily handle things like particles and flocking behaviors in accordance with the nature of bats. \n It is meant to be a particle simulation, VFX editor, and CAN be used secondarily as a small game engine.
GitHub | Vesper Updates | Creator
Loading...
Searching...
No Matches
Vesper::SceneSerializer Class Reference

#include <SceneSerializer.h>

Public Member Functions

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

Private Attributes

Ref< Scenem_Scene

Constructor & Destructor Documentation

◆ SceneSerializer()

Vesper::SceneSerializer::SceneSerializer ( const Ref< Scene > & scene)
117 : m_Scene(scene)
118 {
119 }
Ref< Scene > m_Scene
Definition SceneSerializer.h:17

References SceneSerializer().

Referenced by SceneSerializer().

Member Function Documentation

◆ Deserialize()

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

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

◆ DeserializeRuntime()

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

◆ Serialize()

void Vesper::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 Vesper::EditorLayer::SaveSceneAs().

◆ SerializeRuntime()

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

Member Data Documentation

◆ m_Scene

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

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