PlacementTypeDirect.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D 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
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 ////////////////////////////////////////////////////////////////////////////////
00020 
00021 #include <placement/PlacementTypeDirect.h>
00022 #include <landscapemap/LandscapeMaps.h>
00023 #include <engine/ScorchedContext.h>
00024 #include <common/ProgressCounter.h>
00025 #include <XML/XMLParser.h>
00026 
00027 PlacementTypeDirect::PlacementTypeDirect()
00028 {
00029 }
00030 
00031 PlacementTypeDirect::~PlacementTypeDirect()
00032 {
00033 }
00034 
00035 bool PlacementTypeDirect::readXML(XMLNode *node)
00036 {
00037         XMLNode *positionNode;
00038         while (node->getNamedChild("position", positionNode, false))
00039         {
00040                 Position position;
00041                 if (!positionNode->getNamedChild("position", position.position)) return false;
00042                 positions.push_back(position);
00043 
00044                 if (!positionNode->failChildren()) return false;
00045         }
00046         return PlacementType::readXML(node);
00047 }
00048 
00049 void PlacementTypeDirect::getPositions(ScorchedContext &context,
00050         RandomGenerator &generator,
00051         std::list<Position> &returnPositions,
00052         ProgressCounter *counter)
00053 {
00054         std::list<Position>::iterator itor;
00055         int i = 0;
00056         for (itor = positions.begin();
00057                 itor != positions.end();
00058                 itor++, i++)
00059         {
00060                 if (i % 10 == 0) if (counter) 
00061                         counter->setNewPercentage(float(i)/float(positions.size())*100.0f);
00062 
00063                 Position position = (*itor);
00064                 fixed height = 
00065                         context.getLandscapeMaps().
00066                                 getGroundMaps().getInterpHeight(position.position[0], position.position[1]);
00067                 if (position.position[2] == 0) position.position[2] = height;
00068 
00069                 returnPositions.push_back(position);
00070         }
00071 }

Generated on Mon Feb 16 15:14:51 2009 for Scorched3D by  doxygen 1.5.3