feat: add vec3 type to nhollman json / fix: scene serialisation stuff

This commit is contained in:
2026-10-18 15:20:01 +02:00
parent 7223e9ce07
commit 94fa2bb4b2
18 changed files with 670 additions and 289 deletions
+3 -5
View File
@@ -3,6 +3,7 @@
#include <algorithm>
#include <destrum/ObjectModel/GameObject.h>
#include <destrum/Serialization/GlmJson.h>
#include <imgui.h>
@@ -60,7 +61,7 @@ void Door::ApplyPosition()
nlohmann::json Door::Serialize() const
{
return {
{"openOffset", {m_OpenOffset.x, m_OpenOffset.y, m_OpenOffset.z}},
{"openOffset", m_OpenOffset},
{"openDuration", m_OpenDuration},
{"toggleable", m_Toggleable},
{"open", m_IsOpen},
@@ -70,10 +71,7 @@ nlohmann::json Door::Serialize() const
void Door::Deserialize(const nlohmann::json& data)
{
if (data.contains("openOffset")) {
const auto& offset = data.at("openOffset");
m_OpenOffset = {offset.at(0).get<float>(), offset.at(1).get<float>(), offset.at(2).get<float>()};
}
m_OpenOffset = data.value("openOffset", m_OpenOffset);
m_OpenDuration = std::max(data.value("openDuration", m_OpenDuration), 0.0f);
m_Toggleable = data.value("toggleable", m_Toggleable);
m_IsOpen = data.value("open", m_IsOpen);
@@ -1,20 +1,18 @@
#include <components/GameComponentRegistry.h>
#include <mutex>
#include <destrum/Serialization/ComponentFactory.h>
#include <components/GameComponentList.h>
void RegisterGameComponents()
{
static bool registered = false;
if (registered) {
return;
}
registered = true;
static std::once_flag registered;
std::call_once(registered, [] {
#define LIGHTKEEPER_REGISTER_COMPONENT(ComponentType) \
ComponentFactory::Register<ComponentType>(#ComponentType);
LIGHTKEEPER_GAME_COMPONENTS(LIGHTKEEPER_REGISTER_COMPONENT)
ComponentFactory::Register<ComponentType>(#ComponentType);
LIGHTKEEPER_GAME_COMPONENTS(LIGHTKEEPER_REGISTER_COMPONENT)
#undef LIGHTKEEPER_REGISTER_COMPONENT
});
}
@@ -4,6 +4,7 @@
#include <cmath>
#include <destrum/ObjectModel/GameObject.h>
#include <destrum/Serialization/GlmJson.h>
#include <imgui.h>
@@ -52,7 +53,7 @@ glm::vec3 MovingPlatform::GetOffsetAt(float progress) const
nlohmann::json MovingPlatform::Serialize() const
{
return {
{"travelOffset", {m_TravelOffset.x, m_TravelOffset.y, m_TravelOffset.z}},
{"travelOffset", m_TravelOffset},
{"travelDuration", m_TravelDuration},
{"pauseDuration", m_PauseDuration},
{"elapsedTime", m_ElapsedTime},
@@ -61,10 +62,7 @@ nlohmann::json MovingPlatform::Serialize() const
void MovingPlatform::Deserialize(const nlohmann::json& data)
{
if (data.contains("travelOffset")) {
const auto& offset = data.at("travelOffset");
m_TravelOffset = {offset.at(0).get<float>(), offset.at(1).get<float>(), offset.at(2).get<float>()};
}
m_TravelOffset = data.value("travelOffset", m_TravelOffset);
m_TravelDuration = std::max(data.value("travelDuration", m_TravelDuration), 0.01f);
m_PauseDuration = std::max(data.value("pauseDuration", m_PauseDuration), 0.0f);
m_ElapsedTime = std::max(data.value("elapsedTime", m_ElapsedTime), 0.0f);
@@ -22,7 +22,7 @@ void PrintComponent::ImGuiInspector()
nlohmann::json PrintComponent::Serialize() const
{
return {"message", m_message};
return {{"message", m_message}};
}
void PrintComponent::Deserialize(const nlohmann::json& basic_jsons)