#pragma once #include #include #include "WallpaperEngine/Core/CObject.h" #include "CScene.h" namespace WallpaperEngine::Render { class CScene; class CObject { public: template const T* As () const { assert (Is ()); return (const T*) this; } template T* As () { assert (Is ()); return (T*) this; } template bool Is () { return this->m_type == T::Type; } virtual void render () = 0; CScene* getScene () const; CContainer* getContainer () const; protected: CObject (CScene* scene, std::string type, Core::CObject *object); ~CObject (); private: std::string m_type; CScene* m_scene; Core::CObject* m_object; }; }