diff --git a/ad_graphics.cpp b/ad_graphics.cpp index e5633d1..a3f91f0 100644 --- a/ad_graphics.cpp +++ b/ad_graphics.cpp @@ -11,7 +11,7 @@ AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(paren setAlignment(Qt::AlignLeft | Qt::AlignTop); scene = new QGraphicsScene(); setScene(scene); - //setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); //setDragMode(RubberBandDrag); //gsw = new QGraphicsWidget(); @@ -56,14 +56,14 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & ) pen.setColor(Qt::black); brush.setColor(Qt::black); } -// if (cel <= Map::PlayerTower && cel !=Map::Wall) { -// pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); -// brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); -// } -// if (cel >= Map::PlayerAlien) { -// pen.setColor(Qt::yellow); -// brush.setColor(Qt::yellow); -// } + // if (cel <= Map::PlayerTower && cel !=Map::Wall) { + // pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); + // brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); + // } + // if (cel >= Map::PlayerAlien) { + // pen.setColor(Qt::yellow); + // brush.setColor(Qt::yellow); + // } 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)); @@ -83,15 +83,21 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & ) //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(20,20)); p->rotate((*i).angle); //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)); + if ((*i).build < data->players.at((*i).PlayerId)->srcTowers.at((*i).src).buildTime) + { + QBrush brush; + brush.setColor(Qt::darkRed); + brush.setStyle(Qt::DiagCrossPattern); + p->setBrush(brush); + p->drawRect(-20,-20,40,40); + } else { + p->drawImage(QRect(-20,-20,40,40), images[itTowers][(*i).imgType]->at(0)); + } p->resetTransform(); } //qDebug() << "a:" << data->curAliens.size(); @@ -120,12 +126,12 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & ) //QBrush brush; //brush.setColor(Qt::red); //brush.setStyle(Qt::SolidPattern); - p->translate((*i).pos * cellSize+QPointF(10,10)); + p->translate((*i).pos * cellSize); p->rotate((*i).angle); //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->drawImage(QPoint(-(images[itSplashes][(*i).imgType]->at(0).size().width()/2),-(images[itSplashes][(*i).imgType]->at(0).size().height()/2)), images[itSplashes][(*i).imgType]->at(0)); p->resetTransform(); } } @@ -149,8 +155,12 @@ void AD_Graphics::loadImages() break; case itTowers: images[i].push_back(new Animation(":/images/images/Towers/01_6.png")); + images[i].push_back(new Animation(":/images/images/Towers/00_0.png")); case itSplashes: images[i].push_back(new Animation(":/images/images/Splashes/Rocket.png")); + images[i].push_back(new Animation(":/images/images/Splashes/Shot_0.png")); + images[i].push_back(new Animation(":/images/images/Splashes/Smoke_01.png")); + images[i].push_back(new Animation(":/images/images/Splashes/expl.png")); default: break; } } diff --git a/adcore.cpp b/adcore.cpp index e70e382..554ccf7 100644 --- a/adcore.cpp +++ b/adcore.cpp @@ -24,15 +24,15 @@ AD_Core::AD_Core(QObject *parent) : // adaliens->addAlien(0); // adaliens->AddAlien(0); // adaliens->AddAlien(0); - adtowers->addTower(0,0,QPoint(19,7)); + adtowers->addTower(0,2,QPoint(22,7)); for (int i=0; i<20;i++) - adtowers->addTower(0,0,QPoint(8,20-i)); + adtowers->addTower(0,1,QPoint(8,20-i)); for (int i=0; i<20; i++) - adtowers->addTower(0,1,QPoint(12,i)); + adtowers->addTower(0,0,QPoint(12,i)); for (int i=0; i<20;i++) - adtowers->addTower(0,0,QPoint(16,20-i)); + adtowers->addTower(0,1,QPoint(16,20-i)); waveInProgress = false; - startTimer(50); + startTimer(20); } diff --git a/aliendefender.pro.user b/aliendefender.pro.user index 31ed8bf..4fd4af5 100644 --- a/aliendefender.pro.user +++ b/aliendefender.pro.user @@ -1,283 +1,111 @@ - RunConfiguration0-BaseEnvironmentBase - 2 - - - RunConfiguration0-CommandLineArguments - - - - RunConfiguration0-ProFile - aliendefender.pro - - - RunConfiguration0-RunConfiguration.name - aliendefender - - - RunConfiguration0-UseDyldImageSuffix - false - - - RunConfiguration0-UseTerminal - false - - - RunConfiguration0-UserEnvironmentChanges - - - - RunConfiguration0-UserSetName - false - - - RunConfiguration0-UserSetWorkingDirectory - false - - - RunConfiguration0-UserWorkingDirectory - - - - RunConfiguration0-type - Qt4ProjectManager.Qt4RunConfiguration - - - activeRunConfiguration + ProjectExplorer.Project.ActiveTarget 0 - activebuildconfiguration - Debug - - - buildConfiguration-Debug + ProjectExplorer.Project.EditorSettings - Debug - 0 - 0 - - 2 + System - buildConfiguration-Release + ProjectExplorer.Project.Target.0 - Release - 0 - - 0 + Настольный компьютер + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + + + + QtProjectManager.QMakeBuildStep + + + + + Qt4ProjectManager.MakeStep + false + + + + 2 + + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + C:/Users/Andrey/Desktop/build-AD + 9 + 2 + true + + + + + QtProjectManager.QMakeBuildStep + + + + + Qt4ProjectManager.MakeStep + false + + + + 2 + + + Qt4ProjectManager.MakeStep + true + + + + 1 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + C:/Users/Andrey/Desktop/aliendefender-build-desktop + 9 + 2 + true + + 2 + + aliendefender + Qt4ProjectManager.Qt4RunConfiguration + 2 + + aliendefender.pro + false + false + + false + true + C:\Users\Andrey\Desktop\aliendefender + + 1 - buildconfiguration-Debug-buildstep0 - - 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 - - - /home/andrey/AD/aliendefender/aliendefender.pro - -spec - linux-g++ - -r - CONFIG+=debug - - /usr/bin/qmake-qt4 - false - /home/andrey/AD/aliendefender - + ProjectExplorer.Project.TargetCount + 1 - buildconfiguration-Debug-buildstep1 - - 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 - - false - - -w - - /usr/bin/make - true - /home/andrey/AD/aliendefender - - - - 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 - 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 - System - - - project - + ProjectExplorer.Project.Updater.FileVersion + 4 diff --git a/aliendefender.pro.user.1.3 b/aliendefender.pro.user.1.3 index 71a2fb1..31ed8bf 100644 --- a/aliendefender.pro.user.1.3 +++ b/aliendefender.pro.user.1.3 @@ -56,17 +56,27 @@ buildConfiguration-Debug Debug - 2 + 0 0 + 2 + + buildConfiguration-Release + + Release + 0 + + 0 + + buildconfiguration-Debug-buildstep0 Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-7vJZaf9AwI,guid=f26a2301f932cefdec6dd3bc4c79669f + 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 @@ -74,7 +84,7 @@ GDM_KEYBOARD_LAYOUT=us GDM_LANG=ru_RU.UTF-8 GNOME_DESKTOP_SESSION_ID=this-is-deprecated - GNOME_KEYRING_CONTROL=/tmp/keyring-U899U4 + GNOME_KEYRING_CONTROL=/tmp/keyring-4vN5uf GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -85,17 +95,17 @@ 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/1236,unix/buull-eeePC:/tmp/.ICE-unix/1236 + 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=1270 - SSH_AUTH_SOCK=/tmp/keyring-U899U4/ssh + SSH_AGENT_PID=1239 + SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-6T6AjI/database + 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-1283024543.354844-1194058895 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1283151906.338331-318132279 /home/andrey/AD/aliendefender/aliendefender.pro @@ -114,7 +124,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-7vJZaf9AwI,guid=f26a2301f932cefdec6dd3bc4c79669f + 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 @@ -122,7 +132,7 @@ GDM_KEYBOARD_LAYOUT=us GDM_LANG=ru_RU.UTF-8 GNOME_DESKTOP_SESSION_ID=this-is-deprecated - GNOME_KEYRING_CONTROL=/tmp/keyring-U899U4 + GNOME_KEYRING_CONTROL=/tmp/keyring-4vN5uf GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -133,17 +143,17 @@ 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/1236,unix/buull-eeePC:/tmp/.ICE-unix/1236 + 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=1270 - SSH_AUTH_SOCK=/tmp/keyring-U899U4/ssh + SSH_AGENT_PID=1239 + SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-6T6AjI/database + 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-1283024543.354844-1194058895 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1283151906.338331-318132279 false @@ -158,16 +168,75 @@ 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 true clean + + buildconfiguration-Release-buildstep0 + + Release + + + + buildconfiguration-Release-buildstep1 + + Release + + + + buildconfiguration-Release-cleanstep0 + + Release + + buildconfigurations Debug + Release diff --git a/aliens.cpp b/aliens.cpp index 4ac9b8e..f5e4e7c 100644 --- a/aliens.cpp +++ b/aliens.cpp @@ -70,7 +70,6 @@ void Aliens::update() (*i).pathIndex++; if ((*i).pathIndex >= (*i).path.size()) { - qDebug() << tr("Missing aliens = %1!").arg(gameData->missingAliens); missIndex.push_back((*i).id); curMiss = (*i).id; break; @@ -113,6 +112,7 @@ void Aliens::update() for (int j=0; jmissingAliens++; + qDebug() << tr("Missing aliens = %1!").arg(gameData->missingAliens); delAlien(missIndex.at(j)); } } diff --git a/base_types.h b/base_types.h index 975c9f2..8fcc000 100644 --- a/base_types.h +++ b/base_types.h @@ -151,6 +151,7 @@ struct TowerType float angle; // -180 .. 180 unsigned int reload; // time for reload in ticks unsigned int build; + float experience; }; diff --git a/data2.xml b/data2.xml index 2dc905d..67a2b88 100644 --- a/data2.xml +++ b/data2.xml @@ -1,11 +1,11 @@ - - - - - + + + + + @@ -17,8 +17,8 @@ - - + + @@ -50,6 +50,8 @@ + + @@ -58,18 +60,20 @@ + + - - - - - + + + + + - - - + + + @@ -77,11 +81,11 @@ - - + + - - + + diff --git a/images.qrc b/images.qrc index cf225a4..9e5f8d3 100644 --- a/images.qrc +++ b/images.qrc @@ -23,5 +23,8 @@ images/Towers/00_0.png images/Splashes/Rocket.png images/Towers/01_6.png + images/Splashes/Shot_0.png + images/Splashes/Smoke_01.png + images/Splashes/expl.png diff --git a/images/Splashes/expl.png b/images/Splashes/expl.png new file mode 100644 index 0000000..e67b657 Binary files /dev/null and b/images/Splashes/expl.png differ diff --git a/loader.cpp b/loader.cpp index 652f8ee..01297d5 100644 --- a/loader.cpp +++ b/loader.cpp @@ -369,6 +369,8 @@ void Loader::fillTowerChains(QList * chlist, QList * trigIds, sr strigt.damage = tbtrig.damage; strigt.delParent = tbtrig.delParent; strigt.radius = tbtrig.radius; + if (strigt.radius <= 0 && strigt.damage>0 && !splashes.value(parId).autoControl) + qCritical("Wrong trigger or chain, because damage >0 radius=0 and not autocontrol.\nThis damage will be ignored!"); strigt.randomPosRadius = tbtrig.randomPosRadius; strigt.timer = tbtrig.timer; strigt.type = tbtrig.type; diff --git a/map.cpp b/map.cpp index 1062ee8..d3b354a 100644 --- a/map.cpp +++ b/map.cpp @@ -132,7 +132,7 @@ bool Map::addTowerOnMap(int playerId, QPoint pos) bool * pathOK; pathOK = new bool(); *pathOK = true; - qDebug("emit"); + //qDebug("emit"); emit recreateAlienPath(pathOK); qDebug() << *pathOK; if (!pathOK) @@ -146,7 +146,7 @@ bool Map::addTowerOnMap(int playerId, QPoint pos) } return true; } - qDebug()<<"Dont buid here" << Cells[pos.x()][pos.y()]; + qDebug()<<"Dont buid here" << pos; return false; } diff --git a/splashes.cpp b/splashes.cpp index e3d86cb..523017b 100644 --- a/splashes.cpp +++ b/splashes.cpp @@ -9,43 +9,59 @@ Splashes::Splashes(Game_Data *gd, QObject *parent) : } -bool Splashes::addSplash(int srcId, QPointF pos) +void Splashes::addSplash(int player, int srcTower, int srcId, QPointF pos, QPointF dest, int aim, QPoint curTower) { - qDebug("don't use this function addSplash(int srcId, QPointF pos)"); - return false; - // FIXME: говнокод - // TODO: find and correct errors here - /* if (srcId < 0 || srcId >= gameData->srcSplashes.size()) - { - qCritical("ERROR out of splashes range"); - return false; - } - srcSplashType src = gameData->srcSplashes.at(srcId); - SplashType spl;// = gameData->srcAliens.at(srcId); + srcSplashType src = gameData->players.at(player)->srcTowers.at(srcTower).splashes.at(srcId); + SplashType spl; spl.id = nextId; - spl.src = srcId; - spl.TowerId = QPoint(-1,-1); - spl.life = 0; - spl.imgType = src.imgType; - if (!gameData->map->rect().contains(pos.toPoint())) + spl.TowerId = curTower; + spl.srcTower = srcTower; + spl.PlayerId = player; + if (src.autoControl) { - qCritical("ERROR splash out of map size"); - return false; + spl.AlienId = aim; + if (gameData->curAliens.contains(aim)) + spl.destination = gameData->curAliens.value(aim).pos+QPointF(0.5,0.5); + else + spl.destination = dest; + } else { + spl.AlienId = -1; + spl.destination = dest; } spl.pos = pos; - spl.AlienId = -1; - spl.angle = 0; - spl.destination = pos; - TriggerType trig; + spl.angle = 180.0f*(- std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y()))/M_PI; + spl.imgType = src.imgType; + spl.life = 0; + spl.src = srcId; + //TriggerType trig; + srcTriggerType trig; for(int i=0; isrTriggers.at(src.triggerIndexes.at(i)).timer; - trig.src = src.triggerIndexes.at(i); - spl.triggers.push_back(trig); + TriggerOnDest tod; + TriggerOnAlien toa; + TriggerOnTimer tot; + trig = gameData->players.at(player)->srcTowers.at(srcTower).triggers.at(src.triggerIndexes.at(i)); + switch (trig.type) + { + case srcTriggerType::onDestination : + tod.src = src.triggerIndexes.at(i); + spl.trigsOnDest.append(tod); + break; + case srcTriggerType::onAlienInRadius : + toa.src = src.triggerIndexes.at(i); + spl.trigsOnAlien.append(toa); + break; + case srcTriggerType::onTimer : + tot.src = src.triggerIndexes.at(i); + tot.timer = trig.timer; + spl.trigsOnTimer.append(tot); + break; + } + } + //qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size(); gameData->curSplashes.insert(spl.id,spl); nextId++; - return true;*/ } @@ -54,54 +70,57 @@ void Splashes::addSplash(QPoint curTowerId) if (gameData->curTowers.contains(curTowerId)) { TowerType tw = gameData->curTowers.value(curTowerId); - srcSplashType src = gameData->players.at(tw.PlayerId)->srcTowers.at(tw.src).splashes.at(0); - SplashType spl; - spl.id = nextId; - spl.TowerId = curTowerId; - spl.srcTower = tw.src; - spl.PlayerId = tw.PlayerId; - if (!gameData->curAliens.contains(tw.aim)) - qFatal("Error finding splash aim! Tower has nvalid aim!"); - spl.destination = gameData->curAliens.value(tw.aim).pos; - if (src.autoControl) - spl.AlienId = tw.aim; - else - spl.AlienId = -1; - spl.angle = tw.angle; - spl.pos = tw.pos; // FIXME: splash do not create in center or left-angle of tower, it must be in tower's side - spl.imgType = src.imgType; - spl.life = 0; - spl.src = 0; - //TriggerType trig; - for(int i=0; iplayers.at(tw.PlayerId)->srcTowers.at(tw.src).triggers.at(src.triggerIndexes.at(i)); - switch (trig.type) - { - case srcTriggerType::onDestination : - tod.src = src.triggerIndexes.at(i); - spl.trigsOnDest.append(tod); - break; - case srcTriggerType::onAlienInRadius : - toa.src = src.triggerIndexes.at(i); - spl.trigsOnAlien.append(toa); - break; - case srcTriggerType::onTimer : - tot.src = src.triggerIndexes.at(i); - tot.timer = trig.timer; - spl.trigsOnTimer.append(tot); - break; - } - - } - qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size(); - gameData->curSplashes.insert(spl.id,spl); - nextId++; + addSplash(tw.PlayerId,tw.src,0,QPointF(tw.pos+QPoint(1,1)),gameData->curAliens.value(tw.aim).pos+QPointF(0.5,0.5),tw.aim,tw.pos); } + // TowerType tw = gameData->curTowers.value(curTowerId); + // srcSplashType src = gameData->players.at(tw.PlayerId)->srcTowers.at(tw.src).splashes.at(0); + // SplashType spl; + // spl.id = nextId; + // spl.TowerId = curTowerId; + // spl.srcTower = tw.src; + // spl.PlayerId = tw.PlayerId; + // if (!gameData->curAliens.contains(tw.aim)) + // qFatal("Error finding splash aim! Tower has nvalid aim!"); + // spl.destination = gameData->curAliens.value(tw.aim).pos; + // if (src.autoControl) + // spl.AlienId = tw.aim; + // else + // spl.AlienId = -1; + // spl.pos = tw.pos+QPointF(0.5,0.5); // FIXME: splash do not create in center or left-angle of tower, it must be in tower's side + // spl.angle = 180.0f*(- std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y()))/M_PI; + // spl.imgType = src.imgType; + // spl.life = 0; + // spl.src = 0; + // //TriggerType trig; + // for(int i=0; iplayers.at(tw.PlayerId)->srcTowers.at(tw.src).triggers.at(src.triggerIndexes.at(i)); + // switch (trig.type) + // { + // case srcTriggerType::onDestination : + // tod.src = src.triggerIndexes.at(i); + // spl.trigsOnDest.append(tod); + // break; + // case srcTriggerType::onAlienInRadius : + // toa.src = src.triggerIndexes.at(i); + // spl.trigsOnAlien.append(toa); + // break; + // case srcTriggerType::onTimer : + // tot.src = src.triggerIndexes.at(i); + // tot.timer = trig.timer; + // spl.trigsOnTimer.append(tot); + // break; + // } + + // } + // //qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size(); + // gameData->curSplashes.insert(spl.id,spl); + // nextId++; + // } } @@ -110,14 +129,12 @@ void Splashes::update() QList deadIndexes; for (int i=0; icurSplashes.size(); i++) { - //int curDead = -1; float arctg,angl; SplashType spl = gameData->curSplashes.values().at(i); //bool isTowerSplash = false; srcSplashType src; - TowerType tw; - tw = gameData->curTowers.value(spl.TowerId); - src = gameData->players.at(tw.PlayerId)->srcTowers.at(tw.src).splashes.at(spl.src); + // FIXME : if splash is not tower's splash, will be some trouble + src = gameData->players.at(spl.PlayerId)->srcTowers.at(spl.srcTower).splashes.at(spl.src); spl.life++; if (spl.life > src.lifetime) deadIndexes.append(spl.id); @@ -128,7 +145,7 @@ void Splashes::update() { bool badAl = false; if (gameData->curAliens.contains(spl.AlienId)) - spl.destination = gameData->curAliens.value(spl.AlienId).pos; + spl.destination = gameData->curAliens.value(spl.AlienId).pos+QPointF(0.5,0.5); else badAl = true; if (distance2(spl.pos, spl.destination) < src.speed*src.speed) @@ -141,6 +158,11 @@ void Splashes::update() // 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.count > 0 && strig.childId > 0) + { + //qDebug("bvgbjdklbvfjldsk"); + addSplash(spl.PlayerId,spl.srcTower,strig.childId,spl.pos,spl.destination,-1,spl.TowerId); + } if (strig.damage > 0) { if (!(strig.radius > 0)) @@ -150,7 +172,7 @@ void Splashes::update() float hh = gameData->curAliens[spl.AlienId].health -= strig.damage; if (hh < 0) gameData->curAliens.remove(spl.AlienId); - qDebug() << "health=" << hh; + //qDebug() << "health=" << hh; } } else { processTrigger(strig,spl.pos); @@ -169,6 +191,24 @@ void Splashes::update() } else { if (!gameData->map->rect().contains(spl.pos.toPoint())) deadIndexes.push_back(spl.id); + if (!spl.trigsOnDest.isEmpty()) + { + if (distance2(spl.pos, spl.destination) < src.speed*src.speed) + { + spl.pos = spl.destination; + for (int k=0; kplayers.at(spl.PlayerId)->srcTowers.at(spl.srcTower).triggers.at(spl.trigsOnDest.at(k).src); + if (strig.delParent) deadIndexes.push_back(spl.id); + processTrigger(strig,spl.pos); + if (strig.count > 0 && strig.childId > 0) + { + //qDebug("bvgbjdklbvfjldsk"); + addSplash(spl.PlayerId,spl.srcTower,strig.childId,spl.pos,spl.destination,-1,spl.TowerId); + } + } + } + } spl.pos.setX(spl.pos.x() -src.speed*std::sin(-spl.angle*M_PI/180.f)); spl.pos.setY(spl.pos.y() @@ -191,7 +231,7 @@ void Splashes::delSplash(int Id) void Splashes::processTrigger(srcTriggerType srctrig, QPointF pos) { - qDebug("trig proc"); + //qDebug("trig proc"); QList dead; for (QHash::iterator i = gameData->curAliens.begin(); i != gameData->curAliens.end(); ++i) { diff --git a/splashes.h b/splashes.h index d0af155..153bad5 100644 --- a/splashes.h +++ b/splashes.h @@ -8,7 +8,7 @@ class Splashes : public QObject Q_OBJECT public: explicit Splashes(Game_Data * gd, QObject *parent = 0); - bool addSplash(int srcId, QPointF pos); + void addSplash( int player, int srcTower, int srcId, QPointF pos, QPointF dest, int aim, QPoint curTower); void delSplash(int Id); void update(); signals: diff --git a/towers.cpp b/towers.cpp index f1919db..c20feab 100644 --- a/towers.cpp +++ b/towers.cpp @@ -30,6 +30,7 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos) tw.build = 0; tw.reload = 0; tw.aim = -1; + tw.experience = 0; //tw .oldAim = -1; if (gameData->map->addTowerOnMap(playerId,pos)) { @@ -96,6 +97,7 @@ void Towers::update() if ((*i).aim > 0) { (*i).reload = 0; + (*i).experience += stw.expByShot; emit shot((*i).pos); //qDebug("shot!"); }