22 #ifndef FIFE_GENERICRENDERER_H
23 #define FIFE_GENERICRENDERER_H
33 #include "view/rendererbase.h"
41 class GenericRendererNode {
43 GenericRendererNode(Instance* attached_instance,
const Location &relative_location, Layer* relative_layer,
const Point &relative_point = Point(0,0));
44 GenericRendererNode(Instance* attached_instance,
const Location &relative_location,
const Point &relative_point = Point(0,0));
45 GenericRendererNode(Instance* attached_instance, Layer* relative_layer,
const Point &relative_point = Point(0,0));
46 GenericRendererNode(Instance* attached_instance,
const Point &relative_point = Point(0,0));
47 GenericRendererNode(
const Location &attached_location, Layer* relative_layer,
const Point &relative_point = Point(0,0));
48 GenericRendererNode(
const Location &attached_location,
const Point &relative_point = Point(0,0));
49 GenericRendererNode(Layer* attached_layer,
const Point &relative_point = Point(0,0));
50 GenericRendererNode(
const Point &attached_point);
51 ~GenericRendererNode();
53 void setAttached(Instance* attached_instance,
const Location &relative_location,
const Point &relative_point);
54 void setAttached(Instance* attached_instance,
const Location &relative_location);
55 void setAttached(Instance* attached_instance,
const Point &relative_point);
56 void setAttached(Instance* attached_instance);
57 void setAttached(
const Location &attached_location,
const Point &relative_point);
58 void setAttached(
const Location &attached_location);
59 void setAttached(Layer* attached_layer);
60 void setAttached(
const Point &attached_point);
62 void setRelative(
const Location &relative_location);
63 void setRelative(
const Location &relative_location, Point relative_point);
64 void setRelative(
const Point &relative_point);
66 Instance* getAttachedInstance();
67 Location getAttachedLocation();
68 Layer* getAttachedLayer();
69 Point getAttachedPoint();
71 Location getOffsetLocation();
72 Point getOffsetPoint();
74 Instance* getInstance();
75 Location getLocation();
79 Point getCalculatedPoint(Camera* cam, Layer* layer);
86 class GenericRendererElementInfo {
88 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) {};
89 virtual ~GenericRendererElementInfo() {};
92 class GenericRendererLineInfo :
public GenericRendererElementInfo {
94 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
95 GenericRendererLineInfo(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
96 virtual ~GenericRendererLineInfo() {};
98 GenericRendererNode m_edge1;
99 GenericRendererNode m_edge2;
105 class GenericRendererPointInfo :
public GenericRendererElementInfo {
107 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
108 GenericRendererPointInfo(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
109 virtual ~GenericRendererPointInfo() {};
111 GenericRendererNode m_anchor;
117 class GenericRendererTriangleInfo :
public GenericRendererElementInfo {
119 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
120 GenericRendererTriangleInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
121 virtual ~GenericRendererTriangleInfo() {};
123 GenericRendererNode m_edge1;
124 GenericRendererNode m_edge2;
125 GenericRendererNode m_edge3;
131 class GenericRendererQuadInfo :
public GenericRendererElementInfo {
133 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
134 GenericRendererQuadInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
135 virtual ~GenericRendererQuadInfo() {};
137 GenericRendererNode m_edge1;
138 GenericRendererNode m_edge2;
139 GenericRendererNode m_edge3;
140 GenericRendererNode m_edge4;
147 class GenericRendererVertexInfo :
public GenericRendererElementInfo {
149 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
150 GenericRendererVertexInfo(GenericRendererNode center,
int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
151 virtual ~GenericRendererVertexInfo() {};
153 GenericRendererNode m_center;
161 class GenericRendererImageInfo :
public GenericRendererElementInfo {
163 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
164 GenericRendererImageInfo(GenericRendererNode n,
int image);
165 virtual ~GenericRendererImageInfo() {};
167 GenericRendererNode m_anchor;
170 class GenericRendererAnimationInfo :
public GenericRendererElementInfo {
172 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
173 GenericRendererAnimationInfo(GenericRendererNode n,
int animation);
174 virtual ~GenericRendererAnimationInfo() {};
176 GenericRendererNode m_anchor;
178 unsigned int m_start_time;
181 class GenericRendererTextInfo :
public GenericRendererElementInfo {
183 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
184 GenericRendererTextInfo(GenericRendererNode n, AbstractFont* font, std::string text);
185 virtual ~GenericRendererTextInfo() {};
187 GenericRendererNode m_anchor;
188 AbstractFont* m_font;
191 class GenericRendererResizeInfo :
public GenericRendererElementInfo {
193 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
194 GenericRendererResizeInfo(GenericRendererNode n,
int image,
int width,
int height);
195 virtual ~GenericRendererResizeInfo() {};
197 GenericRendererNode m_anchor;
202 class GenericRenderer:
public RendererBase {
208 GenericRenderer(RenderBackend* renderbackend,
int position, ImagePool* imagepool, AnimationPool* animpool);
210 GenericRenderer(
const GenericRenderer& old);
216 virtual ~GenericRenderer();
217 void render(Camera* cam, Layer* layer, RenderList& instances);
218 std::string getName() {
return "GenericRenderer"; }
222 static GenericRenderer* getInstance(IRendererContainer* cnt);
224 void addLine(
const std::string &group, GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
225 void addPoint(
const std::string &group, GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
226 void addTriangle(
const std::string &group, GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
227 void addQuad(
const std::string &group, GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
228 void addVertex(
const std::string &group, GenericRendererNode n,
int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
229 void addText(
const std::string &group, GenericRendererNode n, AbstractFont* font,
const std::string &text);
230 void addImage(
const std::string &group, GenericRendererNode n,
int image);
231 void addAnimation(
const std::string &group, GenericRendererNode n,
int animation);
232 void resizeImage(
const std::string &group, GenericRendererNode n,
int image,
int width,
int height);
233 void removeAll(
const std::string &group);
236 ImagePool* m_imagepool;
237 AnimationPool* m_animationpool;
238 std::map<std::string, std::vector<GenericRendererElementInfo*> > m_groups;