FIFE  2008.0
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
genericrenderer.h
1 /***************************************************************************
2  * Copyright (C) 2005-2008 by the FIFE team *
3  * http://www.fifengine.de *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 #ifndef FIFE_GENERICRENDERER_H
23 #define FIFE_GENERICRENDERER_H
24 
25 // Standard C++ library includes
26 
27 // 3rd party library includes
28 
29 // FIFE includes
30 // These includes are split up in two parts, separated by one empty line
31 // First block: files included from the FIFE root src directory
32 // Second block: files included from the same folder
33 #include "view/rendererbase.h"
34 
35 namespace FIFE {
36  class RenderBackend;
37  class AbstractFont;
38  class ImagePool;
39  class AnimationPool;
40 
41  class GenericRendererNode {
42  public:
43  GenericRendererNode(Instance* attached_instance, const Location &relative_location, Layer* relative_layer, const Point &relative_point = Point(0,0));
44  GenericRendererNode(Instance* attached_instance, const Location &relative_location, const Point &relative_point = Point(0,0));
45  GenericRendererNode(Instance* attached_instance, Layer* relative_layer, const Point &relative_point = Point(0,0));
46  GenericRendererNode(Instance* attached_instance, const Point &relative_point = Point(0,0));
47  GenericRendererNode(const Location &attached_location, Layer* relative_layer, const Point &relative_point = Point(0,0));
48  GenericRendererNode(const Location &attached_location, const Point &relative_point = Point(0,0));
49  GenericRendererNode(Layer* attached_layer, const Point &relative_point = Point(0,0));
50  GenericRendererNode(const Point &attached_point);
51  ~GenericRendererNode();
52 
53  void setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point);
54  void setAttached(Instance* attached_instance, const Location &relative_location);
55  void setAttached(Instance* attached_instance, const Point &relative_point);
56  void setAttached(Instance* attached_instance);
57  void setAttached(const Location &attached_location, const Point &relative_point);
58  void setAttached(const Location &attached_location);
59  void setAttached(Layer* attached_layer);
60  void setAttached(const Point &attached_point);
61 
62  void setRelative(const Location &relative_location);
63  void setRelative(const Location &relative_location, Point relative_point);
64  void setRelative(const Point &relative_point);
65 
66  Instance* getAttachedInstance();
67  Location getAttachedLocation();
68  Layer* getAttachedLayer();
69  Point getAttachedPoint();
70 
71  Location getOffsetLocation();
72  Point getOffsetPoint();
73 
74  Instance* getInstance();
75  Location getLocation();
76  Layer* getLayer();
77  Point getPoint();
78 
79  Point getCalculatedPoint(Camera* cam, Layer* layer);
80  private:
81  Instance* m_instance;
82  Location m_location;
83  Layer* m_layer;
84  Point m_point;
85  };
86  class GenericRendererElementInfo {
87  public:
88  virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) {};
89  virtual ~GenericRendererElementInfo() {};
90  };
91 
92  class GenericRendererLineInfo : public GenericRendererElementInfo {
93  public:
94  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
95  GenericRendererLineInfo(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
96  virtual ~GenericRendererLineInfo() {};
97  private:
98  GenericRendererNode m_edge1;
99  GenericRendererNode m_edge2;
100  uint8_t m_red;
101  uint8_t m_green;
102  uint8_t m_blue;
103  uint8_t m_alpha;
104  };
105  class GenericRendererPointInfo : public GenericRendererElementInfo {
106  public:
107  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
108  GenericRendererPointInfo(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
109  virtual ~GenericRendererPointInfo() {};
110  private:
111  GenericRendererNode m_anchor;
112  uint8_t m_red;
113  uint8_t m_green;
114  uint8_t m_blue;
115  uint8_t m_alpha;
116  };
117  class GenericRendererTriangleInfo : public GenericRendererElementInfo {
118  public:
119  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
120  GenericRendererTriangleInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
121  virtual ~GenericRendererTriangleInfo() {};
122  private:
123  GenericRendererNode m_edge1;
124  GenericRendererNode m_edge2;
125  GenericRendererNode m_edge3;
126  uint8_t m_red;
127  uint8_t m_green;
128  uint8_t m_blue;
129  uint8_t m_alpha;
130  };
131  class GenericRendererQuadInfo : public GenericRendererElementInfo {
132  public:
133  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
134  GenericRendererQuadInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
135  virtual ~GenericRendererQuadInfo() {};
136  private:
137  GenericRendererNode m_edge1;
138  GenericRendererNode m_edge2;
139  GenericRendererNode m_edge3;
140  GenericRendererNode m_edge4;
141  uint8_t m_red;
142  uint8_t m_green;
143  uint8_t m_blue;
144  uint8_t m_alpha;
145  };
146 
147  class GenericRendererVertexInfo : public GenericRendererElementInfo {
148  public:
149  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
150  GenericRendererVertexInfo(GenericRendererNode center, int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
151  virtual ~GenericRendererVertexInfo() {};
152  private:
153  GenericRendererNode m_center;
154  int m_size;
155  uint8_t m_red;
156  uint8_t m_green;
157  uint8_t m_blue;
158  uint8_t m_alpha;
159  };
160 
161  class GenericRendererImageInfo : public GenericRendererElementInfo {
162  public:
163  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
164  GenericRendererImageInfo(GenericRendererNode n, int image);
165  virtual ~GenericRendererImageInfo() {};
166  private:
167  GenericRendererNode m_anchor;
168  int m_image;
169  };
170  class GenericRendererAnimationInfo : public GenericRendererElementInfo {
171  public:
172  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
173  GenericRendererAnimationInfo(GenericRendererNode n, int animation);
174  virtual ~GenericRendererAnimationInfo() {};
175  private:
176  GenericRendererNode m_anchor;
177  int m_animation;
178  unsigned int m_start_time;
179  float m_time_scale;
180  };
181  class GenericRendererTextInfo : public GenericRendererElementInfo {
182  public:
183  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
184  GenericRendererTextInfo(GenericRendererNode n, AbstractFont* font, std::string text);
185  virtual ~GenericRendererTextInfo() {};
186  private:
187  GenericRendererNode m_anchor;
188  AbstractFont* m_font;
189  std::string m_text;
190  };
191  class GenericRendererResizeInfo : public GenericRendererElementInfo {
192  public:
193  void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool);
194  GenericRendererResizeInfo(GenericRendererNode n, int image, int width, int height);
195  virtual ~GenericRendererResizeInfo() {};
196  private:
197  GenericRendererNode m_anchor;
198  int m_image;
199  int m_width;
200  int m_height;
201  };
202  class GenericRenderer: public RendererBase {
203  public:
208  GenericRenderer(RenderBackend* renderbackend, int position, ImagePool* imagepool, AnimationPool* animpool);
209 
210  GenericRenderer(const GenericRenderer& old);
211 
212  RendererBase* clone();
213 
216  virtual ~GenericRenderer();
217  void render(Camera* cam, Layer* layer, RenderList& instances);
218  std::string getName() { return "GenericRenderer"; }
219 
222  static GenericRenderer* getInstance(IRendererContainer* cnt);
223 
224  void addLine(const std::string &group, GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
225  void addPoint(const std::string &group, GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
226  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);
227  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);
228  void addVertex(const std::string &group, GenericRendererNode n, int size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255);
229  void addText(const std::string &group, GenericRendererNode n, AbstractFont* font, const std::string &text);
230  void addImage(const std::string &group, GenericRendererNode n, int image);
231  void addAnimation(const std::string &group, GenericRendererNode n, int animation);
232  void resizeImage(const std::string &group, GenericRendererNode n, int image, int width, int height);
233  void removeAll(const std::string &group);
234 
235  private:
236  ImagePool* m_imagepool;
237  AnimationPool* m_animationpool;
238  std::map<std::string, std::vector<GenericRendererElementInfo*> > m_groups;
239  };
240 
241 }
242 
243 #endif