#pragma once #include #include "WallpaperEngine/Render/Helpers/ContextAware.h" #include "WallpaperEngine/Render/Wallpapers/CScene.h" namespace WallpaperEngine::Render::Wallpapers { class CScene; } namespace WallpaperEngine::Render { class CObject : public Helpers::ContextAware { public: template [[nodiscard]] const T* as () const { if (is ()) { return static_cast (this); } throw std::bad_cast (); } template [[nodiscard]] T* as () { if (is ()) { return static_cast (this); } throw std::bad_cast (); } template [[nodiscard]] bool is () const { return typeid (*this) == typeid (T); } virtual void render () = 0; [[nodiscard]] Wallpapers::CScene& getScene () const; [[nodiscard]] const AssetLocator& getAssetLocator () const; [[nodiscard]] int getId () const; virtual ~CObject () override = default; protected: CObject (Wallpapers::CScene& scene, const Object& object); private: Wallpapers::CScene& m_scene; const Object& m_object; }; } // namespace WallpaperEngine::Render