diff --git a/src/WallpaperEngine/Core/CScene.cpp b/src/WallpaperEngine/Core/CScene.cpp index f47d792..5b903e3 100644 --- a/src/WallpaperEngine/Core/CScene.cpp +++ b/src/WallpaperEngine/Core/CScene.cpp @@ -48,26 +48,28 @@ CScene::CScene ( CScene* CScene::fromFile (const irr::io::path& filename) { + std::string stringContent = WallpaperEngine::FileSystem::loadFullFile (filename); json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename)); auto camera_it = jsonFindRequired (content, "camera", "Scenes must have a defined camera"); auto general_it = jsonFindRequired (content, "general", "Scenes must have a general section"); auto objects_it = jsonFindRequired (content, "objects", "Scenes must have a list of objects to display"); + // TODO: FIND IF THESE DEFAULTS ARE SENSIBLE OR NOT AND PERFORM PROPER VALIDATION WHEN CAMERA PREVIEW AND CAMERA PARALLAX ARE PRESENT auto ambientcolor_it = jsonFindRequired (*general_it, "ambientcolor", "General section must have ambient color"); auto bloom_it = jsonFindRequired (*general_it, "bloom", "General section must have bloom flag"); auto bloomstrength_it = jsonFindRequired (*general_it, "bloomstrength", "General section must have bloom strength"); auto bloomthreshold_it = jsonFindRequired (*general_it, "bloomthreshold", "General section must have bloom threshold"); auto camerafade_it = jsonFindRequired (*general_it, "camerafade", "General section must have camera fade"); - auto cameraparallax_it = jsonFindRequired (*general_it, "cameraparallax", "General section must have camera parallax"); - auto cameraparallaxamount_it = jsonFindRequired (*general_it, "cameraparallaxamount", "General section must have camera parallax amount"); - auto cameraparallaxdelay_it = jsonFindRequired (*general_it, "cameraparallaxdelay", "General section must have camera parallax delay"); - auto cameraparallaxmouseinfluence_it = jsonFindRequired (*general_it, "cameraparallaxmouseinfluence", "General section must have camera parallax mouse influence"); - auto camerapreview_it = jsonFindRequired (*general_it, "camerapreview", "General section must have camera preview"); - auto camerashake_it = jsonFindRequired (*general_it, "camerashake", "General section must have camera shake"); - auto camerashakeamplitude_it = jsonFindRequired (*general_it, "camerashakeamplitude", "General section must have camera shake amplitude"); - auto camerashakeroughness_it = jsonFindRequired (*general_it, "camerashakeroughness", "General section must have camera shake roughness"); - auto camerashakespeed_it = jsonFindRequired (*general_it, "camerashakespeed", "General section must have camera shake speed"); + auto cameraparallax = jsonFindDefault (*general_it, "cameraparallax", true); + auto cameraparallaxamount = jsonFindDefault (*general_it, "cameraparallaxamount", 1.0f); + auto cameraparallaxdelay = jsonFindDefault (*general_it, "cameraparallaxdelay", 0.0f); + auto cameraparallaxmouseinfluence = jsonFindDefault (*general_it, "cameraparallaxmouseinfluence", 1.0f); + auto camerapreview = jsonFindDefault (*general_it, "camerapreview", false); + auto camerashake = jsonFindDefault (*general_it, "camerashake", false); + auto camerashakeamplitude = jsonFindDefault (*general_it, "camerashakeamplitude", 0.0f); + auto camerashakeroughness = jsonFindDefault (*general_it, "camerashakeroughness", 0.0f); + auto camerashakespeed = jsonFindDefault (*general_it, "camerashakespeed", 0.0f); auto clearcolor_it = jsonFindRequired (*general_it, "clearcolor", "General section must have clear color"); auto orthogonalprojection_it = jsonFindRequired (*general_it, "orthogonalprojection", "General section must have orthogonal projection info"); auto skylightcolor_it = jsonFindRequired (*general_it, "skylightcolor", "General section must have skylight color"); @@ -79,15 +81,15 @@ CScene* CScene::fromFile (const irr::io::path& filename) *bloomstrength_it, *bloomthreshold_it, *camerafade_it, - *cameraparallax_it, - *cameraparallaxamount_it, - *cameraparallaxdelay_it, - *cameraparallaxmouseinfluence_it, - *camerapreview_it, - *camerashake_it, - *camerashakeamplitude_it, - *camerashakeroughness_it, - *camerashakespeed_it, + cameraparallax, + cameraparallaxamount, + cameraparallaxdelay, + cameraparallaxmouseinfluence, + camerapreview, + camerashake, + camerashakeamplitude, + camerashakeroughness, + camerashakespeed, WallpaperEngine::Core::atoSColorf (*clearcolor_it), Scenes::CProjection::fromJSON (*orthogonalprojection_it), WallpaperEngine::Core::atoSColorf (*skylightcolor_it) diff --git a/src/WallpaperEngine/Core/Core.cpp b/src/WallpaperEngine/Core/Core.cpp index 4de590a..d2b3242 100644 --- a/src/WallpaperEngine/Core/Core.cpp +++ b/src/WallpaperEngine/Core/Core.cpp @@ -71,3 +71,26 @@ nlohmann::json::iterator Core::jsonFindRequired (nlohmann::json& data, const cha return value; } + +template T Core::jsonFindDefault (nlohmann::json& data, const char *key, T defaultValue) +{ + auto value = data.find (key); + + if (value == data.end ()) + { + return defaultValue; + } + + return *value; +} + +template bool Core::jsonFindDefault (nlohmann::json& data, const char *key, bool defaultValue); +template std::string Core::jsonFindDefault (nlohmann::json& data, const char *key, std::string defaultValue); +template irr::s16 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::s16 defaultValue); +template irr::u16 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::u16 defaultValue); +template irr::s32 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::s32 defaultValue); +template irr::u32 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::u32 defaultValue); +template irr::s64 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::s64 defaultValue); +template irr::u64 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::u64 defaultValue); +template irr::f32 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::f32 defaultValue); +template irr::f64 Core::jsonFindDefault (nlohmann::json& data, const char *key, irr::f64 defaultValue); \ No newline at end of file diff --git a/src/WallpaperEngine/Core/Core.h b/src/WallpaperEngine/Core/Core.h index 7cd9612..90af540 100644 --- a/src/WallpaperEngine/Core/Core.h +++ b/src/WallpaperEngine/Core/Core.h @@ -19,4 +19,5 @@ namespace WallpaperEngine::Core irr::video::SColor atoSColor (const std::string& str); nlohmann::json::iterator jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg); + template T jsonFindDefault (nlohmann::json& data, const char *key, T defaultValue); };