genericrenderer.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_GENERICRENDERER_H
00023 #define FIFE_GENERICRENDERER_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 "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