Mercurial > fife-parpg
annotate engine/core/view/renderers/genericrenderer.cpp @ 105:2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
author | spq@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Thu, 24 Jul 2008 13:20:39 +0000 |
parents | 90005975cdbb |
children | 56ac89189bc4 |
rev | line source |
---|---|
23 | 1 /*************************************************************************** |
2 * Copyright (C) 2005-2008 by the FIFE team * | |
3 * http://www.fifengine.de * | |
4 * This file is part of FIFE. * | |
5 * * | |
46
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
6 * FIFE is free software; you can redistribute it and/or * |
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public * |
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
8 * License as published by the Free Software Foundation; either * |
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. * |
23 | 10 * * |
46
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
11 * This library is distributed in the hope that it will be useful, * |
23 | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
46
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * |
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
14 * Lesser General Public License for more details. * |
23 | 15 * * |
46
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public * |
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
17 * License along with this library; if not, write to the * |
23 | 18 * Free Software Foundation, Inc., * |
46
90005975cdbb
* Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
36
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * |
23 | 20 ***************************************************************************/ |
21 | |
22 // Standard C++ library includes | |
23 | |
24 // 3rd party library includes | |
25 | |
26 // FIFE includes | |
27 // These includes are split up in two parts, separated by one empty line | |
28 // First block: files included from the FIFE root src directory | |
29 // Second block: files included from the same folder | |
30 #include "video/renderbackend.h" | |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
31 #include "video/imagepool.h" |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
32 #include "video/animation.h" |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
33 #include "video/animationpool.h" |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
34 #include "video/fonts/abstractfont.h" |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
35 #include "video/image.h" |
23 | 36 #include "util/math/fife_math.h" |
37 #include "util/log/logger.h" | |
38 #include "model/metamodel/grids/cellgrid.h" | |
31
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
39 #include "model/metamodel/timeprovider.h" |
23 | 40 #include "model/structures/instance.h" |
41 #include "model/structures/layer.h" | |
42 #include "model/structures/location.h" | |
43 | |
44 #include "view/camera.h" | |
45 #include "genericrenderer.h" | |
46 | |
47 | |
48 namespace FIFE { | |
49 static Logger _log(LM_VIEWVIEW); | |
50 | |
51 GenericRendererNode::GenericRendererNode(Instance* attached_instance, Location* relative_location, const Point &relative_point): | |
52 m_instance(attached_instance), | |
53 m_location(relative_location), | |
54 m_point(relative_point) { | |
55 } | |
56 GenericRendererNode::GenericRendererNode(Instance* attached_instance, const Point &relative_point): | |
57 m_instance(attached_instance), | |
58 m_location(NULL), | |
59 m_point(relative_point) { | |
60 } | |
61 GenericRendererNode::GenericRendererNode(Location* attached_location, const Point &relative_point): | |
62 m_instance(NULL), | |
63 m_location(attached_location), | |
64 m_point(relative_point) { | |
65 } | |
66 GenericRendererNode::GenericRendererNode(const Point &attached_point): | |
67 m_instance(NULL), | |
68 m_location(NULL), | |
69 m_point(attached_point) { | |
70 } | |
71 GenericRendererNode::~GenericRendererNode() { | |
72 } | |
73 | |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
74 void GenericRendererNode::setAttached(Instance* attached_instance, Location* relative_location, const Point &relative_point) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
75 m_instance = attached_instance; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
76 m_location = relative_location; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
77 m_point = relative_point; |
23 | 78 } |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
79 void GenericRendererNode::setAttached(Instance* attached_instance, Location* relative_location) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
80 m_instance = attached_instance; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
81 m_location = relative_location; |
23 | 82 } |
83 void GenericRendererNode::setAttached(Instance* attached_instance, const Point &relative_point) { | |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
84 m_instance = attached_instance; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
85 m_point = relative_point; |
23 | 86 } |
87 void GenericRendererNode::setAttached(Instance* attached_instance) { | |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
88 m_instance = attached_instance; |
23 | 89 } |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
90 void GenericRendererNode::setAttached(Location* attached_location, const Point &relative_point) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
91 m_instance = NULL; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
92 m_location = attached_location; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
93 m_point = relative_point; |
23 | 94 } |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
95 void GenericRendererNode::setAttached(Location* attached_location) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
96 m_instance = NULL; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
97 m_location = attached_location; |
23 | 98 } |
99 void GenericRendererNode::setAttached(const Point &attached_point) { | |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
100 m_instance = NULL; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
101 m_location = NULL; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
102 m_point = attached_point; |
23 | 103 } |
104 | |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
105 void GenericRendererNode::setRelative(Location* relative_location) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
106 if(m_instance == NULL) { |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
107 throw NotSupported("No instance attached."); |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
108 } |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
109 m_location = relative_location; |
23 | 110 } |
26
70f41ea8e7db
fix compile errors in node setters...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
25
diff
changeset
|
111 void GenericRendererNode::setRelative(Location* relative_location, Point relative_point) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
112 if(m_instance == NULL) { |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
113 throw NotSupported("No instance attached."); |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
114 } |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
115 m_location = relative_location; |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
116 m_point = relative_point; |
23 | 117 } |
118 void GenericRendererNode::setRelative(const Point &relative_point) { | |
36
6f1227f4932b
Fixed and's and or's.
aldart@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
32
diff
changeset
|
119 if(m_instance == NULL || m_location == NULL) { |
25
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
120 throw NotSupported("No instance or location attached."); |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
121 } |
fc6713d72b80
add setter for nodes
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
24
diff
changeset
|
122 m_point = relative_point; |
23 | 123 } |
124 | |
125 Instance* GenericRendererNode::getAttachedInstance() { | |
126 if(m_instance == NULL) { | |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
127 throw NotSupported("No instance attached."); |
23 | 128 } |
129 return m_instance; | |
130 } | |
131 Location* GenericRendererNode::getAttachedLocation() { | |
36
6f1227f4932b
Fixed and's and or's.
aldart@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
32
diff
changeset
|
132 if(m_instance != NULL || m_location == NULL) { |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
133 throw NotSupported("No location attached."); |
23 | 134 } |
135 return m_location; | |
136 } | |
137 Point GenericRendererNode::getAttachedPoint() { | |
36
6f1227f4932b
Fixed and's and or's.
aldart@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
32
diff
changeset
|
138 if(m_instance != NULL || m_location != NULL) { |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
139 throw NotSupported("No point attached."); |
23 | 140 } |
141 return m_point; | |
142 } | |
143 | |
144 Location* GenericRendererNode::getOffsetLocation() { | |
36
6f1227f4932b
Fixed and's and or's.
aldart@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
32
diff
changeset
|
145 if(m_instance == NULL || m_location == NULL) { |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
146 throw NotSupported("No location as offset used."); |
23 | 147 } |
148 return m_location; | |
149 } | |
150 Point GenericRendererNode::getOffsetPoint() { | |
36
6f1227f4932b
Fixed and's and or's.
aldart@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
32
diff
changeset
|
151 if(m_instance == NULL && m_location == NULL) { |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
152 throw NotSupported("No point as offset used."); |
23 | 153 } |
154 return m_point; | |
155 } | |
156 | |
157 Instance* GenericRendererNode::getInstance() { | |
158 return m_instance; | |
159 } | |
160 Location* GenericRendererNode::getLocation() { | |
161 return m_location; | |
162 } | |
163 Point GenericRendererNode::getPoint() { | |
164 return m_point; | |
165 } | |
166 | |
167 Point GenericRendererNode::getCalculatedPoint(Camera* cam, Layer* layer, std::vector<Instance*>& instances) { | |
168 ScreenPoint p; | |
169 if(m_instance != NULL) { | |
170 if(m_location != NULL) { | |
171 p = cam->toScreenCoordinates(m_instance->getLocationRef().getMapCoordinates() + m_location->getMapCoordinates()); | |
172 } | |
173 else { | |
174 p = cam->toScreenCoordinates(m_instance->getLocation().getMapCoordinates()); | |
175 } | |
176 } | |
177 else if(m_location != NULL) { | |
178 p = cam->toScreenCoordinates(m_location->getMapCoordinates()); | |
179 } | |
180 else | |
181 return m_point; | |
182 return Point(m_point.x + p.x, m_point.y + p.y); | |
183 } | |
184 | |
185 GenericRendererLineInfo::GenericRendererLineInfo(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b): | |
186 GenericRendererElementInfo(), | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
187 m_edge1(n1), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
188 m_edge2(n2), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
189 m_red(r), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
190 m_green(g), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
191 m_blue(b) { |
23 | 192 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
193 void GenericRendererLineInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
194 Point p1 = m_edge1.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
195 Point p2 = m_edge2.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
196 renderbackend->drawLine(p1, p2, m_red, m_green, m_blue); |
23 | 197 } |
198 | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
199 GenericRendererPointInfo::GenericRendererPointInfo(GenericRendererNode anchor, uint8_t r, uint8_t g, uint8_t b): |
23 | 200 GenericRendererElementInfo(), |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
201 m_anchor(anchor), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
202 m_red(r), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
203 m_green(g), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
204 m_blue(b) { |
23 | 205 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
206 void GenericRendererPointInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
207 Point p = m_anchor.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
208 renderbackend->putPixel(p.x, p.y, m_red, m_green, m_blue); |
23 | 209 } |
210 | |
211 GenericRendererQuadInfo::GenericRendererQuadInfo(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b): | |
212 GenericRendererElementInfo(), | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
213 m_edge1(n1), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
214 m_edge2(n2), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
215 m_edge3(n3), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
216 m_edge4(n4), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
217 m_red(r), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
218 m_green(g), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
219 m_blue(b) { |
23 | 220 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
221 void GenericRendererQuadInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
222 Point p1 = m_edge1.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
223 Point p2 = m_edge2.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
224 Point p3 = m_edge3.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
225 Point p4 = m_edge4.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
226 renderbackend->drawQuad(p1, p2, p3, p4, m_red, m_green, m_blue); |
23 | 227 } |
228 | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
229 GenericRendererImageInfo::GenericRendererImageInfo(GenericRendererNode anchor, int image): |
23 | 230 GenericRendererElementInfo(), |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
231 m_anchor(anchor), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
232 m_image(image) { |
23 | 233 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
234 void GenericRendererImageInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
235 Point p = m_anchor.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
236 Image* img = &imagepool->getImage(m_image); |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
237 Rect r; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
238 r.x = p.x-img->getWidth()/2; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
239 r.y = p.y-img->getHeight()/2; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
240 r.w = img->getWidth(); |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
241 r.h = img->getHeight(); |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
242 img->render(r); |
23 | 243 } |
244 | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
245 GenericRendererAnimationInfo::GenericRendererAnimationInfo(GenericRendererNode anchor, int animation): |
23 | 246 GenericRendererElementInfo(), |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
247 m_anchor(anchor), |
31
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
248 m_animation(animation), |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
249 m_start_time(SDL_GetTicks()), |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
250 m_time_scale(1.0) { |
23 | 251 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
252 void GenericRendererAnimationInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
31
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
253 Point p = m_anchor.getCalculatedPoint(cam, layer, instances); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
254 Animation& animation = animpool->getAnimation(m_animation); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
255 int animtime = scaleTime(m_time_scale, SDL_GetTicks() - m_start_time) % animation.getDuration(); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
256 Image* img = animation.getFrameByTimestamp(animtime); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
257 Rect r; |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
258 r.x = p.x-img->getWidth()/2; |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
259 r.y = p.y-img->getHeight()/2; |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
260 r.w = img->getWidth(); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
261 r.h = img->getHeight(); |
9a9f4447af7c
add animation renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
30
diff
changeset
|
262 img->render(r); |
23 | 263 } |
264 | |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
265 GenericRendererTextInfo::GenericRendererTextInfo(GenericRendererNode anchor, AbstractFont* font, std::string text): |
23 | 266 GenericRendererElementInfo(), |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
267 m_anchor(anchor), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
268 m_font(font), |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
269 m_text(text) { |
23 | 270 } |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
271 void GenericRendererTextInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { |
29
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
272 Point p = m_anchor.getCalculatedPoint(cam, layer, instances); |
0cb049f291e1
make members private and prefix with m_
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
27
diff
changeset
|
273 Image* img = m_font->getAsImageMultiline(m_text); |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
274 Rect r; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
275 r.x = p.x-img->getWidth()/2; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
276 r.y = p.y-img->getHeight()/2; |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
277 r.w = img->getWidth(); |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
278 r.h = img->getHeight(); |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
279 img->render(r); |
23 | 280 } |
281 | |
282 GenericRenderer* GenericRenderer::getInstance(IRendererContainer* cnt) { | |
283 return dynamic_cast<GenericRenderer*>(cnt->getRenderer("GenericRenderer")); | |
284 } | |
285 | |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
286 GenericRenderer::GenericRenderer(RenderBackend* renderbackend, int position, ImagePool* imagepool, AnimationPool* animpool): |
23 | 287 RendererBase(renderbackend, position), |
27
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
288 m_imagepool(imagepool), |
788cb9525b2f
add image and text renderer to generic renderer
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
26
diff
changeset
|
289 m_animationpool(animpool), |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
290 m_groups() { |
23 | 291 setEnabled(false); |
292 } | |
293 | |
294 GenericRenderer::GenericRenderer(const GenericRenderer& old): | |
30
9c3f37432a28
fix clone constructor
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
29
diff
changeset
|
295 RendererBase(old), |
9c3f37432a28
fix clone constructor
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
29
diff
changeset
|
296 m_imagepool(old.m_imagepool), |
9c3f37432a28
fix clone constructor
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
29
diff
changeset
|
297 m_animationpool(old.m_animationpool), |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
298 m_groups() { |
23 | 299 setEnabled(false); |
300 } | |
301 | |
302 RendererBase* GenericRenderer::clone() { | |
303 return new GenericRenderer(*this); | |
304 } | |
305 | |
306 GenericRenderer::~GenericRenderer() { | |
307 } | |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
308 void GenericRenderer::addLine(const std::string &group, GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b) { |
23 | 309 GenericRendererElementInfo* info = new GenericRendererLineInfo(n1, n2, r, g, b); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
310 m_groups[group].push_back(info); |
23 | 311 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
312 void GenericRenderer::addPoint(const std::string &group, GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b) { |
23 | 313 GenericRendererElementInfo* info = new GenericRendererPointInfo(n, r, g, b); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
314 m_groups[group].push_back(info); |
23 | 315 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
316 void GenericRenderer::addQuad(const std::string &group, GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b) { |
23 | 317 GenericRendererElementInfo* info = new GenericRendererQuadInfo(n1, n2, n3, n4, r, g, b); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
318 m_groups[group].push_back(info); |
23 | 319 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
320 void GenericRenderer::addText(const std::string &group, GenericRendererNode n, AbstractFont* font, const std::string &text) { |
23 | 321 GenericRendererElementInfo* info = new GenericRendererTextInfo(n, font, text); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
322 m_groups[group].push_back(info); |
23 | 323 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
324 void GenericRenderer::addImage(const std::string &group, GenericRendererNode n, int image) { |
23 | 325 GenericRendererElementInfo* info = new GenericRendererImageInfo(n, image); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
326 m_groups[group].push_back(info); |
23 | 327 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
328 void GenericRenderer::addAnimation(const std::string &group, GenericRendererNode n, int animation) { |
23 | 329 GenericRendererElementInfo* info = new GenericRendererAnimationInfo(n, animation); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
330 m_groups[group].push_back(info); |
23 | 331 } |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
332 void GenericRenderer::removeAll(const std::string &group) { |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
333 std::vector<GenericRendererElementInfo*>::const_iterator info_it = m_groups[group].begin(); |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
334 for (;info_it != m_groups[group].end(); ++info_it) { |
24
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
335 delete *info_it; |
cb87d40e9342
fix exceptions and cleanup code
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
23
diff
changeset
|
336 } |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
337 m_groups[group].clear(); |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
338 m_groups.erase(group); |
23 | 339 } |
340 | |
341 void GenericRenderer::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances) { | |
105
2241b0d5379e
use strings as grouping in generic renderer, easier for the clients...
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
46
diff
changeset
|
342 std::map<std::string, std::vector<GenericRendererElementInfo*> >::iterator group_it = m_groups.begin(); |
32
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
343 for(; group_it != m_groups.end(); ++group_it) { |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
344 std::vector<GenericRendererElementInfo*>::const_iterator info_it = group_it->second.begin(); |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
345 for (;info_it != group_it->second.end(); ++info_it) { |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
346 (*info_it)->render(cam, layer, instances, m_renderbackend, m_imagepool, m_animationpool); |
75b6394ced14
* remove geometric renderer, its not replaced by the more functional generic renderern
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
31
diff
changeset
|
347 } |
23 | 348 } |
349 } | |
350 } |