diff --git a/CMakeLists.txt b/CMakeLists.txt index c8164f2..62de9cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,13 +113,14 @@ add_executable( src/WallpaperEngine/FileSystem/FileSystem.cpp src/WallpaperEngine/FileSystem/FileSystem.h - src/WallpaperEngine/Core/Types/FloatColor.h - src/WallpaperEngine/Core/Types/IntegerColor.h - src/WallpaperEngine/Core/UserSettings/CUserSettingValue.cpp src/WallpaperEngine/Core/UserSettings/CUserSettingValue.h src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h + src/WallpaperEngine/Core/UserSettings/CUserSettingColor.cpp + src/WallpaperEngine/Core/UserSettings/CUserSettingColor.h + src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp + src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h src/WallpaperEngine/Core/CProject.cpp src/WallpaperEngine/Core/CProject.h diff --git a/main.cpp b/main.cpp index 444ea46..764103f 100644 --- a/main.cpp +++ b/main.cpp @@ -26,8 +26,6 @@ float g_Time; bool g_KeepRunning = true; int g_AudioVolume = 15; -using namespace WallpaperEngine::Core::Types; - const char* assets_default_paths [] = { ".steam/steam/steamapps/common/wallpaper_engine/assets", ".local/share/Steam/steamapps/common/wallpaper_engine/assets", diff --git a/src/WallpaperEngine/Core/CScene.cpp b/src/WallpaperEngine/Core/CScene.cpp index 9f863e2..9513ffc 100644 --- a/src/WallpaperEngine/Core/CScene.cpp +++ b/src/WallpaperEngine/Core/CScene.cpp @@ -2,16 +2,14 @@ #include "CProject.h" #include "WallpaperEngine/FileSystem/FileSystem.h" -#include "WallpaperEngine/Core/Types/FloatColor.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" using namespace WallpaperEngine::Core; -using namespace WallpaperEngine::Core::Types; CScene::CScene ( CContainer* container, Scenes::CCamera* camera, - FloatColor ambientColor, + glm::vec3 ambientColor, CUserSettingBoolean* bloom, double bloomStrength, double bloomThreshold, @@ -25,9 +23,9 @@ CScene::CScene ( double cameraShakeAmplitude, double cameraShakeRoughness, double cameraShakeSpeed, - FloatColor clearColor, + glm::vec3 clearColor, Scenes::CProjection* orthogonalProjection, - FloatColor skylightColor) : + glm::vec3 skylightColor) : CWallpaper (Type), m_container (container), m_camera (camera), @@ -150,7 +148,7 @@ const Scenes::CCamera* CScene::getCamera () const return this->m_camera; } -const FloatColor &CScene::getAmbientColor() const +const glm::vec3 &CScene::getAmbientColor() const { return this->m_ambientColor; } @@ -220,7 +218,7 @@ const double CScene::getCameraShakeSpeed () const return this->m_cameraShakeSpeed; } -const FloatColor& CScene::getClearColor () const +const glm::vec3& CScene::getClearColor () const { return this->m_clearColor; } @@ -230,7 +228,7 @@ Scenes::CProjection* CScene::getOrthogonalProjection () const return this->m_orthogonalProjection; } -const FloatColor& CScene::getSkylightColor () const +const glm::vec3& CScene::getSkylightColor () const { return this->m_skylightColor; } diff --git a/src/WallpaperEngine/Core/CScene.h b/src/WallpaperEngine/Core/CScene.h index cd2eadb..7942e9e 100644 --- a/src/WallpaperEngine/Core/CScene.h +++ b/src/WallpaperEngine/Core/CScene.h @@ -7,12 +7,10 @@ #include "WallpaperEngine/Core/Scenes/CCamera.h" #include "WallpaperEngine/Core/Scenes/CProjection.h" -#include "WallpaperEngine/Core/Types/FloatColor.h" namespace WallpaperEngine::Core { using json = nlohmann::json; - using namespace WallpaperEngine::Core::Types; class CObject; @@ -24,7 +22,7 @@ namespace WallpaperEngine::Core const std::map& getObjects () const; const std::vector& getObjectsByRenderOrder () const; - const FloatColor& getAmbientColor() const; + const glm::vec3& getAmbientColor() const; const bool isBloom() const; const double getBloomStrength() const; const double getBloomThreshold() const; @@ -38,9 +36,9 @@ namespace WallpaperEngine::Core const double getCameraShakeAmplitude() const; const double getCameraShakeRoughness() const; const double getCameraShakeSpeed() const; - const FloatColor& getClearColor() const; + const glm::vec3& getClearColor() const; Scenes::CProjection* getOrthogonalProjection() const; - const FloatColor& getSkylightColor() const; + const glm::vec3& getSkylightColor() const; const Scenes::CCamera* getCamera () const; protected: @@ -49,7 +47,7 @@ namespace WallpaperEngine::Core CScene ( CContainer* container, Scenes::CCamera* camera, - FloatColor ambientColor, + glm::vec3 ambientColor, CUserSettingBoolean* bloom, double bloomStrength, double bloomThreshold, @@ -63,9 +61,9 @@ namespace WallpaperEngine::Core double cameraShakeAmplitude, double cameraShakeRoughness, double cameraShakeSpeed, - FloatColor clearColor, + glm::vec3 clearColor, Scenes::CProjection* orthogonalProjection, - FloatColor skylightColor + glm::vec3 skylightColor ); static const std::string Type; @@ -78,7 +76,7 @@ namespace WallpaperEngine::Core Scenes::CCamera* m_camera; // data from general section on the json - FloatColor m_ambientColor; + glm::vec3 m_ambientColor; CUserSettingBoolean* m_bloom; double m_bloomStrength; double m_bloomThreshold; @@ -92,9 +90,9 @@ namespace WallpaperEngine::Core double m_cameraShakeAmplitude; double m_cameraShakeRoughness; double m_cameraShakeSpeed; - FloatColor m_clearColor; + glm::vec3 m_clearColor; Scenes::CProjection* m_orthogonalProjection; - FloatColor m_skylightColor; + glm::vec3 m_skylightColor; std::map m_objects; std::vector m_objectsByRenderOrder; diff --git a/src/WallpaperEngine/Core/Core.cpp b/src/WallpaperEngine/Core/Core.cpp index bcf8b62..08d65fb 100644 --- a/src/WallpaperEngine/Core/Core.cpp +++ b/src/WallpaperEngine/Core/Core.cpp @@ -1,7 +1,6 @@ #include "Core.h" using namespace WallpaperEngine; -using namespace WallpaperEngine::Core::Types; glm::vec4 Core::aToVector4 (const char* str) { @@ -45,32 +44,32 @@ glm::vec2 Core::aToVector2 (const std::string& str) return Core::aToVector2 (str.c_str ()); } -FloatColor Core::aToColorf (const char* str) +glm::vec3 Core::aToColorf (const char* str) { float r = strtof (str, const_cast(&str)); while (*str == ' ') str ++; float g = strtof (str, const_cast(&str)); while (*str == ' ') str ++; float b = strtof (str, const_cast(&str)); - return {r, g, b, 1.0f}; + return {r, g, b}; } -FloatColor Core::aToColorf (const std::string& str) +glm::vec3 Core::aToColorf (const std::string& str) { - return aToColorf(str.c_str()); + return aToColorf (str.c_str ()); } -IntegerColor Core::aToColori (const char* str) +glm::ivec3 Core::aToColori (const char* str) { uint8_t r = static_cast (strtol (str, const_cast(&str), 10)); while (*str == ' ') str ++; uint8_t g = static_cast (strtol (str, const_cast(&str), 10)); while (*str == ' ') str ++; uint8_t b = static_cast (strtol (str, const_cast(&str), 10)); - return {r, g, b, 255}; + return {r, g, b}; } -IntegerColor Core::aToColori (const std::string& str) +glm::ivec3 Core::aToColori (const std::string& str) { - return aToColori(str.c_str()); + return aToColori (str.c_str ()); } nlohmann::json::iterator Core::jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg) diff --git a/src/WallpaperEngine/Core/Core.h b/src/WallpaperEngine/Core/Core.h index b71f482..b3ff648 100644 --- a/src/WallpaperEngine/Core/Core.h +++ b/src/WallpaperEngine/Core/Core.h @@ -6,13 +6,8 @@ #include #include -#include "WallpaperEngine/Core/Types/FloatColor.h" -#include "WallpaperEngine/Core/Types/IntegerColor.h" - namespace WallpaperEngine::Core { - using namespace WallpaperEngine::Core::Types; - glm::vec4 aToVector4 (const char* str); glm::vec3 aToVector3 (const char* str); glm::vec2 aToVector2 (const char* str); @@ -21,11 +16,11 @@ namespace WallpaperEngine::Core glm::vec3 aToVector3 (const std::string& str); glm::vec2 aToVector2 (const std::string& str); - FloatColor aToColorf (const char* str); - FloatColor aToColorf (const std::string& str); + glm::vec3 aToColorf (const char* str); + glm::vec3 aToColorf (const std::string& str); - IntegerColor aToColori (const char* str); - IntegerColor aToColori (const std::string& str); + glm::ivec3 aToColori (const char* str); + glm::ivec3 aToColori (const std::string& str); nlohmann::json::iterator jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg); nlohmann::json::iterator jsonFindRequired (nlohmann::json::iterator& data, const char *key, const char *notFoundMsg); diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index 38b044a..43fdea3 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -1,8 +1,11 @@ #include "CImage.h" #include +#include "WallpaperEngine/Core/CScene.h" #include "WallpaperEngine/Core/Objects/Images/CMaterial.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" +#include "WallpaperEngine/Core/UserSettings/CUserSettingColor.h" +#include "WallpaperEngine/Core/UserSettings/CUserSettingFloat.h" #include "WallpaperEngine/FileSystem/FileSystem.h" @@ -20,8 +23,8 @@ CImage::CImage ( const glm::vec3& angles, const glm::vec2& size, std::string alignment, - const glm::vec3& color, - float alpha, + CUserSettingColor* color, + CUserSettingFloat* alpha, float brightness, uint32_t colorBlendMode, const glm::vec2& parallaxDepth @@ -52,8 +55,22 @@ WallpaperEngine::Core::CObject* CImage::fromJSON ( auto image_it = data.find ("image"); auto size_val = jsonFindDefault (data, "size", "0.0 0.0"); // this one might need some adjustment auto alignment = jsonFindDefault (data, "alignment", "center"); - auto alpha = jsonFindDefault (data, "alpha", 1.0); - auto color_val = jsonFindDefault (data, "color", "1.0 1.0 1.0"); + auto alpha_it = data.find ("alpha"); + CUserSettingFloat* alpha; + + if (alpha_it == data.end ()) + alpha = CUserSettingFloat::fromScalar (1.0); + else + alpha = CUserSettingFloat::fromJSON (*alpha_it); + + auto color_it = data.find ("color"); + CUserSettingColor* color; + + if (color_it == data.end ()) + color = CUserSettingColor::fromScalar ({1, 1, 1}); + else + color = CUserSettingColor::fromJSON (*color_it); + auto brightness_val = jsonFindDefault (data, "brightness", 1.0); auto colorBlendMode_val = jsonFindDefault (data, "colorBlendMode", 0); auto parallaxDepth_val = jsonFindDefault (data, "parallaxDepth", "0 0"); @@ -73,7 +90,7 @@ WallpaperEngine::Core::CObject* CImage::fromJSON ( angles, WallpaperEngine::Core::aToVector2 (size_val), alignment, - WallpaperEngine::Core::aToVector3 (color_val), + color, alpha, brightness_val, colorBlendMode_val, @@ -98,12 +115,12 @@ const std::string& CImage::getAlignment () const const float CImage::getAlpha () const { - return this->m_alpha; + return this->m_alpha->processValue (this->getScene ()->getProject ()->getProperties ()); } -const glm::vec3& CImage::getColor () const +glm::vec3 CImage::getColor () const { - return this->m_color; + return this->m_color->processValue (this->getScene ()->getProject ()->getProperties ()); } const float CImage::getBrightness () const diff --git a/src/WallpaperEngine/Core/Objects/CImage.h b/src/WallpaperEngine/Core/Objects/CImage.h index b409b2e..be2dbdc 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.h +++ b/src/WallpaperEngine/Core/Objects/CImage.h @@ -8,6 +8,8 @@ #include "WallpaperEngine/Assets/CContainer.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" +#include "WallpaperEngine/Core/UserSettings/CUserSettingColor.h" +#include "WallpaperEngine/Core/UserSettings/CUserSettingFloat.h" namespace WallpaperEngine::Core { @@ -40,7 +42,7 @@ namespace WallpaperEngine::Core::Objects const glm::vec2& getSize () const; const std::string& getAlignment () const; const float getAlpha () const; - const glm::vec3& getColor () const; + glm::vec3 getColor () const; const float getBrightness () const; const uint32_t getColorBlendMode () const; const glm::vec2& getParallaxDepth () const; @@ -57,8 +59,8 @@ namespace WallpaperEngine::Core::Objects const glm::vec3& angles, const glm::vec2& size, std::string alignment, - const glm::vec3& color, - float alpha, + CUserSettingColor* color, + CUserSettingFloat* alpha, float brightness, uint32_t colorBlendMode, const glm::vec2& parallaxDepth @@ -71,9 +73,9 @@ namespace WallpaperEngine::Core::Objects const glm::vec2 m_parallaxDepth; Images::CMaterial* m_material; std::string m_alignment; - float m_alpha; + CUserSettingFloat* m_alpha; float m_brightness; - glm::vec3 m_color; + CUserSettingColor* m_color; uint32_t m_colorBlendMode; }; }; diff --git a/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.cpp b/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.cpp index d4129bf..210cfe1 100644 --- a/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.cpp +++ b/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.cpp @@ -15,19 +15,19 @@ CColorRandom* CColorRandom::fromJSON (json data, uint32_t id) } -CColorRandom::CColorRandom (uint32_t id, IntegerColor min, IntegerColor max) : +CColorRandom::CColorRandom (uint32_t id, glm::ivec3 min, glm::ivec3 max) : CInitializer (id, "colorrandom"), m_min (min), m_max (max) { } -const IntegerColor& CColorRandom::getMinimum () const +const glm::ivec3& CColorRandom::getMinimum () const { return this->m_min; } -const IntegerColor& CColorRandom::getMaximum () const +const glm::ivec3& CColorRandom::getMaximum () const { return this->m_max; } \ No newline at end of file diff --git a/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.h b/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.h index 13113e2..d489038 100644 --- a/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.h +++ b/src/WallpaperEngine/Core/Objects/Particles/Initializers/CColorRandom.h @@ -6,21 +6,19 @@ namespace WallpaperEngine::Core::Objects::Particles::Initializers { - using namespace WallpaperEngine::Core::Types; - class CColorRandom : CInitializer { public: - const IntegerColor& getMinimum () const; - const IntegerColor& getMaximum () const; + const glm::ivec3& getMinimum () const; + const glm::ivec3& getMaximum () const; protected: friend class CInitializer; static CColorRandom* fromJSON (json data, uint32_t id); - CColorRandom (uint32_t id, IntegerColor min, IntegerColor max); + CColorRandom (uint32_t id, glm::ivec3 min, glm::ivec3 max); private: - IntegerColor m_max; - IntegerColor m_min; + glm::ivec3 m_max; + glm::ivec3 m_min; }; }; diff --git a/src/WallpaperEngine/Core/Projects/CPropertyColor.cpp b/src/WallpaperEngine/Core/Projects/CPropertyColor.cpp index 8ba2ee1..9935baa 100644 --- a/src/WallpaperEngine/Core/Projects/CPropertyColor.cpp +++ b/src/WallpaperEngine/Core/Projects/CPropertyColor.cpp @@ -4,17 +4,22 @@ using namespace WallpaperEngine::Core::Projects; -FloatColor ParseColor (const std::string& value) +glm::vec3 ParseColor (std::string value) { + if (value.find (',') != std::string::npos) + { + // replace commas with dots so it can be parsed + std::replace (value.begin (), value.end (), ',', ' '); + } + if (value.find ('.') == std::string::npos && value != "0 0 0" && value != "1 1 1") { - IntegerColor intcolor = WallpaperEngine::Core::aToColori (value); + glm::ivec3 intcolor = WallpaperEngine::Core::aToColori (value); return { intcolor.r / 255.0, intcolor.g / 255.0, - intcolor.b / 255.0, - intcolor.a / 255.0 + intcolor.b / 255.0 }; } @@ -33,17 +38,16 @@ CPropertyColor* CPropertyColor::fromJSON (json data, const std::string& name) ); } -const FloatColor& CPropertyColor::getValue () const +const glm::vec3& CPropertyColor::getValue () const { return this->m_color; } void CPropertyColor::update (const std::string& value) { - this->m_color = ParseColor (value); + this->m_color = ParseColor (std::string (value)); } - std::string CPropertyColor::dump () const { std::stringstream ss; @@ -54,13 +58,12 @@ std::string CPropertyColor::dump () const << "\t" << "R: " << this->m_color.r << " G: " << this->m_color.g - << " B: " << this->m_color.b - << " A: " << this->m_color.a; + << " B: " << this->m_color.b; return ss.str(); } -CPropertyColor::CPropertyColor (FloatColor color, const std::string& name, const std::string& text) : +CPropertyColor::CPropertyColor (glm::vec3 color, const std::string& name, const std::string& text) : CProperty (name, Type, text), m_color (color) { diff --git a/src/WallpaperEngine/Core/Projects/CPropertyColor.h b/src/WallpaperEngine/Core/Projects/CPropertyColor.h index e1b0222..9d1d8ab 100644 --- a/src/WallpaperEngine/Core/Projects/CPropertyColor.h +++ b/src/WallpaperEngine/Core/Projects/CPropertyColor.h @@ -7,22 +7,21 @@ namespace WallpaperEngine::Core::Projects { using json = nlohmann::json; - using namespace WallpaperEngine::Core::Types; class CPropertyColor : public CProperty { public: static CPropertyColor* fromJSON (json data, const std::string& name); - const FloatColor& getValue () const; + const glm::vec3& getValue () const; std::string dump () const override; void update (const std::string& value) override; static const std::string Type; private: - CPropertyColor (FloatColor color, const std::string& name, const std::string& text); + CPropertyColor (glm::vec3 color, const std::string& name, const std::string& text); - FloatColor m_color; + glm::vec3 m_color; }; }; diff --git a/src/WallpaperEngine/Core/Projects/CPropertySlider.h b/src/WallpaperEngine/Core/Projects/CPropertySlider.h index 8566a84..b9aac5a 100644 --- a/src/WallpaperEngine/Core/Projects/CPropertySlider.h +++ b/src/WallpaperEngine/Core/Projects/CPropertySlider.h @@ -7,7 +7,6 @@ namespace WallpaperEngine::Core::Projects { using json = nlohmann::json; - using namespace WallpaperEngine::Core::Types; class CPropertySlider : public CProperty { diff --git a/src/WallpaperEngine/Core/Scenes/CCamera.cpp b/src/WallpaperEngine/Core/Scenes/CCamera.cpp index b10ce5c..4a229cd 100644 --- a/src/WallpaperEngine/Core/Scenes/CCamera.cpp +++ b/src/WallpaperEngine/Core/Scenes/CCamera.cpp @@ -1,7 +1,6 @@ #include "CCamera.h" using namespace WallpaperEngine::Core::Scenes; -using namespace WallpaperEngine::Core::Types; CCamera::CCamera (glm::vec3 center, glm::vec3 eye, glm::vec3 up) : m_center (center), diff --git a/src/WallpaperEngine/Core/Types/FloatColor.h b/src/WallpaperEngine/Core/Types/FloatColor.h deleted file mode 100644 index bf92536..0000000 --- a/src/WallpaperEngine/Core/Types/FloatColor.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -namespace WallpaperEngine::Core::Types -{ - class FloatColor - { - public: - FloatColor (double r, double g, double b, double a) : - r(r), g(g), b(b), a(a) { } - - /** - * The red color - */ - double r; - /** - * The green color - */ - double g; - /** - * The blue color - */ - double b; - /** - * The alpha - */ - double a; - }; -} \ No newline at end of file diff --git a/src/WallpaperEngine/Core/Types/IntegerColor.h b/src/WallpaperEngine/Core/Types/IntegerColor.h deleted file mode 100644 index f6e6555..0000000 --- a/src/WallpaperEngine/Core/Types/IntegerColor.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -namespace WallpaperEngine::Core::Types -{ - class IntegerColor - { - public: - IntegerColor (uint8_t r, uint8_t g, uint8_t b, uint8_t a) : - r(r), g(g), b(b), a(a) { } - - /** - * The red color - */ - uint8_t r; - /** - * The green color - */ - uint8_t g; - /** - * The blue color - */ - uint8_t b; - /** - * The alpha - */ - uint8_t a; - }; -} \ No newline at end of file diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.cpp b/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.cpp new file mode 100644 index 0000000..96d21c6 --- /dev/null +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.cpp @@ -0,0 +1,100 @@ +#include "CUserSettingColor.h" +#include "WallpaperEngine/Core/Core.h" + +#include "WallpaperEngine/Core/Projects/CProperty.h" +#include "WallpaperEngine/Core/Projects/CPropertyColor.h" + +using namespace WallpaperEngine::Core; +using namespace WallpaperEngine::Core::Projects; +using namespace WallpaperEngine::Core::UserSettings; + +CUserSettingColor::CUserSettingColor (bool hasCondition, bool hasSource, glm::vec3 defaultValue, std::string source, std::string expectedValue) : + CUserSettingValue (Type), + m_hasCondition (hasCondition), + m_hasSource(hasSource), + m_default(defaultValue), + m_source (std::move(source)), + m_expectedValue(std::move(expectedValue)) +{ +} + +CUserSettingColor* CUserSettingColor::fromJSON (nlohmann::json& data) +{ + bool hasCondition = false; + bool hasSource = false; + glm::vec3 defaultValue; + std::string source; + std::string expectedValue; + + std::string json = data.dump (); + + if (data.is_object () == true) + { + hasSource = true; + auto userIt = data.find ("user"); + defaultValue = WallpaperEngine::Core::aToColorf (jsonFindDefault (data, "value", "").c_str ()); // is this default value right? + + if (userIt != data.end ()) + { + if (userIt->is_string ()) + { + source = *userIt; + } + else + { + hasCondition = true; + source = *jsonFindRequired (userIt, "name", "Name for conditional setting must be present"); + expectedValue = *jsonFindRequired (userIt, "condition", "Condition for conditional setting must be present"); + } + } + else + { + fprintf (stderr, "Float color property doesn't have user member, this could mean an scripted value\n"); + } + } + else + { + if (data.is_string () == false) + throw std::runtime_error ("Expected float color value on user settings"); + + defaultValue = WallpaperEngine::Core::aToColorf (data.get ().c_str ()); + } + + return new CUserSettingColor (hasCondition, hasSource, defaultValue, source, expectedValue); +} + +CUserSettingColor* CUserSettingColor::fromScalar (glm::vec3 value) +{ + return new CUserSettingColor (false, false, value, "", ""); +} + +glm::vec3 CUserSettingColor::getDefaultValue () +{ + return this->m_default; +} + +glm::vec3 CUserSettingColor::processValue (const std::vector& properties) +{ + if (this->m_hasSource == false && this->m_hasCondition == false) + return this->getDefaultValue (); + + for (auto cur : properties) + { + if (cur->getName () != this->m_source) + continue; + + if (this->m_hasCondition == false) + { + if (cur->is ()) + return cur->as ()->getValue (); + + throw std::runtime_error ("Property without condition must match type (color)"); + } + + throw std::runtime_error ("Color property with condition doesn't match against combo value"); + } + + return this->m_default; +} + +std::string CUserSettingColor::Type = "color"; \ No newline at end of file diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.h b/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.h new file mode 100644 index 0000000..929971c --- /dev/null +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingColor.h @@ -0,0 +1,33 @@ +#pragma once + +#include + +#include "CUserSettingValue.h" + +namespace WallpaperEngine::Core::Projects +{ + class CProperty; +} + +namespace WallpaperEngine::Core::UserSettings +{ + class CUserSettingColor : public CUserSettingValue + { + public: + static CUserSettingColor* fromJSON (nlohmann::json& data); + static CUserSettingColor* fromScalar (glm::vec3 value); + static std::string Type; + + glm::vec3 processValue (const std::vector& properties); + glm::vec3 getDefaultValue (); + + private: + CUserSettingColor (bool hasCondition, bool hasSource, glm::vec3 defaultValue, std::string source, std::string expectedValue); + + glm::vec3 m_default; + bool m_hasCondition; + bool m_hasSource; + std::string m_source; + std::string m_expectedValue; + }; +} \ No newline at end of file diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp new file mode 100644 index 0000000..5812761 --- /dev/null +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp @@ -0,0 +1,98 @@ +#include "CUserSettingFloat.h" +#include "WallpaperEngine/Core/Core.h" + +#include "WallpaperEngine/Core/Projects/CProperty.h" +#include "WallpaperEngine/Core/Projects/CPropertySlider.h" + +using namespace WallpaperEngine::Core; +using namespace WallpaperEngine::Core::Projects; +using namespace WallpaperEngine::Core::UserSettings; + +CUserSettingFloat::CUserSettingFloat (bool hasCondition, bool hasSource, double defaultValue, std::string source, std::string expectedValue) : + CUserSettingValue (Type), + m_hasCondition (hasCondition), + m_hasSource(hasSource), + m_default(defaultValue), + m_source (std::move(source)), + m_expectedValue(std::move(expectedValue)) +{ +} + +CUserSettingFloat* CUserSettingFloat::fromJSON (nlohmann::json& data) +{ + bool hasCondition = false; + bool hasSource = false; + double defaultValue = false; + std::string source; + std::string expectedValue; + + if (data.is_object () == true) + { + hasSource = true; + auto userIt = data.find ("user"); + defaultValue = jsonFindDefault (data, "value", 1.0); // is this default value right? + + if (userIt != data.end ()) + { + if (userIt->is_string ()) + { + source = *userIt; + } + else + { + hasCondition = true; + source = *jsonFindRequired (userIt, "name", "Name for conditional setting must be present"); + expectedValue = *jsonFindRequired (userIt, "condition", "Condition for conditional setting must be present"); + } + } + else + { + fprintf (stderr, "Boolean property doesn't have user member, this could mean an scripted value"); + } + } + else + { + if (data.is_number () == false) + throw std::runtime_error ("Expected numeric value on user settings"); + + defaultValue = data.get (); + } + + return new CUserSettingFloat (hasCondition, hasSource, defaultValue, source, expectedValue); +} + +CUserSettingFloat* CUserSettingFloat::fromScalar (double value) +{ + return new CUserSettingFloat (false, false, value, "", ""); +} + +double CUserSettingFloat::getDefaultValue () +{ + return this->m_default; +} + +double CUserSettingFloat::processValue (const std::vector& properties) +{ + if (this->m_hasSource == false && this->m_hasCondition == false) + return this->getDefaultValue (); + + for (auto cur : properties) + { + if (cur->getName () != this->m_source) + continue; + + if (this->m_hasCondition == false) + { + if (cur->is ()) + return cur->as ()->getValue (); + + throw std::runtime_error ("Property without condition must match type (slider)"); + } + + throw std::runtime_error ("Boolean property with condition doesn't match against combo value"); + } + + return this->m_default; +} + +std::string CUserSettingFloat::Type = "float"; \ No newline at end of file diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h new file mode 100644 index 0000000..3a79627 --- /dev/null +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h @@ -0,0 +1,31 @@ +#pragma once + +#include "CUserSettingValue.h" + +namespace WallpaperEngine::Core::Projects +{ + class CProperty; +} + +namespace WallpaperEngine::Core::UserSettings +{ + class CUserSettingFloat : public CUserSettingValue + { + public: + static CUserSettingFloat* fromJSON (nlohmann::json& data); + static CUserSettingFloat* fromScalar (double value); + static std::string Type; + + double processValue (const std::vector& properties); + double getDefaultValue (); + + private: + CUserSettingFloat (bool hasCondition, bool hasSource, double defaultValue, std::string source, std::string expectedValue); + + double m_default; + bool m_hasCondition; + bool m_hasSource; + std::string m_source; + std::string m_expectedValue; + }; +} \ No newline at end of file diff --git a/src/WallpaperEngine/Render/CCamera.cpp b/src/WallpaperEngine/Render/CCamera.cpp index 0483b73..d740823 100644 --- a/src/WallpaperEngine/Render/CCamera.cpp +++ b/src/WallpaperEngine/Render/CCamera.cpp @@ -5,7 +5,6 @@ using namespace WallpaperEngine; using namespace WallpaperEngine::Render; -using namespace WallpaperEngine::Core::Types; CCamera::CCamera (CScene* scene, const Core::Scenes::CCamera* camera) : m_camera (camera), diff --git a/src/WallpaperEngine/Render/CCamera.h b/src/WallpaperEngine/Render/CCamera.h index 42d47f1..383ba20 100644 --- a/src/WallpaperEngine/Render/CCamera.h +++ b/src/WallpaperEngine/Render/CCamera.h @@ -7,8 +7,6 @@ #include "WallpaperEngine/Core/Scenes/CCamera.h" -using namespace WallpaperEngine::Core::Types; - namespace WallpaperEngine::Render { class CScene; diff --git a/src/WallpaperEngine/Render/CScene.cpp b/src/WallpaperEngine/Render/CScene.cpp index 6ec7246..75306aa 100644 --- a/src/WallpaperEngine/Render/CScene.cpp +++ b/src/WallpaperEngine/Render/CScene.cpp @@ -42,7 +42,7 @@ CScene::CScene (Core::CScene* scene, CContext* context) : ); // set clear color - FloatColor clearColor = this->getScene ()->getClearColor (); + glm::vec3 clearColor = this->getScene ()->getClearColor (); glClearColor (clearColor.r, clearColor.g, clearColor.b, 1.0f);