offrenderer.h

00001 /***************************************************************************
00002  *   Copyright (C) 2005-2011 by the FIFE team                              *
00003  *   http://www.fifengine.de                                               *
00004  *   This file is part of FIFE.                                            *
00005  *                                                                         *
00006  *   FIFE is free software; you can redistribute it and/or                 *
00007  *   modify it under the terms of the GNU Lesser General Public            *
00008  *   License as published by the Free Software Foundation; either          *
00009  *   version 2.1 of the License, or (at your option) any later version.    *
00010  *                                                                         *
00011  *   This library is distributed in the hope that it will be useful,       *
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00014  *   Lesser General Public License for more details.                       *
00015  *                                                                         *
00016  *   You should have received a copy of the GNU Lesser General Public      *
00017  *   License along with this library; if not, write to the                 *
00018  *   Free Software Foundation, Inc.,                                       *
00019  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
00020  ***************************************************************************/
00021 
00022 #ifndef FIFE_OFFRENDERER_H
00023 #define FIFE_OFFRENDERER_H
00024 
00025 // Standard C++ library includes
00026 
00027 // 3rd party library includes
00028 
00029 // FIFE includes
00030 // These includes are split up in two parts, separated by one empty line
00031 // First block: files included from the FIFE root src directory
00032 // Second block: files included from the same folder
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