| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- * playersettings.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "playersettings.h"
- #include "ui_playersettings.h"
- #include "playerparams.h"
- #include "mainwindow.h"
- PlayerSettings::PlayerSettings(MapController & ctrl, QWidget *parent) :
- QDialog(parent),
- ui(new Ui::PlayerSettings),
- controller(ctrl)
- {
- ui->setupUi(this);
- show();
- int players = 0;
- const int minAllowedPlayers = 2;
- for(auto & p : controller.map()->players)
- {
- if(p.canAnyonePlay())
- {
- paramWidgets.push_back(new PlayerParams(controller, players));
- ui->playersLayout->addWidget(paramWidgets.back());
- ++players;
- }
- }
- if(players < minAllowedPlayers)
- ui->playersCount->setCurrentText("");
- else
- ui->playersCount->setCurrentIndex(players - minAllowedPlayers);
-
- setAttribute(Qt::WA_DeleteOnClose);
- }
- PlayerSettings::~PlayerSettings()
- {
- delete ui;
- }
- void PlayerSettings::on_playersCount_currentIndexChanged(int index)
- {
- const auto selectedPlayerCount = index + 2;
- assert(selectedPlayerCount <= controller.map()->players.size());
- for(int i = 0; i < selectedPlayerCount; ++i)
- {
- if(i < paramWidgets.size())
- continue;
- auto & p = controller.map()->players[i];
- p.canComputerPlay = true;
- paramWidgets.push_back(new PlayerParams(controller, i));
- ui->playersLayout->addWidget(paramWidgets.back());
- }
- assert(!paramWidgets.empty());
- for(int i = paramWidgets.size() - 1; i >= selectedPlayerCount; --i)
- {
- auto & p = controller.map()->players[i];
- p.canComputerPlay = false;
- p.canHumanPlay = false;
- ui->playersLayout->removeWidget(paramWidgets[i]);
- delete paramWidgets[i];
- paramWidgets.pop_back();
- }
- }
- void PlayerSettings::on_pushButton_clicked()
- {
- for(auto * w : paramWidgets)
- {
- controller.map()->players[w->playerColor] = w->playerInfo;
- }
- controller.commitChangeWithoutRedraw();
- close();
- }
|