/** This function makes sure that a current player is defined. This is called * when a screen skipping command line option is given (-N, -R, ...), in * which case there might not be a current player (if no default player is * set in players.xml, i.e. the 'remember be' option was not picked ). Since * a lot of code depends on having a local player, just set the most * frequently used non-guest to be the current player. */ void PlayerManager::enforceCurrentPlayer() { if (m_current_player) return; PlayerProfile* player; for_in(player, m_all_players) { if (!player->isGuestAccount()) { Log::info("PlayerManager", "Enfocring current player '%ls'.", player->getName().c_str() ); m_current_player = player; return; } } // for player in m_all_players // This shouldn't happen - but just in case: add the default players // again, and search again for a non-guest player. addDefaultPlayer(); for_in(player, m_all_players) { if (!player->isGuestAccount()) { Log::info("PlayerManager", "Enfocring current player '%s'.", player->getName().c_str()); m_current_player = player; return; } } // for player in m_all_players // Now this really really should not happen. Log::fatal("PlayerManager", "Failed to find a non-guest player."); } // enforceCurrentPlayer
// ---------------------------------------------------------------------------- void MainMenuScreen::onUpdate(float delta) { PlayerProfile *player = PlayerManager::getCurrentPlayer(); if(PlayerManager::getCurrentOnlineState() == PlayerProfile::OS_GUEST || PlayerManager::getCurrentOnlineState() == PlayerProfile::OS_SIGNED_IN) { m_user_id->setText(player->getLastOnlineName() + "@stk"); m_online->setActivated(); m_online->setLabel( _("Online")); } else if (PlayerManager::getCurrentOnlineState() == PlayerProfile::OS_SIGNED_OUT) { m_online->setActivated(); m_online->setLabel( _("Login" )); m_user_id->setText(player->getName()); } else { // now must be either logging in or logging out m_online->setDeactivated(); m_user_id->setText(player->getName()); } m_online->setLabel(PlayerManager::getCurrentOnlineId() ? _("Online") : _("Login" ) ); IconButtonWidget* addons_icon = getWidget<IconButtonWidget>("addons"); if (addons_icon != NULL) { if (addons_manager->wasError()) { addons_icon->setActivated(); addons_icon->resetAllBadges(); addons_icon->setBadge(BAD_BADGE); } else if (addons_manager->isLoading() && UserConfigParams::m_internet_status == Online::RequestManager::IPERM_ALLOWED) { // Addons manager is still initialising/downloading. addons_icon->setDeactivated(); addons_icon->resetAllBadges(); addons_icon->setBadge(LOADING_BADGE); } else { addons_icon->setActivated(); addons_icon->resetAllBadges(); } // maybe add a new badge when not allowed to access the net } LabelWidget* w = getWidget<LabelWidget>("info_addons"); w->update(delta); if(w->scrolledOff()) { const core::stringw &news_text = NewsManager::get()->getNextNewsMessage(); w->setText(news_text, true); } } // onUpdate
/** Called when a player will be deleted. */ void BaseUserScreen::deletePlayer() { // Check that there is at least one player left: we need to have a // valid current player, so the last player can not be deleted. if(PlayerManager::get()->getNumNonGuestPlayers()==1) { m_info_widget->setText("You can't delete the only player.", true); m_info_widget->setErrorColor(); return; } PlayerProfile *player = getSelectedPlayer(); irr::core::stringw message = //I18N: In the player info dialog (when deleting) _("Do you really want to delete player '%s' ?", player->getName(true/*ignoreRTL*/)); class ConfirmServer : public MessageDialog::IConfirmDialogListener { BaseUserScreen *m_parent_screen; public: virtual void onConfirm() { m_parent_screen->doDeletePlayer(); } // onConfirm // ------------------------------------------------------------ ConfirmServer(BaseUserScreen *parent) { m_parent_screen = parent; } }; // ConfirmServer new MessageDialog(message, MessageDialog::MESSAGE_DIALOG_CONFIRM, new ConfirmServer(this), true); } // deletePlayer
void OptionsScreenPlayers::eventCallback(Widget* widget, const std::string& name, const int playerID) { if (name == "options_choice") { std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); if (selection == "tab_audio") StateManager::get()->replaceTopMostScreen(OptionsScreenAudio::getInstance()); else if (selection == "tab_video") StateManager::get()->replaceTopMostScreen(OptionsScreenVideo::getInstance()); else if (selection == "tab_players") StateManager::get()->replaceTopMostScreen(OptionsScreenPlayers::getInstance()); else if (selection == "tab_controls") StateManager::get()->replaceTopMostScreen(OptionsScreenInput::getInstance()); else if (selection == "tab_ui") StateManager::get()->replaceTopMostScreen(OptionsScreenUI::getInstance()); } else if (name == "back") { StateManager::get()->escapePressed(); } else if (name == "addplayer") { new EnterPlayerNameDialog(this, 0.5f, 0.4f); } else if (name == "players") { // Find which player in the list was clicked ListWidget* players = this->getWidget<ListWidget>("players"); assert(players != NULL); core::stringw selectedPlayer = players->getSelectionLabel(); const int player_amount = PlayerManager::get()->getNumPlayers(); for (int i=0; i<player_amount; i++) { PlayerProfile *player = PlayerManager::get()->getPlayer(i); if (selectedPlayer == translations->fribidize(player->getName())) { if (!(player->isGuestAccount())) { new PlayerInfoDialog( player, 0.5f, 0.6f ); } return; } } // end for } else if (name == "playername") { race_manager->clearKartLastPositionOnOverworld(); PlayerManager::get()->setCurrentPlayer(NULL,false); StateManager::get()->pushScreen(StoryModeLobbyScreen::getInstance()); } } // eventCallback