comparison engine/core/controller/engine.cpp @ 422:9d94f4676d17

Moved the management of cameras into the Map class. The View class no longer exists since it now serves no purpose. The engine class itself holds the renderers and these get passed to each map that is loaded and then passed to each camera on each map. This change makes it possible for multiple maps to be loaded at the same time with the same camera id without a name clash. fixes[t:342]
author vtchill@33b003aa-7bff-0310-803a-e67f0ece8222
date Fri, 12 Feb 2010 06:34:50 +0000
parents fa3778416433
children ad7969d9460b
comparison
equal deleted inserted replaced
421:293e812316c0 422:9d94f4676d17
61 #include "loaders/native/audio_loaders/ogg_loader.h" 61 #include "loaders/native/audio_loaders/ogg_loader.h"
62 #include "model/model.h" 62 #include "model/model.h"
63 #include "pathfinder/routepather/routepather.h" 63 #include "pathfinder/routepather/routepather.h"
64 #include "model/metamodel/grids/hexgrid.h" 64 #include "model/metamodel/grids/hexgrid.h"
65 #include "model/metamodel/grids/squaregrid.h" 65 #include "model/metamodel/grids/squaregrid.h"
66 #include "view/view.h"
67 #include "view/renderers/camerazonerenderer.h" 66 #include "view/renderers/camerazonerenderer.h"
68 #include "view/renderers/quadtreerenderer.h" 67 #include "view/renderers/quadtreerenderer.h"
69 #include "view/renderers/gridrenderer.h" 68 #include "view/renderers/gridrenderer.h"
70 #include "view/renderers/instancerenderer.h" 69 #include "view/renderers/instancerenderer.h"
71 #include "view/renderers/coordinaterenderer.h" 70 #include "view/renderers/coordinaterenderer.h"
99 m_animpool(0), 98 m_animpool(0),
100 m_soundclippool(0), 99 m_soundclippool(0),
101 m_vfs(0), 100 m_vfs(0),
102 m_model(0), 101 m_model(0),
103 m_gui_graphics(0), 102 m_gui_graphics(0),
104 m_view(0),
105 m_logmanager(0), 103 m_logmanager(0),
106 m_cursor(0), 104 m_cursor(0),
107 m_settings() { 105 m_settings() {
108 #ifdef USE_COCOA 106 #ifdef USE_COCOA
109 // The next lines ensure that Cocoa is initialzed correctly. 107 // The next lines ensure that Cocoa is initialzed correctly.
229 227
230 FL_LOG(_log, "Creating sound manager"); 228 FL_LOG(_log, "Creating sound manager");
231 m_soundmanager = new SoundManager(m_soundclippool); 229 m_soundmanager = new SoundManager(m_soundclippool);
232 m_soundmanager->setVolume(static_cast<float>(m_settings.getInitialVolume()) / 10); 230 m_soundmanager->setVolume(static_cast<float>(m_settings.getInitialVolume()) / 10);
233 231
232 FL_LOG(_log, "Creating renderers");
233 m_renderers.push_back(new CameraZoneRenderer(m_renderbackend, 0, m_imagepool));
234 m_renderers.push_back(new InstanceRenderer(m_renderbackend, 10, m_imagepool, m_animpool));
235 m_renderers.push_back(new GridRenderer(m_renderbackend, 20));
236 m_renderers.push_back(new CellSelectionRenderer(m_renderbackend, 30));
237 m_renderers.push_back(new BlockingInfoRenderer(m_renderbackend, 40));
238 m_renderers.push_back(new FloatingTextRenderer(m_renderbackend, 50, dynamic_cast<AbstractFont*>(m_defaultfont)));
239 m_renderers.push_back(new QuadTreeRenderer(m_renderbackend, 60));
240 m_renderers.push_back(new CoordinateRenderer(m_renderbackend, 70, dynamic_cast<AbstractFont*>(m_defaultfont)));
241 m_renderers.push_back(new GenericRenderer(m_renderbackend, 80, m_imagepool, m_animpool));
242
234 FL_LOG(_log, "Creating model"); 243 FL_LOG(_log, "Creating model");
235 m_model = new Model(); 244 m_model = new Model(m_renderbackend, m_renderers, m_imagepool, m_animpool);
236 FL_LOG(_log, "Adding pathers to model"); 245 FL_LOG(_log, "Adding pathers to model");
237 // m_model->adoptPather(new LinearPather());
238 m_model->adoptPather(new RoutePather()); 246 m_model->adoptPather(new RoutePather());
239 FL_LOG(_log, "Adding grid prototypes to model"); 247 FL_LOG(_log, "Adding grid prototypes to model");
240 m_model->adoptCellGrid(new SquareGrid()); 248 m_model->adoptCellGrid(new SquareGrid());
241 m_model->adoptCellGrid(new HexGrid()); 249 m_model->adoptCellGrid(new HexGrid());
242 250
243 FL_LOG(_log, "Creating view");
244 m_view = new View(m_renderbackend, m_imagepool, m_animpool);
245 FL_LOG(_log, "Creating renderers to view");
246 m_view->addRenderer(new CameraZoneRenderer(m_renderbackend, 0, m_imagepool));
247 m_view->addRenderer(new InstanceRenderer(m_renderbackend, 10, m_imagepool, m_animpool));
248 m_view->addRenderer(new GridRenderer(m_renderbackend, 20));
249 m_view->addRenderer(new CellSelectionRenderer(m_renderbackend, 30));
250 m_view->addRenderer(new BlockingInfoRenderer(m_renderbackend, 40));
251 m_view->addRenderer(new FloatingTextRenderer(m_renderbackend, 50, dynamic_cast<AbstractFont*>(m_defaultfont)));
252 m_view->addRenderer(new QuadTreeRenderer(m_renderbackend, 60));
253 m_view->addRenderer(new CoordinateRenderer(m_renderbackend, 70, dynamic_cast<AbstractFont*>(m_defaultfont)));
254 m_view->addRenderer(new GenericRenderer(m_renderbackend, 80, m_imagepool, m_animpool));
255 m_cursor = new Cursor(m_imagepool, m_animpool, m_renderbackend); 251 m_cursor = new Cursor(m_imagepool, m_animpool, m_renderbackend);
256 FL_LOG(_log, "Engine intialized"); 252 FL_LOG(_log, "Engine intialized");
257 } 253 }
258 254
259 Engine::~Engine() { 255 Engine::~Engine() {
263 } 259 }
264 260
265 void Engine::destroy() { 261 void Engine::destroy() {
266 FL_LOG(_log, "Destructing engine"); 262 FL_LOG(_log, "Destructing engine");
267 delete m_cursor; 263 delete m_cursor;
268 delete m_view;
269 delete m_model; 264 delete m_model;
270 delete m_soundmanager; 265 delete m_soundmanager;
271 delete m_guimanager; 266 delete m_guimanager;
272 delete m_gui_graphics; 267 delete m_gui_graphics;
273 268
276 // before clearing the image pool. 271 // before clearing the image pool.
277 delete m_animpool; 272 delete m_animpool;
278 delete m_imagepool; 273 delete m_imagepool;
279 delete m_eventmanager; 274 delete m_eventmanager;
280 275
276 // properly remove all the renderers created during init
277 std::vector<RendererBase*>::iterator rendererIter = m_renderers.begin();
278 for ( ; rendererIter != m_renderers.end(); ++rendererIter)
279 {
280 delete *rendererIter;
281 }
282 m_renderers.clear();
283
281 m_renderbackend->deinit(); 284 m_renderbackend->deinit();
282 delete m_renderbackend; 285 delete m_renderbackend;
283 286
284 delete m_vfs; 287 delete m_vfs;
285 288
301 void Engine::pump() { 304 void Engine::pump() {
302 m_eventmanager->processEvents(); 305 m_eventmanager->processEvents();
303 m_renderbackend->startFrame(); 306 m_renderbackend->startFrame();
304 m_timemanager->update(); 307 m_timemanager->update();
305 m_model->update(); 308 m_model->update();
306 m_view->update();
307 m_guimanager->turn(); 309 m_guimanager->turn();
308 m_cursor->draw(); 310 m_cursor->draw();
309 m_renderbackend->endFrame(); 311 m_renderbackend->endFrame();
310 } 312 }
311 313