This commit is contained in:
Max-Wilhelm Bruker 2010-05-26 17:33:44 +02:00
parent cb045907cb
commit 628f58cd56
2 changed files with 15 additions and 7 deletions

View file

@ -54,7 +54,7 @@ public:
bool getGameStarted() const { return gameStarted; } bool getGameStarted() const { return gameStarted; }
int getPlayerCount() const; int getPlayerCount() const;
int getSpectatorCount() const; int getSpectatorCount() const;
QList<Server_Player *> getPlayers() const { return players.values(); } const QMap<int, Server_Player *> &getPlayers() const { return players; }
Server_Player *getPlayer(int playerId) const { return players.value(playerId, 0); } Server_Player *getPlayer(int playerId) const { return players.value(playerId, 0); }
int getGameId() const { return gameId; } int getGameId() const { return gameId; }
QString getDescription() const { return description; } QString getDescription() const { return description; }

View file

@ -208,7 +208,7 @@ ResponseCode Server_ProtocolHandler::cmdLogin(Command_Login *cmd, CommandContain
// This might not scale very well. Use an extra QMap if it becomes a problem. // This might not scale very well. Use an extra QMap if it becomes a problem.
const QList<Server_Game *> &serverGames = server->getGames(); const QList<Server_Game *> &serverGames = server->getGames();
for (int i = 0; i < serverGames.size(); ++i) { for (int i = 0; i < serverGames.size(); ++i) {
const QList<Server_Player *> &gamePlayers = serverGames[i]->getPlayers(); const QList<Server_Player *> &gamePlayers = serverGames[i]->getPlayers().values();
for (int j = 0; j < gamePlayers.size(); ++j) for (int j = 0; j < gamePlayers.size(); ++j)
if (gamePlayers[j]->getPlayerName() == playerName) { if (gamePlayers[j]->getPlayerName() == playerName) {
gamePlayers[j]->setProtocolHandler(this); gamePlayers[j]->setProtocolHandler(this);
@ -530,7 +530,7 @@ ResponseCode Server_ProtocolHandler::moveCard(Server_Game *game, Server_Player *
// If the card was moved to another zone, delete all arrows from and to the card // If the card was moved to another zone, delete all arrows from and to the card
if (startzone != targetzone) { if (startzone != targetzone) {
const QList<Server_Player *> &players = game->getPlayers(); const QList<Server_Player *> &players = game->getPlayers().values();
for (int i = 0; i < players.size(); ++i) { for (int i = 0; i < players.size(); ++i) {
QList<int> arrowsToDelete; QList<int> arrowsToDelete;
QMapIterator<int, Server_Arrow *> arrowIterator(players[i]->getArrows()); QMapIterator<int, Server_Arrow *> arrowIterator(players[i]->getArrows());
@ -709,11 +709,19 @@ ResponseCode Server_ProtocolHandler::cmdNextTurn(Command_NextTurn * /*cmd*/, Com
{ {
if (!game->getGameStarted()) if (!game->getGameStarted())
return RespGameNotStarted; return RespGameNotStarted;
const QMap<int, Server_Player *> &players = game->getPlayers();
const QList<int> keys = players.keys();
int activePlayer = game->getActivePlayer(); int activePlayer = game->getActivePlayer();
if (++activePlayer == game->getPlayerCount()) int listPos = keys.indexOf(activePlayer);
activePlayer = 0; do {
game->setActivePlayer(activePlayer); ++listPos;
if (listPos == keys.size())
listPos = 0;
} while (players.value(keys[listPos])->getSpectator());
game->setActivePlayer(keys[listPos]);
return RespOk; return RespOk;
} }