diff --git a/ADeditor/ADeditor.pro.user b/ADeditor/ADeditor.pro.user index 478d1f2..5dd97e9 100644 --- a/ADeditor/ADeditor.pro.user +++ b/ADeditor/ADeditor.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/ad_graphics.cpp b/ad_graphics.cpp index 869f877..0d1f631 100644 --- a/ad_graphics.cpp +++ b/ad_graphics.cpp @@ -181,3 +181,13 @@ void AD_Graphics::mouseMoveEvent(QMouseEvent *event) focus_item = 0; } +void AD_Graphics::alienKilled(int id) +{ + if (select_al != 0) if (select_al->id() == id) select_al = 0; + QPainter p(mapimg); + p.translate((core->addata->aliens->curAliens[id].pos+QPointF(0.5,0.5))*cellSize); + p.drawImage(core->addata->bloodrect, *(core->addata->blood)); + p.end(); + resetCachedContent(); +} + diff --git a/ad_graphics.h b/ad_graphics.h index 97411b9..3a491f1 100644 --- a/ad_graphics.h +++ b/ad_graphics.h @@ -23,8 +23,8 @@ public: public slots: void selectTower(ADItem * item) {select_tow = item;} void setBuilding(bool arg) {m_building = arg;} - void alienKilled(int id) {if (select_al != 0) if (select_al->id() == id) select_al = 0;} - void towerKilled(QPoint id) {if (select_tow != 0) if (select_tow->tid() == id) {select_tow = 0; emit selected_tower_changed(QPoint());}} + void alienKilled(int id); + void towerKilled(QPoint id) {focus_item = 0; if (select_tow != 0) if (select_tow->tid() == id) {select_tow = 0; emit selected_tower_changed(QPoint());}} private: void drawBackground(QPainter * p, const QRectF &); diff --git a/aliendefender.pro.user b/aliendefender.pro.user index 093587a..5b632d5 100644 --- a/aliendefender.pro.user +++ b/aliendefender.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/data2.xml b/data2.xml index 7091d57..df9f4e9 100644 --- a/data2.xml +++ b/data2.xml @@ -3,9 +3,10 @@ - - - + + + + @@ -17,33 +18,103 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -57,47 +128,48 @@ - - - - - - + + + + + + - + - + - + - + - + - - - - - + + + + + - - + + + @@ -106,7 +178,7 @@ - + diff --git a/form.cpp b/form.cpp index 60eb469..e8cced3 100644 --- a/form.cpp +++ b/form.cpp @@ -10,14 +10,24 @@ Form::Form(QWidget *parent) : ui->setupUi(this); graphics = new AD_Graphics(&core); ui->widget->layout()->addWidget(graphics); - TouchButtFrame * tbf = new TouchButtFrame(); + tbf = new TouchButtFrame(); tbf->setOrientation(Qt::Vertical); morphtbf = new TouchButtFrame(); morphtbf->setOrientation(Qt::Vertical); tbf->addButton(tr("delete")); foreach (srcTowerType i, core.addata->players.at(0)->srcTowers) { - tbf->addButton(i.name); + QPixmap pix(32,32); + pix.fill(Qt::transparent); + QPainter p; + p.begin(&pix); + //p.fillRect(pix.rect(),Qt::transparent); + p.setRenderHints(QPainter::SmoothPixmapTransform); + p.drawImage(pix.rect(),*(i.image)); + p.end(); + cursors.append(pix); + tbf->addButton(i.name+tr("\n %1 $").arg(i.cost)); + tbf->Button(cursors.size())->setIcon(QIcon(pix)); //QPushButton * butt = new QPushButton(i.name); //towerButtons << butt; //butt->setAutoDefault(true); @@ -30,7 +40,7 @@ Form::Form(QWidget *parent) : connect(tbf,SIGNAL(click(int)),tbf,SLOT(set_green(int))); connect(morphtbf,SIGNAL(click(int)),this,SLOT(towerMorph(int))); connect(graphics,SIGNAL(add_tow(QPoint)),this,SLOT(add_tow(QPoint))); - connect(core.adtowers,SIGNAL(tower_killed(QPoint)),graphics,SLOT(towerKilled(QPoint))); +// connect(core.adtowers,SIGNAL(tower_killed(QPoint)),graphics,SLOT(towerKilled(QPoint))); connect(core.addata->aliens,SIGNAL(alien_killed(int)),graphics,SLOT(alienKilled(int))); connect(graphics,SIGNAL(cancel()),this,SLOT(cancel())); connect(graphics,SIGNAL(selected_tower_changed(QPoint)),this,SLOT(selectedTowerChanged(QPoint))); @@ -55,7 +65,9 @@ void Form::towerBuild(int index) buildTowerId = index-1; if (index == 0) buildTowerId = -9; graphics->setBuilding(true); - setCursor(Qt::CrossCursor); + if (index != 0) + setCursor(QCursor(cursors.at(index-1))); + else setCursor(Qt::ForbiddenCursor); } @@ -64,8 +76,8 @@ void Form::add_tow(QPoint pnt) if (buildTowerId == -1) return; if (buildTowerId == -9) { + graphics->towerKilled(pnt); core.adtowers->delTower(pnt); - emit tower_killed(); return; } core.adtowers->addTower(0,buildTowerId,pnt); @@ -82,6 +94,13 @@ void Form::cancel() void Form::timerEvent(QTimerEvent *) { + for (int i=1; ibuttCount(); ++i) + { + bool b = core.adtowers->canBuild(i-1,0); + tbf->Button(i)->setEnabled(b); + if (b) tbf->set_green(i); + else tbf->set_red(i); + } QString twstr; QString alstr; if (!graphics->selectedTower().isNull()) @@ -93,7 +112,12 @@ void Form::timerEvent(QTimerEvent *) twstr += tr("\n reload %1/%2\n alien %3").arg(tw.reload).arg(tw.src->reload).arg(tw.aim); twstr += tr("\n cost %1\n radius %2").arg(tw.src->cost).arg(tw.src->radius-1); for (int i=0; imorphs.size(); ++i) - morphtbf->Button(i)->setEnabled(core.adtowers->canMorph(tw.pos,i)); + { + bool m = core.adtowers->canMorph(tw.pos,i); + morphtbf->Button(i)->setEnabled(m); + if (m) morphtbf->set_green(i); + else morphtbf->set_red(i); + } } if (graphics->selectedAlien() != -1) { @@ -111,6 +135,7 @@ void Form::timerEvent(QTimerEvent *) + tr("\n towers %1").arg(core.addata->curTowers.size()) + tr("\n splashes %1").arg(core.addata->curSplashes.size()) + twstr + alstr); + } @@ -126,7 +151,7 @@ void Form::selectedTowerChanged(QPoint id) if (id.isNull()) return; srcTowerType * t = core.addata->curTowers[id].src; piForeachCA(i, t->morphs) - morphtbf->addButton(i.morph->name); + morphtbf->addButton(i.morph->name+tr("\n %1 $, %2 exp").arg(i.cost).arg(i.expRequired)); } diff --git a/form.h b/form.h index 1051240..f678ab4 100644 --- a/form.h +++ b/form.h @@ -35,10 +35,11 @@ private: int buildTowerId; AD_Core core; AD_Graphics * graphics; - TouchButtFrame * morphtbf; + TouchButtFrame * morphtbf, * tbf; + QList cursors; -signals: - void tower_killed(); +//signals: +// void tower_killed(); }; #endif // FORM_H diff --git a/form.ui b/form.ui index 669bf46..0ef15a2 100644 --- a/form.ui +++ b/form.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -26,6 +26,21 @@ + + + + Towers + + + + 0 + + + 0 + + + + @@ -41,43 +56,6 @@ - - - - true - - - - - 0 - 0 - 135 - 324 - - - - - 0 - - - - - Towers - - - - 0 - - - 0 - - - - - - - - diff --git a/game_data.h b/game_data.h index 6086c83..e78b897 100644 --- a/game_data.h +++ b/game_data.h @@ -21,6 +21,8 @@ public: QList curAnimations; AnimationType towerSelect; AnimationType alienSelect; + QImage * blood; + QRectF bloodrect; Map * map; Aliens * aliens; int curWave; diff --git a/loader.cpp b/loader.cpp index de02598..6c769a2 100644 --- a/loader.cpp +++ b/loader.cpp @@ -1,7 +1,6 @@ #include "loader.h" -Loader::Loader(QObject *parent) : - QObject(parent) +Loader::Loader() { doc = new QDomDocument("data"); qDebug() << createMapExample(); @@ -351,7 +350,7 @@ Game_Data * Loader::loadlevel(int id) if (wplist.isEmpty()) { qCritical() << tr("Error wave %1 is empty!").arg(tbw.id); - return 0; + //return 0; } for (int j=0; jplayers[i]->srcTowers[j].splashes[k].images = gd->curAnimations.at(gd->players.at(i)->srcTowers.at(j).splashes.at(k).imgType).images; } gd->towerSelect.images = gd->alienSelect.images = 0; + gd->blood = 0; for (QHash::iterator i = animations.begin(); i != animations.end(); ++i) { @@ -509,7 +509,15 @@ Game_Data * Loader::loadlevel(int id) anim.images->append(new QImage(i->pathes.at(k))); gd->alienSelect = anim; } + if (i->name == "blood") + { + gd->blood = new QImage(i->pathes.at(0)); + QSize size = gd->blood->size(); + qDebug() << size; + gd->bloodrect = QRectF(QPointF(-(size.width()/2),-(size.height()/2)),size); + } } + if (gd->blood == 0) gd->blood = new QImage(); if (gd->towerSelect.images == 0) { AnimationType anim; diff --git a/loader.h b/loader.h index 513a01e..1dff8c5 100644 --- a/loader.h +++ b/loader.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "adcore.h" struct tbHeader @@ -142,9 +143,8 @@ struct tbAnimation : tbHeader class Loader : public QObject { - Q_OBJECT public: - explicit Loader(QObject *parent = 0); + Loader(); void save(QString filename); void load(QString filename); Game_Data * loadlevel(int id); @@ -164,10 +164,6 @@ public: QMultiHash levTowers; QMultiHash upgrades; -signals: - -public slots: - private: QDomDocument * doc; QFile * file; diff --git a/main.cpp b/main.cpp index 0597576..34ac2b2 100644 --- a/main.cpp +++ b/main.cpp @@ -8,7 +8,7 @@ int main(int argc, char *argv[]) { - QGL::setPreferredPaintEngine(QPaintEngine::OpenGL); +// QGL::setPreferredPaintEngine(QPaintEngine::OpenGL); QApplication a(argc, argv); a.setStyle("cleanlooks"); Form f; diff --git a/touchbuttframe.h b/touchbuttframe.h index f11f332..9f16763 100644 --- a/touchbuttframe.h +++ b/touchbuttframe.h @@ -19,7 +19,7 @@ class TouchButtFrame : public QFrame Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation) public: TouchButtFrame(QWidget * parent = 0, - QColor red = Qt::red, QColor green = Qt::green, QColor white = Qt::white, QColor push = Qt::yellow, + QColor red = Qt::darkRed, QColor green = Qt::green, QColor white = Qt::white, QColor push = Qt::yellow, Qt::Orientation orientation = Qt::Horizontal); void setButtons(const QStringList &captions); QStringList buttons(); diff --git a/towers.cpp b/towers.cpp index 02bcd81..11da53c 100644 --- a/towers.cpp +++ b/towers.cpp @@ -56,20 +56,24 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos) void Towers::delTower(QPoint pos) { - QPoint p; - if (gameData->curTowers.contains(pos)) p = pos; - if (gameData->curTowers.contains(pos+QPoint(1,0))) p = pos+QPoint(1,0); - if (gameData->curTowers.contains(pos+QPoint(1,1))) p = pos+QPoint(1,1); - if (gameData->curTowers.contains(pos+QPoint(0,1))) p = pos+QPoint(0,1); - if (gameData->curTowers.contains(p)) +// qDebug("del tower start"); +// QPoint p; +// if (gameData->curTowers.contains(pos)) p = pos; +// if (gameData->curTowers.contains(pos+QPoint(1,0))) p = pos+QPoint(1,0); +// if (gameData->curTowers.contains(pos+QPoint(1,1))) p = pos+QPoint(1,1); +// if (gameData->curTowers.contains(pos+QPoint(0,1))) p = pos+QPoint(0,1); + if (gameData->curTowers.contains(pos)) { - tower_killed(pos); - TowerType * t = &(gameData->curTowers[p]); - gameData->map->delTowerOnMap(t->PlayerId,p); +// qDebug()<< "del tower contain" << pos; +// emit tower_killed(pos); + TowerType * t = &(gameData->curTowers[pos]); + gameData->map->delTowerOnMap(t->PlayerId,pos); + gameData->players[t->PlayerId]->money += t->src->cost/2; scene->removeItem(t->item); delete t->item; - gameData->curTowers.remove(p); + gameData->curTowers.remove(pos); } +// qDebug("del tower end"); } @@ -137,8 +141,9 @@ void Towers::update() bool Towers::morphTower(QPoint id, int index) { if (!canMorph(id, index)) return false; - tower_killed(id); +// tower_killed(id); TowerType & t(gameData->curTowers[id]); + gameData->players[t.PlayerId]->money -= t.src->morphs[index].cost; t.src = t.src->morphs[index].morph; t.build = 0; t.reload = 0; diff --git a/towers.h b/towers.h index 77cd242..5d0c027 100644 --- a/towers.h +++ b/towers.h @@ -11,6 +11,7 @@ public: bool addTower(int playerId, int srcId, QPoint pos); void delTower(QPoint pos); bool morphTower(QPoint id, int index); + bool canBuild(int id, int player) {return gameData->players[player]->money >= gameData->players[player]->srcTowers[id].cost;} bool canMorph(QPoint id, int index) {return gameData->players[gameData->curTowers[id].PlayerId]->money >= gameData->curTowers[id].src->morphs[index].cost && gameData->curTowers[id].experience >= gameData->curTowers[id].src->morphs[index].expRequired;} void update(); @@ -18,7 +19,7 @@ public: signals: void shot(const TowerType &tow); - void tower_killed(QPoint id); +// void tower_killed(QPoint id); public slots: