FIFE  2008.0
rendererbase.cpp
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 // Standard C++ library includes
00023 
00024 // 3rd party library includes
00025 
00026 // FIFE includes
00027 // These includes are split up in two parts, separated by one empty line
00028 // First block: files included from the FIFE root src directory
00029 // Second block: files included from the same folder
00030 #include "model/structures/layer.h"
00031 #include "model/structures/map.h"
00032 #include "util/log/logger.h"
00033 #include "rendererbase.h"
00034 
00035 namespace FIFE {
00036     static Logger _log(LM_VIEW);
00037     
00038     // use some big value, so that non-positioned renderers show on top
00039     const int DEFAULT_RENDERER_POSITION = 1000; 
00040     
00041     RendererBase::RendererBase(RenderBackend* renderbackend, int position): 
00042         m_renderbackend(renderbackend),
00043         m_enabled(false),
00044         m_pipeline_position(DEFAULT_RENDERER_POSITION),
00045         m_listener(NULL) {
00046         setPipelinePosition(position);
00047     }
00048     
00049     RendererBase::RendererBase(const RendererBase& old):
00050         m_renderbackend(old.m_renderbackend),
00051         m_enabled(old.m_enabled),
00052         m_pipeline_position(old.m_pipeline_position),
00053         m_listener(NULL) {
00054         setPipelinePosition(old.m_pipeline_position);
00055     }
00056     
00057     RendererBase::RendererBase():
00058         m_renderbackend(NULL),
00059         m_enabled(false),
00060         m_pipeline_position(DEFAULT_RENDERER_POSITION),
00061         m_listener(NULL) {
00062     }
00063     
00064     void RendererBase::setPipelinePosition(int position) { 
00065         if (position !=m_pipeline_position) { 
00066             m_pipeline_position = position; 
00067             if (m_listener) {
00068                 m_listener->onRendererPipelinePositionChanged(this);
00069             }
00070         }
00071     }
00072     
00073     void RendererBase::setEnabled(bool enabled) { 
00074         if (m_enabled != enabled) {
00075             m_enabled = enabled;
00076             if (m_listener) {
00077                 m_listener->onRendererEnabledChanged(this);
00078             }
00079         }
00080     }
00081     
00082     void RendererBase::addActiveLayer(Layer* layer) {
00083         if (std::find(m_active_layers.begin(), m_active_layers.end(), layer) == m_active_layers.end()) {
00084             m_active_layers.push_back(layer);
00085         }
00086     }
00087     
00088     void RendererBase::removeActiveLayer(Layer* layer) {
00089         m_active_layers.remove(layer);
00090     }
00091     
00092     void RendererBase::clearActiveLayers() {
00093         m_active_layers.clear();
00094     }
00095     
00096     bool RendererBase::isActivedLayer(Layer* layer) {
00097         return std::find(m_active_layers.begin(), m_active_layers.end(), layer) != m_active_layers.end();
00098     }
00099     
00100     void RendererBase::activateAllLayers(Map* map) {
00101         clearActiveLayers();
00102         
00103         const std::list<Layer*>& tmp = map->getLayers();
00104         std::list<Layer*>::const_iterator it = tmp.begin();
00105         for (; it != tmp.end(); ++it) {
00106             addActiveLayer(*it);
00107         }
00108     }
00109     
00110 }