FIFE
2008.0
|
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