#ifndef _DRAW_CANVAS_MANAGER_H_
#define _DRAW_CANVAS_MANAGER_H_
#include "RKList.h"
class DrawCanvas;
class RKTransformObject;
class RKVertexDeclaration;
class RKMaterial;
namespace CasualCore
{
class Level;
}
/// \brief This class manages canvas draw objects and is responsible for creating/destroying them and drawing them.
class DrawCanvasManager
{
public:
/// \brief Init the drawing manager
/// \param a_level The level to add the drawing object to (must be valid until Done() is called)
void Init(CasualCore::Level* a_level);
/// \brief Uninitialize the object back to the starting state
void Done();
/// \brief Create canvas object
/// \return A new canvas object is returned
DrawCanvas* CreateCanvas();
/// \brief Destroy canvas object
/// \param a_canvas The canvas object to destroy
void DestroyCanvas(DrawCanvas* a_canvas);
protected:
friend class DrawCanvasObject;
RKList<DrawCanvas*> m_canvasArray; //!< Array of draw canvas objects
CasualCore::Level* m_level = nullptr; //!< The level the GUI objects are rendered on
RKTransformObject* m_drawObject = nullptr; //!< The draw object on the level
RKVertexDeclaration* m_vertexDecl = nullptr; //!< The vertex format to use in drawing
/// Draw method to draw each canvas object
void Draw();
private:
RKMaterial *m_pSolidMaterial = nullptr;
RKMaterial *m_pAlphaMaterial = nullptr;
};
#endif //_DRAW_CANVAS_MANAGER_H_