#include "loader.h" Loader::Loader(QObject *parent) : QObject(parent) { doc = new QDomDocument("data"); //create(); load(); } void Loader::load() { validate(); file = new QFile("data.xml"); if (!file->open(QIODevice::ReadOnly)) qFatal("No file data.xml found!"); if (!doc->setContent(file)) { file->close(); qFatal("Error parsing data.xml"); } readAliens(); readMaps(); readLevels(); //readMorphs(); readSplashes(); readTowers(); readTriggers(); readChains(); //readUpgrades(); readLevTowers(); readWaves(); readWaveParts(); readLevWaves(); file->close(); } void Loader::create() { QFile cfile("data.xml"); if (!cfile.open(QIODevice::WriteOnly)) return; cfile.resize(0); QDomElement elem; QDomElement root = doc->createElement("ADdata"); doc->appendChild(root); QDomElement child = doc->createElement("aliens"); root.appendChild(child); elem = doc->createElement("alien"); child.appendChild(elem); elem.setAttribute("name","my alien"); elem.setAttribute("speed",0.012); elem.setAttribute("health",100); elem.setAttribute("prise",0); elem.setAttribute("id",10); elem.setAttribute("imageType",1); elem = doc->createElement("alien"); child.appendChild(elem); elem.setAttribute("name","MONSTR"); elem.setAttribute("speed",0.0099); elem.setAttribute("health",200); elem.setAttribute("prise",1); elem.setAttribute("id",12); elem.setAttribute("imageType",1); child = doc->createElement("towers"); root.appendChild(child); elem = doc->createElement("tower"); child.appendChild(elem); elem.setAttribute("name","my tower"); elem.setAttribute("imageType",1); elem.setAttribute("reload",20); elem.setAttribute("buildTime",100); elem.setAttribute("price",10); elem.setAttribute("radius",1.2); elem.setAttribute("splashType",0); elem.setAttribute("id",0); elem = doc->createElement("tower"); child.appendChild(elem); elem.setAttribute("name","Wall"); elem.setAttribute("imageType",1); elem.setAttribute("buildTime",300); elem.setAttribute("reload",0); elem.setAttribute("price",9); elem.setAttribute("radius",0); elem.setAttribute("splashType",0); elem.setAttribute("id",1); child = doc->createElement("maps"); root.appendChild(child); elem = doc->createElement("map"); child.appendChild(elem); elem.setAttribute("name","Map 16x16"); elem.setAttribute("maxPlayers","2"); elem.setAttribute("id",1); elem.setAttribute("imageType",1); elem.setAttribute("data",CreateMapExample()); child = doc->createElement("splashes"); root.appendChild(child); elem = doc->createElement("splash"); child.appendChild(elem); elem.setAttribute("name","shot"); elem.setAttribute("imageType",1); elem.setAttribute("damage",2.5); elem.setAttribute("speed",100); elem.setAttribute("autoControl","true"); elem.setAttribute("radius",1.2); elem.setAttribute("id",0); cfile.write(doc->toByteArray()); cfile.close(); } QString Loader::CreateMapExample() { QVector < QVector < int > > Cells; Cells.resize(16); for (int i=0; ielementsByTagName("alien"); for (int i=0; ielementsByTagName("wave"); for (int i=0; ielementsByTagName("wavePart"); for (int i=0; ielementsByTagName("chain"); for (int i=0; i 0) { if (!splashes.contains(chain.childSplashId)) { qCritical("invalid child splash Id"); OK = false; } } chain.parentSplashId = nm.namedItem("parent").nodeValue().toInt(); if (!splashes.contains(chain.parentSplashId)) { qCritical("invalid parent splash Id"); OK = false; } chain.triggerId = nm.namedItem("trigger").nodeValue().toInt(); if (!triggers.contains(chain.triggerId)) { qCritical("invalid parent splash Id"); OK = false; } if (OK) { chains.insert(chain.towerId,chain); qDebug() << tr("Tower=%1 parent=%2 child=%3 trigger=%4").arg(chain.towerId).arg(chain.parentSplashId).arg(chain.childSplashId).arg(chain.triggerId); } } qDebug("================"); qDebug() << tr("Found %1 chains").arg(chains.size()); qDebug("================"); } void Loader::readLevWaves() { QDomNodeList lwelems = doc->elementsByTagName("waveOnLevel"); for (int i=0; ielementsByTagName("towerOnLevel"); for (int i=0; ielementsByTagName("level"); for (int i=0; ielementsByTagName("trigger"); for (int i=0; i1)) trig.chance = 100; str = nm.namedItem("delParent").nodeValue(); trig.delParent = (str == "true"); str = nm.namedItem("type").nodeValue(); if (str == "onDestination") trig.type = tbTrigger::onDestination; if (str == "onTimer") trig.type = tbTrigger::onTimer; if (str == "onAlienInRadius") trig.type = tbTrigger::onAlienInRadius; str = nm.namedItem("childAim").nodeValue(); trig.childAim = tbTrigger::noAim; if (str == "allSide") trig.childAim = tbTrigger::allSide; if (str == "parentAim") trig.childAim = tbTrigger::parentAim; if (str == "nearlestAlien") trig.childAim = tbTrigger::nearlestAlien; triggers.insert(trig.id,trig); qDebug() << tr("Trigger %1 id=%2 damage=%3 radius=%4 delParent=%5 timer=%6").arg(trig.name).arg(trig.id).arg(trig.damage).arg(trig.radius).arg(trig.delParent).arg(trig.timer) << tr("count=%1 chance=%2 randomPosRadius=%3 type=%4 childAim=%5").arg(trig.count).arg(trig.chance).arg(trig.randomPosRadius).arg(trig.type).arg(trig.childAim); } qDebug("================"); qDebug() << tr("Found %1 triggers").arg(triggers.size()); qDebug("================"); } void Loader::readSplashes() { QString str; QDomNodeList selems = doc->elementsByTagName("splash"); for (int i=0; ielementsByTagName("tower"); for (int i=0; ielementsByTagName("map"); for (int i=0; i> m.cells; maps.insert(m.id,m); qDebug() << tr("Map %1 id=%2 imgType=%3 maxPlayers=%5").arg(m.name).arg(m.id).arg(m.imgType).arg(m.maxPlayers); for (int k=0; k