26 #include <boost/lexical_cast.hpp>
32 #include "util/base/exception.h"
33 #include "util/structures/purge.h"
34 #include "util/structures/rect.h"
35 #include "view/camera.h"
36 #include "view/rendererbase.h"
37 #include "video/renderbackend.h"
45 const std::vector<RendererBase*>& renderers,
TimeProvider* tp_master):
48 m_timeprovider(tp_master),
51 m_renderbackend(renderBackend),
52 m_renderers(renderers),
58 std::vector<Camera*>::iterator iter = m_cameras.begin();
59 for ( ; iter != m_cameras.end(); ++iter) {
68 std::list<Layer*>::const_iterator it = m_layers.begin();
69 for(; it != m_layers.end(); ++it) {
70 if((*it)->getId() == id)
78 return m_layers.size();
82 std::list<Layer*>::const_iterator it = m_layers.begin();
83 for(; it != m_layers.end(); ++it) {
84 if(identifier == (*it)->getId())
85 throw NameClash(identifier);
88 Layer* layer =
new Layer(identifier,
this, grid);
89 m_layers.push_back(layer);
91 std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin();
92 while (i != m_changelisteners.end()) {
93 (*i)->onLayerCreate(
this, layer);
101 std::list<Layer*>::iterator it = m_layers.begin();
102 for(; it != m_layers.end(); ++it) {
104 std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin();
105 while (i != m_changelisteners.end()) {
106 (*i)->onLayerDelete(
this, layer);
118 std::list<Layer*>::iterator it = m_layers.begin();
119 for(; it != m_layers.end(); ++it) {
120 std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin();
121 while (i != m_changelisteners.end()) {
122 (*i)->onLayerDelete(
this, *it);
133 std::list<Layer*>::iterator it = m_layers.begin();
135 for (; it != m_layers.end(); ++it) {
137 (*it)->getMinMaxCoordinates(newMin, newMax, layer);
139 if (newMin.x < min.x) {
142 if (newMax.x > max.x) {
145 if (newMin.y < min.y) {
148 if (newMax.y > max.y) {
152 lmin.setLayer(layer);
153 lmax.setLayer(layer);
154 lmin.setExactLayerCoordinates(min);
155 lmax.setExactLayerCoordinates(max);
157 min = lmin.getMapCoordinates();
158 max = lmax.getMapCoordinates();
162 m_changedlayers.clear();
163 std::list<Layer*>::iterator it = m_layers.begin();
164 for(; it != m_layers.end(); ++it) {
165 if ((*it)->update()) {
166 m_changedlayers.push_back(*it);
169 if (!m_changedlayers.empty()) {
170 std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin();
171 while (i != m_changelisteners.end()) {
172 (*i)->onMapChanged(
this, m_changedlayers);
178 std::vector<Camera*>::iterator camIter = m_cameras.begin();
179 for ( ; camIter != m_cameras.end(); ++camIter) {
180 if ((*camIter)->isEnabled()) {
181 (*camIter)->update();
182 (*camIter)->render();
186 bool retval = m_changed;
192 m_changelisteners.push_back(listener);
196 std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin();
197 while (i != m_changelisteners.end()) {
198 if ((*i) == listener) {
199 m_changelisteners.erase(i);
208 throw NotSupported(
"Must have valid layer for camera");
212 std::string errorStr =
"Camera: " +
id +
" already exists";
213 throw NameClash(errorStr);
217 Camera* camera =
new Camera(
id, layer, viewport, m_renderbackend);
218 m_cameras.push_back(camera);
220 std::vector<RendererBase*>::iterator iter = m_renderers.begin();
221 for ( ; iter != m_renderers.end(); ++iter) {
229 std::vector<Camera*>::iterator iter = m_cameras.begin();
230 for ( ; iter != m_cameras.end(); ++iter) {
231 if ((*iter)->getId() == id) {
238 m_cameras.erase(iter);
246 std::vector<Camera*>::iterator iter = m_cameras.begin();
247 for ( ; iter != m_cameras.end(); ++iter) {
248 if ((*iter)->getId() == id) {