summaryrefslogtreecommitdiffstats
path: root/src/Data/Level.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/Level.cpp')
-rw-r--r--src/Data/Level.cpp105
1 files changed, 99 insertions, 6 deletions
diff --git a/src/Data/Level.cpp b/src/Data/Level.cpp
index ff6f8fb..6689107 100644
--- a/src/Data/Level.cpp
+++ b/src/Data/Level.cpp
@@ -32,8 +32,11 @@ Level::Level(xmlpp::Element *levelNode) : info(dynamic_cast<xmlpp::Element*>(lev
for(xmlpp::Node::NodeList::iterator room = nodeList.begin(); room != nodeList.end(); ++room) {
xmlpp::Element *roomNode = dynamic_cast<xmlpp::Element*>(*room);
- if(roomNode)
- rooms.push_front(Room(roomNode));
+ if(roomNode) {
+ Room room(roomNode);
+
+ rooms.insert(std::make_pair(room.getId(), room));
+ }
}
nodeList = gatesNode->get_children("gate");
@@ -41,8 +44,11 @@ Level::Level(xmlpp::Element *levelNode) : info(dynamic_cast<xmlpp::Element*>(lev
for(xmlpp::Node::NodeList::iterator gate = nodeList.begin(); gate != nodeList.end(); ++gate) {
xmlpp::Element *gateNode = dynamic_cast<xmlpp::Element*>(*gate);
- if(gateNode)
- gates.push_front(Gate(gateNode));
+ if(gateNode) {
+ Gate gate(gateNode);
+
+ gates.insert(std::make_pair(gate.getId(), gate));
+ }
}
nodeList = texturesNode->get_children("texture");
@@ -50,10 +56,97 @@ Level::Level(xmlpp::Element *levelNode) : info(dynamic_cast<xmlpp::Element*>(lev
for(xmlpp::Node::NodeList::iterator tex = nodeList.begin(); tex != nodeList.end(); ++tex) {
xmlpp::Element *texNode = dynamic_cast<xmlpp::Element*>(*tex);
- if(texNode)
- textures.push_front(Texture(texNode));
+ if(texNode) {
+ Texture tex(texNode);
+
+ textures.insert(std::make_pair(tex.getId(), tex));
+ }
}
}
+Room* Level::getRoom(const Glib::ustring &id) {
+ std::map<Glib::ustring,Room>::iterator room = rooms.find(id);
+ return (room != rooms.end()) ? &room->second : NULL;
+}
+
+const Room* Level::getRoom(const Glib::ustring &id) const {
+ std::map<Glib::ustring,Room>::const_iterator room = rooms.find(id);
+ return (room != rooms.end()) ? &room->second : NULL;
+}
+
+Room* Level::addRoom(const Glib::ustring &id) {
+ xmlpp::Element *node = roomsNode->add_child("room");
+
+ node->set_attribute("id", id);
+
+ return &rooms.insert(std::make_pair(id, Room(node))).first->second;
+}
+
+void Level::removeRoom(const Glib::ustring &id) {
+ Room *room = getRoom(id);
+ if(!room)
+ return;
+
+ roomsNode->remove_child(room->getNode());
+ rooms.erase(id);
+}
+
+Gate* Level::getGate(const Glib::ustring &id) {
+ std::map<Glib::ustring,Gate>::iterator gate = gates.find(id);
+ return (gate != gates.end()) ? &gate->second : NULL;
+}
+
+const Gate* Level::getGate(const Glib::ustring &id) const {
+ std::map<Glib::ustring,Gate>::const_iterator gate = gates.find(id);
+ return (gate != gates.end()) ? &gate->second : NULL;
+}
+
+Gate* Level::addGate(const Glib::ustring &id) {
+ xmlpp::Element *node = gatesNode->add_child("gate");
+
+ node->set_attribute("id", id);
+ node->set_attribute("room1", "");
+ node->set_attribute("room2", "");
+
+ return &gates.insert(std::make_pair(id, Gate(node))).first->second;
+}
+
+void Level::removeGate(const Glib::ustring &id) {
+ Gate *gate = getGate(id);
+ if(!gate)
+ return;
+
+ gatesNode->remove_child(gate->getNode());
+ gates.erase(id);
+}
+
+Texture* Level::getTexture(const Glib::ustring &id) {
+ std::map<Glib::ustring,Texture>::iterator tex = textures.find(id);
+ return (tex != textures.end()) ? &tex->second : NULL;
+}
+
+const Texture* Level::getTexture(const Glib::ustring &id) const {
+ std::map<Glib::ustring,Texture>::const_iterator tex = textures.find(id);
+ return (tex != textures.end()) ? &tex->second : NULL;
+}
+
+Texture* Level::addTexture(const Glib::ustring &id) {
+ xmlpp::Element *node = texturesNode->add_child("texture");
+
+ node->set_attribute("id", id);
+ node->set_attribute("name", "");
+
+ return &textures.insert(std::make_pair(id, Texture(node))).first->second;
+}
+
+void Level::removeTexture(const Glib::ustring &id) {
+ Texture *tex = getTexture(id);
+ if(!tex)
+ return;
+
+ texturesNode->remove_child(tex->getNode());
+ textures.erase(id);
+}
+
}
}