00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <placement/PlacementTypeTankStart.h>
00022 #include <placement/PlacementTankPosition.h>
00023 #include <engine/ScorchedContext.h>
00024 #include <common/ProgressCounter.h>
00025 #include <common/RandomGenerator.h>
00026 #include <common/Defines.h>
00027 #include <XML/XMLParser.h>
00028
00029 PlacementTypeTankStart::PlacementTypeTankStart() : mincloseness(0)
00030 {
00031 }
00032
00033 PlacementTypeTankStart::~PlacementTypeTankStart()
00034 {
00035 }
00036
00037 bool PlacementTypeTankStart::readXML(XMLNode *node)
00038 {
00039 if (!node->getNamedChild("numobjects", numobjects)) return false;
00040 if (!node->getNamedChild("team", team)) return false;
00041 node->getNamedChild("mincloseness", mincloseness, false);
00042 return PlacementType::readXML(node);
00043 }
00044
00045 void PlacementTypeTankStart::getPositions(ScorchedContext &context,
00046 RandomGenerator &generator,
00047 std::list<Position> &returnPositions,
00048 ProgressCounter *counter)
00049 {
00050 for (int i=0; i<numobjects;)
00051 {
00052 Position position;
00053 position.position =
00054 PlacementTankPosition::placeTank(0, team, context, generator);
00055
00056 if (checkCloseness(position.position, context,
00057 returnPositions, mincloseness))
00058 {
00059 returnPositions.push_back(position);
00060 i++;
00061 }
00062 }
00063 }