00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_OFFRENDERER_H
00023 #define FIFE_OFFRENDERER_H
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "video/animation.h"
00034
00035 namespace FIFE {
00036 class RenderBackend;
00037 class IFont;
00038
00039 class OffRendererElementInfo {
00040 public:
00041 virtual void render(RenderBackend* renderbackend) {};
00042 virtual ~OffRendererElementInfo() {};
00043 };
00044
00045 class OffRendererLineInfo : public OffRendererElementInfo {
00046 public:
00047 void render(RenderBackend* renderbackend);
00048 OffRendererLineInfo(Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00049 virtual ~OffRendererLineInfo() {};
00050 private:
00051 Point m_edge1;
00052 Point m_edge2;
00053 uint8_t m_red;
00054 uint8_t m_green;
00055 uint8_t m_blue;
00056 uint8_t m_alpha;
00057 };
00058 class OffRendererPointInfo : public OffRendererElementInfo {
00059 public:
00060 void render(RenderBackend* renderbackend);
00061 OffRendererPointInfo(Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00062 virtual ~OffRendererPointInfo() {};
00063 private:
00064 Point m_anchor;
00065 uint8_t m_red;
00066 uint8_t m_green;
00067 uint8_t m_blue;
00068 uint8_t m_alpha;
00069 };
00070 class OffRendererTriangleInfo : public OffRendererElementInfo {
00071 public:
00072 void render(RenderBackend* renderbackend);
00073 OffRendererTriangleInfo(Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00074 virtual ~OffRendererTriangleInfo() {};
00075 private:
00076 Point m_edge1;
00077 Point m_edge2;
00078 Point m_edge3;
00079 uint8_t m_red;
00080 uint8_t m_green;
00081 uint8_t m_blue;
00082 uint8_t m_alpha;
00083 };
00084 class OffRendererQuadInfo : public OffRendererElementInfo {
00085 public:
00086 void render(RenderBackend* renderbackend);
00087 OffRendererQuadInfo(Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00088 virtual ~OffRendererQuadInfo() {};
00089 private:
00090 Point m_edge1;
00091 Point m_edge2;
00092 Point m_edge3;
00093 Point m_edge4;
00094 uint8_t m_red;
00095 uint8_t m_green;
00096 uint8_t m_blue;
00097 uint8_t m_alpha;
00098 };
00099
00100 class OffRendererVertexInfo : public OffRendererElementInfo {
00101 public:
00102 void render(RenderBackend* renderbackend);
00103 OffRendererVertexInfo(Point center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
00104 virtual ~OffRendererVertexInfo() {};
00105 private:
00106 Point m_center;
00107 int32_t m_size;
00108 uint8_t m_red;
00109 uint8_t m_green;
00110 uint8_t m_blue;
00111 uint8_t m_alpha;
00112 };
00113
00114 class OffRendererImageInfo : public OffRendererElementInfo {
00115 public:
00116 void render(RenderBackend* renderbackend);
00117 OffRendererImageInfo(Point n, ImagePtr image);
00118 virtual ~OffRendererImageInfo() {};
00119 private:
00120 Point m_anchor;
00121 ImagePtr m_image;
00122 };
00123 class OffRendererAnimationInfo : public OffRendererElementInfo {
00124 public:
00125 void render(RenderBackend* renderbackend);
00126 OffRendererAnimationInfo(Point n, AnimationPtr animation);
00127 virtual ~OffRendererAnimationInfo() {};
00128 private:
00129 Point m_anchor;
00130 AnimationPtr m_animation;
00131 uint32_t m_start_time;
00132 float m_time_scale;
00133 };
00134 class OffRendererTextInfo : public OffRendererElementInfo {
00135 public:
00136 void render(RenderBackend* renderbackend);
00137 OffRendererTextInfo(Point n, IFont* font, std::string text);
00138 virtual ~OffRendererTextInfo() {};
00139 private:
00140 Point m_anchor;
00141 IFont* m_font;
00142 std::string m_text;
00143 };
00144 class OffRendererResizeInfo : public OffRendererElementInfo {
00145 public:
00146 void render(RenderBackend* renderbackend);
00147 OffRendererResizeInfo(Point n, ImagePtr image, int32_t width, int32_t height);
00148 virtual ~OffRendererResizeInfo() {};
00149 private:
00150 Point m_anchor;
00151 ImagePtr m_image;
00152 int32_t m_width;
00153 int32_t m_height;
00154 };
00155 class OffRenderer {
00156 public:
00160 OffRenderer(RenderBackend* renderbackend);
00161
00164 virtual ~OffRenderer();
00165
00166 void setEnabled(bool enabled);
00167 bool isEnabled();
00168 void setClipArea(Rect area);
00169 const Rect& getClipArea() const;
00170 void render();
00171
00172 void addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00173 void addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00174 void addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00175 void addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00176 void addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
00177 void addText(const std::string &group, Point n, IFont* font, const std::string &text);
00178 void addImage(const std::string &group, Point n, ImagePtr image);
00179 void addAnimation(const std::string &group, Point n, AnimationPtr animation);
00180 void resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height);
00181 void removeAll(const std::string &group);
00182 void removeAll();
00183
00184 private:
00185 std::map<std::string, std::vector<OffRendererElementInfo*> > m_groups;
00186 RenderBackend* m_renderbackend;
00187 bool m_enabled;
00188 Rect m_area;
00189 };
00190
00191 }
00192
00193 #endif