void ClientThread::MapPlayerDataList() { // Retrieve the GUI player. boost::shared_ptr<PlayerData> guiPlayer = GetPlayerDataByUniqueId(GetGuiPlayerId()); assert(guiPlayer.get()); m_origGuiPlayerNum = 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; while (i != end) { boost::shared_ptr<PlayerData> tmpData(new PlayerData(*(*i))); int numberDiff = numPlayers - m_origGuiPlayerNum; tmpData->SetNumber((tmpData->GetNumber() + numberDiff) % numPlayers); mappedList.push_back(tmpData); ++i; } // Sort the list by player number. mappedList.sort(*boost::lambda::_1 < *boost::lambda::_2); m_playerDataList = mappedList; }
void Session::startLocalGame(const GameData &gameData, const StartData &startData) { myGameType = GAME_TYPE_LOCAL; currentGame.reset(); currentGameNum++; myGui->initGui(gameData.guiSpeed); PlayerDataList playerDataList; for(int i = 0; i < startData.numberOfPlayers; i++) { //Namen und Avatarpfad abfragen ostringstream myName; if (i==0) { myName << "MyName"; } else { myName << "Opponent" << i << "Name"; } ostringstream myAvatar; if (i==0) { myAvatar << "MyAvatar"; } else { myAvatar << "Opponent" << i << "Avatar"; } //PlayerData erzeugen // UniqueId = PlayerNumber for local games. boost::shared_ptr<PlayerData> playerData(new PlayerData( i, i, i == 0 ? PLAYER_TYPE_HUMAN : PLAYER_TYPE_COMPUTER, PLAYER_RIGHTS_NORMAL, i == 0)); playerData->SetName(myConfig->readConfigString(myName.str())); playerData->SetAvatarFile(myConfig->readConfigString(myAvatar.str())); playerDataList.push_back(playerData); } // EngineFactory erstellen boost::shared_ptr<EngineFactory> factory(new LocalEngineFactory(myConfig)); // LocalEngine erstellen currentGame.reset(new Game(myGui, factory, playerDataList, gameData, startData, currentGameNum, myLog)); //// SPIEL-SCHLEIFE currentGame->initHand(); currentGame->startHand(); // SPIEL-SCHLEIFE }
PlayerDataList SessionManager::GetSpectatorDataList() const { PlayerDataList spectatorList; boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex); SessionMap::const_iterator session_i = m_sessionMap.begin(); SessionMap::const_iterator session_end = m_sessionMap.end(); while (session_i != session_end) { // Get all spectators of the game. if (session_i->second->GetState() == SessionData::Spectating || session_i->second->GetState() == SessionData::SpectatorWaiting) { boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData()); if (!tmpPlayer.get() || tmpPlayer->GetName().empty()) throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0); spectatorList.push_back(tmpPlayer); } ++session_i; } return spectatorList; }