22 #ifndef FIFE_GENERICRENDERER_H
23 #define FIFE_GENERICRENDERER_H
33 #include "model/structures/renderernode.h"
34 #include "view/rendererbase.h"
35 #include "video/animation.h"
41 class GenericRendererElementInfo {
43 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) {};
44 virtual ~GenericRendererElementInfo() {};
47 class GenericRendererLineInfo :
public GenericRendererElementInfo {
49 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
50 GenericRendererLineInfo(RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
51 virtual ~GenericRendererLineInfo() {};
60 class GenericRendererPointInfo :
public GenericRendererElementInfo {
62 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
63 GenericRendererPointInfo(RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
64 virtual ~GenericRendererPointInfo() {};
66 RendererNode m_anchor;
72 class GenericRendererTriangleInfo :
public GenericRendererElementInfo {
74 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
75 GenericRendererTriangleInfo(RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
76 virtual ~GenericRendererTriangleInfo() {};
86 class GenericRendererQuadInfo :
public GenericRendererElementInfo {
88 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
89 GenericRendererQuadInfo(RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
90 virtual ~GenericRendererQuadInfo() {};
102 class GenericRendererVertexInfo :
public GenericRendererElementInfo {
104 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
105 GenericRendererVertexInfo(RendererNode center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
106 virtual ~GenericRendererVertexInfo() {};
108 RendererNode m_center;
116 class GenericRendererImageInfo :
public GenericRendererElementInfo {
118 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
119 GenericRendererImageInfo(RendererNode n, ImagePtr image,
bool zoomed =
true);
120 virtual ~GenericRendererImageInfo() {};
122 RendererNode m_anchor;
126 class GenericRendererAnimationInfo :
public GenericRendererElementInfo {
128 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
129 GenericRendererAnimationInfo(RendererNode n, AnimationPtr animation,
bool zoomed =
true);
130 virtual ~GenericRendererAnimationInfo() {};
132 RendererNode m_anchor;
133 AnimationPtr m_animation;
134 uint32_t m_start_time;
138 class GenericRendererTextInfo :
public GenericRendererElementInfo {
140 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
141 GenericRendererTextInfo(RendererNode n, IFont* font, std::string text);
142 virtual ~GenericRendererTextInfo() {};
144 RendererNode m_anchor;
148 class GenericRendererResizeInfo :
public GenericRendererElementInfo {
150 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
151 GenericRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height,
bool zoomed =
true);
152 virtual ~GenericRendererResizeInfo() {};
154 RendererNode m_anchor;
160 class GenericRenderer:
public RendererBase {
166 GenericRenderer(RenderBackend* renderbackend, int32_t position);
168 GenericRenderer(
const GenericRenderer& old);
174 virtual ~GenericRenderer();
175 void render(Camera* cam, Layer* layer, RenderList& instances);
176 std::string getName() {
return "GenericRenderer"; }
180 static GenericRenderer* getInstance(IRendererContainer* cnt);
182 void addLine(
const std::string &group, RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
183 void addPoint(
const std::string &group, RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
184 void addTriangle(
const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
185 void addQuad(
const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
186 void addVertex(
const std::string &group, RendererNode n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
187 void addText(
const std::string &group, RendererNode n, IFont* font,
const std::string &text);
188 void addImage(
const std::string &group, RendererNode n, ImagePtr image,
bool zoomed =
true);
189 void addAnimation(
const std::string &group, RendererNode n, AnimationPtr animation,
bool zoomed =
true);
190 void resizeImage(
const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height,
bool zoomed =
true);
191 void removeAll(
const std::string &group);
196 std::map<std::string, std::vector<GenericRendererElementInfo*> > m_groups;
RendererBase(RenderBackend *renderbackend, int32_t position)
credit to phoku for his NodeDisplay example which the visitor code is adapted from ( he coded the qua...