00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <placement/PlacementObjectGroup.h>
00022 #include <XML/XMLParser.h>
00023
00024 PlacementObjectGroup::PlacementObjectGroup()
00025 {
00026 }
00027
00028 PlacementObjectGroup::~PlacementObjectGroup()
00029 {
00030 }
00031
00032 bool PlacementObjectGroup::readXML(XMLNode *initialNode)
00033 {
00034 XMLNode *node;
00035 while (initialNode->getNamedChild("groupobject", node, false))
00036 {
00037 GroupObject groupObject;
00038
00039 if (!node->getNamedChild("offset", groupObject.offset)) return false;
00040
00041 std::string objecttype;
00042 XMLNode *objectNode;
00043 if (!node->getNamedChild("object", objectNode)) return false;
00044 if (!objectNode->getNamedParameter("type", objecttype)) return false;
00045 if (!(groupObject.object = PlacementObject::create(objecttype.c_str()))) return false;
00046 if (!groupObject.object->readXML(objectNode)) return false;
00047
00048 groups_.push_back(groupObject);
00049 }
00050 if (!node->failChildren()) return false;
00051
00052 return PlacementObject::readXML(node);
00053 }
00054
00055 void PlacementObjectGroup::createObject(ScorchedContext &context,
00056 RandomGenerator &generator,
00057 unsigned int &playerId,
00058 PlacementType::Position &position)
00059 {
00060 std::list<GroupObject>::iterator itor;
00061 for (itor = groups_.begin();
00062 itor != groups_.end();
00063 itor++)
00064 {
00065 GroupObject &groupObject = (*itor);
00066
00067 PlacementType::Position newPosition = position;
00068 newPosition.position += groupObject.offset;
00069 groupObject.object->createObject(context,
00070 generator,
00071 playerId,
00072 newPosition);
00073 }
00074 }