VoxelEngine/src/settings.cpp
2023-11-12 02:44:02 +03:00

61 lines
1.7 KiB
C++

#include "settings.h"
#include <memory>
#include <string>
#include "files/files.h"
#include "coders/json.h"
using std::string;
using std::unique_ptr;
void load_settings(EngineSettings& settings, string filename) {
string source = files::read_string(filename);
unique_ptr<json::JObject> obj(json::parse(filename, source));
{
auto& display = settings.display;
obj->num("display-width", display.width);
obj->num("display-height", display.height);
obj->num("display-samples", display.samples);
obj->num("display-swap-interval", display.swapInterval);
}
{
auto& chunks = settings.chunks;
obj->num("chunks-load-distance", chunks.loadDistance);
obj->num("chunks-load-speed", chunks.loadSpeed);
obj->num("chunks-padding", chunks.padding);
}
{
auto& camera = settings.camera;
obj->flag("camera-fov-effects", camera.fovEvents);
obj->flag("camera-shaking", camera.shaking);
}
obj->num("fog-curve", settings.fogCurve);
}
void save_settings(EngineSettings& settings, string filename) {
json::JObject obj;
{
auto& display = settings.display;
obj.put("display-width", display.width);
obj.put("display-height", display.height);
obj.put("display-samples", display.samples);
obj.put("display-swap-interval", display.swapInterval);
}
{
auto& chunks = settings.chunks;
obj.put("chunks-load-distance", chunks.loadDistance);
obj.put("chunks-load-speed", chunks.loadSpeed);
obj.put("chunks-padding", chunks.padding);
}
{
auto& camera = settings.camera;
obj.put("camera-fov-effects", camera.fovEvents);
obj.put("camera-shaking", camera.shaking);
}
obj.put("fog-curve", settings.fogCurve);
files::write_string(filename, json::stringify(&obj, true, " "));
}