# HG changeset patch # User dag10 # Date 1358752864 18000 # Node ID e691acd778f59d29b8fcaaab8fa2a8384504427b # Parent 02acf6b92f523e497d90af3682c93bb27c404df9 It is now possible to start a game even if not all players are "ready"; a confirmation prompt is shown. This commit updates the server. Unless the official server is updated, this commit will do nothing new. diff -r 02acf6b92f52 -r e691acd778f5 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Mon Jan 21 00:30:18 2013 -0500 +++ b/QTfrontend/hwform.cpp Mon Jan 21 02:21:04 2013 -0500 @@ -1732,7 +1732,7 @@ if (hwnet) { // disconnect connections first to ensure their inexistance and not to connect twice - ui.pageNetGame->BtnStart->disconnect(hwnet); + ui.pageNetGame->BtnStart->disconnect(this); ui.pageNetGame->BtnUpdate->disconnect(hwnet); ui.pageNetGame->leRoomName->disconnect(hwnet); ui.pageNetGame->restrictJoins->disconnect(hwnet); @@ -1741,7 +1741,7 @@ ui.pageNetGame->setRoomName(hwnet->getRoom()); - connect(ui.pageNetGame->BtnStart, SIGNAL(clicked()), hwnet, SLOT(startGame())); + connect(ui.pageNetGame->BtnStart, SIGNAL(clicked()), this, SLOT(startGame())); connect(ui.pageNetGame, SIGNAL(askForUpdateRoomName(const QString &)), hwnet, SLOT(updateRoomName(const QString &))); connect(ui.pageNetGame->restrictJoins, SIGNAL(triggered()), hwnet, SLOT(toggleRestrictJoins())); connect(ui.pageNetGame->restrictTeamAdds, SIGNAL(triggered()), hwnet, SLOT(toggleRestrictTeamAdds())); @@ -1971,3 +1971,17 @@ FeedbackDialog dialog(this); dialog.exec(); } + +void HWForm::startGame() +{ + QMessageBox questionMsg(this); + questionMsg.setIcon(QMessageBox::Question); + questionMsg.setWindowTitle(QMessageBox::tr("Not all players are ready")); + questionMsg.setText(QMessageBox::tr("Are you sure you want to start this game?\nNot all players are ready.")); + questionMsg.setWindowModality(Qt::WindowModal); + questionMsg.addButton(QMessageBox::Yes); + questionMsg.addButton(QMessageBox::Cancel); + + if (hwnet->allPlayersReady() || questionMsg.exec() == QMessageBox::Yes) + hwnet->startGame(); +} diff -r 02acf6b92f52 -r e691acd778f5 QTfrontend/hwform.h --- a/QTfrontend/hwform.h Mon Jan 21 00:30:18 2013 -0500 +++ b/QTfrontend/hwform.h Mon Jan 21 02:21:04 2013 -0500 @@ -139,6 +139,8 @@ void saveDemoWithCustomName(); void openRegistrationPage(); + void startGame(); + private: void _NetConnect(const QString & hostName, quint16 port, QString nick); void UpdateTeamsLists(); diff -r 02acf6b92f52 -r e691acd778f5 QTfrontend/net/newnetclient.cpp --- a/QTfrontend/net/newnetclient.cpp Mon Jan 21 00:30:18 2013 -0500 +++ b/QTfrontend/net/newnetclient.cpp Mon Jan 21 02:21:04 2013 -0500 @@ -933,6 +933,15 @@ RawSendNet(QString("CMD%1%2").arg(delimeter).arg(cmd)); } +bool HWNewNet::allPlayersReady() +{ + int ready = 0; + for (int i = 0; i < m_roomPlayersModel->rowCount(); i++) + if (m_roomPlayersModel->index(i, 0).data(PlayersListModel::Ready).toBool()) ready++; + + return (ready == m_roomPlayersModel->rowCount()); +} + void HWNewNet::startGame() { RawSendNet(QString("START_GAME")); @@ -1016,4 +1025,4 @@ QAbstractItemModel *HWNewNet::roomPlayersModel() { return m_roomPlayersModel; -} +} \ No newline at end of file diff -r 02acf6b92f52 -r e691acd778f5 QTfrontend/net/newnetclient.h --- a/QTfrontend/net/newnetclient.h Mon Jan 21 00:30:18 2013 -0500 +++ b/QTfrontend/net/newnetclient.h Mon Jan 21 02:21:04 2013 -0500 @@ -60,6 +60,7 @@ RoomsListModel * roomsListModel(); QAbstractItemModel * lobbyPlayersModel(); QAbstractItemModel * roomPlayersModel(); + bool allPlayersReady(); private: bool isChief; diff -r 02acf6b92f52 -r e691acd778f5 gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Mon Jan 21 00:30:18 2013 -0500 +++ b/gameServer/HWProtoInRoomState.hs Mon Jan 21 02:21:04 2013 -0500 @@ -185,7 +185,7 @@ let nicks = map (nick . client rnc) . roomClients rnc $ clientRoom rnc ci let allPlayersRegistered = all ((<) 0 . B.length . webPassword . client rnc . teamownerId) $ teams rm - if isMaster cl && playersIn rm == readyPlayers rm && not (isJust $ gameInfo rm) then + if isMaster cl && not (isJust $ gameInfo rm) then if enoughClans rm then return [ ModifyRoom