#include "loader.h" Loader::Loader(QObject *parent) : QObject(parent) { doc = new QDomDocument("data"); //create(); //load(); } void Loader::load(QString filename) { validate(filename); file = new QFile(filename); 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::save(QString filename) { QDomDocument data("data"); QFile cfile(filename); if (!cfile.open(QIODevice::WriteOnly)) return; cfile.resize(0); QDomElement elem; QDomElement root = data.createElement("ADdata"); data.appendChild(root); QDomElement child = data.createElement("aliens"); root.appendChild(child); for (int i=0; i 0) elem.setAttribute("armor",al.armor); if (al.isFlying) elem.setAttribute("flying","true"); elem.setAttribute("prise",al.prise); if (al.regeneration > 0) elem.setAttribute("regeneration",al.regeneration); elem.setAttribute("score",al.score); elem.setAttribute("speed",al.speed); elem.setAttribute("imageType",al.imgType); } child = data.createElement("maps"); root.appendChild(child); for (int i=0; i 0) elem.setAttribute("expByDamage",tw.expByDamage); if (tw.expByKill > 0) elem.setAttribute("expByKill",tw.expByKill); if (tw.expByShot > 0) elem.setAttribute("expByShot",tw.expByShot); } child = data.createElement("triggers"); root.appendChild(child); for (int i=0; i 0) elem.setAttribute("count",trig.count); if (trig.damage > 0) elem.setAttribute("damage",trig.damage); if (trig.radius > 0) elem.setAttribute("radius",trig.radius); if (trig.delParent) elem.setAttribute("delParent","true"); if (trig.randomPosRadius > 0) elem.setAttribute("randomPosRadius",trig.randomPosRadius); switch (trig.childAim) { case tbTrigger::allSide : elem.setAttribute("childAim","allSide"); break; case tbTrigger::nearlestAlien : elem.setAttribute("childAim","nearlestAlien"); break; case tbTrigger::parentAim : elem.setAttribute("childAim","parentAim"); break; default: elem.setAttribute("childAim","noAim"); break; } switch (trig.type) { case tbTrigger::onTimer : elem.setAttribute("type","onTimer"); break; case tbTrigger::onDestination : elem.setAttribute("type","onDestination"); break; case tbTrigger::onAlienInRadius : elem.setAttribute("type","onAlienInRadius"); break; } } child = data.createElement("chains"); root.appendChild(child); for (int i=0; i 0) elem.setAttribute("child",ch.childSplashId); } child = data.createElement("towersOnLevels"); root.appendChild(child); for (int i=0; i wollist = levWaves.values(id); // if (wollist.isEmpty()) // { // qCritical() << tr("Error no waves on level!"); // return 0; // } // tbWave tbw; // tbWavePart tbwpt; // QList wplist; // QList alienIds; // for (int i=0; iwaves.prepend(wt); // wplist.clear(); // } // for (int i=0; iwaves.size(); i++) // qDebug() << tr("load wave #%1 prise=%2 timeout=%3").arg(i+1).arg(gd->waves.at(i).prise).arg(gd->waves.at(i).timeout) << gd->waves.at(i).types << gd->waves.at(i).counts; // wollist.clear(); // for (int i=0; isrcAliens.append(salt); // qDebug() << tr("Alien %1 #%2 ").arg(salt.name).arg(i); // } // QList tollist = levTowers.values(id); // tbTower tbt; // for (int i=0; i > 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() { levWaves.clear(); 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; i0)) 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() { splashes.clear(); QString str; QDomNodeList selems = doc->elementsByTagName("splash"); for (int i=0; ielementsByTagName("tower"); for (int i=0; ielementsByTagName("map"); for (int i=0; i