diff --git a/ADeditor/ADeditor.pro b/ADeditor/ADeditor.pro index 3359d6b..606bb6b 100644 --- a/ADeditor/ADeditor.pro +++ b/ADeditor/ADeditor.pro @@ -16,7 +16,8 @@ SOURCES += main.cpp \ ../game_data.cpp \ triggermodel.cpp \ mapmodel.cpp \ - animationmodel.cpp + animationmodel.cpp \ + animlabel.cpp HEADERS += mainwindow.h \ ../loader.h \ alienmodel.h \ @@ -28,7 +29,8 @@ HEADERS += mainwindow.h \ ../game_data.h \ triggermodel.h \ mapmodel.h \ - animationmodel.h + animationmodel.h \ + animlabel.h FORMS += mainwindow.ui TRANSLATIONS += adeditor_ru.ts RESOURCES += ADeditor.qrc diff --git a/ADeditor/ADeditor.pro.user b/ADeditor/ADeditor.pro.user index 0457252..a597870 100644 --- a/ADeditor/ADeditor.pro.user +++ b/ADeditor/ADeditor.pro.user @@ -76,7 +76,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wExeabp7q4,guid=18815993df3603fdc64a3f6d4c7b5822 + 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 @@ -84,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-4vN5uf + GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -95,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/1205,unix/buull-eeePC:/tmp/.ICE-unix/1205 + 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=1239 - SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh + SSH_AGENT_PID=1195 + SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-x9URui/database + 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-1283151906.338331-318132279 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931 /home/andrey/AD/aliendefender/ADeditor/ADeditor.pro @@ -124,7 +124,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wExeabp7q4,guid=18815993df3603fdc64a3f6d4c7b5822 + 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 @@ -132,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-4vN5uf + GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -143,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/1205,unix/buull-eeePC:/tmp/.ICE-unix/1205 + 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=1239 - SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh + SSH_AGENT_PID=1195 + SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-x9URui/database + 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-1283151906.338331-318132279 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931 false diff --git a/ADeditor/ADeditor.qrc b/ADeditor/ADeditor.qrc index ee0da6b..f807fe2 100644 --- a/ADeditor/ADeditor.qrc +++ b/ADeditor/ADeditor.qrc @@ -8,5 +8,6 @@ icons/list-add.png icons/list-remove.png icons/view-refresh.png + icons/edit.png diff --git a/ADeditor/animlabel.cpp b/ADeditor/animlabel.cpp new file mode 100644 index 0000000..617b887 --- /dev/null +++ b/ADeditor/animlabel.cpp @@ -0,0 +1,27 @@ +#include "animlabel.h" + +AnimLabel::AnimLabel(QWidget *parent) : + QLabel(parent) +{ + startTimer(50); +} + + +void AnimLabel::setAnimation(const QStringList &anim) +{ + for (int i=0; i= images.size()) imgIndex = 0; + this->setPixmap(*images.at(imgIndex)); + imgIndex++; +} diff --git a/ADeditor/animlabel.h b/ADeditor/animlabel.h new file mode 100644 index 0000000..1ee77cb --- /dev/null +++ b/ADeditor/animlabel.h @@ -0,0 +1,22 @@ +#ifndef ANIMLABEL_H +#define ANIMLABEL_H + +#include + +class AnimLabel : public QLabel +{ +Q_OBJECT +public: + explicit AnimLabel(QWidget *parent = 0); + void setAnimation(const QStringList &anim); +signals: + +public slots: + +private: + QList images; + int imgIndex; + void timerEvent(QTimerEvent *); +}; + +#endif // ANIMLABEL_H diff --git a/ADeditor/mainwindow.cpp b/ADeditor/mainwindow.cpp index ef55a9f..65ab9e0 100644 --- a/ADeditor/mainwindow.cpp +++ b/ADeditor/mainwindow.cpp @@ -10,8 +10,7 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { ui->setupUi(this); - ui->pbSave->setIcon(/*QIcon::fromTheme("documment-save",*/ - QIcon(":/icons/icons/documment-save.png")); + ui->pbSave->setIcon(QIcon::fromTheme("document-save", QIcon(":/icons/icons/document-save.png"))); ui->pbReload->setIcon(QIcon::fromTheme("edit-undo", QIcon(":/icons/icons/edit-undo.png"))); ui->pbAlAdd->setIcon(QIcon::fromTheme("list-add", QIcon(":/icons/icons/list-add.png"))); ui->pbAlDel->setIcon(QIcon::fromTheme("list-remove", QIcon(":/icons/icons/list-remove.png"))); @@ -87,6 +86,9 @@ MainWindow::MainWindow(QWidget *parent) : ui->splitter_5->restoreState(sett.value("session/split5").toByteArray()); ui->splitter_6->restoreState(sett.value("session/split6").toByteArray()); ui->tabWidget->setCurrentIndex(sett.value("session/tab").toInt()); + //alb = new AnimLabel(); + //ui->verticalLayout->addWidget(alb); + //alb->setAnimation(adloader->animations.value(1).pathes); } @@ -112,20 +114,22 @@ void MainWindow::changeEvent(QEvent *e) void MainWindow::on_cbAlArmor_toggled(bool checked) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].armor; ui->sbAlArmor->setEnabled(checked); if (checked) adloader->aliens[id].armor = ui->sbAlArmor->value(); else adloader->aliens[id].armor = 0; - isSaved = false; + if (lval != adloader->aliens[id].armor) isSaved = false; } void MainWindow::on_cbAlRegeneration_toggled(bool checked) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].regeneration; ui->sbAlregeneration->setEnabled(checked); if (checked) adloader->aliens[id].regeneration = ui->sbAlregeneration->value(); else adloader->aliens[id].regeneration = 0; - isSaved = false; + if (lval != adloader->aliens[id].regeneration) isSaved = false; } @@ -156,6 +160,8 @@ void MainWindow::lvAliens_select(QModelIndex index, QModelIndex) else ui->cbAlRegeneration->setChecked(false); ui->sbAlScore->setValue(al.score); ui->cbAlIsFly->setChecked(al.isFlying); + ui->cbAlImage->setCurrentIndex(adloader->animations.keys().indexOf(al.imgType)); + ui->lbAlAnim->setAnimation(adloader->animations.value(al.imgType).pathes); } } @@ -222,6 +228,8 @@ void MainWindow::lvTowers_select(QModelIndex index, QModelIndex) ui->sbTwRadius->setValue(tw.radius); ui->sbTwReload->setValue(tw.reload); ui->cbTwSplash->setCurrentIndex(adloader->splashes.keys().indexOf(tw.splashId)); + ui->cbTwImage->setCurrentIndex(adloader->animations.keys().indexOf(tw.imgType)); + ui->lbTwAnim->setAnimation(adloader->animations.value(tw.imgType).pathes); } } @@ -235,6 +243,8 @@ void MainWindow::lvSplashes_select(QModelIndex index, QModelIndex) ui->sbSplSpeed->setValue(spl.speed); ui->cbSplAutoControl->setChecked(spl.autoControl); ui->leSplName->setText(spl.name); + ui->cbSplImage->setCurrentIndex(adloader->animations.keys().indexOf(spl.imgType)); + ui->lbSplAnim->setAnimation(adloader->animations.value(spl.imgType).pathes); } } @@ -374,23 +384,16 @@ void MainWindow::on_pbReload_clicked() trigModel->refresh(adloader->triggers.values()); animModel->refresh(adloader->animations.values()); mapModel->refresh(adloader->maps.values()); - ui->lvAnimations->setModel((QAbstractItemModel * )animModel); ui->lvAnimations->reset(); ui->lvAnimations->selectionModel()->setCurrentIndex(ui->lvAnimations->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->lvMaps->setModel((QAbstractItemModel * )mapModel); ui->lvMaps->reset(); ui->lvMaps->selectionModel()->setCurrentIndex(ui->lvMaps->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->lvAliens->setModel(alModel); ui->lvAliens->reset(); ui->lvAliens->selectionModel()->setCurrentIndex(ui->lvAliens->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->lvSplashes->setModel(splModel); ui->lvSplashes->reset(); ui->lvSplashes->selectionModel()->setCurrentIndex(ui->lvSplashes->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->lvTowers->setModel(twModel); - ui->cbTwSplash->setModel(splModel); ui->lvTowers->reset(); ui->lvTowers->selectionModel()->setCurrentIndex(ui->lvTowers->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->lvTriggers->setModel(trigModel); ui->lvTriggers->reset(); ui->lvTriggers->selectionModel()->setCurrentIndex(ui->lvTriggers->model()->index(0,0),QItemSelectionModel::ClearAndSelect); isSaved = true; @@ -401,66 +404,76 @@ void MainWindow::on_pbReload_clicked() void MainWindow::on_sbAlHealth_valueChanged(double value) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].health; adloader->aliens[id].health = value; - isSaved = false; + if (lval != adloader->aliens[id].health) isSaved = false; } void MainWindow::on_sbAlArmor_valueChanged(double value) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].armor; adloader->aliens[id].armor = value; - isSaved = false; + if (lval != adloader->aliens[id].armor) isSaved = false; } void MainWindow::on_sbAlregeneration_valueChanged(double value) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].regeneration; adloader->aliens[id].regeneration = value; - isSaved = false; + if (lval != adloader->aliens[id].regeneration) isSaved = false; } void MainWindow::on_sbAlSpeed_valueChanged(double value) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + float lval = adloader->aliens[id].speed; adloader->aliens[id].speed = value; - isSaved = false; + if (lval != adloader->aliens[id].speed) isSaved = false; } void MainWindow::on_sbAlPrise_valueChanged(int val) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + unsigned int lval = adloader->aliens[id].prise; adloader->aliens[id].prise = val; - isSaved = false; + if (lval != adloader->aliens[id].prise) isSaved = false; } void MainWindow::on_sbAlScore_valueChanged(int val) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + unsigned int lval = adloader->aliens[id].score; adloader->aliens[id].score = val; - isSaved = false; + if (lval != adloader->aliens[id].score) isSaved = false; } void MainWindow::on_cbAlIsFly_toggled(bool checked) { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + bool lval = adloader->aliens[id].isFlying; adloader->aliens[id].isFlying = checked; - isSaved = false; + if (lval != adloader->aliens[id].isFlying) isSaved = false; } void MainWindow::on_leAlName_editingFinished() { int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + QString lval = adloader->aliens[id].name; adloader->aliens[id].name = ui->leAlName->text(); alModel->refresh(adloader->aliens.values()); - ui->lvAliens->setModel((QAbstractItemModel * )alModel); - isSaved = false; + QModelIndex mindex = ui->lvAliens->currentIndex(); + ui->lvAliens->reset(); + ui->lvAliens->setCurrentIndex(mindex); + if (lval != adloader->aliens[id].name) isSaved = false; } @@ -478,7 +491,6 @@ void MainWindow::on_pbAlAdd_clicked() adloader->aliens.insert(al.id,al); int index = adloader->aliens.keys().indexOf(i); alModel->refresh(adloader->aliens.values()); - ui->lvAliens->setModel((QAbstractItemModel * )alModel); ui->lvAliens->reset(); ui->lvAliens->selectionModel()->setCurrentIndex(ui->lvAliens->model()->index(index,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -510,7 +522,6 @@ void MainWindow::on_pbAlDel_clicked() { adloader->aliens.remove(id); alModel->refresh(adloader->aliens.values()); - ui->lvAliens->setModel((QAbstractItemModel * )alModel); ui->lvAliens->reset(); ui->lvAliens->selectionModel()->setCurrentIndex(ui->lvAliens->model()->index(0,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -521,106 +532,121 @@ void MainWindow::on_pbAlDel_clicked() void MainWindow::on_leTwName_editingFinished() { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + QString lval = adloader->towers[id].name; adloader->towers[id].name = ui->leTwName->text(); twModel->refresh(adloader->towers.values()); - ui->lvTowers->setModel((QAbstractItemModel * )twModel); - isSaved = false; + QModelIndex mindex = ui->lvTowers->currentIndex(); + ui->lvTowers->reset(); + ui->lvTowers->setCurrentIndex(mindex); + if (lval != adloader->towers[id].name) isSaved = false; } void MainWindow::on_sbTwBuildTime_valueChanged(int val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + unsigned int lval = adloader->towers[id].buildTime; adloader->towers[id].buildTime = val; - isSaved = false; + if (lval != adloader->towers[id].buildTime) isSaved = false; } void MainWindow::on_sbTwCost_valueChanged(int val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + unsigned int lval = adloader->towers[id].cost; adloader->towers[id].cost = val; - isSaved = false; + if (lval != adloader->towers[id].cost) isSaved = false; } void MainWindow::on_cbTwSplash_currentIndexChanged(int index) { - if (index > 0) + if (!ui->lvTowers->currentIndex().isValid()) return; + if (index >= 0) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + int lval = adloader->towers[id].splashId; adloader->towers[id].splashId = adloader->splashes.values().at(index).id; - isSaved = false; + if (lval != adloader->towers[id].splashId) isSaved = false; } } void MainWindow::on_sbTwReload_valueChanged(int val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + unsigned int lval = adloader->towers[id].reload; adloader->towers[id].reload = val; - isSaved = false; + if (lval != adloader->towers[id].reload) isSaved = false; } void MainWindow::on_sbTwRadius_valueChanged(double val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].radius; adloader->towers[id].radius = val; - isSaved = false; + if (lval != adloader->towers[id].radius) isSaved = false; } void MainWindow::on_sbTwExpByShot_valueChanged(double val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByShot; adloader->towers[id].expByShot = val; - isSaved = false; + if (lval != adloader->towers[id].expByShot) isSaved = false; } void MainWindow::on_cbTwExpByShot_toggled(bool checked) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByShot; ui->sbTwExpByShot->setEnabled(checked); if (checked) adloader->towers[id].expByShot = ui->sbTwExpByShot->value(); else adloader->towers[id].expByShot = 0; - isSaved = false; + if (lval != adloader->towers[id].expByShot) isSaved = false; } void MainWindow::on_sbTwExpByDam_valueChanged(double val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByDamage; adloader->towers[id].expByDamage = val; - isSaved = false; + if (lval != adloader->towers[id].expByDamage) isSaved = false; } void MainWindow::on_cbTwExpByDam_toggled(bool checked) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByDamage; ui->sbTwExpByDam->setEnabled(checked); if (checked) adloader->towers[id].expByDamage = ui->sbTwExpByDam->value(); else adloader->towers[id].expByDamage = 0; - isSaved = false; + if (lval != adloader->towers[id].expByDamage) isSaved = false; } void MainWindow::on_sbTwExpByKill_valueChanged(double val) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByKill; adloader->towers[id].expByKill = val; - isSaved = false; + if (lval != adloader->towers[id].expByKill) isSaved = false; } void MainWindow::on_cbTwExpByKill_toggled(bool checked) { int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + float lval = adloader->towers[id].expByKill; ui->sbTwExpByKill->setEnabled(checked); if (checked) adloader->towers[id].expByKill = ui->sbTwExpByKill->value(); else adloader->towers[id].expByKill = 0; - isSaved = false; + if (lval != adloader->towers[id].expByKill) isSaved = false; } @@ -639,7 +665,6 @@ void MainWindow::on_pbTwAdd_clicked() adloader->towers.insert(tw.id,tw); int index = adloader->towers.keys().indexOf(i); twModel->refresh(adloader->towers.values()); - ui->lvTowers->setModel((QAbstractItemModel * )twModel); ui->lvTowers->reset(); ui->lvTowers->selectionModel()->setCurrentIndex(ui->lvTowers->model()->index(index,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -671,7 +696,6 @@ void MainWindow::on_pbTwDel_clicked() { adloader->towers.remove(id); twModel->refresh(adloader->towers.values()); - ui->lvTowers->setModel((QAbstractItemModel * )twModel); ui->lvTowers->reset(); ui->lvTowers->selectionModel()->setCurrentIndex(ui->lvTowers->model()->index(0,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -681,35 +705,42 @@ void MainWindow::on_pbTwDel_clicked() void MainWindow::on_leSplName_editingFinished() { int id = adloader->splashes.values().at(ui->lvSplashes->currentIndex().row()).id; + QString lval = adloader->splashes[id].name; adloader->splashes[id].name = ui->leSplName->text(); splModel->refresh(adloader->splashes.values()); - ui->lvSplashes->setModel((QAbstractItemModel * )splModel); - ui->cbTwSplash->setModel((QAbstractItemModel * )splModel); - isSaved = false; + //ui->lvSplashes->setModel((QAbstractItemModel * )splModel); + //ui->cbTwSplash->setModel((QAbstractItemModel * )splModel); + QModelIndex mindex = ui->lvSplashes->currentIndex(); + ui->lvSplashes->reset(); + ui->lvSplashes->setCurrentIndex(mindex); + if (lval != adloader->splashes[id].name) isSaved = false; } void MainWindow::on_sbSplSpeed_valueChanged(double val) { int id = adloader->splashes.values().at(ui->lvSplashes->currentIndex().row()).id; + float lval = adloader->splashes[id].speed; adloader->splashes[id].speed = val; - isSaved = false; + if (lval != adloader->splashes[id].speed) isSaved = false; } void MainWindow::on_cbSplAutoControl_toggled(bool checked) { int id = adloader->splashes.values().at(ui->lvSplashes->currentIndex().row()).id; + bool lval = adloader->splashes[id].autoControl; adloader->splashes[id].autoControl = checked; - isSaved = false; + if (lval != adloader->splashes[id].autoControl) isSaved = false; } void MainWindow::on_sbSplLifeTime_valueChanged(int val) { int id = adloader->splashes.values().at(ui->lvSplashes->currentIndex().row()).id; + unsigned int lval = adloader->splashes[id].lifetime; adloader->splashes[id].lifetime = val; - isSaved = false; + if (lval != adloader->splashes[id].lifetime) isSaved = false; } @@ -725,10 +756,8 @@ void MainWindow::on_pbSplAdd_clicked() adloader->splashes.insert(spl.id,spl); int index = adloader->splashes.keys().indexOf(i); splModel->refresh(adloader->splashes.values()); - ui->lvSplashes->setModel((QAbstractItemModel * )splModel); ui->lvSplashes->reset(); ui->lvSplashes->selectionModel()->setCurrentIndex(ui->lvSplashes->model()->index(index,0),QItemSelectionModel::ClearAndSelect); - ui->cbTwSplash->setModel((QAbstractItemModel * )splModel); isSaved = false; } @@ -771,10 +800,8 @@ void MainWindow::on_pbSlpDel_clicked() { adloader->splashes.remove(id); splModel->refresh(adloader->splashes.values()); - ui->lvSplashes->setModel((QAbstractItemModel * )splModel); ui->lvSplashes->reset(); ui->lvSplashes->selectionModel()->setCurrentIndex(ui->lvSplashes->model()->index(0,0),QItemSelectionModel::ClearAndSelect); - ui->cbTwSplash->setModel((QAbstractItemModel * )splModel); isSaved = false; } } @@ -791,116 +818,131 @@ void MainWindow::on_pbTwSplashEdit_clicked() void MainWindow::on_cbTrigChance_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + int lval = adloader->triggers[id].chance; ui->sbTrigChance->setEnabled(checked); if (checked) adloader->triggers[id].chance = ui->sbTrigChance->value(); else adloader->triggers[id].chance = 100; - isSaved = false; + if (lval != adloader->triggers[id].chance) isSaved = false; } void MainWindow::on_sbTrigChance_valueChanged(int val) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + int lval = adloader->triggers[id].chance; adloader->triggers[id].chance = val; - isSaved = false; + if (lval != adloader->triggers[id].chance) isSaved = false; } void MainWindow::on_leTrigName_editingFinished() { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + QString lval = adloader->triggers[id].name; adloader->triggers[id].name = ui->leTrigName->text(); trigModel->refresh(adloader->triggers.values()); - ui->lvTriggers->setModel((QAbstractItemModel * )trigModel); - isSaved = false; + QModelIndex mindex = ui->lvTriggers->currentIndex(); + ui->lvTriggers->reset(); + ui->lvTriggers->setCurrentIndex(mindex); + if (lval != adloader->triggers[id].name) isSaved = false; } void MainWindow::on_sbTrigCount_valueChanged(int val) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + int lval = adloader->triggers[id].count; adloader->triggers[id].count = val; - isSaved = false; + if (lval != adloader->triggers[id].count) isSaved = false; } void MainWindow::on_sbTrigRandomRadius_valueChanged(double value) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].randomPosRadius; adloader->triggers[id].randomPosRadius = value; - isSaved = false; + if (lval != adloader->triggers[id].randomPosRadius) isSaved = false; } void MainWindow::on_cbTrigDelPar_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + bool lval = adloader->triggers[id].delParent; adloader->triggers[id].delParent = checked; - isSaved = false; + if (lval != adloader->triggers[id].delParent) isSaved = false; } void MainWindow::on_sbTrigTimer_valueChanged(int val) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + unsigned int lval = adloader->triggers[id].timer; adloader->triggers[id].timer = val; - isSaved = false; + if (lval != adloader->triggers[id].timer) isSaved = false; } void MainWindow::on_sbTrigDamage_valueChanged(double value) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].damage; adloader->triggers[id].damage = value; - isSaved = false; + if (lval != adloader->triggers[id].damage) isSaved = false; } void MainWindow::on_sbTrigDamRadius_valueChanged(double value) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].radius; adloader->triggers[id].radius = value; - isSaved = false; + if (lval != adloader->triggers[id].radius) isSaved = false; } void MainWindow::on_cbTrigDamRad_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].radius; ui->sbTrigDamRadius->setEnabled(checked); if (checked) adloader->triggers[id].radius = ui->sbTrigDamRadius->value(); else adloader->triggers[id].radius = 0; - isSaved = false; + if (lval != adloader->triggers[id].radius) isSaved = false; } void MainWindow::on_cbTrigDamage_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].damage; ui->sbTrigDamage->setEnabled(checked); if (checked) adloader->triggers[id].damage = ui->sbTrigDamage->value(); else adloader->triggers[id].damage = 0; - isSaved = false; + if (lval != adloader->triggers[id].damage) isSaved = false; } void MainWindow::on_cbTrigRandRadius_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + float lval = adloader->triggers[id].randomPosRadius; ui->sbTrigRandomRadius->setEnabled(checked); if (checked) adloader->triggers[id].randomPosRadius = ui->sbTrigRandomRadius->value(); else adloader->triggers[id].randomPosRadius = 0; - isSaved = false; + if (lval != adloader->triggers[id].randomPosRadius) isSaved = false; } void MainWindow::on_cbTrigCount_toggled(bool checked) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + int lval = adloader->triggers[id].count; ui->sbTrigCount->setEnabled(checked); if (checked) adloader->triggers[id].count = ui->sbTrigCount->value(); else adloader->triggers[id].count = 0; - isSaved = false; + if (lval != adloader->triggers[id].count) isSaved = false; } @@ -923,7 +965,6 @@ void MainWindow::on_pbTrigAdd_clicked() adloader->triggers.insert(trig.id,trig); int index = adloader->triggers.keys().indexOf(i); trigModel->refresh(adloader->triggers.values()); - ui->lvTriggers->setModel((QAbstractItemModel * )trigModel); ui->lvTriggers->reset(); ui->lvTriggers->selectionModel()->setCurrentIndex(ui->lvTriggers->model()->index(index,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -955,7 +996,6 @@ void MainWindow::on_pbTrigDel_clicked() { adloader->triggers.remove(id); trigModel->refresh(adloader->triggers.values()); - ui->lvTriggers->setModel((QAbstractItemModel * )trigModel); ui->lvTriggers->reset(); ui->lvTriggers->selectionModel()->setCurrentIndex(ui->lvTriggers->model()->index(0,0),QItemSelectionModel::ClearAndSelect); isSaved = false; @@ -966,6 +1006,7 @@ void MainWindow::on_pbTrigDel_clicked() void MainWindow::on_cbTrigType_currentIndexChanged(int index) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + srcTriggerType::triggerType lval = adloader->triggers[id].type; adloader->triggers[id].type = (srcTriggerType::triggerType)ui->cbTrigType->itemData(index).toInt(); if (adloader->triggers[id].type != srcTriggerType::onTimer) { @@ -976,15 +1017,16 @@ void MainWindow::on_cbTrigType_currentIndexChanged(int index) ui->sbTrigTimer->setVisible(true); ui->sbTrigTimer->setValue(adloader->triggers[id].timer); } - isSaved = false; + if (lval != adloader->triggers[id].type) isSaved = false; } void MainWindow::on_cbTrigChildAim_currentIndexChanged(int index) { int id = adloader->triggers.values().at(ui->lvTriggers->currentIndex().row()).id; + srcTriggerType::aimType lval = adloader->triggers[id].childAim; adloader->triggers[id].childAim = (srcTriggerType::aimType)ui->cbTrigChildAim->itemData(index).toInt(); - isSaved = false; + if (lval != adloader->triggers[id].childAim)isSaved = false; } @@ -1022,8 +1064,122 @@ void MainWindow::refresh_lwImages(QStringList pathes) void MainWindow::on_pbImgDel_clicked() { - int id = adloader->animations.values().at(ui->lvAnimations->currentIndex().row()).id; - for (int i=0; ilwImages->selectedItems().size(); ++i) - adloader->animations[id].pathes.removeOne(ui->lwImages->selectedItems().at(i)->text()); - refresh_lwImages(adloader->animations.value(id).pathes); + if (!ui->lwImages->selectedItems().isEmpty()) + { + int id = adloader->animations.values().at(ui->lvAnimations->currentIndex().row()).id; + for (int i=0; ilwImages->selectedItems().size(); ++i) + adloader->animations[id].pathes.removeOne(ui->lwImages->selectedItems().at(i)->text()); + refresh_lwImages(adloader->animations.value(id).pathes); + isSaved = false; + } +} + + +void MainWindow::on_pbAnimAdd_clicked() +{ + int i = 1; + while (adloader->animations.contains(i)) i++; + tbAnimation anim; + anim.id = i; + adloader->animations.insert(anim.id,anim); + int index = adloader->animations.keys().indexOf(i); + animModel->refresh(adloader->animations.values()); + ui->lvAnimations->reset(); + ui->lvAnimations->selectionModel()->setCurrentIndex(ui->lvAnimations->model()->index(index,0),QItemSelectionModel::ClearAndSelect); + isSaved = false; +} + + +void MainWindow::on_cbAlImage_currentIndexChanged(int index) +{ + if (!ui->lvAliens->currentIndex().isValid()) return; + if (index >= 0) + { + int id = adloader->aliens.values().at(ui->lvAliens->currentIndex().row()).id; + int lval = adloader->aliens[id].imgType; + adloader->aliens[id].imgType = adloader->animations.values().at(index).id; + ui->lbAlAnim->setAnimation(adloader->animations.value(adloader->aliens[id].imgType).pathes); + if (lval != adloader->aliens[id].imgType) isSaved = false; + } +} + + +void MainWindow::on_cbTwImage_currentIndexChanged(int index) +{ + if (!ui->lvTowers->currentIndex().isValid()) return; + if (index >= 0) + { + int id = adloader->towers.values().at(ui->lvTowers->currentIndex().row()).id; + int lval = adloader->towers[id].imgType; + adloader->towers[id].imgType = adloader->animations.values().at(index).id; + ui->lbTwAnim->setAnimation(adloader->animations.value(adloader->towers[id].imgType).pathes); + if (lval != adloader->towers[id].imgType) isSaved = false; + } +} + + +void MainWindow::on_cbSplImage_currentIndexChanged(int index) +{ + if (!ui->lvSplashes->currentIndex().isValid()) return; + if (index >= 0) + { + int id = adloader->splashes.values().at(ui->lvSplashes->currentIndex().row()).id; + int lval = adloader->splashes[id].imgType; + adloader->splashes[id].imgType = adloader->animations.values().at(index).id; + ui->lbSplAnim->setAnimation(adloader->animations.value(adloader->splashes[id].imgType).pathes); + if (lval != adloader->splashes[id].imgType) isSaved = false; + } +} + +void MainWindow::on_pbAnimDel_clicked() +{ + if (adloader->animations.size() < 2) return; + QMessageBox msgBox; + int id = adloader->animations.keys().at(ui->lvAnimations->currentIndex().row()); + for (int i=0; itowers.size(); i++) + { + if (adloader->towers.values().at(i).imgType == id) + { + msgBox.setText(tr("You can not delete anim %1").arg(id)); + msgBox.setInformativeText(tr("It used by tower %1 id=%2").arg(adloader->towers.values().at(i).name).arg(adloader->towers.values().at(i).id)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + return; + } + } + for (int i=0; ialiens.size(); i++) + { + if (adloader->aliens.values().at(i).imgType == id) + { + msgBox.setText(tr("You can not delete anim %1").arg(id)); + msgBox.setInformativeText(tr("It used by alien %1 id=%2").arg(adloader->aliens.values().at(i).name).arg(adloader->aliens.values().at(i).id)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + return; + } + } + for (int i=0; isplashes.size(); i++) + { + if (adloader->splashes.values().at(i).imgType == id) + { + msgBox.setText(tr("You can not delete anim %1").arg(id)); + msgBox.setInformativeText(tr("It used by splash %1 id=%2").arg(adloader->splashes.values().at(i).name).arg(adloader->splashes.values().at(i).id)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + return; + } + } + msgBox.setText(tr("Delete anim %1").arg(id)); + msgBox.setInformativeText(tr("Are you sure?")); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Ok); + int ret = msgBox.exec(); + if (ret == QMessageBox::Ok) + { + adloader->animations.remove(id); + animModel->refresh(adloader->animations.values()); + ui->lvAnimations->reset(); + ui->lvAnimations->selectionModel()->setCurrentIndex(ui->lvAnimations->model()->index(0,0),QItemSelectionModel::ClearAndSelect); + isSaved = false; + } } diff --git a/ADeditor/mainwindow.h b/ADeditor/mainwindow.h index fd6bdee..edde59c 100644 --- a/ADeditor/mainwindow.h +++ b/ADeditor/mainwindow.h @@ -13,6 +13,7 @@ #include "triggermodel.h" #include "mapmodel.h" #include "animationmodel.h" +#include "animlabel.h" namespace Ui { class MainWindow; @@ -38,12 +39,19 @@ private: AnimationModel * animModel; QGraphicsScene * mapScene; + //AnimLabel * alb; + bool isSaved; void refresh_lwImages(QStringList pathes); void closeEvent(QCloseEvent *); private slots: - void on_pbImgDel_clicked(); + void on_pbAnimDel_clicked(); + void on_cbSplImage_currentIndexChanged(int index); + void on_cbTwImage_currentIndexChanged(int index); + void on_cbAlImage_currentIndexChanged(int index); + void on_pbAnimAdd_clicked(); + void on_pbImgDel_clicked(); void on_pbImgAdd_clicked(); void on_cbTrigChildAim_currentIndexChanged(int index); void on_cbTrigType_currentIndexChanged(int index); diff --git a/ADeditor/mainwindow.ui b/ADeditor/mainwindow.ui index 88d9160..87d1449 100644 --- a/ADeditor/mainwindow.ui +++ b/ADeditor/mainwindow.ui @@ -24,10 +24,33 @@ 2 + + + + Cancel + + + + + + + Save + + + + + QTabWidget::North + + + QTabWidget::Rounded + - 0 + 5 + + + true @@ -356,6 +379,13 @@ + + + + + + + @@ -387,7 +417,7 @@ Qt::Horizontal - + @@ -747,6 +777,13 @@ + + + + + + + @@ -778,7 +815,7 @@ Qt::Horizontal - + @@ -1003,6 +1040,13 @@ + + + + + + + @@ -1034,7 +1078,7 @@ Qt::Horizontal - + @@ -1390,7 +1434,7 @@ Qt::Horizontal - + @@ -1675,24 +1719,17 @@ - - - - Cancel - - - - - - - Save - - - + + + AnimLabel + QLabel +
animlabel.h
+
+
diff --git a/adcore.cpp b/adcore.cpp index 171f34b..9fee9f5 100644 --- a/adcore.cpp +++ b/adcore.cpp @@ -6,15 +6,16 @@ AD_Core::AD_Core(QObject *parent) : step = 0; //admap = new Map(1); //addata = new Game_Data(admap); - adloader = new Loader(); + Loader * adloader = new Loader(); adloader->load("data2.xml"); //adloader->save("data2.xml"); addata = adloader->loadlevel(1); + delete adloader; if (addata != 0) qDebug("Sucsess"); else qFatal("Error"); - Player * pl1 = new Player(0); + //Player * pl1 = new Player(0); // Player * pl2 = new Player(0); - addata->players.push_back(pl1); + //addata->players.push_back(pl1); // addata->players.push_back(pl2); adaliens = new Aliens(addata); adtowers = new Towers(addata); diff --git a/adcore.h b/adcore.h index 6e93294..3d51ebd 100644 --- a/adcore.h +++ b/adcore.h @@ -17,7 +17,7 @@ public: Aliens * adaliens; Towers * adtowers; Splashes * adsplashes; - Loader * adloader; + //Loader * adloader; unsigned int step; private: diff --git a/aliendefender.pro.user b/aliendefender.pro.user index 0381f94..8e4a063 100644 --- a/aliendefender.pro.user +++ b/aliendefender.pro.user @@ -76,7 +76,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wExeabp7q4,guid=18815993df3603fdc64a3f6d4c7b5822 + 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 @@ -84,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-4vN5uf + GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -95,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/1205,unix/buull-eeePC:/tmp/.ICE-unix/1205 + 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=1239 - SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh + SSH_AGENT_PID=1195 + SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-x9URui/database + 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-1283151906.338331-318132279 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931 /home/andrey/AD/aliendefender/aliendefender.pro @@ -124,7 +124,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wExeabp7q4,guid=18815993df3603fdc64a3f6d4c7b5822 + 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 @@ -132,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-4vN5uf + GNOME_KEYRING_CONTROL=/tmp/keyring-vNW3fv GTK_MODULES=canberra-gtk-module HOME=/home/andrey LANG=ru_RU.UTF-8 @@ -143,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/1205,unix/buull-eeePC:/tmp/.ICE-unix/1205 + 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=1239 - SSH_AUTH_SOCK=/tmp/keyring-4vN5uf/ssh + SSH_AGENT_PID=1195 + SSH_AUTH_SOCK=/tmp/keyring-vNW3fv/ssh USER=andrey USERNAME=andrey - XAUTHORITY=/var/run/gdm/auth-for-andrey-x9URui/database + 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-1283151906.338331-318132279 + XDG_SESSION_COOKIE=f0649decca52f2beb55c9ea74ad1d028-1284559837.801731-819619931 false diff --git a/data2.xml b/data2.xml index 7cec09d..cd7a992 100644 --- a/data2.xml +++ b/data2.xml @@ -25,7 +25,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -110,5 +110,6 @@ + diff --git a/loader.cpp b/loader.cpp index 6ef6df3..108bdb2 100644 --- a/loader.cpp +++ b/loader.cpp @@ -268,6 +268,12 @@ Game_Data * Loader::loadlevel(int id) Map * map = new Map(tbm.data,tbm.size,tbm.name,tbm.maxPlayers,tbm.imgType); //int maxPlayers = map->maxPlayers(); Game_Data * gd = new Game_Data(map); + for (int i=0; imaxPlayers(); i++) + { + Player * pl = new Player(0); + gd->players.append(pl); + } + qDebug() << gd->players.size(); for (int i=0; imaxPlayers(); ++i) gd->players.push_back(new Player(i)); QList wollist = levWaves.values(id); diff --git a/map.h b/map.h index a2abeb6..2fc4dea 100644 --- a/map.h +++ b/map.h @@ -11,7 +11,8 @@ Q_OBJECT public: enum CellType { - Free = 0, + Free = 0, // FIXME: not worked yet!! + // FIXME: must add Free cell to all functions Player = 1, // use Player + playerId for multiplayer AlienPath = 1000, // use AlienPath + Player and + playerId PlayerTower = -1, // use PlayerTower - Player - playerId @@ -19,16 +20,20 @@ public: Start = 9999, Finish = 8888 }; + // 0 - free for any player // 1 - free for player 1 // 2 - free for player 2 // 3 - -/- // 1001 - player 1, free, but it is alien path (for optimization) - // 1002 - -/- - // 99999 - start field or finish field - // -1 - player 1 tower - // -2 - player 2 tower - // -3 - -/- - // -1000 - it is wall or some place where you can't build + // 1001 - player 2, free, but it is alien path (for optimization) + // 1003 - -/- + // 9999 - start field + // 8888 - finish field + // -1 - tower on free cell + // -2 - player 1 tower + // -3 - player 2 tower + // -4 - -/- + // -1000 - it is wall or some place where you can't build any towers explicit Map(QByteArray data, QSize size, QString name, int maxPlayers, int image, QObject *parent = 0);