diff --git a/ADeditor/ADeditor.pro.user.1.3 b/ADeditor/ADeditor.pro.user.1.3
index a597870..0464c13 100644
--- a/ADeditor/ADeditor.pro.user.1.3
+++ b/ADeditor/ADeditor.pro.user.1.3
@@ -1,287 +1,184 @@
- RunConfiguration0-BaseEnvironmentBase
- 2
-
-
- RunConfiguration0-CommandLineArguments
-
-
-
- RunConfiguration0-ProFile
- ADeditor.pro
-
-
- RunConfiguration0-RunConfiguration.name
- ADeditor
-
-
- RunConfiguration0-UseDyldImageSuffix
- false
-
-
- RunConfiguration0-UseTerminal
- false
-
-
- RunConfiguration0-UserEnvironmentChanges
-
-
-
- RunConfiguration0-UserSetName
- false
-
-
- RunConfiguration0-UserSetWorkingDirectory
- true
-
-
- RunConfiguration0-UserWorkingDirectory
- /home/andrey/AD/aliendefender
-
-
- RunConfiguration0-type
- Qt4ProjectManager.Qt4RunConfiguration
-
-
- activeRunConfiguration
+ ProjectExplorer.Project.ActiveTarget
0
- activebuildconfiguration
- Debug
-
-
- buildConfiguration-Debug
+ ProjectExplorer.Project.EditorSettings
- Debug
- 0
- 0
-
- 2
+ true
+ false
+ UTF-8
+ false
+ false
+ 4
+ true
+ 1
+ true
+ false
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
- buildConfiguration-Release
+ ProjectExplorer.Project.Target.0
- Release
- 0
-
- 0
+
+
+ Qt4ProjectManager.Target.DesktopTarget
+ 0
+ 0
+ 0
+
+ ProjectExplorer.ToolChain.Mingw:C:/Qt/qtcreator-2.2.0/mingw/bin/gcc.exe.x86-windows-msys-pe-32bit.C:/Qt/qtcreator-2.2.0/pythongdb/gdb-i686-pc-mingw32.exe
+
+
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+
+
+ Сборка
+
+ Qt4ProjectManager.MakeStep
+ false
+ -j2
+
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ Сборка
+
+ Qt4ProjectManager.MakeStep
+ true
+ clean
+
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ C:/Users/Dima/Desktop/aliendefender/ADeditor-build-desktop
+ 5
+ ProjectExplorer.ToolChain.Mingw:C:/Qt/qtcreator-2.2.0/mingw/bin/gcc.exe.x86-windows-msys-pe-32bit.C:/Qt/qtcreator-2.2.0/pythongdb/gdb-i686-pc-mingw32.exe
+ false
+
+
+ ProjectExplorer.ToolChain.Mingw:C:/Qt/qtcreator-2.2.0/mingw/bin/gcc.exe.x86-windows-msys-pe-32bit.C:/Qt/qtcreator-2.2.0/pythongdb/gdb-i686-pc-mingw32.exe
+
+
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+
+
+ Сборка
+
+ Qt4ProjectManager.MakeStep
+ false
+
+
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ Сборка
+
+ Qt4ProjectManager.MakeStep
+ true
+
+
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ C:/Users/Dima/Desktop/aliendefender/ADeditor-build-desktop
+ 5
+ ProjectExplorer.ToolChain.Mingw:C:/Qt/qtcreator-2.2.0/mingw/bin/gcc.exe.x86-windows-msys-pe-32bit.C:/Qt/qtcreator-2.2.0/pythongdb/gdb-i686-pc-mingw32.exe
+ false
+
+ 2
+
+
+ 0
+ Установка
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Без установки
+ Без установки
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ Конфигурация запуска Qt4
+ ADeditor
+ Qt4ProjectManager.Qt4RunConfiguration
+ 2
+
+ ADeditor.pro
+ false
+ false
+
+ C:/Users/Dima/Desktop/aliendefender/
+ 3768
+ true
+ false
+
+ 1
- buildconfiguration-Debug-buildstep0
-
- Debug
-
- DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-2HAd2azpnh,guid=fd81c6d6610b4c57717ec20c4c90d3de
- DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
- DESKTOP_SESSION=gnome
- DISPLAY=:0.0
- GDMSESSION=gnome
- GDM_KEYBOARD_LAYOUT=us
- GDM_LANG=ru_RU.UTF-8
- GNOME_DESKTOP_SESSION_ID=this-is-deprecated
- GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv
- GTK_MODULES=canberra-gtk-module
- HOME=/home/andrey
- LANG=ru_RU.UTF-8
- LD_LIBRARY_PATH=/usr/lib/qtcreator:
- LOGNAME=andrey
- MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
- ORBIT_SOCKETDIR=/tmp/orbit-andrey
- PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- PWD=/home/andrey
- QTDIR=/usr/share/qt4
- SESSION_MANAGER=local/buull-eeePC:@/tmp/.ICE-unix/1158,unix/buull-eeePC:/tmp/.ICE-unix/1158
- SHELL=/bin/bash
- SPEECHD_PORT=6561
- SSH_AGENT_PID=1195
- SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh
- USER=andrey
- USERNAME=andrey
- XAUTHORITY=/var/run/gdm/auth-for-andrey-Len9P0/database
- XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
- XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
- XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931
-
-
- /home/andrey/AD/aliendefender/ADeditor/ADeditor.pro
- -spec
- linux-g++
- -r
- CONFIG+=debug
-
- /usr/bin/qmake-qt4
- false
- /home/andrey/AD/aliendefender/ADeditor
-
+ ProjectExplorer.Project.TargetCount
+ 1
- buildconfiguration-Debug-buildstep1
-
- Debug
-
- DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-2HAd2azpnh,guid=fd81c6d6610b4c57717ec20c4c90d3de
- DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
- DESKTOP_SESSION=gnome
- DISPLAY=:0.0
- GDMSESSION=gnome
- GDM_KEYBOARD_LAYOUT=us
- GDM_LANG=ru_RU.UTF-8
- GNOME_DESKTOP_SESSION_ID=this-is-deprecated
- GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv
- GTK_MODULES=canberra-gtk-module
- HOME=/home/andrey
- LANG=ru_RU.UTF-8
- LD_LIBRARY_PATH=/usr/lib/qtcreator:
- LOGNAME=andrey
- MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
- ORBIT_SOCKETDIR=/tmp/orbit-andrey
- PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- PWD=/home/andrey
- QTDIR=/usr/share/qt4
- SESSION_MANAGER=local/buull-eeePC:@/tmp/.ICE-unix/1158,unix/buull-eeePC:/tmp/.ICE-unix/1158
- SHELL=/bin/bash
- SPEECHD_PORT=6561
- SSH_AGENT_PID=1195
- SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh
- USER=andrey
- USERNAME=andrey
- XAUTHORITY=/var/run/gdm/auth-for-andrey-Len9P0/database
- XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
- XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
- XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931
-
- false
-
- -j2
- -w
-
- /usr/bin/make
- true
- /home/andrey/AD/aliendefender/ADeditor
-
- -j2
-
-
+ ProjectExplorer.Project.Updater.EnvironmentId
+ {0f364aaa-5a2f-49c5-b7a5-6b296e2f6fd0}
- buildconfiguration-Debug-cleanstep0
-
- Debug
-
- DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wExeabp7q4,guid=18815993df3603fdc64a3f6d4c7b5822
- DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
- DESKTOP_SESSION=gnome
- DISPLAY=:0.0
- GDMSESSION=gnome
- GDM_KEYBOARD_LAYOUT=us
- GDM_LANG=ru_RU.UTF-8
- GNOME_DESKTOP_SESSION_ID=this-is-deprecated
- GNOME_KEYRING_CONTROL=/tmp/keyring-4vN5uf
- GTK_MODULES=canberra-gtk-module
- HOME=/home/andrey
- LANG=ru_RU.UTF-8
- LD_LIBRARY_PATH=/usr/lib/qtcreator:
- LOGNAME=andrey
- MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
- ORBIT_SOCKETDIR=/tmp/orbit-andrey
- PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- PWD=/home/andrey
- QTDIR=/usr/share/qt4
- SESSION_MANAGER=local/buull-eeePC:@/tmp/.ICE-unix/1205,unix/buull-eeePC:/tmp/.ICE-unix/1205
- SHELL=/bin/bash
- SPEECHD_PORT=6561
- SSH_AGENT_PID=1239
- SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh
- USER=andrey
- USERNAME=andrey
- XAUTHORITY=/var/run/gdm/auth-for-andrey-x9URui/database
- XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
- XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
- XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1283151906.338331-318132279
-
- true
-
- clean
- -w
-
- /usr/bin/make
- true
- /home/andrey/AD/aliendefender/ADeditor
- true
-
- clean
-
-
-
-
- buildconfiguration-Release-buildstep0
-
- Release
-
-
-
- buildconfiguration-Release-buildstep1
-
- Release
-
-
-
- buildconfiguration-Release-cleanstep0
-
- Release
-
-
-
- buildconfigurations
-
- Debug
- Release
-
-
-
- buildstep0
-
-
-
-
-
-
- buildstep1
-
-
-
-
-
- buildsteps
-
- trolltech.qt4projectmanager.qmake
- trolltech.qt4projectmanager.make
-
-
-
- cleanstep0
-
-
- true
-
-
-
- cleansteps
-
- trolltech.qt4projectmanager.make
-
-
-
- defaultFileEncoding
- UTF-8
-
-
- project
-
+ ProjectExplorer.Project.Updater.FileVersion
+ 9
diff --git a/ADeditor/mainwindow.cpp b/ADeditor/mainwindow.cpp
index 31616f2..696e6a5 100644
--- a/ADeditor/mainwindow.cpp
+++ b/ADeditor/mainwindow.cpp
@@ -28,7 +28,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->pbImgDel->setIcon(QIcon::fromTheme("list-remove", QIcon(":/icons/icons/list-remove.png")));
ui->pbTwSplashEdit->setIcon(QIcon::fromTheme("edit", QIcon(":/icons/icons/edit.png")));
ui->pbMapEdit->setIcon(QIcon::fromTheme("edit", QIcon(":/icons/icons/edit.png")));
- adloader = new Loader(this);
+ adloader = new Loader();
adloader->load("data2.xml");
animModel = new AnimationModel(adloader->animations);
diff --git a/ad_graphics.cpp b/ad_graphics.cpp
index 0d1f631..67f08e5 100644
--- a/ad_graphics.cpp
+++ b/ad_graphics.cpp
@@ -73,7 +73,9 @@ void AD_Graphics::mousePressEvent(QMouseEvent *event)
// scene->clearSelection();
if (event->button() == Qt::LeftButton)
{
- if (m_building) emit add_tow((QPointF(event->pos())/cellSize).toPoint());
+ if (m_building)
+ emit add_tow((QPointF(event->pos())/cellSize).toPoint(),
+ event->modifiers().testFlag(Qt::ShiftModifier));
else
{
QList list = scene->items(event->pos(), Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
@@ -126,7 +128,7 @@ void AD_Graphics::timerEvent(QTimerEvent * )
} else selection_tow->hide();
selection_tow->next();
selection_al->next();
- if (!core->isWaveEnd())
+ if (core->isWaveEnd())
scene->update();
}
@@ -185,6 +187,7 @@ void AD_Graphics::alienKilled(int id)
{
if (select_al != 0) if (select_al->id() == id) select_al = 0;
QPainter p(mapimg);
+ p.setCompositionMode(QPainter::CompositionMode_Plus);
p.translate((core->addata->aliens->curAliens[id].pos+QPointF(0.5,0.5))*cellSize);
p.drawImage(core->addata->bloodrect, *(core->addata->blood));
p.end();
diff --git a/ad_graphics.h b/ad_graphics.h
index 3a491f1..1644688 100644
--- a/ad_graphics.h
+++ b/ad_graphics.h
@@ -50,7 +50,7 @@ protected:
signals:
void cancel();
- void add_tow(QPoint pnt);
+ void add_tow(QPoint pnt, bool shift);
void selected_tower_changed(QPoint id);
};
diff --git a/adcore.cpp b/adcore.cpp
index f346428..f196b3a 100644
--- a/adcore.cpp
+++ b/adcore.cpp
@@ -16,7 +16,7 @@ AD_Core::AD_Core(QObject *parent) :
connect(adtowers,SIGNAL(shot(TowerType)),adsplashes,SLOT(addSplash(TowerType)));
connect(adsplashes,SIGNAL(killAlien(int,int)),this,SLOT(killAlien(int,int)));
waveInProgress = false;
- waveEnd = false;
+ waveEnd = true;
timer = startTimer(40);
}
@@ -26,10 +26,10 @@ void AD_Core::next()
adtowers->update();
adsplashes->update();
addata->aliens->update();
- foreach(Player * p, addata->players)
- {
- if (!addata->aliens->curAliens.contains(p->selectAlienId)) p->selectAlienId = -1;
- }
+// foreach(Player * p, addata->players)
+// {
+// if (!addata->aliens->curAliens.contains(p->selectAlienId)) p->selectAlienId = -1;
+// }
waveProcessing();
step++;
}
@@ -43,26 +43,31 @@ void AD_Core::timerEvent(QTimerEvent * )
void AD_Core::nextWave()
{
- if (waveInProgress) return;
+ if (!waveEnd && waveInProgress)
+ {
+ qDebug("wave in progress");
+ 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;
+ addata->curWave++;
waveInProgress = true;
+ waveEnd = false;
+ qDebug() << tr("Next wave %1").arg(addata->curWave+1);
}
void AD_Core::waveProcessing()
{
/// FIXME : resolve problem with prise for finish wave, it is calculated wrong!
- if (addata->aliens->curAliens.isEmpty() && waveEnd)
+ if (addata->aliens->curAliens.isEmpty() && !waveInProgress && !waveEnd)
{
if(addata->curWave > 0) addata->players.at(0)->money += addata->waves.at(addata->curWave-1).prise;
- waveEnd = false;
+ waveEnd = true;
}
if (!waveInProgress) return;
if (wavetime <= 0) {
@@ -71,11 +76,9 @@ void AD_Core::waveProcessing()
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--;
diff --git a/aliendefender.pro.user b/aliendefender.pro.user
index 5b632d5..0437ec9 100644
--- a/aliendefender.pro.user
+++ b/aliendefender.pro.user
@@ -1,6 +1,6 @@
-
+
ProjectExplorer.Project.ActiveTarget
@@ -87,7 +87,7 @@
Qt4ProjectManager.Target.DesktopTarget
- 1
+ 0
0
0
diff --git a/aliendefender.pro.user.2.3pre1 b/aliendefender.pro.user.2.3pre1
index de64635..277afe4 100644
--- a/aliendefender.pro.user.2.3pre1
+++ b/aliendefender.pro.user.2.3pre1
@@ -83,7 +83,7 @@
Qt4ProjectManager.Qt4BuildConfiguration
2
D:/Dropbox/My Dropbox/projects/aliendefender-build-desktop
- 7
+ 5
ProjectExplorer.ToolChain.Mingw:D:/Qt/2010.04/mingw/bin/g++.exe.x86-windows-msys-pe-32bit.C:/Qt/qtcreator-2.2.0/pythongdb/gdb-i686-pc-mingw32.exe
false
@@ -175,7 +175,7 @@
ProjectExplorer.Project.Updater.EnvironmentId
- {00000000-0000-0000-0000-000000000000}
+ {0f364aaa-5a2f-49c5-b7a5-6b296e2f6fd0}
ProjectExplorer.Project.Updater.FileVersion
diff --git a/base_types.h b/base_types.h
index c0fe569..aa2ad38 100644
--- a/base_types.h
+++ b/base_types.h
@@ -43,6 +43,7 @@ struct srcAlienType
struct AlienType
{
int id; // uses for QHash
+ int wave;
srcAlienType * src;
QPointF pos;
float angle; // -180 .. 180
diff --git a/data2.xml b/data2.xml
index df9f4e9..30917ad 100644
--- a/data2.xml
+++ b/data2.xml
@@ -1,12 +1,12 @@
-
+
+
+
-
-
-
-
+
+
@@ -14,47 +14,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
@@ -63,7 +63,6 @@
-
@@ -99,7 +98,6 @@
-
@@ -163,9 +161,9 @@
-
-
-
+
+
+
diff --git a/form.cpp b/form.cpp
index e8cced3..d17dc67 100644
--- a/form.cpp
+++ b/form.cpp
@@ -8,39 +8,40 @@ Form::Form(QWidget *parent) :
{
buildTowerId = -1;
ui->setupUi(this);
+ ui->pbSell->hide();
graphics = new AD_Graphics(&core);
ui->widget->layout()->addWidget(graphics);
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(tr("delete"));
+ for(int j=0; jplayers.at(0)->srcTowers.size(); ++j)
{
- 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);
- //butt->setAutoExclusive(true);
- //butt->setCheckable(true);
+ srcTowerType i = core.addata->players.at(0)->srcTowers.at(j);
+ if (i.isRoot)
+ {
+ 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()-1)->setIcon(QIcon(pix));
+ buildTowers.append(j);
+ }
}
ui->gbTowers->layout()->addWidget(tbf);
ui->verticalLayout_2->addWidget(morphtbf);
connect(tbf,SIGNAL(click(int)),this,SLOT(towerBuild(int)));
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(graphics,SIGNAL(add_tow(QPoint,bool)),this,SLOT(add_tow(QPoint,bool)));
+ // 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)));
@@ -62,25 +63,23 @@ void Form::on_pbNextWave_clicked()
void Form::towerBuild(int index)
{
- buildTowerId = index-1;
- if (index == 0) buildTowerId = -9;
+ buildTowerId = buildTowers.at(index);
graphics->setBuilding(true);
- if (index != 0)
- setCursor(QCursor(cursors.at(index-1)));
- else setCursor(Qt::ForbiddenCursor);
+ setCursor(QCursor(cursors.at(index)));
}
-void Form::add_tow(QPoint pnt)
+void Form::add_tow(QPoint pnt, bool shift)
{
if (buildTowerId == -1) return;
- if (buildTowerId == -9)
- {
- graphics->towerKilled(pnt);
- core.adtowers->delTower(pnt);
- return;
- }
+ // if (buildTowerId == -9)
+ // {
+ // graphics->towerKilled(pnt);
+ // core.adtowers->delTower(pnt);
+ // return;
+ // }
core.adtowers->addTower(0,buildTowerId,pnt);
+ if (!shift) cancel();
}
@@ -94,9 +93,9 @@ void Form::cancel()
void Form::timerEvent(QTimerEvent *)
{
- for (int i=1; ibuttCount(); ++i)
+ for (int i=0; ibuttCount(); ++i)
{
- bool b = core.adtowers->canBuild(i-1,0);
+ bool b = core.adtowers->canBuild(buildTowers.at(i),0);
tbf->Button(i)->setEnabled(b);
if (b) tbf->set_green(i);
else tbf->set_red(i);
@@ -111,6 +110,8 @@ void Form::timerEvent(QTimerEvent *)
twstr += tr("\n player %1\n exp %2").arg(tw.PlayerId).arg(tw.experience);
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);
+ if (!tw.src->triggers.isEmpty())
+ twstr += tr("\n damage %1").arg(tw.src->triggers.at(0).damage);
for (int i=0; imorphs.size(); ++i)
{
bool m = core.adtowers->canMorph(tw.pos,i);
@@ -131,6 +132,7 @@ void Form::timerEvent(QTimerEvent *)
alstr += tr("\n prise %1").arg(al.src->prise);
}
ui->lbInfo->setText(tr(" money %1 \n missing %2").arg(core.addata->players.at(0)->money).arg(core.addata->aliens->missingAliens())
+ + tr("\n wave %1").arg(core.addata->curWave+1)
+ tr("\n aliens %1").arg(core.addata->aliens->curAliens.size())
+ tr("\n towers %1").arg(core.addata->curTowers.size())
+ tr("\n splashes %1").arg(core.addata->curSplashes.size())
@@ -148,7 +150,12 @@ void Form::on_sbSpeed_valueChanged(double val)
void Form::selectedTowerChanged(QPoint id)
{
morphtbf->deleteButtons();
- if (id.isNull()) return;
+ if (id.isNull())
+ {
+ ui->pbSell->hide();
+ return;
+ }
+ ui->pbSell->show();
srcTowerType * t = core.addata->curTowers[id].src;
piForeachCA(i, t->morphs)
morphtbf->addButton(i.morph->name+tr("\n %1 $, %2 exp").arg(i.cost).arg(i.expRequired));
@@ -163,3 +170,15 @@ void Form::towerMorph(int index)
graphics->selectTower(core.addata->curTowers[id].item);
selectedTowerChanged(graphics->selectedTower());
}
+
+
+void Form::on_pbSell_clicked()
+{
+ QPoint pnt = graphics->selectedTower();
+ if (!pnt.isNull())
+ {
+ graphics->towerKilled(pnt);
+ core.adtowers->delTower(pnt);
+ return;
+ }
+}
diff --git a/form.h b/form.h
index f678ab4..ec391f4 100644
--- a/form.h
+++ b/form.h
@@ -23,12 +23,14 @@ private slots:
void on_pbNextWave_clicked();
void towerBuild(int index);
void towerMorph(int index);
- void add_tow(QPoint pnt);
+ void add_tow(QPoint pnt, bool shift);
void selectedTowerChanged(QPoint id);
void cancel();
void on_sbSpeed_valueChanged(double arg1);
+ void on_pbSell_clicked();
+
private:
void timerEvent(QTimerEvent *);
Ui::Form *ui;
@@ -37,6 +39,7 @@ private:
AD_Graphics * graphics;
TouchButtFrame * morphtbf, * tbf;
QList cursors;
+ QList buildTowers;
//signals:
// void tower_killed();
diff --git a/form.ui b/form.ui
index 0ef15a2..f750905 100644
--- a/form.ui
+++ b/form.ui
@@ -6,7 +6,7 @@
0
0
- 700
+ 796
448
@@ -85,6 +85,29 @@
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Preferred
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Sell
+
+
+
-
diff --git a/game_data.cpp b/game_data.cpp
index 25f83f1..55593b5 100644
--- a/game_data.cpp
+++ b/game_data.cpp
@@ -4,7 +4,7 @@ Game_Data::Game_Data(Map *mapp, QObject *parent) :
QObject(parent)
{
map = mapp;
- curWave = 0;
+ curWave = -1;
// alienSelect.images = towerSelect.images = 0;
aliens = new Aliens(map);
}
diff --git a/loader.cpp b/loader.cpp
index 6c769a2..6d1b95c 100644
--- a/loader.cpp
+++ b/loader.cpp
@@ -421,6 +421,12 @@ Game_Data * Loader::loadlevel(int id)
sst.compositionMode = tbs.compositionMode;
sst.keepOnAlien = tbs.keepOnAlien;
stt.splashes.append(sst);
+ stt.isRoot=true;
+ for (QMultiHash::iterator m = morphs.begin();
+ m != morphs.end(); ++m)
+ {
+ if (tbt.id == (*m).toId) stt.isRoot=false;
+ }
int recursiveCheck = 1;
fillTowerChains(&animIds,&chlist,&trigIds,&stt,
tbt.splashId,0,&recursiveCheck);
@@ -440,10 +446,13 @@ Game_Data * Loader::loadlevel(int id)
break;
}
}
- m.cost = tmh.cost;
- m.expRequired = tmh.expRequired;
- m.morph = (srcTowerType*)tollist.indexOf(j);
- if (contain) morph_indexes[i].append(m);
+ if (contain)
+ {
+ m.cost = tmh.cost;
+ m.expRequired = tmh.expRequired;
+ m.morph = (srcTowerType*)tollist.indexOf(j);
+ morph_indexes[i].append(m);
+ }
}
for (int k=0; kmaxPlayers(); ++k)
gd->players[k]->srcTowers.append(stt);
@@ -464,7 +473,8 @@ Game_Data * Loader::loadlevel(int id)
QString morphtree;
foreach (srcTowerType i, gd->players[0]->srcTowers)
{
- printMorphs(&i,morphtree,"");
+ if (i.isRoot)
+ printMorphs(&i,morphtree,"");
}
qDebug() << morphtree + "\n";
diff --git a/player.cpp b/player.cpp
index 4ae812f..1a012d0 100644
--- a/player.cpp
+++ b/player.cpp
@@ -1,9 +1,9 @@
#include "player.h"
Player::Player(int Id, QObject *parent) :
- QObject(parent)
+ QObject(parent)
{
- playerId = Id;
- money = 50;
- selectAlienId = -1;
+ playerId = Id;
+ money = 100;
+ selectAlienId = -1;
}
diff --git a/splashes.cpp b/splashes.cpp
index 6088bd6..a5edd7a 100644
--- a/splashes.cpp
+++ b/splashes.cpp
@@ -81,16 +81,16 @@ void Splashes::addSplash(SplashType * spl)
case srcTriggerType::onDestination :
tod.src = trig;
spl->trigsOnDest.append(tod);
- break;
+ break;
case srcTriggerType::onAlienInRadius :
toa.src = trig;
spl->trigsOnAlien.append(toa);
- break;
+ break;
case srcTriggerType::onTimer :
tot.src = trig;
tot.timer = 0;
spl->trigsOnTimer.append(tot);
- break;
+ break;
}
}
@@ -177,7 +177,10 @@ void Splashes::update()
delSplash(*j);
for (QHash::iterator j = dead.begin();
j != dead.end(); ++j)
+ {
+ gameData->curTowers[j->tower].experience += gameData->curTowers[j->tower].src->expByKill;
emit killAlien(j->player,j->id);
+ }
dead.clear();
}
@@ -212,7 +215,8 @@ void Splashes::doTriggerOnTimer(QHash::iterator
if (gameData->aliens->curAliens.contains(spl->AlienId))
{
hh = gameData->aliens->curAliens[spl->AlienId].health -= dmg;
- if (hh <= 0) dead.insert(spl->AlienId, DeadAlienIndex(spl->AlienId, spl->PlayerId));
+ if (hh <= 0) dead.insert(spl->AlienId, DeadAlienIndex(spl->AlienId, spl->PlayerId, spl->towerId));
+ else gameData->curTowers[spl->towerId].experience += hh * gameData->curTowers[spl->towerId].src->expByDamage;
}
} else {
for (QHash::iterator
@@ -222,7 +226,8 @@ void Splashes::doTriggerOnTimer(QHash::iterator
if (distance2(spl->pos, a->pos) < rad*rad)
{
hh = a->health -= dmg;
- if (hh <= 0) dead.insert(a->id, DeadAlienIndex(a->id, spl->PlayerId));
+ if (hh <= 0) dead.insert(a->id, DeadAlienIndex(a->id, spl->PlayerId, spl->towerId));
+ else gameData->curTowers[spl->towerId].experience += hh * gameData->curTowers[spl->towerId].src->expByDamage;
}
}
}
@@ -263,7 +268,7 @@ void Splashes::doTriggerOnDest(QHash::iterator
{
case srcTriggerType::parentAim :
aim = spl->AlienId;
- break;
+ break;
/// TODO : other aim types
case srcTriggerType::nearestAlien :
@@ -289,7 +294,8 @@ void Splashes::doTriggerOnDest(QHash::iterator
if (!badAl)
{
hh = gameData->aliens->curAliens[spl->AlienId].health -= dmg;
- if (hh <= 0) dead.insert(spl->AlienId, DeadAlienIndex(spl->AlienId, spl->PlayerId));
+ if (hh <= 0) dead.insert(spl->AlienId, DeadAlienIndex(spl->AlienId, spl->PlayerId, spl->towerId));
+ else gameData->curTowers[spl->towerId].experience += hh * gameData->curTowers[spl->towerId].src->expByDamage;
}
} else {
for (QHash::iterator
@@ -299,7 +305,8 @@ void Splashes::doTriggerOnDest(QHash::iterator
if (distance2(spl->pos, i->pos) < rad*rad)
{
hh = i->health -= dmg;
- if (hh <= 0) dead.insert(i->id, DeadAlienIndex(i->id, spl->PlayerId));
+ if (hh <= 0) dead.insert(i->id, DeadAlienIndex(i->id, spl->PlayerId, spl->towerId));
+ else gameData->curTowers[spl->towerId].experience += hh * gameData->curTowers[spl->towerId].src->expByDamage;
}
}
}
@@ -326,7 +333,8 @@ void Splashes::doTriggerOnAlien(QHash::iterator spl, QHashpos, i->pos) < rad*rad)
{
hh = i->health -= dmg;
- if (hh <= 0) dead.insert(i->id, DeadAlienIndex(i->id, spl->PlayerId));
+ if (hh <= 0) dead.insert(i->id, DeadAlienIndex(i->id, spl->PlayerId, spl->towerId));
+ else gameData->curTowers[spl->towerId].experience += hh * gameData->curTowers[spl->towerId].src->expByDamage;
if (t.src->count > 0 && t.src->childId > 0)
{
if (!t.triggerAliens.contains(i->id))
diff --git a/splashes.h b/splashes.h
index 331d74c..122094f 100644
--- a/splashes.h
+++ b/splashes.h
@@ -28,9 +28,10 @@ private:
int nextId;
struct DeadAlienIndex
{
- DeadAlienIndex(int i, int p) {id = i; player = p;}
+ DeadAlienIndex(int i, int p, QPoint t) {id = i; player = p; tower = t;}
int player;
int id;
+ QPoint tower;
};
QHash dead;
diff --git a/touchbuttframe.h b/touchbuttframe.h
index 9f16763..8c743f0 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::darkRed, QColor green = Qt::green, QColor white = Qt::white, QColor push = Qt::yellow,
+ QColor red = Qt::gray, 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.h b/towers.h
index 5d0c027..3eb0a42 100644
--- a/towers.h
+++ b/towers.h
@@ -5,21 +5,26 @@
class Towers : public QObject
{
-Q_OBJECT
+ Q_OBJECT
public:
explicit Towers(Game_Data * gd, QObject *parent = 0);
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;}
+ bool canMorph(QPoint id, int index)
+ {
+ TowerType * t = &(gameData->curTowers[id]);
+ return gameData->players[t->PlayerId]->money >= t->src->morphs[index].cost &&
+ t->experience >= t->src->morphs[index].expRequired &&
+ !t->isBilding;
+ }
void update();
void setScene(QGraphicsScene * scene_) {scene = scene_;}
signals:
void shot(const TowerType &tow);
-// void tower_killed(QPoint id);
+ // void tower_killed(QPoint id);
public slots: