diff --git a/src/WallpaperEngine/Core/CObject.cpp b/src/WallpaperEngine/Core/CObject.cpp index e5cb5fb..47da1df 100644 --- a/src/WallpaperEngine/Core/CObject.cpp +++ b/src/WallpaperEngine/Core/CObject.cpp @@ -18,7 +18,8 @@ using namespace WallpaperEngine::Core::UserSettings; CObject::CObject ( const Wallpapers::CScene* scene, const CUserSettingBoolean* visible, int id, std::string name, std::string type, - const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, std::vector dependencies + const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, + std::vector dependencies ) : m_type (std::move(type)), m_visible (visible), @@ -37,7 +38,7 @@ const CObject* CObject::fromJSON ( const auto visible = jsonFindUserConfig (data, scene->getProject(), "visible", true); const auto origin = jsonFindUserConfig (data, scene->getProject(), "origin", {0, 0, 0}); const auto scale = jsonFindUserConfig (data, scene->getProject(), "scale", {1, 1, 1}); - const auto angles_val = jsonFindDefault (data, "angles", glm::vec3 (0, 0, 0)); + const auto angles_val = jsonFindUserConfig (data, scene->getProject(), "angles", glm::vec3 (0, 0, 0)); const auto name = jsonFindRequired (data, "name", "Objects must have name"); const auto effects_it = data.find ("effects"); const auto dependencies_it = data.find ("dependencies"); @@ -66,7 +67,7 @@ const CObject* CObject::fromJSON ( /// TODO: XXXHACK -- TO REMOVE WHEN PARTICLE SUPPORT IS PROPERLY IMPLEMENTED try { object = Objects::CParticle::fromFile ( - scene, particle_it->get (), container, visible, id, name, origin, scale, dependencies); + scene, particle_it->get (), container, visible, id, name, origin, angles_val, scale, dependencies); } catch (std::runtime_error&) { return nullptr; } @@ -92,7 +93,7 @@ const glm::vec3& CObject::getScale () const { } const glm::vec3& CObject::getAngles () const { - return this->m_angles; + return this->m_angles->getVec3 (); } const std::string& CObject::getName () const { diff --git a/src/WallpaperEngine/Core/CObject.h b/src/WallpaperEngine/Core/CObject.h index 004bcfc..c878b11 100644 --- a/src/WallpaperEngine/Core/CObject.h +++ b/src/WallpaperEngine/Core/CObject.h @@ -31,17 +31,17 @@ class CObject { public: static const CObject* fromJSON (const json& data, const Wallpapers::CScene* scene, const CContainer* container); - template const T* as () const { + template [[nodiscard]] const T* as () const { assert (is ()); return reinterpret_cast (this); } - template T* as () { + template [[nodiscard]] T* as () { assert (is ()); return reinterpret_cast (this); } - template bool is () const { + template [[nodiscard]] bool is () const { return this->m_type == T::Type; } @@ -59,7 +59,7 @@ class CObject { protected: CObject ( const Wallpapers::CScene* scene, const CUserSettingBoolean* visible, int id, std::string name, std::string type, - const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, + const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, std::vector dependencies); private: @@ -70,7 +70,7 @@ class CObject { const std::string m_name; const CUserSettingVector3* m_origin; const CUserSettingVector3* m_scale; - const glm::vec3 m_angles; + const CUserSettingVector3* m_angles; const std::vector m_dependencies; diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index ad64898..5c73bd5 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -13,10 +13,10 @@ using namespace WallpaperEngine::Core::UserSettings; CImage::CImage ( const Wallpapers::CScene* scene, const Images::CMaterial* material, const CUserSettingBoolean* visible, int id, - std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, - glm::vec2 size, std::string alignment, const CUserSettingVector3* color, const CUserSettingFloat* alpha, - float brightness, uint32_t colorBlendMode, glm::vec2 parallaxDepth, bool fullscreen, bool passthrough, - bool autosize, std::vector effects, std::vector dependencies + std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, + const CUserSettingVector3* angles, glm::vec2 size, std::string alignment, const CUserSettingVector3* color, + const CUserSettingFloat* alpha, float brightness, uint32_t colorBlendMode, glm::vec2 parallaxDepth, bool fullscreen, + bool passthrough, bool autosize, std::vector effects, std::vector dependencies ) : CObject (scene, visible, id, std::move(name), Type, origin, scale, angles, std::move(dependencies)), m_size (size), @@ -35,7 +35,7 @@ CImage::CImage ( const WallpaperEngine::Core::CObject* CImage::fromJSON ( const Wallpapers::CScene* scene, const json& data, const CContainer* container, const CUserSettingBoolean* visible, int id, std::string name, const CUserSettingVector3* origin, - const CUserSettingVector3* scale, glm::vec3 angles, const json::const_iterator& effects_it, + const CUserSettingVector3* scale, const CUserSettingVector3* angles, const json::const_iterator& effects_it, std::vector dependencies ) { const auto image = jsonFindRequired (data, "image", "Image must have an image"); diff --git a/src/WallpaperEngine/Core/Objects/CImage.h b/src/WallpaperEngine/Core/Objects/CImage.h index 5d81c46..3d2f914 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.h +++ b/src/WallpaperEngine/Core/Objects/CImage.h @@ -30,7 +30,7 @@ class CImage : public CObject { static const CObject* fromJSON ( const Wallpapers::CScene* scene, const json& data, const CContainer* container, const CUserSettingBoolean* visible, int id, std::string name, const CUserSettingVector3* origin, - const CUserSettingVector3* scale, glm::vec3 angles, const json::const_iterator& effects_it, + const CUserSettingVector3* scale, const CUserSettingVector3* angles, const json::const_iterator& effects_it, std::vector dependencies); /** @@ -85,10 +85,11 @@ class CImage : public CObject { protected: CImage ( const Wallpapers::CScene* scene, const Images::CMaterial* material, const CUserSettingBoolean* visible, int id, - std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, - glm::vec2 size, std::string alignment, const CUserSettingVector3* color, const CUserSettingFloat* alpha, - float brightness, uint32_t colorBlendMode, glm::vec2 parallaxDepth, bool fullscreen, bool passthrough, - bool autosize, std::vector effects, std::vector dependencies); + std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, + const CUserSettingVector3* angles, glm::vec2 size, std::string alignment, const CUserSettingVector3* color, + const CUserSettingFloat* alpha, float brightness, uint32_t colorBlendMode, glm::vec2 parallaxDepth, + bool fullscreen, bool passthrough, bool autosize, std::vector effects, + std::vector dependencies); /** * Type value used to differentiate the different types of objects in a background diff --git a/src/WallpaperEngine/Core/Objects/CParticle.cpp b/src/WallpaperEngine/Core/Objects/CParticle.cpp index 83e06ef..e7ad875 100644 --- a/src/WallpaperEngine/Core/Objects/CParticle.cpp +++ b/src/WallpaperEngine/Core/Objects/CParticle.cpp @@ -7,7 +7,7 @@ using namespace WallpaperEngine::Core::Objects; const CParticle* CParticle::fromFile ( const Wallpapers::CScene* scene, const std::string& filename, const CContainer* container, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, - const CUserSettingVector3* scale, std::vector dependencies + const CUserSettingVector3* angles, const CUserSettingVector3* scale, std::vector dependencies ) { json data = json::parse (container->readFileAsString (filename)); const auto controlpoint_it = data.find ("controlpoint"); @@ -36,6 +36,7 @@ const CParticle* CParticle::fromFile ( name, origin, scale, + angles, controlpoints, emitters, initializers, @@ -46,11 +47,11 @@ const CParticle* CParticle::fromFile ( CParticle::CParticle ( const Wallpapers::CScene* scene, uint32_t starttime, uint32_t maxcount, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, - const std::vector& controlpoints, + const CUserSettingVector3* angles, const std::vector& controlpoints, const std::vector& emitters, const std::vector& initializers, std::vector dependencies ) : - CObject (scene, visible, id, name, Type, origin, scale, glm::vec3 (), std::move(dependencies)), + CObject (scene, visible, id, name, Type, origin, scale, angles, std::move(dependencies)), m_starttime (starttime), m_maxcount (maxcount), m_controlpoints (controlpoints), diff --git a/src/WallpaperEngine/Core/Objects/CParticle.h b/src/WallpaperEngine/Core/Objects/CParticle.h index 6884b9f..ed83cd7 100644 --- a/src/WallpaperEngine/Core/Objects/CParticle.h +++ b/src/WallpaperEngine/Core/Objects/CParticle.h @@ -20,7 +20,7 @@ class CParticle : public CObject { static const CParticle* fromFile ( const Wallpapers::CScene* scene, const std::string& filename, const CContainer* container, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, - const CUserSettingVector3* scale, std::vector dependencies); + const CUserSettingVector3* angles, const CUserSettingVector3* scale, std::vector dependencies); /** * @return The list of emitters for the particle system @@ -39,7 +39,7 @@ class CParticle : public CObject { CParticle ( const Wallpapers::CScene* scene, uint32_t starttime, uint32_t maxcount, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, - const std::vector& controlpoints, + const CUserSettingVector3* angles, const std::vector& controlpoints, const std::vector& emitters, const std::vector& initializers, std::vector dependencies); diff --git a/src/WallpaperEngine/Core/Objects/CSound.cpp b/src/WallpaperEngine/Core/Objects/CSound.cpp index a02c194..4ab25fc 100644 --- a/src/WallpaperEngine/Core/Objects/CSound.cpp +++ b/src/WallpaperEngine/Core/Objects/CSound.cpp @@ -8,7 +8,7 @@ using namespace WallpaperEngine::Core::Objects; CSound::CSound ( const Wallpapers::CScene* scene, const CUserSettingBoolean* visible, int id, std::string name, - const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, bool repeat, + const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, bool repeat, std::vector sounds, std::vector dependencies ) : CObject (scene, visible, id, std::move(name), Type, origin, scale, angles, std::move(dependencies)), @@ -17,8 +17,8 @@ CSound::CSound ( const WallpaperEngine::Core::CObject* CSound::fromJSON ( const Wallpapers::CScene* scene, const json& data, const CUserSettingBoolean* visible, int id, - const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, - std::vector dependencies + const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, + const CUserSettingVector3* angles, std::vector dependencies ) { // TODO: PARSE AUDIO VOLUME std::vector sounds; diff --git a/src/WallpaperEngine/Core/Objects/CSound.h b/src/WallpaperEngine/Core/Objects/CSound.h index ea75a38..2535da3 100644 --- a/src/WallpaperEngine/Core/Objects/CSound.h +++ b/src/WallpaperEngine/Core/Objects/CSound.h @@ -21,8 +21,8 @@ class CSound : public CObject { public: static const CObject* fromJSON ( const Wallpapers::CScene* scene, const json& data, const CUserSettingBoolean* visible, - int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, - std::vector dependencies); + int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, + const CUserSettingVector3* angles, std::vector dependencies); /** * @return The list of sounds to play @@ -36,8 +36,8 @@ class CSound : public CObject { protected: CSound ( const Wallpapers::CScene* scene, const CUserSettingBoolean* visible, int id, std::string name, - const CUserSettingVector3* origin, const CUserSettingVector3* scale, glm::vec3 angles, bool repeat, - std::vector sounds, std::vector dependencies); + const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, + bool repeat, std::vector sounds, std::vector dependencies); /** * Type value used to differentiate the different types of objects in a background diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp b/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp index 8d7750e..7f4fce3 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp @@ -47,6 +47,7 @@ const CUserSettingBoolean* CUserSettingBoolean::fromJSON (const nlohmann::json& std::string expectedValue; if (data.is_object ()) { + auto animation = data.find ("animation"); auto userIt = data.find ("user"); defaultValue = jsonFindDefault (data, "value", true); // is this default value right? @@ -73,6 +74,10 @@ const CUserSettingBoolean* CUserSettingBoolean::fromJSON (const nlohmann::json& } else { sLog.error ("Boolean property doesn't have user member, this could mean an scripted value"); } + + if (animation != data.end ()) { + sLog.error ("Detected a setting with animation data, which is not supported yet!"); + } } else { if (!data.is_boolean ()) sLog.error ("Expected boolean value on user setting"); diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h b/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h index 6ef79ca..87e0b32 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h @@ -13,7 +13,7 @@ class CUserSettingBoolean : public CUserSettingValue { typedef bool data_type; static const CUserSettingBoolean* fromJSON (const nlohmann::json& data, const CProject& project); - static const CUserSettingBoolean* fromScalar (const bool value); + static const CUserSettingBoolean* fromScalar (bool value); static std::string Type; private: diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp index aac6a57..6e63f6b 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp @@ -41,6 +41,7 @@ const CUserSettingFloat* CUserSettingFloat::fromJSON (const nlohmann::json& data const Projects::CProperty* sourceProperty = nullptr; if (data.is_object ()) { + auto animation = data.find ("animation"); auto userIt = data.find ("user"); defaultValue = jsonFindDefault (data, "value", 1.0f); // is this default value right? @@ -64,6 +65,10 @@ const CUserSettingFloat* CUserSettingFloat::fromJSON (const nlohmann::json& data if (sourceProperty == nullptr) { sLog.error ("Cannot find property ", source, " to get value from for user setting value, using default value: ", defaultValue); } + + if (animation != data.end ()) { + sLog.error ("Detected a setting with animation data, which is not supported yet!"); + } } else { sLog.error ("Float property doesn't have user member, this could mean an scripted value"); } diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h index 4dcba9d..8243d61 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h @@ -13,7 +13,7 @@ class CUserSettingFloat : public CUserSettingValue { typedef float data_type; static const CUserSettingFloat* fromJSON (const nlohmann::json& data, const CProject& project); - static const CUserSettingFloat* fromScalar (const float value); + static const CUserSettingFloat* fromScalar (float value); static std::string Type; private: diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.cpp b/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.cpp index 534a5c6..bfa8a19 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.cpp +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.cpp @@ -41,6 +41,7 @@ const CUserSettingVector3* CUserSettingVector3::fromJSON (const nlohmann::json& std::string expectedValue; if (data.is_object ()) { + auto animation = data.find ("animation"); auto userIt = data.find ("user"); defaultValue = jsonFindDefault (data, "value", glm::vec3()); // is this default value right? @@ -67,6 +68,10 @@ const CUserSettingVector3* CUserSettingVector3::fromJSON (const nlohmann::json& } else { sLog.error ("Vector property doesn't have user member, this could mean an scripted value"); } + + if (animation != data.end ()) { + sLog.error ("Detected a setting with animation data, which is not supported yet!"); + } } else { if (!data.is_string ()) sLog.exception ("Expected vector value on user settings"); diff --git a/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.h b/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.h index a5adde1..a4a3ff3 100644 --- a/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.h +++ b/src/WallpaperEngine/Core/UserSettings/CUserSettingVector3.h @@ -15,7 +15,7 @@ class CUserSettingVector3 : public CUserSettingValue { typedef glm::vec3 data_type; static const CUserSettingVector3* fromJSON (const nlohmann::json& data, const CProject& project); - static const CUserSettingVector3* fromScalar (const glm::vec3 value); + static const CUserSettingVector3* fromScalar (glm::vec3 value); static std::string Type; private: