00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_GENERICRENDERER_H
00023 #define FIFE_GENERICRENDERER_H
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "view/rendererbase.h"
00034
00035 namespace FIFE {
00036 class RenderBackend;
00037 class AbstractFont;
00038 class ImagePool;
00039 class AnimationPool;
00040
00041 class GenericRendererNode {
00042 public:
00043 GenericRendererNode(Instance* attached_instance, const Location &relative_location, Layer* relative_layer, const Point &relative_point = Point(0,0));
00044 GenericRendererNode(Instance* attached_instance, const Location &relative_location, const Point &relative_point = Point(0,0));
00045 GenericRendererNode(Instance* attached_instance, Layer* relative_layer, const Point &relative_point = Point(0,0));
00046 GenericRendererNode(Instance* attached_instance, const Point &relative_point = Point(0,0));
00047 GenericRendererNode(const Location &attached_location, Layer* relative_layer, const Point &relative_point = Point(0,0));
00048 GenericRendererNode(const Location &attached_location, const Point &relative_point = Point(0,0));
00049 GenericRendererNode(Layer* attached_layer, const Point &relative_point = Point(0,0));
00050 GenericRendererNode(const Point &attached_point);
00051 ~GenericRendererNode();
00052
00053 void setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point);
00054 void setAttached(Instance* attached_instance, const Location &relative_location);
00055 void setAttached(Instance* attached_instance, const Point &relative_point);
00056 void setAttached(Instance* attached_instance);
00057 void setAttached(const Location &attached_location, const Point &relative_point);
00058 void setAttached(const Location &attached_location);
00059 void setAttached(Layer* attached_layer);
00060 void setAttached(const Point &attached_point);
00061
00062 void setRelative(const Location &relative_location);
00063 void setRelative(const Location &relative_location, Point relative_point);
00064 void setRelative(const Point &relative_point);
00065
00066 Instance* getAttachedInstance();
00067 Location getAttachedLocation();
00068 Layer* getAttachedLayer();
00069 Point getAttachedPoint();
00070
00071 Location getOffsetLocation();
00072 Point getOffsetPoint();
00073
00074 Instance* getInstance();
00075 Location getLocation();
00076 Layer* getLayer();
00077 Point getPoint();
00078
00079 Point getCalculatedPoint(Camera* cam, Layer* layer);
00080 private:
00081 Instance* m_instance;
00082 Location m_location;
00083 Layer* m_layer;
00084 Point m_point;
00085 };
00086 class GenericRendererElementInfo {
00087 public:
00088 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) {};
00089 virtual ~GenericRendererElementInfo() {};
00090 };
00091
00092 class GenericRendererLineInfo : public GenericRendererElementInfo {
00093 public:
00094 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00095 GenericRendererLineInfo(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00096 virtual ~GenericRendererLineInfo() {};
00097 private:
00098 GenericRendererNode m_edge1;
00099 GenericRendererNode m_edge2;
00100 uint8_t m_red;
00101 uint8_t m_green;
00102 uint8_t m_blue;
00103 uint8_t m_alpha;
00104 };
00105 class GenericRendererPointInfo : public GenericRendererElementInfo {
00106 public:
00107 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00108 GenericRendererPointInfo(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00109 virtual ~GenericRendererPointInfo() {};
00110 private:
00111 GenericRendererNode m_anchor;
00112 uint8_t m_red;
00113 uint8_t m_green;
00114 uint8_t m_blue;
00115 uint8_t m_alpha;
00116 };
00117 class GenericRendererTriangleInfo : public GenericRendererElementInfo {
00118 public:
00119 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00120 GenericRendererTriangleInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00121 virtual ~GenericRendererTriangleInfo() {};
00122 private:
00123 GenericRendererNode m_edge1;
00124 GenericRendererNode m_edge2;
00125 GenericRendererNode m_edge3;
00126 uint8_t m_red;
00127 uint8_t m_green;
00128 uint8_t m_blue;
00129 uint8_t m_alpha;
00130 };
00131 class GenericRendererQuadInfo : public GenericRendererElementInfo {
00132 public:
00133 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00134 GenericRendererQuadInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00135 virtual ~GenericRendererQuadInfo() {};
00136 private:
00137 GenericRendererNode m_edge1;
00138 GenericRendererNode m_edge2;
00139 GenericRendererNode m_edge3;
00140 GenericRendererNode m_edge4;
00141 uint8_t m_red;
00142 uint8_t m_green;
00143 uint8_t m_blue;
00144 uint8_t m_alpha;
00145 };
00146
00147 class GenericRendererVertexInfo : public GenericRendererElementInfo {
00148 public:
00149 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00150 GenericRendererVertexInfo(GenericRendererNode center, int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00151 virtual ~GenericRendererVertexInfo() {};
00152 private:
00153 GenericRendererNode m_center;
00154 int m_size;
00155 uint8_t m_red;
00156 uint8_t m_green;
00157 uint8_t m_blue;
00158 uint8_t m_alpha;
00159 };
00160
00161 class GenericRendererImageInfo : public GenericRendererElementInfo {
00162 public:
00163 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00164 GenericRendererImageInfo(GenericRendererNode n, int image);
00165 virtual ~GenericRendererImageInfo() {};
00166 private:
00167 GenericRendererNode m_anchor;
00168 int m_image;
00169 };
00170 class GenericRendererAnimationInfo : public GenericRendererElementInfo {
00171 public:
00172 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00173 GenericRendererAnimationInfo(GenericRendererNode n, int animation);
00174 virtual ~GenericRendererAnimationInfo() {};
00175 private:
00176 GenericRendererNode m_anchor;
00177 int m_animation;
00178 unsigned int m_start_time;
00179 float m_time_scale;
00180 };
00181 class GenericRendererTextInfo : public GenericRendererElementInfo {
00182 public:
00183 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00184 GenericRendererTextInfo(GenericRendererNode n, AbstractFont* font, std::string text);
00185 virtual ~GenericRendererTextInfo() {};
00186 private:
00187 GenericRendererNode m_anchor;
00188 AbstractFont* m_font;
00189 std::string m_text;
00190 };
00191 class GenericRendererResizeInfo : public GenericRendererElementInfo {
00192 public:
00193 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
00194 GenericRendererResizeInfo(GenericRendererNode n, int image, int width, int height);
00195 virtual ~GenericRendererResizeInfo() {};
00196 private:
00197 GenericRendererNode m_anchor;
00198 int m_image;
00199 int m_width;
00200 int m_height;
00201 };
00202 class GenericRenderer: public RendererBase {
00203 public:
00208 GenericRenderer(RenderBackend* renderbackend, int position, ImagePool* imagepool, AnimationPool* animpool);
00209
00210 GenericRenderer(const GenericRenderer& old);
00211
00212 RendererBase* clone();
00213
00216 virtual ~GenericRenderer();
00217 void render(Camera* cam, Layer* layer, RenderList& instances);
00218 std::string getName() { return "GenericRenderer"; }
00219
00222 static GenericRenderer* getInstance(IRendererContainer* cnt);
00223
00224 void addLine(const std::string &group, GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00225 void addPoint(const std::string &group, GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00226 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);
00227 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);
00228 void addVertex(const std::string &group, GenericRendererNode n, int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00229 void addText(const std::string &group, GenericRendererNode n, AbstractFont* font, const std::string &text);
00230 void addImage(const std::string &group, GenericRendererNode n, int image);
00231 void addAnimation(const std::string &group, GenericRendererNode n, int animation);
00232 void resizeImage(const std::string &group, GenericRendererNode n, int image, int width, int height);
00233 void removeAll(const std::string &group);
00234
00235 private:
00236 ImagePool* m_imagepool;
00237 AnimationPool* m_animationpool;
00238 std::map<std::string, std::vector<GenericRendererElementInfo*> > m_groups;
00239 };
00240
00241 }
00242
00243 #endif