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 "model/structures/renderernode.h"
00034 #include "view/rendererbase.h"
00035 #include "video/animation.h"
00036
00037 namespace FIFE {
00038 class RenderBackend;
00039 class IFont;
00040
00041 class GenericRendererElementInfo {
00042 public:
00043 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) {};
00044 virtual ~GenericRendererElementInfo() {};
00045 };
00046
00047 class GenericRendererLineInfo : public GenericRendererElementInfo {
00048 public:
00049 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00050 GenericRendererLineInfo(RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00051 virtual ~GenericRendererLineInfo() {};
00052 private:
00053 RendererNode m_edge1;
00054 RendererNode m_edge2;
00055 uint8_t m_red;
00056 uint8_t m_green;
00057 uint8_t m_blue;
00058 uint8_t m_alpha;
00059 };
00060 class GenericRendererPointInfo : public GenericRendererElementInfo {
00061 public:
00062 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00063 GenericRendererPointInfo(RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00064 virtual ~GenericRendererPointInfo() {};
00065 private:
00066 RendererNode m_anchor;
00067 uint8_t m_red;
00068 uint8_t m_green;
00069 uint8_t m_blue;
00070 uint8_t m_alpha;
00071 };
00072 class GenericRendererTriangleInfo : public GenericRendererElementInfo {
00073 public:
00074 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00075 GenericRendererTriangleInfo(RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00076 virtual ~GenericRendererTriangleInfo() {};
00077 private:
00078 RendererNode m_edge1;
00079 RendererNode m_edge2;
00080 RendererNode m_edge3;
00081 uint8_t m_red;
00082 uint8_t m_green;
00083 uint8_t m_blue;
00084 uint8_t m_alpha;
00085 };
00086 class GenericRendererQuadInfo : public GenericRendererElementInfo {
00087 public:
00088 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00089 GenericRendererQuadInfo(RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00090 virtual ~GenericRendererQuadInfo() {};
00091 private:
00092 RendererNode m_edge1;
00093 RendererNode m_edge2;
00094 RendererNode m_edge3;
00095 RendererNode m_edge4;
00096 uint8_t m_red;
00097 uint8_t m_green;
00098 uint8_t m_blue;
00099 uint8_t m_alpha;
00100 };
00101
00102 class GenericRendererVertexInfo : public GenericRendererElementInfo {
00103 public:
00104 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00105 GenericRendererVertexInfo(RendererNode center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00106 virtual ~GenericRendererVertexInfo() {};
00107 private:
00108 RendererNode m_center;
00109 int32_t m_size;
00110 uint8_t m_red;
00111 uint8_t m_green;
00112 uint8_t m_blue;
00113 uint8_t m_alpha;
00114 };
00115
00116 class GenericRendererImageInfo : public GenericRendererElementInfo {
00117 public:
00118 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00119 GenericRendererImageInfo(RendererNode n, ImagePtr image, bool zoomed = true);
00120 virtual ~GenericRendererImageInfo() {};
00121 private:
00122 RendererNode m_anchor;
00123 ImagePtr m_image;
00124 bool m_zoomed;
00125 };
00126 class GenericRendererAnimationInfo : public GenericRendererElementInfo {
00127 public:
00128 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00129 GenericRendererAnimationInfo(RendererNode n, AnimationPtr animation, bool zoomed = true);
00130 virtual ~GenericRendererAnimationInfo() {};
00131 private:
00132 RendererNode m_anchor;
00133 AnimationPtr m_animation;
00134 uint32_t m_start_time;
00135 float m_time_scale;
00136 bool m_zoomed;
00137 };
00138 class GenericRendererTextInfo : public GenericRendererElementInfo {
00139 public:
00140 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00141 GenericRendererTextInfo(RendererNode n, IFont* font, std::string text);
00142 virtual ~GenericRendererTextInfo() {};
00143 private:
00144 RendererNode m_anchor;
00145 IFont* m_font;
00146 std::string m_text;
00147 };
00148 class GenericRendererResizeInfo : public GenericRendererElementInfo {
00149 public:
00150 void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
00151 GenericRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true);
00152 virtual ~GenericRendererResizeInfo() {};
00153 private:
00154 RendererNode m_anchor;
00155 ImagePtr m_image;
00156 int32_t m_width;
00157 int32_t m_height;
00158 bool m_zoomed;
00159 };
00160 class GenericRenderer: public RendererBase {
00161 public:
00166 GenericRenderer(RenderBackend* renderbackend, int32_t position);
00167
00168 GenericRenderer(const GenericRenderer& old);
00169
00170 RendererBase* clone();
00171
00174 virtual ~GenericRenderer();
00175 void render(Camera* cam, Layer* layer, RenderList& instances);
00176 std::string getName() { return "GenericRenderer"; }
00177
00180 static GenericRenderer* getInstance(IRendererContainer* cnt);
00181
00182 void addLine(const std::string &group, RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00183 void addPoint(const std::string &group, RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00184 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);
00185 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);
00186 void addVertex(const std::string &group, RendererNode n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00187 void addText(const std::string &group, RendererNode n, IFont* font, const std::string &text);
00188 void addImage(const std::string &group, RendererNode n, ImagePtr image, bool zoomed = true);
00189 void addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, bool zoomed = true);
00190 void resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true);
00191 void removeAll(const std::string &group);
00192 void removeAll();
00193 void reset();
00194
00195 private:
00196 std::map<std::string, std::vector<GenericRendererElementInfo*> > m_groups;
00197 };
00198
00199 }
00200
00201 #endif