diff --git a/Makefile b/Makefile index 2b1c81e..e0929cb 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: aliendefender -# Generated by qmake (2.01a) (Qt 4.6.2) on: ?? ???. 17 20:37:06 2010 +# Generated by qmake (2.01a) (Qt 4.6.2) on: ?? ???. 23 12:02:15 2010 # Project: aliendefender.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ -unix CONFIG+=debug -o Makefile aliendefender.pro @@ -51,7 +51,6 @@ SOURCES = map.cpp \ splashes.cpp \ adcore.cpp \ player.cpp \ - settreader.cpp \ loader.cpp moc_map.cpp \ moc_game_data.cpp \ moc_aliens.cpp \ @@ -69,7 +68,6 @@ OBJECTS = map.o \ splashes.o \ adcore.o \ player.o \ - settreader.o \ loader.o \ moc_map.o \ moc_game_data.o \ @@ -190,7 +188,7 @@ qmake: FORCE dist: @$(CHK_DIR_EXISTS) .tmp/aliendefender1.0.0 || $(MKDIR) .tmp/aliendefender1.0.0 - $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents base_types.h map.h game_data.h aliens.h towers.h splashes.h adcore.h player.h settreader.h loader.h .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents images.qrc .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents map.cpp game_data.cpp aliens.cpp towers.cpp main.cpp splashes.cpp adcore.cpp player.cpp settreader.cpp loader.cpp .tmp/aliendefender1.0.0/ && (cd `dirname .tmp/aliendefender1.0.0` && $(TAR) aliendefender1.0.0.tar aliendefender1.0.0 && $(COMPRESS) aliendefender1.0.0.tar) && $(MOVE) `dirname .tmp/aliendefender1.0.0`/aliendefender1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/aliendefender1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents base_types.h map.h game_data.h aliens.h towers.h splashes.h adcore.h player.h loader.h .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents images.qrc .tmp/aliendefender1.0.0/ && $(COPY_FILE) --parents map.cpp game_data.cpp aliens.cpp towers.cpp main.cpp splashes.cpp adcore.cpp player.cpp loader.cpp .tmp/aliendefender1.0.0/ && (cd `dirname .tmp/aliendefender1.0.0` && $(TAR) aliendefender1.0.0.tar aliendefender1.0.0 && $(COMPRESS) aliendefender1.0.0.tar) && $(MOVE) `dirname .tmp/aliendefender1.0.0`/aliendefender1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/aliendefender1.0.0 clean:compiler_clean @@ -213,64 +211,49 @@ compiler_moc_header_make_all: moc_map.cpp moc_game_data.cpp moc_aliens.cpp moc_t compiler_moc_header_clean: -$(DEL_FILE) moc_map.cpp moc_game_data.cpp moc_aliens.cpp moc_towers.cpp moc_splashes.cpp moc_adcore.cpp moc_player.cpp moc_loader.cpp moc_map.cpp: base_types.h \ - settreader.h \ map.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) map.h -o moc_map.cpp moc_game_data.cpp: player.h \ - map.h \ base_types.h \ - settreader.h \ game_data.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) game_data.h -o moc_game_data.cpp moc_aliens.cpp: game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ aliens.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) aliens.h -o moc_aliens.cpp moc_towers.cpp: game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ towers.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) towers.h -o moc_towers.cpp moc_splashes.cpp: game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ splashes.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) splashes.h -o moc_splashes.cpp moc_adcore.cpp: aliens.h \ game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ towers.h \ splashes.h \ loader.h \ adcore.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) adcore.h -o moc_adcore.cpp -moc_player.cpp: map.h \ - base_types.h \ - settreader.h \ +moc_player.cpp: base_types.h \ player.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) player.h -o moc_player.cpp moc_loader.cpp: game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ loader.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) loader.h -o moc_loader.cpp @@ -318,40 +301,31 @@ compiler_clean: compiler_moc_header_clean compiler_rcc_clean ####### Compile map.o: map.cpp map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o map.o map.cpp game_data.o: game_data.cpp game_data.h \ player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o game_data.o game_data.cpp aliens.o: aliens.cpp aliens.h \ game_data.h \ player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o aliens.o aliens.cpp towers.o: towers.cpp towers.h \ game_data.h \ player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o towers.o towers.cpp main.o: main.cpp adcore.h \ aliens.h \ game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ towers.h \ splashes.h \ loader.h @@ -360,38 +334,27 @@ main.o: main.cpp adcore.h \ splashes.o: splashes.cpp splashes.h \ game_data.h \ player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o splashes.o splashes.cpp adcore.o: adcore.cpp adcore.h \ aliens.h \ game_data.h \ player.h \ - map.h \ base_types.h \ - settreader.h \ towers.h \ splashes.h \ loader.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o adcore.o adcore.cpp player.o: player.cpp player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o player.o player.cpp -settreader.o: settreader.cpp settreader.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o settreader.o settreader.cpp - loader.o: loader.cpp loader.h \ game_data.h \ player.h \ - map.h \ - base_types.h \ - settreader.h + base_types.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o loader.o loader.cpp moc_map.o: moc_map.cpp diff --git a/adcore.h b/adcore.h index 4731c71..7a1fafc 100644 --- a/adcore.h +++ b/adcore.h @@ -2,7 +2,6 @@ #define ADCORE_H #include -#include #include "aliens.h" #include "towers.h" @@ -14,14 +13,12 @@ class adCore : public QThread Q_OBJECT public: explicit adCore(QObject *parent = 0); - - Map *admap; - Game_Data *addata; - Aliens *adaliens; - Towers *adtowers; - Splashes *adsplashes; - Loader * adload; - int step; + Game_Data * addata; + Aliens * adaliens; + Towers * adtowers; + Splashes * adsplashes; + Loader * adloader; + unsigned int step; signals: public slots: diff --git a/aliendefender.pro b/aliendefender.pro index 5272a74..329ee30 100644 --- a/aliendefender.pro +++ b/aliendefender.pro @@ -6,7 +6,6 @@ HEADERS += base_types.h \ splashes.h \ adcore.h \ player.h \ - settreader.h \ loader.h SOURCES += map.cpp \ game_data.cpp \ @@ -16,7 +15,6 @@ SOURCES += map.cpp \ splashes.cpp \ adcore.cpp \ player.cpp \ - settreader.cpp \ loader.cpp RESOURCES += images.qrc OTHER_FILES += map.conf \ diff --git a/aliens.cpp b/aliens.cpp index 054d866..fe66b6e 100644 --- a/aliens.cpp +++ b/aliens.cpp @@ -1,12 +1,11 @@ #include "aliens.h" - #include Aliens::Aliens(Game_Data *gd, QObject *parent) : QObject(parent) { gameData = gd; - nextId = 0; + nextId = 1; } @@ -63,7 +62,6 @@ void Aliens::update() //qDebug() << i; //if (al.health < 0) emit AlienKill(); float tmpdx,tmpdy,angl,arctg = 0; - qDebug() <<"alien"<< i << " path index" << al.pathIndex << " pos" << al.pos; tmpdx = al.pos.x() - al.path.at(al.pathIndex).x(); tmpdy = al.pos.y() - al.path.at(al.pathIndex).y(); while (std::sqrt(tmpdx*tmpdx +tmpdy*tmpdy) < 2*al.speed) @@ -104,6 +102,7 @@ void Aliens::update() -al.speed*std::cos(arctg)); //return true; gameData->curAliens.insert(al.Id,al); + qDebug() <<"alien"<< i << " path index" << al.pathIndex << " pos" << al.pos; } for (int j=0; j - #include "game_data.h" @@ -14,7 +12,6 @@ public: void AddAlien(int srcId); void nextWave(); void update(); - int size() const {return gameData->curAliens.size();} signals: public slots: diff --git a/base_types.h b/base_types.h index a2b13d7..4ebebf4 100644 --- a/base_types.h +++ b/base_types.h @@ -2,8 +2,17 @@ #define BASE_TYPES_H #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include struct AlienType { @@ -48,6 +57,13 @@ struct TowerType }; +struct TriggerType +{ + int src; + unsigned int timer; +}; + + struct srcTriggerType { enum triggerType @@ -106,6 +122,7 @@ struct SplashType int life; // in ticks float angle; // -180 .. 180 QPointF pos; + QList triggers; }; @@ -119,4 +136,10 @@ struct WaveType }; +inline uint qHash(const QPoint &pos) +{ + return qHash(pos.x()) + (qHash(pos.y()) << 16); +} + + #endif // BASE_TYPES_H diff --git a/game_data.h b/game_data.h index b0e85a8..94a675b 100644 --- a/game_data.h +++ b/game_data.h @@ -1,10 +1,9 @@ #ifndef GAME_DATA_H #define GAME_DATA_H -#include -#include - #include "player.h" +#include "base_types.h" +#include "map.h" class Game_Data : public QObject { @@ -13,8 +12,10 @@ public: explicit Game_Data(Map * map, QObject *parent = 0); QList srcAliens; QHash curAliens; - QHash curTowers; + QList srcSplashes; + QList srTriggers; QHash curSplashes; + QHash curTowers; QList waves; QList players; Map * map; diff --git a/loader.h b/loader.h index 917758b..4677cf4 100644 --- a/loader.h +++ b/loader.h @@ -1,11 +1,9 @@ #ifndef LOADER_H #define LOADER_H -#include #include #include #include -#include #include #include #include "game_data.h" diff --git a/main.cpp b/main.cpp index 1789fac..90d76b6 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,9 @@ -#include #include #include #include "adcore.h" + int main(int argc, char *argv[]) { adCore core; diff --git a/map.h b/map.h index b8f11f9..cb25872 100644 --- a/map.h +++ b/map.h @@ -1,15 +1,7 @@ #ifndef MAP_H #define MAP_H -#include -#include -#include -#include -#include -#include - #include "base_types.h" -#include "settreader.h" // Maximum map is 65530 x 65530 because qHash may be repeat and towers has same Id @@ -44,7 +36,7 @@ public: void delTowerOnMap(QPoint pos); void removeAliensPath(); QVector CreatePath(QPoint start, QPoint finish); -// QSize size() const {return mapsize;} + QRect Rect() const {return QRect(QPoint(),mapSize);} // QString name() const {return mapName;} QList Starts() const {return starts;} QList Finishs() const {return finishs;} diff --git a/player.h b/player.h index 39f510d..fc8cbaf 100644 --- a/player.h +++ b/player.h @@ -1,9 +1,7 @@ #ifndef PLAYER_H #define PLAYER_H -#include - -#include "map.h" +#include "base_types.h" class Player : public QObject { diff --git a/splashes.cpp b/splashes.cpp index 0aa90d5..deaa424 100644 --- a/splashes.cpp +++ b/splashes.cpp @@ -1,13 +1,102 @@ #include "splashes.h" +#include Splashes::Splashes(Game_Data *gd, QObject *parent) : - QObject(parent) + QObject(parent) { gameData = gd; + nextId = 1; +} + + +bool Splashes::AddSplash(int srcId, QPointF pos) +{ + 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); + 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())) + { + qCritical("ERROR splash out of map size"); + return false; + } + spl.pos = pos; + spl.AlienId = -1; + spl.angle = 0; + spl.destination = pos; + TriggerType trig; + for(int i; isrTriggers.at(src.triggerIndexes.at(i)).timer; + trig.src = src.triggerIndexes.at(i); + spl.triggers.push_back(trig); + } + gameData->curSplashes.insert(spl.Id,spl); + nextId++; + return true; +} + + +void Splashes::AddSplash(srcSplashType src, int index, TowerType tw) +{ + SplashType spl; + spl.Id = nextId; + spl.TowerId = tw.pos; + if (!gameData->curAliens.contains(tw.aim)) + qFatal("Error finding splash aim! Tower has nvalid aim!"); + if (src.autoControl) + spl.AlienId = tw.aim; + else + spl.AlienId = -1; + spl.destination = gameData->curAliens.value(tw.aim).pos; + spl.angle = tw.angle; + spl.pos = tw.pos; // FIXME: pos not in center/left angle of tower + spl.imgType = src.imgType; + spl.life = 0; + spl.src = index; + TriggerType trig; + for(int i; iplayers.at(tw.PlayerId)->srcTowers.at(tw.src).triggers.at(src.triggerIndexes.at(i)); + trig.src = src.triggerIndexes.at(i); + spl.triggers.push_back(trig); + } + gameData->curSplashes.insert(spl.Id,spl); + nextId++; } void Splashes::update() { - + for (int i; icurSplashes.size(); i++) + { + SplashType spl = gameData->curSplashes.values().at(i); + bool isTowerSplash = false; + srcSplashType src; + TowerType tw; + if (gameData->map->Rect().contains(spl.TowerId)) + { + if (gameData->curTowers.contains(spl.TowerId)) + { + tw = gameData->curTowers.value(spl.TowerId); + src = gameData->players.at(tw.PlayerId)->srcTowers.at(tw.src).splashes.at(spl.src); + isTowerSplash = true; + } else { + spl.TowerId = QPoint(-1,-1); + } + } + if (!isTowerSplash) + src = gameData->srcSplashes.at(spl.src); + // TODO: calculate new angle and pos.... + // TODO: activate trigger and more... + } + } } diff --git a/splashes.h b/splashes.h index 834cc9d..e124e92 100644 --- a/splashes.h +++ b/splashes.h @@ -1,8 +1,6 @@ #ifndef SPLASHES_H #define SPLASHES_H -#include - #include "game_data.h" class Splashes : public QObject @@ -10,19 +8,17 @@ class Splashes : public QObject Q_OBJECT public: explicit Splashes(Game_Data * gd, QObject *parent = 0); - void AddSplash(int srcId); - void AddSplash(srcSplashType src,TowerType tw); - void DelSplashById(int Id); - void DelSplash(int index); + bool AddSplash(int srcId, QPointF pos); + void DelSplash(int Id); void update(); - int size() const {return gameData->curSplashes.size();} - signals: public slots: + void AddSplash(srcSplashType src, int index, TowerType tw); private: Game_Data *gameData; + int nextId; }; #endif // SPLASHES_H diff --git a/towers.cpp b/towers.cpp index 24ddcb9..8469c40 100644 --- a/towers.cpp +++ b/towers.cpp @@ -61,7 +61,7 @@ void Towers::update() { tw.reload++; } else { - emit shot(stw.splashes.at(0),tw); + emit shot(stw.splashes.at(0), 0, tw); } } } diff --git a/towers.h b/towers.h index cba3da0..d934ea5 100644 --- a/towers.h +++ b/towers.h @@ -1,8 +1,6 @@ #ifndef TOWERS_H #define TOWERS_H -#include - #include "game_data.h" class Towers : public QObject @@ -13,18 +11,12 @@ public: bool AddTower(int playerId, int srcId, QPoint pos); void DelTower(QPoint pos); void update(); - int size() const {return gameData->curTowers.size();} signals: - void shot(srcSplashType src, TowerType tw); + void shot(srcSplashType src, int index, TowerType tw); public slots: private: Game_Data * gameData; }; -inline uint qHash(const QPoint &pos) -{ - return qHash(pos.x()) + (qHash(pos.y()) << 16); -} - #endif // TOWERS_H