aliens have damage!
This commit is contained in:
@@ -51,7 +51,8 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
||||
brush.setColor(Qt::white);
|
||||
brush.setStyle(Qt::SolidPattern);
|
||||
int cel = data->map->cells().at(i).at(j);
|
||||
if (cel == Map::Wall) {
|
||||
if (cel == Map::Wall)
|
||||
{
|
||||
pen.setColor(Qt::black);
|
||||
brush.setColor(Qt::black);
|
||||
}
|
||||
@@ -63,35 +64,39 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
||||
// pen.setColor(Qt::yellow);
|
||||
// brush.setColor(Qt::yellow);
|
||||
// }
|
||||
if (cel >= Map::Player) {
|
||||
pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50));
|
||||
brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50));
|
||||
if (cel >= Map::Player || (cel <= Map::PlayerTower && cel !=Map::Wall))
|
||||
{
|
||||
pen.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
||||
brush.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
||||
}
|
||||
p->setPen(pen);
|
||||
p->setBrush(brush);
|
||||
p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize);
|
||||
}
|
||||
}
|
||||
qDebug() << "t:" << data->curTowers.size();
|
||||
for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i) {
|
||||
//qDebug() << "t:" << data->curTowers.size();
|
||||
for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i)
|
||||
{
|
||||
//qDebug() << "draw alien";
|
||||
//p->rotate(-90);
|
||||
//p->scale(cellSize, cellSize);
|
||||
//p->translate(rec.width()/2, rec.height()/2);
|
||||
//p->rotate(-90);
|
||||
//p->translate(-rec.height()/2, -rec.width()/2);
|
||||
QBrush brush;
|
||||
brush.setColor(Qt::darkRed);
|
||||
brush.setStyle(Qt::DiagCrossPattern);
|
||||
p->translate((*i).pos * cellSize+QPointF(10,10));
|
||||
//QBrush brush;
|
||||
//brush.setColor(Qt::darkRed);
|
||||
//brush.setStyle(Qt::DiagCrossPattern);
|
||||
p->translate((*i).pos * cellSize+QPointF(20,20));
|
||||
p->rotate((*i).angle);
|
||||
p->setPen(QColor(0,0,0,0));
|
||||
p->setBrush(brush);
|
||||
p->drawRect(QRect(-10,-10,20,20));
|
||||
//p->setPen(QColor(0,0,0,0));
|
||||
//p->setBrush(brush);
|
||||
//p->drawRect(QRect(-10,-10,20,20));
|
||||
p->drawImage(QRect(-20,-20,40,40), images[itTowers][0]->at(0));
|
||||
p->resetTransform();
|
||||
}
|
||||
qDebug() << "a:" << data->curAliens.size();
|
||||
for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i) {
|
||||
//qDebug() << "a:" << data->curAliens.size();
|
||||
for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i)
|
||||
{
|
||||
//qDebug() << "draw alien";
|
||||
//p->rotate(-90);
|
||||
//p->scale(cellSize, cellSize);
|
||||
@@ -103,22 +108,24 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
||||
p->drawImage(QRect(-20,-20,40,40), images[itAliens][0]->at(0));
|
||||
p->resetTransform();
|
||||
}
|
||||
qDebug() << "s:" << data->curSplashes.size();
|
||||
for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i) {
|
||||
//qDebug() << "s:" << data->curSplashes.size();
|
||||
for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i)
|
||||
{
|
||||
//qDebug() << "draw alien";
|
||||
//p->rotate(-90);
|
||||
//p->scale(cellSize, cellSize);
|
||||
//p->translate(rec.width()/2, rec.height()/2);
|
||||
//p->rotate(-90);
|
||||
//p->translate(-rec.height()/2, -rec.width()/2);
|
||||
QBrush brush;
|
||||
brush.setColor(Qt::red);
|
||||
brush.setStyle(Qt::SolidPattern);
|
||||
//QBrush brush;
|
||||
//brush.setColor(Qt::red);
|
||||
//brush.setStyle(Qt::SolidPattern);
|
||||
p->translate((*i).pos * cellSize+QPointF(10,10));
|
||||
p->rotate((*i).angle);
|
||||
p->setBrush(brush);
|
||||
p->setPen(QColor(0,0,0,0));
|
||||
p->drawEllipse(QPoint(),5,5);
|
||||
//p->setBrush(brush);
|
||||
//p->setPen(QColor(0,0,0,0));
|
||||
//p->drawEllipse(QPoint(),5,5);
|
||||
p->drawImage(QRect(-10,-10,20,20), images[itSplashes][0]->at(0));
|
||||
p->resetTransform();
|
||||
}
|
||||
}
|
||||
@@ -138,8 +145,12 @@ void AD_Graphics::loadImages()
|
||||
for (int i = 0; i < images.size(); i++) {
|
||||
switch ((imagesType)i) {
|
||||
case itAliens:
|
||||
images[i].push_back(new Animation(":/images/images/Aliens/Al_00_"));
|
||||
images[i].push_back(new Animation(":/images/images/Aliens/Al_00_0.png"));
|
||||
break;
|
||||
case itTowers:
|
||||
images[i].push_back(new Animation(":/images/images/Towers/01_6.png"));
|
||||
case itSplashes:
|
||||
images[i].push_back(new Animation(":/images/images/Splashes/Rocket.png"));
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
12
adcore.cpp
12
adcore.cpp
@@ -24,11 +24,13 @@ AD_Core::AD_Core(QObject *parent) :
|
||||
// adaliens->addAlien(0);
|
||||
// adaliens->AddAlien(0);
|
||||
// adaliens->AddAlien(0);
|
||||
adtowers->addTower(0,1,QPoint(9,9));
|
||||
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height()); i++)
|
||||
adtowers->addTower(0,1,QPoint(i,i));
|
||||
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height());i++)
|
||||
adtowers->addTower(0,0,QPoint(addata->map->rect().width()-2,i));
|
||||
adtowers->addTower(0,0,QPoint(19,7));
|
||||
for (int i=0; i<20;i++)
|
||||
adtowers->addTower(0,0,QPoint(8,20-i));
|
||||
for (int i=0; i<20; i++)
|
||||
adtowers->addTower(0,1,QPoint(12,i));
|
||||
for (int i=0; i<20;i++)
|
||||
adtowers->addTower(0,0,QPoint(16,20-i));
|
||||
waveInProgress = false;
|
||||
startTimer(50);
|
||||
}
|
||||
|
||||
@@ -5,14 +5,18 @@
|
||||
|
||||
Animation::Animation(const QString & path)
|
||||
{
|
||||
int i = 0;
|
||||
QString s = path + QString::number(i) + ".png";
|
||||
//qDebug() << "check " << s;
|
||||
while (QFile::exists(s)) {
|
||||
images.push_back(new QImage(s));
|
||||
s = path + QString::number(++i) + ".png";
|
||||
// int i = 0;
|
||||
// QString s = path + QString::number(i) + ".png";
|
||||
// //qDebug() << "check " << s;
|
||||
// while (QFile::exists(s)) {
|
||||
// images.push_back(new QImage(s));
|
||||
// s = path + QString::number(++i) + ".png";
|
||||
// }
|
||||
// qDebug() << "found " << images.size() << " images";
|
||||
if (QFile::exists(path))
|
||||
{
|
||||
images.push_back(new QImage(path));
|
||||
}
|
||||
qDebug() << "found " << images.size() << " images";
|
||||
}
|
||||
|
||||
|
||||
|
||||
12
data2.xml
12
data2.xml
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE data>
|
||||
<ADdata>
|
||||
<aliens>
|
||||
<alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="150"/>
|
||||
<alien flying="true" speed="0.05" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="60"/>
|
||||
<alien speed="0.2" imageType="1" prise="4" id="10" score="99" name="first" health="100"/>
|
||||
<alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="20"/>
|
||||
<alien flying="true" speed="0.2" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="50"/>
|
||||
<alien speed="0.1" imageType="1" prise="4" id="10" score="99" name="first" health="33"/>
|
||||
<alien regeneration="3" speed="0.15" imageType="1" prise="10" armor="1.5" id="12" score="99" name="MONSTR" health="100"/>
|
||||
</aliens>
|
||||
<maps>
|
||||
@@ -61,8 +61,8 @@
|
||||
</wavesOnLevels>
|
||||
<splashes>
|
||||
<splash speed="0.5" imageType="1" lifetime="9999" id="1" name="rocket"/>
|
||||
<splash speed="0.3" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/>
|
||||
<splash speed="1" imageType="2" lifetime="4" id="3" name="bullet"/>
|
||||
<splash speed="0.5" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/>
|
||||
<splash speed="1" imageType="2" lifetime="9999" autoControl="true" id="3" name="bullet"/>
|
||||
<splash speed="1" imageType="3" lifetime="10" id="4" name="bum"/>
|
||||
<splash speed="0" imageType="4" lifetime="10" id="5" name="smoke"/>
|
||||
</splashes>
|
||||
@@ -73,7 +73,7 @@
|
||||
</towers>
|
||||
<triggers>
|
||||
<trigger damage="5" childAim="noAim" delParent="true" type="onDestination" id="2" name="shot"/>
|
||||
<trigger damage="5" childAim="noAim" radius="1.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/>
|
||||
<trigger damage="21" childAim="noAim" radius="2.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/>
|
||||
<trigger childAim="noAim" count="1" type="onTimer" id="4" name="smoke"/>
|
||||
</triggers>
|
||||
<chains>
|
||||
|
||||
@@ -20,5 +20,8 @@
|
||||
<file>images/Aliens/Al_00_17.png</file>
|
||||
<file>images/Aliens/Al_00_18.png</file>
|
||||
<file>images/Aliens/Al_00_19.png</file>
|
||||
<file>images/Towers/00_0.png</file>
|
||||
<file>images/Splashes/Rocket.png</file>
|
||||
<file>images/Towers/01_6.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
30
map.cpp
30
map.cpp
@@ -80,27 +80,44 @@ void Map::removeAliensPath()
|
||||
|
||||
bool Map::addTowerOnMap(int playerId, QPoint pos)
|
||||
{
|
||||
qDebug() << pos;
|
||||
//qDebug() << pos;
|
||||
if (playerId < 0 || playerId > players) return false;
|
||||
QRect r(QPoint(),mapSize);
|
||||
if (!r.contains(pos)) return false;
|
||||
if (Cells[pos.x()][pos.y()]==Player+playerId)
|
||||
if (!r.contains(pos) ||
|
||||
!r.contains(pos+QPoint(1,0)) ||
|
||||
!r.contains(pos+QPoint(0,1)) ||
|
||||
!r.contains(pos+QPoint(1,1))) return false;
|
||||
if (Cells[pos.x()][pos.y()]==Player+playerId &&
|
||||
Cells[pos.x()+1][pos.y()]==Player+playerId &&
|
||||
Cells[pos.x()][pos.y()+1]==Player+playerId &&
|
||||
Cells[pos.x()+1][pos.y()+1]==Player+playerId)
|
||||
{
|
||||
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
||||
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
|
||||
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
|
||||
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
|
||||
for (int i=0; i<Starts.size(); i++) {
|
||||
for (int j=0; j<Finishs.size(); j++) {
|
||||
if (waveTrace(Starts.at(i),Finishs.at(j))<0) {
|
||||
qDebug("AAAAAA");
|
||||
Cells[pos.x()][pos.y()]=Player+playerId;
|
||||
Cells[pos.x()+1][pos.y()]=Player+playerId;
|
||||
Cells[pos.x()][pos.y()+1]=Player+playerId;
|
||||
Cells[pos.x()+1][pos.y()+1]=Player+playerId;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (Cells[pos.x()][pos.y()]==AlienPath+playerId)
|
||||
if (Cells[pos.x()][pos.y()]==AlienPath+playerId &&
|
||||
Cells[pos.x()+1][pos.y()]==AlienPath+playerId &&
|
||||
Cells[pos.x()][pos.y()+1]==AlienPath+playerId &&
|
||||
Cells[pos.x()+1][pos.y()+1]==AlienPath+playerId)
|
||||
{
|
||||
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
||||
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
|
||||
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
|
||||
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
|
||||
// bool ok=true;
|
||||
// for (int i=0; i<Starts.size(); i++)
|
||||
// for (int j=0; j<Finishs.size(); j++)
|
||||
@@ -121,6 +138,9 @@ bool Map::addTowerOnMap(int playerId, QPoint pos)
|
||||
if (!pathOK)
|
||||
{
|
||||
Cells[pos.x()][pos.y()]=AlienPath+playerId;
|
||||
Cells[pos.x()+1][pos.y()]=AlienPath+playerId;
|
||||
Cells[pos.x()][pos.y()+1]=AlienPath+playerId;
|
||||
Cells[pos.x()+1][pos.y()+1]=AlienPath+playerId;
|
||||
emit recreateAlienPath(pathOK);
|
||||
return false;
|
||||
}
|
||||
|
||||
37
splashes.cpp
37
splashes.cpp
@@ -96,7 +96,9 @@ void Splashes::addSplash(QPoint curTowerId)
|
||||
spl.trigsOnTimer.append(tot);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size();
|
||||
gameData->curSplashes.insert(spl.id,spl);
|
||||
nextId++;
|
||||
}
|
||||
@@ -137,6 +139,23 @@ void Splashes::update()
|
||||
for (int k=0; k<spl.trigsOnDest.size(); k++)
|
||||
{
|
||||
// TODO: activate trigger
|
||||
srcTriggerType strig = gameData->players.at(spl.PlayerId)->srcTowers.at(spl.srcTower).triggers.at(spl.trigsOnDest.at(k).src);
|
||||
if (strig.delParent) deadIndexes.push_back(spl.id);
|
||||
if (strig.damage > 0)
|
||||
{
|
||||
if (!(strig.radius > 0))
|
||||
{
|
||||
if (!badAl)
|
||||
{
|
||||
float hh = gameData->curAliens[spl.AlienId].health -= strig.damage;
|
||||
if (hh < 0)
|
||||
gameData->curAliens.remove(spl.AlienId);
|
||||
qDebug() << "health=" << hh;
|
||||
}
|
||||
} else {
|
||||
processTrigger(strig,spl.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
arctg = std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y());
|
||||
@@ -168,3 +187,21 @@ void Splashes::delSplash(int Id)
|
||||
{
|
||||
gameData->curSplashes.remove(Id);
|
||||
}
|
||||
|
||||
|
||||
void Splashes::processTrigger(srcTriggerType srctrig, QPointF pos)
|
||||
{
|
||||
qDebug("trig proc");
|
||||
QList <int> dead;
|
||||
for (QHash<int, AlienType>::iterator i = gameData->curAliens.begin(); i != gameData->curAliens.end(); ++i)
|
||||
{
|
||||
if (distance2(pos, (*i).pos) < srctrig.radius*srctrig.radius)
|
||||
{
|
||||
(*i).health -= srctrig.damage;
|
||||
//qDebug() << "health=" << hh;
|
||||
if ((*i).health < 0) dead.append((*i).id);
|
||||
}
|
||||
}
|
||||
for (int i=0; i<dead.size(); ++i)
|
||||
gameData->curAliens.remove(dead.at(i));
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ public slots:
|
||||
private:
|
||||
Game_Data *gameData;
|
||||
int nextId;
|
||||
|
||||
void processTrigger(srcTriggerType srctrig,QPointF pos);
|
||||
};
|
||||
|
||||
#endif // SPLASHES_H
|
||||
|
||||
@@ -34,7 +34,7 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos)
|
||||
if (gameData->map->addTowerOnMap(playerId,pos))
|
||||
{
|
||||
tw.pos = pos;
|
||||
qDebug() << "tw" << pos;
|
||||
//qDebug() << "tw" << pos;
|
||||
//gameData->map->printMap();
|
||||
gameData->curTowers.insert(tw.pos,tw);
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user