summary refs log tree commit diff stats
path: root/tools/mapedit/src/map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mapedit/src/map.cpp')
-rw-r--r--tools/mapedit/src/map.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/tools/mapedit/src/map.cpp b/tools/mapedit/src/map.cpp index 1414e16..2799a4e 100644 --- a/tools/mapedit/src/map.cpp +++ b/tools/mapedit/src/map.cpp
@@ -60,18 +60,19 @@ Map::Map(std::string filename)
60 { 60 {
61 if (!xmlStrcmp(entityNode->name, (const xmlChar*) "entity")) 61 if (!xmlStrcmp(entityNode->name, (const xmlChar*) "entity"))
62 { 62 {
63 MapObjectEntry data; 63 auto data = std::make_shared<MapObjectEntry>();
64
64 for (xmlNodePtr entityDataNode = entityNode->xmlChildrenNode; entityDataNode != NULL; entityDataNode = entityDataNode->next) 65 for (xmlNodePtr entityDataNode = entityNode->xmlChildrenNode; entityDataNode != NULL; entityDataNode = entityDataNode->next)
65 { 66 {
66 if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-type")) 67 if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-type"))
67 { 68 {
68 xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1); 69 xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1);
69 data.object = MapObject::getAllObjects().at((char*) key).get(); 70 data->object = MapObject::getAllObjects().at((char*) key).get();
70 xmlFree(key); 71 xmlFree(key);
71 } else if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-position")) 72 } else if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-position"))
72 { 73 {
73 xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1); 74 xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1);
74 sscanf((char*) key, "%lf,%lf", &data.position.first, &data.position.second); 75 sscanf((char*) key, "%lf,%lf", &data->position.first, &data->position.second);
75 xmlFree(key); 76 xmlFree(key);
76 } 77 }
77 } 78 }
@@ -172,11 +173,11 @@ void Map::save(std::string name)
172 rc = xmlTextWriterStartElement(writer, (xmlChar*) "entity"); 173 rc = xmlTextWriterStartElement(writer, (xmlChar*) "entity");
173 if (rc < 0) throw MapWriteException(name); 174 if (rc < 0) throw MapWriteException(name);
174 175
175 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-type", (xmlChar*) object.object->getType().c_str()); 176 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-type", (xmlChar*) object->object->getType().c_str());
176 if (rc < 0) throw MapWriteException(name); 177 if (rc < 0) throw MapWriteException(name);
177 178
178 std::ostringstream entpos_out; 179 std::ostringstream entpos_out;
179 entpos_out << object.position.first << "," << object.position.second; 180 entpos_out << object->position.first << "," << object->position.second;
180 181
181 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-position", (xmlChar*) entpos_out.str().c_str()); 182 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-position", (xmlChar*) entpos_out.str().c_str());
182 if (rc < 0) throw MapWriteException(name); 183 if (rc < 0) throw MapWriteException(name);
@@ -226,7 +227,19 @@ void Map::setTitle(std::string title)
226 this->title = title; 227 this->title = title;
227} 228}
228 229
229std::list<MapObjectEntry>& Map::getObjects() 230const std::list<std::shared_ptr<MapObjectEntry>>& Map::getObjects() const
230{ 231{
231 return objects; 232 return objects;
232} 233}
234
235void Map::addObject(std::shared_ptr<MapObjectEntry>& obj)
236{
237 dirty = true;
238 objects.push_back(obj);
239}
240
241void Map::removeObject(std::shared_ptr<MapObjectEntry>& obj)
242{
243 dirty = true;
244 objects.remove(obj);
245}