diff engine/core/view/renderers/genericrenderer.h @ 23:e5e2fec68834

add generic renderer
author spq@33b003aa-7bff-0310-803a-e67f0ece8222
date Fri, 11 Jul 2008 10:42:31 +0000
parents
children 70f41ea8e7db
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine/core/view/renderers/genericrenderer.h	Fri Jul 11 10:42:31 2008 +0000
@@ -0,0 +1,177 @@
+/***************************************************************************
+ *   Copyright (C) 2005-2008 by the FIFE Team                              *
+ *   http://www.fifengine.de                                               *
+ *   This file is part of FIFE.                                            *
+ *                                                                         *
+ *   FIFE is free software; you can redistribute it and/or modify          *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA              *
+ ***************************************************************************/
+
+#ifndef FIFE_GENERICRENDERER_H
+#define FIFE_GENERICRENDERER_H
+
+// Standard C++ library includes
+
+// 3rd party library includes
+
+// FIFE includes
+// These includes are split up in two parts, separated by one empty line
+// First block: files included from the FIFE root src directory
+// Second block: files included from the same folder
+#include "view/rendererbase.h"
+
+namespace FIFE {
+	class RenderBackend;
+	class AbstractFont;
+
+	class GenericRendererNode {
+	public:
+		GenericRendererNode(Instance* attached_instance, Location* relative_location, const Point &relative_point = Point(0,0));
+		GenericRendererNode(Instance* attached_instance, const Point &relative_point = Point(0,0));
+		GenericRendererNode(Location* attached_location, const Point &relative_point = Point(0,0));
+		GenericRendererNode(const Point &attached_point);
+		~GenericRendererNode();
+		
+		void setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point);
+		void setAttached(Instance* attached_instance, const Location &relative_location);
+		void setAttached(Instance* attached_instance, const Point &relative_point);
+		void setAttached(Instance* attached_instance);
+		void setAttached(const Location &attached_location, const Point &relative_point);
+		void setAttached(const Location &attached_location);
+		void setAttached(const Point &attached_point);
+		
+		void setRelative(const Location &relative_location);
+		void setRelative(const Location &relative_location, Point relative_point);
+		void setRelative(const Point &relative_point);
+		
+		Instance* getAttachedInstance();
+		Location* getAttachedLocation();
+		Point getAttachedPoint();
+		
+		Location* getOffsetLocation();
+		Point getOffsetPoint();
+		
+		Instance* getInstance();
+		Location* getLocation();
+		Point getPoint();
+
+		Point getCalculatedPoint(Camera* cam, Layer* layer, std::vector<Instance*>& instances);
+	private:
+		Instance* m_instance;
+		Location* m_location;
+		Point m_point;
+	};
+	class GenericRendererElementInfo {
+	public:
+		virtual void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend) { };
+		virtual ~GenericRendererElementInfo() {};
+	};
+
+	class GenericRendererLineInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n1;
+		GenericRendererNode n2;
+		uint8_t r;
+		uint8_t g;
+		uint8_t b;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererLineInfo(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b);
+		virtual ~GenericRendererLineInfo() {};
+	};
+	class GenericRendererPointInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n;
+		uint8_t r;
+		uint8_t g;
+		uint8_t b;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererPointInfo(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b);
+		virtual ~GenericRendererPointInfo() {};
+	};
+	class GenericRendererQuadInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n1;
+		GenericRendererNode n2;
+		GenericRendererNode n3;
+		GenericRendererNode n4;
+		uint8_t r;
+		uint8_t g;
+		uint8_t b;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererQuadInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b);
+		virtual ~GenericRendererQuadInfo() {};
+	};
+	class GenericRendererImageInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n;
+		int image;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererImageInfo(GenericRendererNode n, int image);
+		virtual ~GenericRendererImageInfo() {};
+	};
+	class GenericRendererAnimationInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n;
+		int animation;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererAnimationInfo(GenericRendererNode n, int animation);
+		virtual ~GenericRendererAnimationInfo() {};
+	};
+	class GenericRendererTextInfo : public GenericRendererElementInfo {
+	public:
+		GenericRendererNode n;
+		AbstractFont* font;
+		std::string text;
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend);
+		GenericRendererTextInfo(GenericRendererNode n, AbstractFont* font, std::string text);
+		virtual ~GenericRendererTextInfo() {};
+	};
+	class GenericRenderer: public RendererBase {
+	public:
+		/** constructor.
+		 * @param renderbackend to use
+		 * @param position position for this renderer in rendering pipeline
+		 */
+		GenericRenderer(RenderBackend* renderbackend, int position);
+		
+		GenericRenderer(const GenericRenderer& old);
+		
+		RendererBase* clone();
+
+		/** Destructor.
+		 */
+		virtual ~GenericRenderer();
+		void render(Camera* cam, Layer* layer, std::vector<Instance*>& instances);
+		std::string getName() { return "GenericRenderer"; }
+
+		/** Gets instance for interface access
+		 */
+		static GenericRenderer* getInstance(IRendererContainer* cnt);
+
+		void addLine(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b);
+		void addPoint(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b);
+		void addQuad(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b);
+		void addText(GenericRendererNode n, AbstractFont* font, std::string text);
+		void addImage(GenericRendererNode n, int image);
+		void addAnimation(GenericRendererNode n, int animation);
+		void removeAll();
+
+	private:
+		std::vector<GenericRendererElementInfo*> m_infos;
+	};
+
+}
+
+#endif