diff options
Diffstat (limited to 'tools/mapedit/src/map.cpp')
-rw-r--r-- | tools/mapedit/src/map.cpp | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/tools/mapedit/src/map.cpp b/tools/mapedit/src/map.cpp index 3a24ace..b0440fb 100644 --- a/tools/mapedit/src/map.cpp +++ b/tools/mapedit/src/map.cpp | |||
@@ -54,6 +54,31 @@ Map::Map(std::string filename) | |||
54 | xmlChar* key = xmlNodeListGetString(doc, node->xmlChildrenNode, 1); | 54 | xmlChar* key = xmlNodeListGetString(doc, node->xmlChildrenNode, 1); |
55 | rightmap = (char*) key; | 55 | rightmap = (char*) key; |
56 | xmlFree(key); | 56 | xmlFree(key); |
57 | } else if (!xmlStrcmp(node->name, (const xmlChar*) "entities")) | ||
58 | { | ||
59 | for (xmlNodePtr entityNode = node->xmlChildrenNode; entityNode != NULL; entityNode = entityNode->next) | ||
60 | { | ||
61 | if (!xmlStrcmp(entityNode->name, (const xmlChar*) "entity")) | ||
62 | { | ||
63 | MapObjectEntry data; | ||
64 | for (xmlNodePtr entityDataNode = entityNode->xmlChildrenNode; entityDataNode != NULL; entityDataNode = entityDataNode->next) | ||
65 | { | ||
66 | if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-type")) | ||
67 | { | ||
68 | xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1); | ||
69 | data.object = MapObject::getAllObjects().at((char*) key); | ||
70 | xmlFree(key); | ||
71 | } else if (!xmlStrcmp(entityDataNode->name, (const xmlChar*) "entity-position")) | ||
72 | { | ||
73 | xmlChar* key = xmlNodeListGetString(doc, entityDataNode->xmlChildrenNode, 1); | ||
74 | sscanf((char*) key, "%lf,%lf", &data.position.first, &data.position.second); | ||
75 | xmlFree(key); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | objects.push_back(data); | ||
80 | } | ||
81 | } | ||
57 | } | 82 | } |
58 | } | 83 | } |
59 | 84 | ||
@@ -69,6 +94,7 @@ Map::Map(const Map& map) | |||
69 | leftmap = map.leftmap; | 94 | leftmap = map.leftmap; |
70 | rightmap = map.rightmap; | 95 | rightmap = map.rightmap; |
71 | dirty = map.dirty; | 96 | dirty = map.dirty; |
97 | objects = map.objects; | ||
72 | } | 98 | } |
73 | 99 | ||
74 | Map::Map(Map&& map) : Map() | 100 | Map::Map(Map&& map) : Map() |
@@ -95,6 +121,7 @@ void swap(Map& first, Map& second) | |||
95 | std::swap(first.leftmap, second.leftmap); | 121 | std::swap(first.leftmap, second.leftmap); |
96 | std::swap(first.rightmap, second.rightmap); | 122 | std::swap(first.rightmap, second.rightmap); |
97 | std::swap(first.dirty, second.dirty); | 123 | std::swap(first.dirty, second.dirty); |
124 | std::swap(first.objects, second.objects); | ||
98 | } | 125 | } |
99 | 126 | ||
100 | #define MY_ENCODING "ISO-8859-1" | 127 | #define MY_ENCODING "ISO-8859-1" |
@@ -131,21 +158,39 @@ void Map::save(std::string name) | |||
131 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "environment", (xmlChar*) mapdata_out.str().c_str()); | 158 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "environment", (xmlChar*) mapdata_out.str().c_str()); |
132 | if (rc < 0) throw MapWriteException(name); | 159 | if (rc < 0) throw MapWriteException(name); |
133 | 160 | ||
134 | if (leftmap != "") | 161 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "leftmap", (xmlChar*) leftmap.c_str()); |
135 | { | 162 | if (rc < 0) throw MapWriteException(name); |
136 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "leftmap", (xmlChar*) leftmap.c_str()); | 163 | |
137 | if (rc < 0) throw MapWriteException(name); | 164 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "rightmap", (xmlChar*) rightmap.c_str()); |
138 | } | 165 | if (rc < 0) throw MapWriteException(name); |
139 | 166 | ||
140 | if (rightmap != "") | 167 | rc = xmlTextWriterStartElement(writer, (xmlChar*) "entities"); |
168 | if (rc < 0) throw MapWriteException(name); | ||
169 | |||
170 | for (auto object : objects) | ||
141 | { | 171 | { |
142 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "rightmap", (xmlChar*) rightmap.c_str()); | 172 | rc = xmlTextWriterStartElement(writer, (xmlChar*) "entity"); |
173 | if (rc < 0) throw MapWriteException(name); | ||
174 | |||
175 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-type", (xmlChar*) object.object->getType().c_str()); | ||
176 | if (rc < 0) throw MapWriteException(name); | ||
177 | |||
178 | std::ostringstream entpos_out; | ||
179 | entpos_out << object.position.first << "," << object.position.second; | ||
180 | |||
181 | rc = xmlTextWriterWriteElement(writer, (xmlChar*) "entity-position", (xmlChar*) entpos_out.str().c_str()); | ||
182 | if (rc < 0) throw MapWriteException(name); | ||
183 | |||
184 | rc = xmlTextWriterEndElement(writer); | ||
143 | if (rc < 0) throw MapWriteException(name); | 185 | if (rc < 0) throw MapWriteException(name); |
144 | } | 186 | } |
145 | 187 | ||
146 | rc = xmlTextWriterEndElement(writer); | 188 | rc = xmlTextWriterEndElement(writer); |
147 | if (rc < 0) throw MapWriteException(name); | 189 | if (rc < 0) throw MapWriteException(name); |
148 | 190 | ||
191 | rc = xmlTextWriterEndElement(writer); | ||
192 | if (rc < 0) throw MapWriteException(name); | ||
193 | |||
149 | rc = xmlTextWriterEndDocument(writer); | 194 | rc = xmlTextWriterEndDocument(writer); |
150 | if (rc < 0) throw MapWriteException(name); | 195 | if (rc < 0) throw MapWriteException(name); |
151 | 196 | ||
@@ -180,3 +225,8 @@ void Map::setTitle(std::string title) | |||
180 | dirty = true; | 225 | dirty = true; |
181 | this->title = title; | 226 | this->title = title; |
182 | } | 227 | } |
228 | |||
229 | std::list<MapObjectEntry> Map::getObjects() | ||
230 | { | ||
231 | return objects; | ||
232 | } | ||