mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-29 06:05:30 -08:00
Support starting games with fewer than max players (#5338)
This commit is contained in:
@@ -81,7 +81,7 @@ Server_Game::Server_Game(const ServerInfo_User &_creatorInfo,
|
||||
currentReplay->set_replay_id(room->getServer()->getDatabaseInterface()->getNextReplayId());
|
||||
description = _description.simplified();
|
||||
|
||||
connect(this, SIGNAL(sigStartGameIfReady()), this, SLOT(doStartGameIfReady()), Qt::QueuedConnection);
|
||||
connect(this, &Server_Game::sigStartGameIfReady, this, &Server_Game::doStartGameIfReady, Qt::QueuedConnection);
|
||||
|
||||
getInfo(*currentReplay->mutable_game_info());
|
||||
|
||||
@@ -311,20 +311,31 @@ void Server_Game::sendGameStateToPlayers()
|
||||
}
|
||||
}
|
||||
|
||||
void Server_Game::doStartGameIfReady()
|
||||
void Server_Game::doStartGameIfReady(bool forceStartGame)
|
||||
{
|
||||
Server_DatabaseInterface *databaseInterface = room->getServer()->getDatabaseInterface();
|
||||
QMutexLocker locker(&gameMutex);
|
||||
|
||||
if (getPlayerCount() < maxPlayers)
|
||||
if (getPlayerCount() < maxPlayers && !forceStartGame) {
|
||||
return;
|
||||
for (Server_Player *player : players.values()) {
|
||||
if (!player->getReadyStart() && !player->getSpectator())
|
||||
return;
|
||||
}
|
||||
|
||||
for (Server_Player *player : players.values()) {
|
||||
if (!player->getSpectator())
|
||||
if (!player->getReadyStart() && !player->getSpectator()) {
|
||||
if (forceStartGame) {
|
||||
// Player is not ready to start, so kick them
|
||||
// TODO: Move them to Spectators instead
|
||||
kickPlayer(player->getPlayerId());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (Server_Player *player : players.values()) {
|
||||
if (!player->getSpectator()) {
|
||||
player->setupZones();
|
||||
}
|
||||
}
|
||||
|
||||
gameStarted = true;
|
||||
@@ -369,9 +380,9 @@ void Server_Game::doStartGameIfReady()
|
||||
emit gameInfoChanged(gameInfo);
|
||||
}
|
||||
|
||||
void Server_Game::startGameIfReady()
|
||||
void Server_Game::startGameIfReady(bool forceStartGame)
|
||||
{
|
||||
emit sigStartGameIfReady();
|
||||
emit sigStartGameIfReady(forceStartGame);
|
||||
}
|
||||
|
||||
void Server_Game::stopGameIfFinished()
|
||||
|
||||
Reference in New Issue
Block a user