summary refs log tree commit diff stats
path: root/tools/mapedit/src/world.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mapedit/src/world.cpp')
-rw-r--r--tools/mapedit/src/world.cpp139
1 files changed, 120 insertions, 19 deletions
diff --git a/tools/mapedit/src/world.cpp b/tools/mapedit/src/world.cpp index fb0bb36..043cf8a 100644 --- a/tools/mapedit/src/world.cpp +++ b/tools/mapedit/src/world.cpp
@@ -1,8 +1,11 @@
1#include "world.h" 1#include "world.h"
2#include <libxml/parser.h> 2#include <libxml/parser.h>
3#include <libxml/xmlwriter.h> 3#include <libxml/xmlwriter.h>
4#include "frame.h"
5#include <sstream> 4#include <sstream>
5#include "frame.h"
6#include "map.h"
7#include "object.h"
8#include "consts.h"
6 9
7World::World() 10World::World()
8{ 11{
@@ -103,20 +106,60 @@ World::World(std::string filename)
103 xmlFree(key); 106 xmlFree(key);
104 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "leftmap")) 107 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "leftmap"))
105 { 108 {
106 xmlChar* key = xmlNodeListGetString(doc, mapNode->xmlChildrenNode, 1); 109 xmlChar* typeKey = xmlGetProp(mapNode, (xmlChar*) "type");
107 if (key != 0) 110 if (typeKey == 0) throw MapLoadException(filename);
111 map->setLeftMoveType(Map::moveTypeForShort((char*) typeKey), false);
112 xmlFree(typeKey);
113
114 if (Map::moveTypeTakesMap(map->getLeftMoveType()))
108 { 115 {
109 map->setLeftmap(atoi((char*) key), false); 116 xmlChar* idKey = xmlGetProp(mapNode, (xmlChar*) "map");
117 if (idKey == 0) throw MapLoadException(filename);
118 map->setLeftMoveMapID(atoi((char*) idKey), false);
119 xmlFree(idKey);
110 } 120 }
111 xmlFree(key);
112 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "rightmap")) 121 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "rightmap"))
113 { 122 {
114 xmlChar* key = xmlNodeListGetString(doc, mapNode->xmlChildrenNode, 1); 123 xmlChar* typeKey = xmlGetProp(mapNode, (xmlChar*) "type");
115 if (key != 0) 124 if (typeKey == 0) throw MapLoadException(filename);
125 map->setRightMoveType(Map::moveTypeForShort((char*) typeKey), false);
126 xmlFree(typeKey);
127
128 if (Map::moveTypeTakesMap(map->getRightMoveType()))
116 { 129 {
117 map->setRightmap(atoi((char*) key), false); 130 xmlChar* idKey = xmlGetProp(mapNode, (xmlChar*) "map");
131 if (idKey == 0) throw MapLoadException(filename);
132 map->setRightMoveMapID(atoi((char*) idKey), false);
133 xmlFree(idKey);
134 }
135 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "upmap"))
136 {
137 xmlChar* typeKey = xmlGetProp(mapNode, (xmlChar*) "type");
138 if (typeKey == 0) throw MapLoadException(filename);
139 map->setUpMoveType(Map::moveTypeForShort((char*) typeKey), false);
140 xmlFree(typeKey);
141
142 if (Map::moveTypeTakesMap(map->getUpMoveType()))
143 {
144 xmlChar* idKey = xmlGetProp(mapNode, (xmlChar*) "map");
145 if (idKey == 0) throw MapLoadException(filename);
146 map->setUpMoveMapID(atoi((char*) idKey), false);
147 xmlFree(idKey);
148 }
149 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "downmap"))
150 {
151 xmlChar* typeKey = xmlGetProp(mapNode, (xmlChar*) "type");
152 if (typeKey == 0) throw MapLoadException(filename);
153 map->setDownMoveType(Map::moveTypeForShort((char*) typeKey), false);
154 xmlFree(typeKey);
155
156 if (Map::moveTypeTakesMap(map->getDownMoveType()))
157 {
158 xmlChar* idKey = xmlGetProp(mapNode, (xmlChar*) "map");
159 if (idKey == 0) throw MapLoadException(filename);
160 map->setDownMoveMapID(atoi((char*) idKey), false);
161 xmlFree(idKey);
118 } 162 }
119 xmlFree(key);
120 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "entities")) 163 } else if (!xmlStrcmp(mapNode->name, (const xmlChar*) "entities"))
121 { 164 {
122 for (xmlNodePtr entityNode = mapNode->xmlChildrenNode; entityNode != NULL; entityNode = entityNode->next) 165 for (xmlNodePtr entityNode = mapNode->xmlChildrenNode; entityNode != NULL; entityNode = entityNode->next)
@@ -248,7 +291,7 @@ void World::save(std::string name, wxTreeCtrl* mapTree)
248 if (rc < 0) throw MapWriteException(name); 291 if (rc < 0) throw MapWriteException(name);
249 } 292 }
250 293
251 // <startpos> 294 // <startpos/>
252 rc = xmlTextWriterStartElement(writer, (xmlChar*) "startpos"); 295 rc = xmlTextWriterStartElement(writer, (xmlChar*) "startpos");
253 if (rc < 0) throw MapWriteException(name); 296 if (rc < 0) throw MapWriteException(name);
254 297
@@ -300,21 +343,79 @@ void World::save(std::string name, wxTreeCtrl* mapTree)
300 if (rc < 0) throw MapWriteException(name); 343 if (rc < 0) throw MapWriteException(name);
301 344
302 // <leftmap/> 345 // <leftmap/>
303 std::ostringstream leftmap_out; 346 rc = xmlTextWriterStartElement(writer, (xmlChar*) "leftmap");
304 if (map.getLeftmap()) 347 if (rc < 0) throw MapWriteException(name);
348
349 // type=
350 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "type", "%s", Map::shortForMoveType(map.getLeftMoveType()).c_str());
351 if (rc < 0) throw MapWriteException(name);
352
353 if (Map::moveTypeTakesMap(map.getLeftMoveType()))
305 { 354 {
306 leftmap_out << map.getLeftmap()->getID(); 355 // map=
356 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "map", "%d", map.getLeftMoveMapID());
357 if (rc < 0) throw MapWriteException(name);
307 } 358 }
308 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "leftmap", (xmlChar*) leftmap_out.str().c_str()); 359
360 // </leftmap>
361 rc = xmlTextWriterEndElement(writer);
309 if (rc < 0) throw MapWriteException(name); 362 if (rc < 0) throw MapWriteException(name);
310 363
311 // <rightmap/> 364 // <rightmap/>
312 std::ostringstream rightmap_out; 365 rc = xmlTextWriterStartElement(writer, (xmlChar*) "rightmap");
313 if (map.getRightmap()) 366 if (rc < 0) throw MapWriteException(name);
367
368 // type=
369 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "type", "%s", Map::shortForMoveType(map.getRightMoveType()).c_str());
370 if (rc < 0) throw MapWriteException(name);
371
372 if (Map::moveTypeTakesMap(map.getRightMoveType()))
373 {
374 // map=
375 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "map", "%d", map.getRightMoveMapID());
376 if (rc < 0) throw MapWriteException(name);
377 }
378
379 // </rightmap>
380 rc = xmlTextWriterEndElement(writer);
381 if (rc < 0) throw MapWriteException(name);
382
383 // <upmap/>
384 rc = xmlTextWriterStartElement(writer, (xmlChar*) "upmap");
385 if (rc < 0) throw MapWriteException(name);
386
387 // type=
388 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "type", "%s", Map::shortForMoveType(map.getUpMoveType()).c_str());
389 if (rc < 0) throw MapWriteException(name);
390
391 if (Map::moveTypeTakesMap(map.getUpMoveType()))
314 { 392 {
315 rightmap_out << map.getRightmap()->getID(); 393 // map=
394 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "map", "%d", map.getUpMoveMapID());
395 if (rc < 0) throw MapWriteException(name);
396 }
397
398 // </upmap>
399 rc = xmlTextWriterEndElement(writer);
400 if (rc < 0) throw MapWriteException(name);
401
402 // <downmap/>
403 rc = xmlTextWriterStartElement(writer, (xmlChar*) "downmap");
404 if (rc < 0) throw MapWriteException(name);
405
406 // type=
407 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "type", "%s", Map::shortForMoveType(map.getDownMoveType()).c_str());
408 if (rc < 0) throw MapWriteException(name);
409
410 if (Map::moveTypeTakesMap(map.getDownMoveType()))
411 {
412 // map=
413 rc = xmlTextWriterWriteFormatAttribute(writer, (xmlChar*) "map", "%d", map.getDownMoveMapID());
414 if (rc < 0) throw MapWriteException(name);
316 } 415 }
317 rc = xmlTextWriterWriteElement(writer, (xmlChar*) "rightmap", (xmlChar*) rightmap_out.str().c_str()); 416
417 // </downmap>
418 rc = xmlTextWriterEndElement(writer);
318 if (rc < 0) throw MapWriteException(name); 419 if (rc < 0) throw MapWriteException(name);
319 420
320 // <entities> 421 // <entities>