Files
aliendefender/adcore.cpp
2011-08-20 07:34:19 +04:00

94 lines
2.1 KiB
C++

#include "adcore.h"
AD_Core::AD_Core(QObject *parent) :
QThread(parent)
{
step = 0;
Loader * adloader = new Loader();
adloader->load("data2.xml");
addata = adloader->loadlevel(1);
delete adloader;
if (addata != 0) qDebug("Sucsess");
else qFatal("Error");
adtowers = new Towers(addata);
adsplashes = new Splashes(addata);
connect(addata->map,SIGNAL(recreateAlienPath(bool*)),addata->aliens,SLOT(retrace(bool*)));
connect(adtowers,SIGNAL(shot(TowerType)),adsplashes,SLOT(addSplash(TowerType)));
connect(adsplashes,SIGNAL(killAlien(int,int)),this,SLOT(killAlien(int,int)));
waveInProgress = false;
waveEnd = false;
startTimer(50);
}
void AD_Core::next()
{
adtowers->update();
adsplashes->update();
addata->aliens->update();
waveProcessing();
step++;
}
void AD_Core::timerEvent(QTimerEvent * )
{
next();
}
void AD_Core::nextWave()
{
if (waveInProgress) return;
if (addata->curWave >= addata->waves.size()) {
qDebug("level finished");
waveEnd = false;
return;
}
//wavetime = addata->waves.at(addata->curWave).timeout;
qDebug() << tr("Next wave %1").arg(addata->curWave+1);
wavetime = 0;
waveInProgress = true;
}
void AD_Core::waveProcessing()
{
if (addata->aliens->curAliens.isEmpty() && waveEnd)
{
addata->players.at(0)->money += addata->waves.at(addata->curWave-1).prise;
waveEnd = false;
}
if (!waveInProgress) return;
if (wavetime <= 0) {
for (int i=0; i<addata->waves.at(addata->curWave).counts.size(); i++) {
if (addata->waves.at(addata->curWave).counts.at(i) > 0) {
addata->aliens->addAlien(addata->waves.at(addata->curWave).types.at(i));
addata->waves[addata->curWave].counts[i]--;
wavetime = addata->waves.at(addata->curWave).timeout;
waveEnd = true;
return;
}
}
addata->curWave++;
waveInProgress = false;
} else {
wavetime--;
}
}
void AD_Core::killAlien(int playerId, int alienId)
{
addata->players.at(playerId)->money += addata->aliens->curAliens[alienId].src->prise;
addata->aliens->delAlien(alienId);
}
void AD_Core::setScene(QGraphicsScene *scene)
{
addata->aliens->setScene(scene);
adtowers->setScene(scene);
adsplashes->setScene(scene);
}