From ad40194f25cb78a4cdeff63dff9bd2f6f25c4c78 Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Wed, 11 Aug 2010 01:17:45 +0200 Subject: [PATCH] nextTurn cleanup -> fixed the bug that the game would begin with active player 0 even if there is no player 0 --- common/server_game.cpp | 18 +++++++++++++++++- common/server_game.h | 1 + common/server_protocolhandler.cpp | 13 +------------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/common/server_game.cpp b/common/server_game.cpp index 63abe40d..7e9b4955 100644 --- a/common/server_game.cpp +++ b/common/server_game.cpp @@ -138,7 +138,8 @@ void Server_Game::startGameIfReady() query.exec(); } */ - setActivePlayer(0); + activePlayer = -1; + nextTurn(); } void Server_Game::stopGameIfFinished() @@ -254,6 +255,21 @@ void Server_Game::setActivePhase(int _activePhase) sendGameEvent(new Event_SetActivePhase(-1, activePhase)); } +void Server_Game::nextTurn() +{ + const QList keys = players.keys(); + int listPos = -1; + if (activePlayer != -1) + listPos = keys.indexOf(activePlayer); + do { + ++listPos; + if (listPos == keys.size()) + listPos = 0; + } while (players.value(keys[listPos])->getSpectator()); + + setActivePlayer(keys[listPos]); +} + QList Server_Game::getGameState(Server_Player *playerWhosAsking) const { QList result; diff --git a/common/server_game.h b/common/server_game.h index c6df423f..cd70ebf6 100644 --- a/common/server_game.h +++ b/common/server_game.h @@ -76,6 +76,7 @@ public: int getActivePhase() const { return activePhase; } void setActivePlayer(int _activePlayer); void setActivePhase(int _activePhase); + void nextTurn(); QList getGameState(Server_Player *playerWhosAsking) const; void sendGameEvent(GameEvent *event, GameEventContext *context = 0, Server_Player *exclude = 0); diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 6251c631..b7bc934d 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -952,18 +952,7 @@ ResponseCode Server_ProtocolHandler::cmdNextTurn(Command_NextTurn * /*cmd*/, Com if (!game->getGameStarted()) return RespGameNotStarted; - const QMap &players = game->getPlayers(); - const QList keys = players.keys(); - - int activePlayer = game->getActivePlayer(); - int listPos = keys.indexOf(activePlayer); - do { - ++listPos; - if (listPos == keys.size()) - listPos = 0; - } while (players.value(keys[listPos])->getSpectator()); - - game->setActivePlayer(keys[listPos]); + game->nextTurn(); return RespOk; }