void ArenasScreen::buildTrackList() { DynamicRibbonWidget* w = this->getWidget<DynamicRibbonWidget>("tracks"); assert( w != NULL ); // Re-build track list everytime (accounts for locking changes, etc.) w->clearItems(); RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups"); assert( tabs != NULL ); const std::string curr_group_name = tabs->getSelectionIDString(0); bool soccer_mode = race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER; bool arenas_have_navmesh = false; if (curr_group_name == ALL_ARENA_GROUPS_ID) { const int track_amount = (int)track_manager->getNumberOfTracks(); for (int n=0; n<track_amount; n++) { Track* curr = track_manager->getTrack(n); if (soccer_mode) { if(curr->isSoccer() && curr->hasNavMesh() && !arenas_have_navmesh) arenas_have_navmesh = true; if(!curr->isSoccer() || (!(curr->hasNavMesh() || race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode))) { if (curr->isSoccer()) m_unsupported_arena.insert(n); continue; } } else { if(curr->isArena() && curr->hasNavMesh() && !arenas_have_navmesh) arenas_have_navmesh = true; if(!curr->isArena() || (!(curr->hasNavMesh() || race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode))) { if (curr->isArena()) m_unsupported_arena.insert(n); continue; } } if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else { w->addItem( translations->fribidize(curr->getName()), curr->getIdent(), curr->getScreenshotFile(), 0, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE ); } } } else { const std::vector<int>& currArenas = track_manager->getArenasInGroup(curr_group_name, soccer_mode); const int track_amount = (int)currArenas.size(); for (int n=0; n<track_amount; n++) { Track* curr = track_manager->getTrack(currArenas[n]); if (soccer_mode) { if(curr->isSoccer() && curr->hasNavMesh() && !arenas_have_navmesh) arenas_have_navmesh = true; if(!curr->isSoccer() || (!(curr->hasNavMesh() || race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode))) { if (curr->isSoccer()) m_unsupported_arena.insert(currArenas[n]); continue; } } else { if(curr->isArena() && curr->hasNavMesh() && !arenas_have_navmesh) arenas_have_navmesh = true; if(!curr->isArena() || (!(curr->hasNavMesh() || race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode))) { if (curr->isArena()) m_unsupported_arena.insert(currArenas[n]); continue; } } if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else { w->addItem( translations->fribidize(curr->getName()), curr->getIdent(), curr->getScreenshotFile(), 0, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE ); } } } if (arenas_have_navmesh || race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode) w->addItem(_("Random Arena"), "random_track", "/gui/icons/track_random.png"); w->updateItemDisplay(); if (m_unsupported_arena.size() > 0) w->setText( _P("%d arena unavailable in single player.", "%d arenas unavailable in single player.", (int)m_unsupported_arena.size()) ); }