Implemented Todo : In the 3 strikes arena selection screen, groups are not implemented

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@5216 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria
2010-04-20 17:12:09 +00:00
parent 47ad6f8ba8
commit 0ffd305dc5
2 changed files with 115 additions and 37 deletions

View File

@@ -31,45 +31,95 @@ using namespace irr::video;
DEFINE_SCREEN_SINGLETON( ArenasScreen );
const char* ALL_ARENA_GROUPS_ID = "all";
// ------------------------------------------------------------------------------------------------------
ArenasScreen::ArenasScreen() : Screen("arenas.stkgui")
{
// Dynamically add tabs
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");
assert( tabs != NULL );
tabs->m_children.clearAndDeleteAll();
//FIXME: this returns groups for arenas but tracks too. this means that some of them
// may contain only tracks, no arenas, and thus add an empty tab here...
const std::vector<std::string>& groups = track_manager->getAllGroups();
const int group_amount = groups.size();
for (int n=0; n<group_amount; n++)
{
ButtonWidget* item = new ButtonWidget();
item->m_text = groups[n].c_str(); // FIXME: i18n ?
item->m_properties[PROP_ID] = groups[n];
tabs->m_children.push_back(item);
}
if (group_amount > 1)
{
ButtonWidget* item = new ButtonWidget();
//I18N: name of the tab that will show tracks from all groups
item->m_text = _("All");
item->m_properties[PROP_ID] = ALL_ARENA_GROUPS_ID;
tabs->m_children.push_back(item);
}
} // ArenasScreen
// ------------------------------------------------------------------------------------------------------
void ArenasScreen::eventCallback(Widget* widget, const std::string& name, const int playerID)
{
if(name!="tracks") return;
if (name == "tracks")
{
DynamicRibbonWidget* w2 = dynamic_cast<DynamicRibbonWidget*>(widget);
if (w2 == NULL) return;
DynamicRibbonWidget* w2 = dynamic_cast<DynamicRibbonWidget*>(widget);
if(w2==NULL) return;
const std::string selection = w2->getSelectionIDString(PLAYER_ID_GAME_MASTER);
if (UserConfigParams::m_verbosity>=5)
std::cout << "Clicked on arena " << selection.c_str() << std::endl;
const std::string selection = w2->getSelectionIDString(PLAYER_ID_GAME_MASTER);
if(UserConfigParams::m_verbosity>=5)
std::cout << "Clicked on arena " << selection.c_str() << std::endl;
if (selection == "random_track")
{
// TODO: random arena selection
}
else
{
Track* clickedTrack = track_manager->getTrack(selection);
if (clickedTrack != NULL)
if (selection == "random_track")
{
ITexture* screenshot = irr_driver->getTexture( clickedTrack->getScreenshotFile().c_str() );
// TODO: random arena selection
}
else
{
Track* clickedTrack = track_manager->getTrack(selection);
if (clickedTrack != NULL)
{
ITexture* screenshot = irr_driver->getTexture( clickedTrack->getScreenshotFile().c_str() );
new TrackInfoDialog( clickedTrack->getIdent(), clickedTrack->getName().c_str(),
screenshot, 0.8f, 0.7f);
} // clickedTrack != NULL
} // if random_track
new TrackInfoDialog( clickedTrack->getIdent(), clickedTrack->getName().c_str(),
screenshot, 0.8f, 0.7f);
} // clickedTrack != NULL
} // if random_track
}
else if (name == "trackgroups")
{
buildTrackList();
}
} // eventCallback
// ------------------------------------------------------------------------------------------------------
void ArenasScreen::init()
{
buildTrackList();
// select something by default for the game master
DynamicRibbonWidget* w = this->getWidget<DynamicRibbonWidget>("tracks");
assert( w != NULL );
w->setSelection(w->getItems()[0].m_code_name, PLAYER_ID_GAME_MASTER, true);
} // init
// ------------------------------------------------------------------------------------------------------
void ArenasScreen::buildTrackList()
{
DynamicRibbonWidget* w = this->getWidget<DynamicRibbonWidget>("tracks");
assert( w != NULL );
@@ -77,32 +127,59 @@ void ArenasScreen::init()
// Re-build track list everytime (accounts for locking changes, etc.)
w->clearItems();
const int trackAmount = track_manager->getNumberOfTracks();
//bool hasLockedTracks = false;
for (int n=0; n<trackAmount; n++)
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");
assert( tabs != NULL );
const std::string curr_group_name = tabs->getSelectionIDString(0);
if (curr_group_name == ALL_ARENA_GROUPS_ID)
{
Track* curr = track_manager->getTrack(n);
if (!curr->isArena()) continue;
if (unlock_manager->isLocked(curr->getIdent()))
const int trackAmount = track_manager->getNumberOfTracks();
for (int n=0; n<trackAmount; n++)
{
w->addItem( _("Locked : solve active challenges to gain access to more!"),
"locked", curr->getScreenshotFile(), LOCKED_BADGE );
Track* curr = track_manager->getTrack(n);
if (!curr->isArena()) continue;
if (unlock_manager->isLocked(curr->getIdent()))
{
w->addItem( _("Locked : solve active challenges to gain access to more!"),
"locked", curr->getScreenshotFile(), LOCKED_BADGE );
}
else
{
w->addItem( curr->getName(), curr->getIdent(), curr->getScreenshotFile(), 0,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE );
}
}
else
}
else
{
const std::vector<int>& currArenas = track_manager->getArenasInGroup(curr_group_name);
const int trackAmount = currArenas.size();
for (int n=0; n<trackAmount; n++)
{
w->addItem( curr->getName(), curr->getIdent(), curr->getScreenshotFile(), 0,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE );
Track* curr = track_manager->getTrack(currArenas[n]);
if (!curr->isArena()) continue;
if (unlock_manager->isLocked(curr->getIdent()))
{
w->addItem( _("Locked : solve active challenges to gain access to more!"),
"locked", curr->getScreenshotFile(), LOCKED_BADGE );
}
else
{
w->addItem( curr->getName(), curr->getIdent(), curr->getScreenshotFile(), 0,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE );
}
}
}
w->addItem(_("Random Arena"), "random_track", "/gui/track_random.png");
w->updateItemDisplay();
assert(w->getItems().size() > 0);
// FIXME: don't hardcode player 0?
w->setSelection(w->getItems()[0].m_code_name, 0, true);
} // init
}
// ------------------------------------------------------------------------------------------------------

View File

@@ -28,7 +28,8 @@ class ArenasScreen : public GUIEngine::Screen, public GUIEngine::ScreenSingleton
friend class GUIEngine::ScreenSingleton<ArenasScreen>;
ArenasScreen();
void buildTrackList();
public:
void eventCallback(GUIEngine::Widget* widget, const std::string& name, const int playerID);
void init();