CObject.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <irrlicht/irrlicht.h>
  3. #include "Core.h"
  4. #include "WallpaperEngine/Core/Objects/CEffect.h"
  5. namespace WallpaperEngine::Core::Objects
  6. {
  7. class CEffect;
  8. }
  9. namespace WallpaperEngine::Core
  10. {
  11. using json = nlohmann::json;
  12. class CObject
  13. {
  14. public:
  15. static CObject* fromJSON (json data);
  16. template<class T> const T* as () const { assert (is <T> ()); return (const T*) this; }
  17. template<class T> T* as () { assert (is <T> ()); return (T*) this; }
  18. template<class T> bool is () { return this->m_type == T::Type; }
  19. const std::vector<Objects::CEffect*>& getEffects () const;
  20. const std::vector<irr::u32>& getDependencies () const;
  21. const int getId () const;
  22. const irr::core::vector3df& getOrigin () const;
  23. const irr::core::vector3df& getScale () const;
  24. const irr::core::vector3df& getAngles () const;
  25. const std::string& getName () const;
  26. bool isVisible ();
  27. protected:
  28. CObject (
  29. bool visible,
  30. irr::u32 id,
  31. std::string name,
  32. std::string type,
  33. const irr::core::vector3df& origin,
  34. const irr::core::vector3df& scale,
  35. const irr::core::vector3df& angles
  36. );
  37. void insertEffect (Objects::CEffect* effect);
  38. void insertDependency (irr::u32 dependency);
  39. private:
  40. std::string m_type;
  41. bool m_visible;
  42. irr::u32 m_id;
  43. std::string m_name;
  44. irr::core::vector3df m_origin;
  45. irr::core::vector3df m_scale;
  46. irr::core::vector3df m_angles;
  47. std::vector<Objects::CEffect*> m_effects;
  48. std::vector<irr::u32> m_dependencies;
  49. };
  50. };