Fixed crash when leaving game as spectator

This commit is contained in:
Max-Wilhelm Bruker 2010-09-13 20:07:47 +02:00
parent 3152097084
commit fe9798bf46
2 changed files with 17 additions and 18 deletions

View file

@ -272,7 +272,7 @@ void TabGame::actConcede()
if (QMessageBox::question(this, tr("Concede"), tr("Are you sure you want to concede this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) if (QMessageBox::question(this, tr("Concede"), tr("Are you sure you want to concede this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes)
return; return;
sendGameCommand(new Command_Concede, getActiveLocalPlayer()->getId()); sendGameCommand(new Command_Concede);
} }
void TabGame::actLeaveGame() void TabGame::actLeaveGame()
@ -280,14 +280,14 @@ void TabGame::actLeaveGame()
if (QMessageBox::question(this, tr("Leave game"), tr("Are you sure you want to leave this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) if (QMessageBox::question(this, tr("Leave game"), tr("Are you sure you want to leave this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes)
return; return;
sendGameCommand(new Command_LeaveGame, getActiveLocalPlayer()->getId()); sendGameCommand(new Command_LeaveGame);
deleteLater(); deleteLater();
} }
void TabGame::actSay() void TabGame::actSay()
{ {
if (!sayEdit->text().isEmpty()) { if (!sayEdit->text().isEmpty()) {
sendGameCommand(new Command_Say(-1, sayEdit->text()), getActiveLocalPlayer()->getId()); sendGameCommand(new Command_Say(-1, sayEdit->text()));
sayEdit->clear(); sayEdit->clear();
} }
} }
@ -297,12 +297,12 @@ void TabGame::actNextPhase()
int phase = currentPhase; int phase = currentPhase;
if (++phase >= phasesToolbar->phaseCount()) if (++phase >= phasesToolbar->phaseCount())
phase = 0; phase = 0;
sendGameCommand(new Command_SetActivePhase(-1, phase), getActiveLocalPlayer()->getId()); sendGameCommand(new Command_SetActivePhase(-1, phase));
} }
void TabGame::actNextTurn() void TabGame::actNextTurn()
{ {
sendGameCommand(new Command_NextTurn, getActiveLocalPlayer()->getId()); sendGameCommand(new Command_NextTurn);
} }
void TabGame::actRemoveLocalArrows() void TabGame::actRemoveLocalArrows()
@ -315,7 +315,7 @@ void TabGame::actRemoveLocalArrows()
QMapIterator<int, ArrowItem *> arrowIterator(player->getArrows()); QMapIterator<int, ArrowItem *> arrowIterator(player->getArrows());
while (arrowIterator.hasNext()) { while (arrowIterator.hasNext()) {
ArrowItem *a = arrowIterator.next().value(); ArrowItem *a = arrowIterator.next().value();
sendGameCommand(new Command_DeleteArrow(-1, a->getId()), getActiveLocalPlayer()->getId()); sendGameCommand(new Command_DeleteArrow(-1, a->getId()));
} }
} }
} }
@ -397,23 +397,20 @@ void TabGame::processGameEventContainer(GameEventContainer *cont, AbstractClient
void TabGame::sendGameCommand(GameCommand *command, int playerId) void TabGame::sendGameCommand(GameCommand *command, int playerId)
{ {
if (playerId == -1)
playerId = getActiveLocalPlayer()->getId();
command->setGameId(gameId); command->setGameId(gameId);
AbstractClient *client; AbstractClient *client;
if (clients.size() > 1) if (clients.size() > 1) {
if (playerId == -1)
playerId = getActiveLocalPlayer()->getId();
client = clients.at(playerId); client = clients.at(playerId);
else } else
client = clients.first(); client = clients.first();
client->sendCommand(command); client->sendCommand(command);
} }
void TabGame::sendCommandContainer(CommandContainer *cont, int playerId) void TabGame::sendCommandContainer(CommandContainer *cont, int playerId)
{ {
if (playerId == -1)
playerId = getActiveLocalPlayer()->getId();
const QList<Command *> &cmdList = cont->getCommandList(); const QList<Command *> &cmdList = cont->getCommandList();
for (int i = 0; i < cmdList.size(); ++i) { for (int i = 0; i < cmdList.size(); ++i) {
GameCommand *cmd = qobject_cast<GameCommand *>(cmdList[i]); GameCommand *cmd = qobject_cast<GameCommand *>(cmdList[i]);
@ -422,9 +419,11 @@ void TabGame::sendCommandContainer(CommandContainer *cont, int playerId)
} }
AbstractClient *client; AbstractClient *client;
if (clients.size() > 1) if (clients.size() > 1) {
if (playerId == -1)
playerId = getActiveLocalPlayer()->getId();
client = clients.at(playerId); client = clients.at(playerId);
else } else
client = clients.first(); client = clients.first();
client->sendCommandContainer(cont); client->sendCommandContainer(cont);
} }

View file

@ -155,8 +155,8 @@ public:
void processGameEventContainer(GameEventContainer *cont, AbstractClient *client); void processGameEventContainer(GameEventContainer *cont, AbstractClient *client);
public slots: public slots:
void sendGameCommand(GameCommand *command, int playerId); void sendGameCommand(GameCommand *command, int playerId = -1);
void sendCommandContainer(CommandContainer *cont, int playerId); void sendCommandContainer(CommandContainer *cont, int playerId = -1);
}; };
#endif #endif