diff --git a/Nuake/src/Resource/Serializable.h b/Nuake/src/Resource/Serializable.h index af7f5d7a..ac9f2237 100644 --- a/Nuake/src/Resource/Serializable.h +++ b/Nuake/src/Resource/Serializable.h @@ -42,5 +42,4 @@ class ISerializable public: virtual json Serialize() = 0; virtual bool Deserialize(const std::string& str) = 0; - -}; \ No newline at end of file +}; diff --git a/Nuake/src/Scene/EditorCamera.cpp b/Nuake/src/Scene/EditorCamera.cpp index d9feaee5..8e58e1b2 100644 --- a/Nuake/src/Scene/EditorCamera.cpp +++ b/Nuake/src/Scene/EditorCamera.cpp @@ -192,4 +192,47 @@ namespace Nuake return copy; } + + void EditorCamera::UpdateDirection() + { + Direction.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch)); + Direction.y = sin(glm::radians(Pitch)); + Direction.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch)); + Direction = glm::normalize(Direction); + Right = glm::normalize(glm::cross(Up, Direction)); + } + + void EditorCamera::SetYaw(float yaw) + { + Yaw = yaw; + UpdateDirection(); + } + + void EditorCamera::SetPitch(float pitch) + { + Pitch = pitch; + UpdateDirection(); + } + + json EditorCamera::Serialize() + { + BEGIN_SERIALIZE(); + + SERIALIZE_VEC3(Translation); + j["Yaw"] = Yaw; + j["Pitch"] = Pitch; + + return j; + } + + bool EditorCamera::Deserialize(const std::string& str) + { + BEGIN_DESERIALIZE(); + + DESERIALIZE_VEC3(j["Translation"], Translation); + SetYaw(j["Yaw"]); + SetPitch(j["Pitch"]); + + return true; + } } diff --git a/Nuake/src/Scene/EditorCamera.h b/Nuake/src/Scene/EditorCamera.h index 28016309..a3848a8b 100644 --- a/Nuake/src/Scene/EditorCamera.h +++ b/Nuake/src/Scene/EditorCamera.h @@ -19,6 +19,13 @@ namespace Nuake Vector3 TargetPos = Vector3(0, 0, 0); bool IsMoving = false; Ref Copy(); + + json Serialize(); + bool Deserialize(const std::string& str); + + void SetYaw(float yaw); + void SetPitch(float pitch); + private: bool controlled = false; bool firstMouse = false; @@ -28,5 +35,6 @@ namespace Nuake float Yaw = -135.f; float Pitch = -45.f; + void UpdateDirection(); }; } diff --git a/Nuake/src/Scene/Scene.cpp b/Nuake/src/Scene/Scene.cpp index 3ee984ca..835e4c9d 100644 --- a/Nuake/src/Scene/Scene.cpp +++ b/Nuake/src/Scene/Scene.cpp @@ -326,10 +326,14 @@ namespace Nuake { SERIALIZE_VAL(Name); SERIALIZE_OBJECT(m_Environement) SERIALIZE_VAL(Path) + std::vector entities = std::vector(); for (Entity e : GetAllEntities()) entities.push_back(e.Serialize()); SERIALIZE_VAL_LBL("Entities", entities); + + SERIALIZE_OBJECT(m_EditorCamera); + END_SERIALIZE(); } @@ -371,6 +375,11 @@ namespace Nuake { ent.Deserialize(e.dump()); } + if (j.contains("m_EditorCamera")) + { + m_EditorCamera->Deserialize(j["m_EditorCamera"].dump()); + } + auto view = m_Registry.view(); for (auto e : view) {