Просмотр исходного кода

~ 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>

Alexis Maiquez 6 лет назад
Родитель
Сommit
27b50ffac9

+ 20 - 18
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 <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)

+ 23 - 0
src/WallpaperEngine/Core/Core.cpp

@@ -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);

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