diff --git a/base_types.h b/base_types.h index 934856e..9fffe77 100644 --- a/base_types.h +++ b/base_types.h @@ -5,11 +5,10 @@ #include #include -struct Alien +struct AlienType { int Id; // uses for QHash - QString name; - int type; + int src; QPointF pos; float angle; // -180 .. 180 float speed; // cells per tick (speed=1 is 60cells by 1 sec for 60fps e.g.) @@ -17,24 +16,38 @@ struct Alien QPoint finish; QVector path; int pathIndex; + int imgType; +}; + + +struct srcAlienType +{ + QString name; + float speed; + float health; + float armor; + float regeneration; + bool isFlying; + unsigned int score; + int imgType; unsigned int prise; }; -struct Tower +struct TowerType { - QString name; - int type; + int src; int AlienId; // aim alien int PlayerId; // tower's owner + int imgType; QPoint pos; // not QPointF because tower fixed on grid float angle; // -180 .. 180 - float range; // in cells - float reload; // time for reload in ticks + unsigned int reload; // time for reload in ticks + unsigned int build; }; -struct srcTrigger +struct srcTriggerType { enum triggerType { @@ -53,36 +66,44 @@ struct srcTrigger }; -struct srcSplash +struct srcSplashType { QString name; int imgType; float speed; // in cells + int lifetime; bool autoControl; QList triggerIndexes; }; -struct srcTower + +struct srcTowerType { QString name; - int type; + int imgType; int PlayerId; // tower's owner - float range; // in cells - float reload; // time for reload in ticks - QList triggers; - QList splashes; + unsigned int cost; + unsigned int reload; + unsigned int buildTime; + float radius; // in cells + float expByShot; + float expByKill; + float expByDamage; + QList triggers; + QList splashes; }; -struct Splash +struct SplashType { int Id; - QString name; - int type; + int imgType; + int src; QPoint TowerId; // parent tower (-1;-1) for null parent + int PlayerId; int AlienId; // aim alien (different from tower.AlienId) - int lifetime; // in ticks - float radius; // in cells + QPointF destination; + int life; // in ticks float angle; // -180 .. 180 QPointF pos; }; diff --git a/data.xml b/data.xml index bc78134..3d203a0 100644 --- a/data.xml +++ b/data.xml @@ -34,6 +34,7 @@ + @@ -41,4 +42,16 @@ + + + + + + + + + + + + diff --git a/loader.cpp b/loader.cpp index a262b11..ccb2735 100644 --- a/loader.cpp +++ b/loader.cpp @@ -27,8 +27,9 @@ void Loader::load() readSplashes(); readTowers(); readTriggers(); - //readChains(); - //readLevTowers(); + readChains(); + //readUpgrades(); + readLevTowers(); readWaves(); readWaveParts(); readLevWaves(); @@ -43,10 +44,6 @@ void Loader::create() if (!cfile.open(QIODevice::WriteOnly)) return; cfile.resize(0); - // if (!doc.setContent(&file)) { - // file.close(); - // return; - // } QDomElement elem; QDomElement root = doc->createElement("ADdata"); doc->appendChild(root); @@ -110,7 +107,6 @@ void Loader::create() elem.setAttribute("autoControl","true"); elem.setAttribute("radius",1.2); elem.setAttribute("id",0); - cfile.write(doc->toByteArray()); cfile.close(); } @@ -235,6 +231,53 @@ void Loader::readWaveParts() } +void Loader::readChains() +{ + QDomNodeList celems = doc->elementsByTagName("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"); @@ -267,6 +310,38 @@ void Loader::readLevWaves() } +void Loader::readLevTowers() +{ + QDomNodeList ltelems = doc->elementsByTagName("towerOnLevel"); + for (int i=0; ielementsByTagName("level"); diff --git a/loader.h b/loader.h index 29344e6..95fbfe7 100644 --- a/loader.h +++ b/loader.h @@ -179,6 +179,7 @@ private: QMultiHash chains; QMultiHash morphs; QMultiHash levTowers; + QMultiHash upgrades; void readAliens(); void readMaps(); @@ -192,6 +193,7 @@ private: void readWaves(); void readLevWaves(); void readWaveParts(); + void readUpgrades(); void validate(); void load(); diff --git a/schema.xml b/schema.xml index bc491c2..2278e89 100644 --- a/schema.xml +++ b/schema.xml @@ -67,6 +67,20 @@ + + + + + + + + + + + + + + @@ -146,18 +160,25 @@ - - + + - - + + + + + + + + + @@ -166,13 +187,13 @@ - - + + - - + +