mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-13 05:20:00 -08:00
[Client] Address the seat-order review comments
- Give the game setup checkboxes a row of their own so they no longer collide in the create-game dialog - Rename DlgTurnOrder::randomize() to isRandomizeRequested() - Document what the ids in GameState::seatOrder mean - Keep "Set turn order..." in sync with the game: hidden for non-hosts and once the game has started, re-shown when the game ends or hosting moves to the local player (new GameState::hostChanged signal)
This commit is contained in:
parent
8cdff1ad5c
commit
9ba1946473
5 changed files with 30 additions and 8 deletions
|
|
@ -123,10 +123,10 @@ void DlgCreateGame::sharedCtor()
|
||||||
auto *gameSetupOptionsLayout = new QGridLayout;
|
auto *gameSetupOptionsLayout = new QGridLayout;
|
||||||
gameSetupOptionsLayout->addWidget(startingLifeTotalLabel, 0, 0);
|
gameSetupOptionsLayout->addWidget(startingLifeTotalLabel, 0, 0);
|
||||||
gameSetupOptionsLayout->addWidget(startingLifeTotalEdit, 0, 1);
|
gameSetupOptionsLayout->addWidget(startingLifeTotalEdit, 0, 1);
|
||||||
gameSetupOptionsLayout->addWidget(shareDecklistsOnLoadCheckBox, 1, 0);
|
gameSetupOptionsLayout->addWidget(shareDecklistsOnLoadCheckBox, 1, 0, 1, 2);
|
||||||
gameSetupOptionsLayout->addWidget(shufflePlayersCheckBox, 1, 1);
|
gameSetupOptionsLayout->addWidget(shufflePlayersCheckBox, 2, 0, 1, 2);
|
||||||
if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsJudge) {
|
if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsJudge) {
|
||||||
gameSetupOptionsLayout->addWidget(createGameAsJudgeCheckBox, 2, 0);
|
gameSetupOptionsLayout->addWidget(createGameAsJudgeCheckBox, 3, 0, 1, 2);
|
||||||
} else {
|
} else {
|
||||||
createGameAsJudgeCheckBox->setChecked(false);
|
createGameAsJudgeCheckBox->setChecked(false);
|
||||||
createGameAsJudgeCheckBox->setHidden(true);
|
createGameAsJudgeCheckBox->setHidden(true);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public:
|
||||||
|
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
|
|
||||||
[[nodiscard]] bool randomize() const
|
[[nodiscard]] bool isRandomizeRequested() const
|
||||||
{
|
{
|
||||||
return randomizeRequested;
|
return randomizeRequested;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,7 @@ void TabGame::connectToGameState()
|
||||||
{
|
{
|
||||||
connect(game->getGameState(), &GameState::gameStarted, this, &TabGame::startGame);
|
connect(game->getGameState(), &GameState::gameStarted, this, &TabGame::startGame);
|
||||||
connect(game->getGameState(), &GameState::gameStopped, this, &TabGame::stopGame);
|
connect(game->getGameState(), &GameState::gameStopped, this, &TabGame::stopGame);
|
||||||
|
connect(game->getGameState(), &GameState::hostChanged, this, &TabGame::updateTurnOrderAction);
|
||||||
connect(game->getGameState(), &GameState::activePhaseChanged, this, &TabGame::setActivePhase);
|
connect(game->getGameState(), &GameState::activePhaseChanged, this, &TabGame::setActivePhase);
|
||||||
connect(game->getGameState(), &GameState::activePlayerChanged, this, &TabGame::setActivePlayer);
|
connect(game->getGameState(), &GameState::activePlayerChanged, this, &TabGame::setActivePlayer);
|
||||||
}
|
}
|
||||||
|
|
@ -664,7 +665,20 @@ void TabGame::actTurnOrder()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
game->getGameEventHandler()->handleSetPlayerOrder(dlg.order(), dlg.randomize());
|
game->getGameEventHandler()->handleSetPlayerOrder(dlg.order(), dlg.isRandomizeRequested());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the turn order action only when it can actually change anything: the
|
||||||
|
* player must be host and the game must not have started yet. Called whenever
|
||||||
|
* either condition may have changed (game start/stop, host change).
|
||||||
|
*/
|
||||||
|
void TabGame::updateTurnOrderAction()
|
||||||
|
{
|
||||||
|
if (aTurnOrder == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
aTurnOrder->setVisible(game->isHost() && !game->getGameMetaInfo()->started());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -995,6 +1009,7 @@ void TabGame::startGame(bool _resuming)
|
||||||
aConcede->setText(tr("&Concede"));
|
aConcede->setText(tr("&Concede"));
|
||||||
aConcede->setEnabled(true);
|
aConcede->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
updateTurnOrderAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabGame::stopGame()
|
void TabGame::stopGame()
|
||||||
|
|
@ -1017,6 +1032,7 @@ void TabGame::stopGame()
|
||||||
aConcede->setText(tr("&Concede"));
|
aConcede->setText(tr("&Concede"));
|
||||||
aConcede->setEnabled(false);
|
aConcede->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
updateTurnOrderAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabGame::closeGame()
|
void TabGame::closeGame()
|
||||||
|
|
@ -1143,9 +1159,7 @@ void TabGame::createMenuItems()
|
||||||
connect(aReverseTurn, &QAction::triggered, game->getGameEventHandler(), &GameEventHandler::handleReverseTurn);
|
connect(aReverseTurn, &QAction::triggered, game->getGameEventHandler(), &GameEventHandler::handleReverseTurn);
|
||||||
aTurnOrder = new QAction(this);
|
aTurnOrder = new QAction(this);
|
||||||
connect(aTurnOrder, &QAction::triggered, this, &TabGame::actTurnOrder);
|
connect(aTurnOrder, &QAction::triggered, this, &TabGame::actTurnOrder);
|
||||||
if (!game->isHost() || game->getGameMetaInfo()->started()) {
|
updateTurnOrderAction();
|
||||||
aTurnOrder->setVisible(false);
|
|
||||||
}
|
|
||||||
aRemoveLocalArrows = new QAction(this);
|
aRemoveLocalArrows = new QAction(this);
|
||||||
connect(aRemoveLocalArrows, &QAction::triggered, this, &TabGame::actRemoveLocalArrows);
|
connect(aRemoveLocalArrows, &QAction::triggered, this, &TabGame::actRemoveLocalArrows);
|
||||||
aRotateViewCW = new QAction(this);
|
aRotateViewCW = new QAction(this);
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,7 @@ private slots:
|
||||||
void actConcede();
|
void actConcede();
|
||||||
void actCopyGameLink();
|
void actCopyGameLink();
|
||||||
void actTurnOrder();
|
void actTurnOrder();
|
||||||
|
void updateTurnOrderAction();
|
||||||
void actRemoveLocalArrows();
|
void actRemoveLocalArrows();
|
||||||
void actRotateViewCW();
|
void actRotateViewCW();
|
||||||
void actRotateViewCCW();
|
void actRotateViewCCW();
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,11 @@ public:
|
||||||
|
|
||||||
void setHostId(int _hostId)
|
void setHostId(int _hostId)
|
||||||
{
|
{
|
||||||
|
if (hostId == _hostId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
hostId = _hostId;
|
hostId = _hostId;
|
||||||
|
emit hostChanged(hostId);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<AbstractClient *> getClients() const
|
QList<AbstractClient *> getClients() const
|
||||||
|
|
@ -136,6 +140,7 @@ signals:
|
||||||
void gameStopped();
|
void gameStopped();
|
||||||
void activePhaseChanged(int activePhase);
|
void activePhaseChanged(int activePhase);
|
||||||
void activePlayerChanged(int playerId);
|
void activePlayerChanged(int playerId);
|
||||||
|
void hostChanged(int hostId);
|
||||||
void seatOrderChanged(const QList<int> &seatOrder);
|
void seatOrderChanged(const QList<int> &seatOrder);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
@ -156,6 +161,8 @@ private:
|
||||||
int currentPhase;
|
int currentPhase;
|
||||||
int activePlayer;
|
int activePlayer;
|
||||||
bool gameClosed;
|
bool gameClosed;
|
||||||
|
//! Player ids in seating (turn) order, first to play first. Empty until the
|
||||||
|
//! server sends an order, in which case players are laid out in id order.
|
||||||
QList<int> seatOrder;
|
QList<int> seatOrder;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue