From b27a517af7b8b99733622193a380bb3ef6674bcc Mon Sep 17 00:00:00 2001 From: neoraider Date: Fri, 11 Apr 2008 10:04:04 +0000 Subject: zoomedit: * Instance: Added createLevel and loadLevel methods. --- src/Instance.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 9 deletions(-) (limited to 'src/Instance.cpp') diff --git a/src/Instance.cpp b/src/Instance.cpp index c3ac17c..eb4d9dd 100644 --- a/src/Instance.cpp +++ b/src/Instance.cpp @@ -26,7 +26,7 @@ namespace ZoomEdit { guint Instance::instances = 0; -Instance::Instance() : window(NULL), levelXml(NULL), level(NULL) { +Instance::Instance(const Glib::ustring &file) : window(NULL), levelXml(NULL), level(NULL) { instances++; #ifdef GLIBMM_EXCEPTIONS_ENABLED @@ -57,11 +57,10 @@ Instance::Instance() : window(NULL), levelXml(NULL), level(NULL) { window->signal_hide().connect(sigc::mem_fun(this, &Instance::destroy)); - levelXml = new xmlpp::DomParser("level.lvl"); - xmlpp::Document *doc = levelXml->get_document(); - - if(doc && doc->get_root_node()) - level = new Data::Level(doc->get_root_node()); + if(file.empty()) + createLevel(); + else + loadLevel(file); window->show(); } @@ -81,10 +80,51 @@ Instance::~Instance() { Gtk::Main::quit(); } -bool Instance::create() { - Instance *instance = new Instance(); +void Instance::createLevel() { + if(level) + delete level; + + if(levelXml) + delete levelXml; + + levelXml = new xmlpp::DomParser; + xmlpp::Document *doc = levelXml->get_document(); + + xmlpp::Element *root = doc->create_root_node("level"); + + xmlpp::Element *info = root->add_child("info"); + info->add_child("name"); + info->add_child("desc"); + xmlpp::Element *start = info->add_child("start"); + start->set_attribute("x", "0"); + start->set_attribute("y", "0"); + start->set_attribute("z", "0"); + + root->add_child("rooms"); + root->add_child("gates"); + root->add_child("textures"); +} + +bool Instance::loadLevel(const Glib::ustring &file) { + if(level) + delete level; + + if(levelXml) + delete levelXml; + + levelXml = new xmlpp::DomParser(file); + xmlpp::Document *doc = levelXml->get_document(); + + if(doc && doc->get_root_node()) + level = new Data::Level(doc->get_root_node()); + + return (level != NULL); +} + +bool Instance::create(const Glib::ustring &file) { + Instance *instance = new Instance(file); - if(!instance->xml) { + if(!instance->level) { delete instance; return false; } -- cgit v1.2.3