~ some settings for the camera are optional, so treat them that way (camera shake and parallax)

+ added helper functions to get optional values in an easy way

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez 2020-08-25 15:09:29 +02:00
parent d5ee71540d
commit 27b50ffac9
3 changed files with 44 additions and 18 deletions

View File

@ -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 <bool> (*general_it, "cameraparallax", true);
auto cameraparallaxamount = jsonFindDefault <irr::f64> (*general_it, "cameraparallaxamount", 1.0f);
auto cameraparallaxdelay = jsonFindDefault <irr::f64> (*general_it, "cameraparallaxdelay", 0.0f);
auto cameraparallaxmouseinfluence = jsonFindDefault <irr::f64> (*general_it, "cameraparallaxmouseinfluence", 1.0f);
auto camerapreview = jsonFindDefault <bool> (*general_it, "camerapreview", false);
auto camerashake = jsonFindDefault <bool> (*general_it, "camerashake", false);
auto camerashakeamplitude = jsonFindDefault <irr::f64> (*general_it, "camerashakeamplitude", 0.0f);
auto camerashakeroughness = jsonFindDefault <irr::f64> (*general_it, "camerashakeroughness", 0.0f);
auto camerashakespeed = jsonFindDefault <irr::f64> (*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)

View File

@ -71,3 +71,26 @@ nlohmann::json::iterator Core::jsonFindRequired (nlohmann::json& data, const cha
return value;
}
template <typename T> 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);

View File

@ -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 <typename T> T jsonFindDefault (nlohmann::json& data, const char *key, T defaultValue);
};