FIFE
2008.0
|
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 }