last changes
This commit is contained in:
209
loader.cpp
209
loader.cpp
@@ -1,5 +1,7 @@
|
||||
#include "loader.h"
|
||||
|
||||
bool tbWaveOnLevel_lessThan(const tbWaveOnLevel &a, const tbWaveOnLevel &b) {return a.waveId < b.waveId;}
|
||||
|
||||
Loader::Loader()
|
||||
{
|
||||
doc = new QDomDocument("data");
|
||||
@@ -30,7 +32,7 @@ void Loader::load(QString filename)
|
||||
readLevTowers();
|
||||
readMorphs();
|
||||
readWaves();
|
||||
readWaveParts();
|
||||
// readWaveParts();
|
||||
readLevWaves();
|
||||
|
||||
file->close();
|
||||
@@ -93,6 +95,15 @@ void Loader::save(QString filename)
|
||||
elem.setAttribute("id",w.id);
|
||||
elem.setAttribute("prise",w.prise);
|
||||
elem.setAttribute("timeout",w.timeout);
|
||||
QDomElement cc;
|
||||
for (int k=0; k<w.parts.size(); k++)
|
||||
{
|
||||
tbWavePart wp = w.parts.at(k);
|
||||
cc = data.createElement("wavePart");
|
||||
elem.appendChild(cc);
|
||||
cc.setAttribute("alien",wp.alienId);
|
||||
cc.setAttribute("count",wp.count);
|
||||
}
|
||||
}
|
||||
child = data.createElement("levels");
|
||||
root.appendChild(child);
|
||||
@@ -105,18 +116,19 @@ void Loader::save(QString filename)
|
||||
elem.setAttribute("map",lev.mapId);
|
||||
elem.setAttribute("name",lev.name);
|
||||
elem.setAttribute("score",lev.score);
|
||||
elem.setAttribute("startMoney",lev.money);
|
||||
}
|
||||
child = data.createElement("waveParts");
|
||||
root.appendChild(child);
|
||||
for (int i=0; i<waveParts.size(); i++)
|
||||
{
|
||||
tbWavePart wp = waveParts.values().at(i);
|
||||
elem = data.createElement("wavePart");
|
||||
child.appendChild(elem);
|
||||
elem.setAttribute("wave",wp.waveId);
|
||||
elem.setAttribute("alien",wp.alienId);
|
||||
elem.setAttribute("count",wp.count);
|
||||
}
|
||||
// child = data.createElement("waveParts");
|
||||
// root.appendChild(child);
|
||||
// for (int i=0; i<waveParts.size(); i++)
|
||||
// {
|
||||
// tbWavePart wp = waveParts.values().at(i);
|
||||
// elem = data.createElement("wavePart");
|
||||
// child.appendChild(elem);
|
||||
// elem.setAttribute("wave",wp.waveId);
|
||||
// elem.setAttribute("alien",wp.alienId);
|
||||
// elem.setAttribute("count",wp.count);
|
||||
// }
|
||||
child = data.createElement("wavesOnLevels");
|
||||
root.appendChild(child);
|
||||
for (int i=0; i<levWaves.size(); i++)
|
||||
@@ -149,41 +161,41 @@ void Loader::save(QString filename)
|
||||
{
|
||||
case QPainter::RasterOp_NotSource :
|
||||
elem.setAttribute("compositionMode","NotSource");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Plus :
|
||||
elem.setAttribute("compositionMode","Plus");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Multiply :
|
||||
elem.setAttribute("compositionMode","Multiply");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Screen :
|
||||
elem.setAttribute("compositionMode","Screen");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Darken :
|
||||
elem.setAttribute("compositionMode","Darken");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Lighten :
|
||||
elem.setAttribute("compositionMode","Lighten");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_ColorDodge :
|
||||
elem.setAttribute("compositionMode","ColorDodge");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_ColorBurn :
|
||||
elem.setAttribute("compositionMode","ColorBurn");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_HardLight :
|
||||
elem.setAttribute("compositionMode","HardLight");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_SoftLight :
|
||||
elem.setAttribute("compositionMode","SoftLight");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_Difference :
|
||||
elem.setAttribute("compositionMode","Difference");
|
||||
break;
|
||||
break;
|
||||
case QPainter::CompositionMode_SourceOver :
|
||||
default:
|
||||
elem.setAttribute("compositionMode","Source");
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
child = data.createElement("towers");
|
||||
@@ -233,29 +245,29 @@ void Loader::save(QString filename)
|
||||
{
|
||||
case srcTriggerType::allSide :
|
||||
elem.setAttribute("childAim","allSide");
|
||||
break;
|
||||
break;
|
||||
case srcTriggerType::nearestAlien :
|
||||
elem.setAttribute("childAim","nearestAlien");
|
||||
break;
|
||||
break;
|
||||
case srcTriggerType::parentAim :
|
||||
elem.setAttribute("childAim","parentAim");
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
elem.setAttribute("childAim","noAim");
|
||||
break;
|
||||
break;
|
||||
}
|
||||
switch (trig.type)
|
||||
{
|
||||
case srcTriggerType::onTimer :
|
||||
elem.setAttribute("type","onTimer");
|
||||
elem.setAttribute("timer",trig.timer);
|
||||
break;
|
||||
break;
|
||||
case srcTriggerType::onDestination :
|
||||
elem.setAttribute("type","onDestination");
|
||||
break;
|
||||
break;
|
||||
case srcTriggerType::onAlienInRadius :
|
||||
elem.setAttribute("type","onAlienInRadius");
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
child = data.createElement("chains");
|
||||
@@ -325,6 +337,7 @@ Game_Data * Loader::loadlevel(int id)
|
||||
{
|
||||
Player * pl = new Player(i);
|
||||
gd->players.append(pl);
|
||||
gd->players.at(i)->money = levels.value(id).money/tbm.maxPlayers;
|
||||
}
|
||||
qDebug() << gd->players.size();
|
||||
for (int i=0; i<map->maxPlayers(); ++i)
|
||||
@@ -332,41 +345,42 @@ Game_Data * Loader::loadlevel(int id)
|
||||
QList <tbWaveOnLevel> wollist = levWaves.values(id);
|
||||
if (wollist.isEmpty())
|
||||
{
|
||||
qCritical() << tr("Error no waves on level!");
|
||||
qCritical() << tr("Error: no waves on level!");
|
||||
return 0;
|
||||
}
|
||||
tbWave tbw;
|
||||
tbWavePart tbwpt;
|
||||
QList <tbWavePart> wplist;
|
||||
//QList <tbWavePart> wplist;
|
||||
QList <int> alienIds;
|
||||
QList <int> animIds;
|
||||
qSort(wollist.begin(),wollist.end(),tbWaveOnLevel_lessThan);
|
||||
for (int i=0; i<wollist.size(); ++i)
|
||||
{
|
||||
WaveType wt;
|
||||
tbw = waves.value(wollist.at(i).waveId);
|
||||
wt.prise = tbw.prise;
|
||||
wt.timeout = tbw.timeout;
|
||||
wplist = waveParts.values(tbw.id);
|
||||
if (wplist.isEmpty())
|
||||
//wplist = waveParts.values(tbw.id);
|
||||
if (tbw.parts.isEmpty())
|
||||
{
|
||||
qCritical() << tr("Error wave %1 is empty!").arg(tbw.id);
|
||||
qCritical() << tr("Error: wave %1 is empty!").arg(tbw.id);
|
||||
//return 0;
|
||||
}
|
||||
for (int j=0; j<wplist.size(); j++)
|
||||
for (int j=0; j<tbw.parts.size(); j++)
|
||||
{
|
||||
tbwpt = wplist.at(j);
|
||||
tbwpt = tbw.parts.at(j);
|
||||
if (alienIds.contains(tbwpt.alienId))
|
||||
{
|
||||
wt.types.prepend(alienIds.indexOf(tbwpt.alienId));
|
||||
wt.types.append(alienIds.indexOf(tbwpt.alienId));
|
||||
} else {
|
||||
alienIds.append(tbwpt.alienId);
|
||||
wt.types.prepend(alienIds.size()-1);
|
||||
wt.types.append(alienIds.size()-1);
|
||||
}
|
||||
wt.counts.prepend(tbwpt.count);
|
||||
wt.counts.append(tbwpt.count);
|
||||
}
|
||||
gd->waves.prepend(wt);
|
||||
gd->waves.append(wt);
|
||||
qDebug() << tr("load wave #%1 prise=%2 timeout=%3").arg(i+1).arg(wt.prise).arg(wt.timeout) << wt.types << wt.counts;
|
||||
wplist.clear();
|
||||
//wplist.clear();
|
||||
}
|
||||
wollist.clear();
|
||||
for (int i=0; i<alienIds.size(); ++i)
|
||||
@@ -385,7 +399,7 @@ Game_Data * Loader::loadlevel(int id)
|
||||
salt.score = tbal.score;
|
||||
salt.speed = tbal.speed;
|
||||
gd->aliens->srcAliens.append(salt);
|
||||
qDebug() << tr("Alien %1 #%2 ").arg(salt.name).arg(i);
|
||||
//qDebug() << tr("Alien %1 #%2 ").arg(salt.name).arg(i);
|
||||
}
|
||||
QList <tbTowerOnLevel> tollist = levTowers.values(id);
|
||||
tbTower tbt;
|
||||
@@ -462,7 +476,7 @@ Game_Data * Loader::loadlevel(int id)
|
||||
{
|
||||
piForeachA (j, morph_indexes[i])
|
||||
{
|
||||
int index = (int)j.morph;
|
||||
long int index = (long int)j.morph;
|
||||
for (int k=0; k<map->maxPlayers(); ++k)
|
||||
{
|
||||
j.morph = &(gd->players[k]->srcTowers[index]);
|
||||
@@ -607,10 +621,10 @@ void Loader::fillTowerChains(QList <int> * animIds, QList <tbChain> * chlist,
|
||||
QString Loader::createMapExample()
|
||||
{
|
||||
QVector < QVector < int > > Cells;
|
||||
Cells.resize(25);
|
||||
Cells.resize(32);
|
||||
for (int i=0; i<Cells.size(); i++)
|
||||
{
|
||||
Cells[i].resize(11);
|
||||
Cells[i].resize(32);
|
||||
Cells[i][0]=Map::Wall;
|
||||
Cells[i][Cells[i].size()-1]=Map::Wall;
|
||||
}
|
||||
@@ -627,10 +641,20 @@ QString Loader::createMapExample()
|
||||
Cells[i][j]=Map::Player;
|
||||
//for (int i=2; i<Cells.size()-2; i++)
|
||||
//Cells[i][Cells[i].size()/2] = Map::Wall;
|
||||
Cells[0][Cells[0].size()/2]=Map::Start;
|
||||
//Cells[0][Cells[0].size()/2]=Map::Start;
|
||||
//Cells[Cells.size()/2-1][0]=Map::Start;
|
||||
Cells[Cells.size()-1][Cells[Cells.size()-1].size()/2]=Map::Finish;
|
||||
//Cells[Cells.size()-1][Cells[Cells.size()-1].size()/2]=Map::Finish;
|
||||
//Cells[Cells.size()/2-1][Cells[Cells.size()/2].size()-1]=Map::Finish;
|
||||
for (int i=4; i<6; i++)
|
||||
{
|
||||
Cells[0][i]=Map::Start;
|
||||
Cells[Cells.size()-1][Cells.size()-1-i]=Map::Finish;
|
||||
}
|
||||
for (int i=4; i<6; i++)
|
||||
{
|
||||
Cells[i][0]=Map::Start;
|
||||
Cells[Cells.size()-1-i][Cells.size()-1]=Map::Finish;
|
||||
}
|
||||
QByteArray ba;
|
||||
QDataStream tmps(&ba,QIODevice::ReadWrite);
|
||||
tmps << Cells;
|
||||
@@ -690,6 +714,28 @@ void Loader::readWaves()
|
||||
if (waves.contains(w.id)) qCritical("Same wave ID detected, replacing...");
|
||||
w.prise = nm.namedItem("prise").nodeValue().toInt();
|
||||
w.timeout = nm.namedItem("timeout").nodeValue().toInt();
|
||||
QDomNodeList wpelems = welems.at(i).childNodes();
|
||||
for (int j=0; j<wpelems.size(); j++)
|
||||
{
|
||||
if (wpelems.at(j).nodeName() == "wavePart")
|
||||
{
|
||||
bool OK = true;
|
||||
tbWavePart wp;
|
||||
QDomNamedNodeMap nm = wpelems.at(j).attributes();
|
||||
wp.alienId = nm.namedItem("alien").nodeValue().toInt();
|
||||
if (!aliens.contains(wp.alienId))
|
||||
{
|
||||
qCritical("invalid alien Id");
|
||||
OK = false;
|
||||
}
|
||||
wp.count = nm.namedItem("count").nodeValue().toInt();
|
||||
if (OK)
|
||||
{
|
||||
w.parts.append(wp);
|
||||
//qDebug() << tr("Wave=%1 alien=%2 count=%3").arg(wp.waveId).arg(wp.alienId).arg(wp.count);
|
||||
}
|
||||
}
|
||||
}
|
||||
waves.insert(w.id,w);
|
||||
//qDebug() << tr("Wave %1 prise=%2 timeout=%3").arg(w.id).arg(w.prise).arg(w.timeout);
|
||||
}
|
||||
@@ -699,38 +745,38 @@ void Loader::readWaves()
|
||||
}
|
||||
|
||||
|
||||
void Loader::readWaveParts()
|
||||
{
|
||||
waveParts.clear();
|
||||
QDomNodeList wpelems = doc->elementsByTagName("wavePart");
|
||||
for (int i=0; i<wpelems.size(); i++)
|
||||
{
|
||||
bool OK = true;
|
||||
tbWavePart wp;
|
||||
QDomNamedNodeMap nm = wpelems.at(i).attributes();
|
||||
wp.waveId = nm.namedItem("wave").nodeValue().toInt();
|
||||
if (!waves.contains(wp.waveId))
|
||||
{
|
||||
qCritical("invalid wave Id");
|
||||
OK = false;
|
||||
}
|
||||
wp.alienId = nm.namedItem("alien").nodeValue().toInt();
|
||||
if (!aliens.contains(wp.alienId))
|
||||
{
|
||||
qCritical("invalid alien Id");
|
||||
OK = false;
|
||||
}
|
||||
wp.count = nm.namedItem("count").nodeValue().toInt();
|
||||
if (OK)
|
||||
{
|
||||
waveParts.insert(wp.waveId,wp);
|
||||
//qDebug() << tr("Wave=%1 alien=%2 count=%3").arg(wp.waveId).arg(wp.alienId).arg(wp.count);
|
||||
}
|
||||
}
|
||||
//qDebug("================");
|
||||
qDebug() << tr("Found %1 waveParts").arg(waveParts.size());
|
||||
//qDebug("================");
|
||||
}
|
||||
//void Loader::readWaveParts()
|
||||
//{
|
||||
// //waveParts.clear();
|
||||
// QDomNodeList wpelems = doc->elementsByTagName("wavePart");
|
||||
// for (int i=0; i<wpelems.size(); i++)
|
||||
// {
|
||||
// bool OK = true;
|
||||
// tbWavePart wp;
|
||||
// QDomNamedNodeMap nm = wpelems.at(i).attributes();
|
||||
// wp.waveId = nm.namedItem("wave").nodeValue().toInt();
|
||||
// if (!waves.contains(wp.waveId))
|
||||
// {
|
||||
// qCritical("invalid wave Id");
|
||||
// OK = false;
|
||||
// }
|
||||
// wp.alienId = nm.namedItem("alien").nodeValue().toInt();
|
||||
// if (!aliens.contains(wp.alienId))
|
||||
// {
|
||||
// qCritical("invalid alien Id");
|
||||
// OK = false;
|
||||
// }
|
||||
// wp.count = nm.namedItem("count").nodeValue().toInt();
|
||||
// if (OK)
|
||||
// {
|
||||
// waves[wp.waveId].parts.append(wp);
|
||||
// //qDebug() << tr("Wave=%1 alien=%2 count=%3").arg(wp.waveId).arg(wp.alienId).arg(wp.count);
|
||||
// }
|
||||
// }
|
||||
// //qDebug("================");
|
||||
// //qDebug() << tr("Found %1 waveParts").arg(waveParts.size());
|
||||
// //qDebug("================");
|
||||
//}
|
||||
|
||||
|
||||
void Loader::readChains()
|
||||
@@ -895,6 +941,7 @@ void Loader::readLevels()
|
||||
l.name = nm.namedItem("name").nodeValue();
|
||||
if (levels.contains(l.id)) qCritical("Same wave ID detected, replacing...");
|
||||
l.mapId = nm.namedItem("map").nodeValue().toInt();
|
||||
l.money = nm.namedItem("startMoney").nodeValue().toUInt();
|
||||
if (!maps.contains(l.mapId))
|
||||
{
|
||||
qCritical("invalid map Id");
|
||||
|
||||
Reference in New Issue
Block a user