// ---------------------------------------------------------------------------- void GPInfoScreen::beforeAddingWidget() { bool random = m_gp.isRandomGP(); if (!random) { // Check if there is a saved GP: SavedGrandPrix* saved_gp = SavedGrandPrix::getSavedGP( StateManager::get()->getActivePlayerProfile(0)->getUniqueID(), m_gp.getId(), race_manager->getNumLocalPlayers()); int tracks = m_gp.getTrackNames().size(); bool continue_visible = saved_gp && saved_gp->getNextTrack() > 0 && saved_gp->getNextTrack() < tracks; RibbonWidget* ribbonButtons = getWidget<RibbonWidget>("buttons"); int id_continue_button = ribbonButtons->findItemNamed("continue"); ribbonButtons->setItemVisible(id_continue_button, continue_visible); ribbonButtons->setLabel(id_continue_button, _("Continue saved GP")); } else { RibbonWidget* ribbonButtons = getWidget<RibbonWidget>("buttons"); int id_continue_button = ribbonButtons->findItemNamed("continue"); ribbonButtons->setItemVisible(id_continue_button, true); ribbonButtons->setLabel(id_continue_button, _("Reload")); } }
/** Called before the screen is shown. It adds the screenshot icon, and * initialises all widgets depending on GP mode (random or not), if a saved * GP is available etc. */ void GPInfoScreen::init() { Screen::init(); m_curr_time = 0.0f; bool random = m_gp.isRandomGP(); getWidget<LabelWidget >("track-text" )->setVisible(random); m_num_tracks_spinner->setVisible(random); getWidget<LabelWidget >("group-text" )->setVisible(random); m_group_spinner->setVisible(random); if(random) { RibbonWidget *rb = getWidget<RibbonWidget>("buttons"); rb->setLabel(1,_(L"Reload") ); std::string restart = file_manager->getAsset(FileManager::GUI, "restart.png"); // We have to recreate the group spinner, but a new group might have // been added or deleted since the last time this screen was shown. const std::vector<std::string>& groups = track_manager->getAllTrackGroups(); m_group_names.clear(); m_group_names.push_back("all"); for (unsigned int i = 0; i < groups.size(); i++) m_group_names.push_back(groups[i]); m_group_spinner->clearLabels(); int index_standard=0; for (unsigned int i = 0; i < m_group_names.size(); i++) { m_group_spinner->addLabel(_(m_group_names[i].c_str())); if (m_group_names[i] == "standard") index_standard = i + 1; } // Try to keep a previously selected group value if(m_group_spinner->getValue() >= (int)groups.size()) { m_group_spinner->setValue(index_standard); m_group_name = "standard"; } else m_group_name = stringc(m_group_names[m_group_spinner->getValue()].c_str()).c_str(); m_max_num_tracks = getMaxNumTracks(m_group_name); m_num_tracks_spinner->setMax(m_max_num_tracks); if(m_num_tracks_spinner->getValue() > m_max_num_tracks || m_num_tracks_spinner->getValue() < 1) { m_num_tracks_spinner->setValue(m_max_num_tracks); } // Now create the random GP: m_gp.createRandomGP(m_num_tracks_spinner->getValue(), m_group_name, getReverse(), true); getWidget<LabelWidget>("name")->setText(translations->fribidize(m_gp.getName()), false); } else { getWidget<LabelWidget>("name")->setText(translations->fribidize(m_gp.getName()), false); m_gp.checkConsistency(); } // Number of AIs // ------------- const bool has_AI = race_manager->hasAI(); m_ai_kart_spinner->setVisible(has_AI); getWidget<LabelWidget>("ai-text")->setVisible(has_AI); if (has_AI) { m_ai_kart_spinner->setActive(true); // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. int num_ai = UserConfigParams::m_num_karts - race_manager->getNumLocalPlayers(); if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + race_manager->getNumLocalPlayers()); m_ai_kart_spinner->setMax(stk_config->m_max_karts - race_manager->getNumLocalPlayers()); // A ftl reace needs at least three karts to make any sense if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_FOLLOW_LEADER) { m_ai_kart_spinner->setMin(3-race_manager->getNumLocalPlayers()); } else m_ai_kart_spinner->setMin(0); } // has_AI addTracks(); addScreenshot(); RibbonWidget* bt_start = getWidget<GUIEngine::RibbonWidget>("buttons"); bt_start->setFocusForPlayer(PLAYER_ID_GAME_MASTER); } // init