FIFE 2008.0
genericrenderer.h
00001 /***************************************************************************
00002  *   Copyright (C) 2005-2008 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 "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
 All Classes Namespaces Functions Variables Enumerations Enumerator