From bbb6f9b36674629d6ac61d731e4265c19817b90b Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 31 Aug 2010 19:25:29 +0400 Subject: [PATCH] game_in_work_example --- ad_graphics.cpp | 40 +++-- adcore.cpp | 10 +- aliendefender.pro.user | 358 ++++++++++--------------------------- aliendefender.pro.user.1.3 | 99 ++++++++-- aliens.cpp | 2 +- base_types.h | 1 + data2.xml | 42 +++-- images.qrc | 3 + images/Splashes/expl.png | Bin 0 -> 17233 bytes loader.cpp | 2 + map.cpp | 4 +- splashes.cpp | 202 ++++++++++++--------- splashes.h | 2 +- towers.cpp | 2 + 14 files changed, 363 insertions(+), 404 deletions(-) create mode 100644 images/Splashes/expl.png 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 0000000000000000000000000000000000000000..e67b6575ad98ee126de075b569d885897bd47bdf GIT binary patch literal 17233 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 literal 0 HcmV?d00001 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!"); }