(Hopefully) solved the player number problem, when players join and leave an existing game. Numbers are now assigned on game start, not before. Note: Network play is not compatible to the current official version.

This commit is contained in:
lotodore
2007-07-24 14:55:14 +00:00
parent 561b974cdc
commit bd08245c1c
10 changed files with 146 additions and 60 deletions
+15 -10
View File
@@ -53,7 +53,7 @@ private:
ClientThread::ClientThread(GuiInterface &gui)
: m_curState(NULL), m_gui(gui), m_curGameId(1), m_guiPlayerNum(0)
: m_curState(NULL), m_gui(gui), m_curGameId(1), m_guiPlayerId(0)
{
m_context.reset(new ClientContext);
m_senderCallback.reset(new ClientSenderCallback(*this));
@@ -244,15 +244,15 @@ ClientThread::SetStartData(const StartData &startData)
}
int
ClientThread::GetGuiPlayerNum() const
ClientThread::GetGuiPlayerId() const
{
return m_guiPlayerNum;
return m_guiPlayerId;
}
void
ClientThread::SetGuiPlayerNum(int guiPlayerNum)
ClientThread::SetGuiPlayerId(int guiPlayerId)
{
m_guiPlayerNum = guiPlayerNum;
m_guiPlayerId = guiPlayerId;
}
boost::shared_ptr<Game>
@@ -303,21 +303,27 @@ ClientThread::RemovePlayerData(unsigned playerId)
void
ClientThread::MapPlayerDataList()
{
// Retrieve the GUI player.
boost::shared_ptr<PlayerData> guiPlayer = GetPlayerDataByUniqueId(GetGuiPlayerId());
assert(guiPlayer.get());
int guiPlayerNum = guiPlayer->GetNumber();
// Create a copy of the player list so that the GUI player
// is player 0. This is mapped because the GUI depends on it.
PlayerDataList mappedList;
PlayerDataList::const_iterator i = m_playerDataList.begin();
PlayerDataList::const_iterator end = m_playerDataList.end();
int numPlayers = GetStartData().numberOfPlayers;
// Create a copy of the player list so that the GUI player
// is player 0. This is mapped because the GUI depends on it.
while (i != end)
{
boost::shared_ptr<PlayerData> tmpData(new PlayerData(*(*i)));
int numberDiff = tmpData->GetNumber() - GetGuiPlayerNum();
int numberDiff = tmpData->GetNumber() - guiPlayerNum;
if (numberDiff >= 0)
tmpData->SetNumber(numberDiff);
else
tmpData->SetNumber(GetStartData().numberOfPlayers + numberDiff);
tmpData->SetNumber(numPlayers + numberDiff);
mappedList.push_back(tmpData);
++i;
}
@@ -326,7 +332,6 @@ ClientThread::MapPlayerDataList()
mappedList.sort(*boost::lambda::_1 < *boost::lambda::_2);
m_playerDataList = mappedList;
SetGuiPlayerNum(0);
}
const PlayerDataList &