Skip to content

Commit

Permalink
Merge pull request #1317 from konstin/random-gp
Browse files Browse the repository at this point in the history
Changes in preparation for Random GP
  • Loading branch information
auriamg committed May 31, 2014
2 parents f31e576 + 2534abe commit 2877ced
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 98 deletions.
14 changes: 11 additions & 3 deletions src/race/grand_prix_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,20 @@ void GrandPrixData::reload()
{
Log::error("GrandPrixData",
"Error while trying to read grandprix file '%s': "
"missing 'name' attribute", m_filename.c_str());
"Missing 'name' attribute", m_filename.c_str());
throw std::runtime_error("Missing name attribute");
}

// Every iteration means parsing one track entry
const int amount = root->getNumNodes();
if (amount == 0)
{
Log::error("GrandPrixData",
"Error while trying to read grandprix file '%s': "
"There is no track defined", m_filename.c_str());
throw std::runtime_error("No track defined");
}

// Every iteration means parsing one track entry
for (int i = 0; i < amount; i++)
{
const XMLNode* node = root->getNode(i);
Expand Down Expand Up @@ -235,7 +243,7 @@ bool GrandPrixData::checkConsistency(bool log_error) const
* is unlocked). It also prevents people from using the grand prix editor as
* a way to play tracks that still haven't been unlocked
*/
bool GrandPrixData::isTrackAvailable(const std::string &id,
bool GrandPrixData::isTrackAvailable(const std::string &id,
bool includeLocked ) const
{
if (includeLocked)
Expand Down
14 changes: 4 additions & 10 deletions src/states_screens/dialogs/gp_info_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,7 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa
m_gp_ident = gpIdent;

const GrandPrixData* gp = grand_prix_manager->getGrandPrix(gpIdent);
if (gp == NULL)
{
assert(false);
std::cerr << "ERROR at " << __FILE__ << " : " << __LINE__ << "; trying to continue\n";
ModalDialog::dismiss();
return;
}
assert (gp != NULL);

// ---- GP Name
core::rect< s32 > area_top(0, 0, m_area.getWidth(), y1);
Expand Down Expand Up @@ -183,14 +177,14 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa
continueBtn->add();
continueBtn->getIrrlichtElement()->setTabStop(true);
continueBtn->getIrrlichtElement()->setTabGroup(false);

okBtn->m_x = m_area.getWidth()/2 - 310;
}
else
{
okBtn->m_x = m_area.getWidth()/2 - 200;
}

okBtn->m_y = y2;
okBtn->m_w = 400;
okBtn->m_h = m_area.getHeight() - y2 - 15;
Expand All @@ -201,7 +195,7 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa
okBtn->getIrrlichtElement()->setTabGroup(false);

okBtn->setFocusForPlayer( PLAYER_ID_GAME_MASTER );

}

// ------------------------------------------------------------------------------------------------------
Expand Down
117 changes: 36 additions & 81 deletions src/states_screens/tracks_screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,20 +46,8 @@ DEFINE_SCREEN_SINGLETON( TracksScreen );

// -----------------------------------------------------------------------------

TracksScreen::TracksScreen() : Screen("tracks.stkgui")
{
} // TracksScreen

// -----------------------------------------------------------------------------

void TracksScreen::loadedFromFile()
{
} // loadedFromFile

// -----------------------------------------------------------------------------

void TracksScreen::eventCallback(Widget* widget, const std::string& name,
const int playerID )
const int playerID)
{
// -- track selection screen
if (name == "tracks")
Expand Down Expand Up @@ -87,8 +75,8 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name,
std::string track = m_random_track_list.front();
m_random_track_list.pop_front();
m_random_track_list.push_back(track);
Track* clicked_track = track_manager->getTrack(track);

Track* clicked_track = track_manager->getTrack(track);

if (clicked_track)
{
Expand Down Expand Up @@ -129,29 +117,17 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name,
else if (name == "gps")
{
DynamicRibbonWidget* gps_widget = dynamic_cast<DynamicRibbonWidget*>(widget);
if (gps_widget)
{
const std::string &selection =
const std::string &selection =
gps_widget->getSelectionIDString(PLAYER_ID_GAME_MASTER);

if (selection == "locked")
{
unlock_manager->playLockSound();
}
else
{
new GPInfoDialog( selection, 0.8f, 0.7f );
}
}
if (selection == "locked")
unlock_manager->playLockSound();
else
{
assert(false);
}
} // name=="gps"
new GPInfoDialog(selection, 0.8f, 0.7f);
}
else if (name == "trackgroups")
{
RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
assert( tabs );
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");
UserConfigParams::m_last_used_track_group = tabs->getSelectionIDString(0);
buildTrackList();
}
Expand All @@ -166,10 +142,7 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name,
void TracksScreen::beforeAddingWidget()
{
Screen::init();
// Dynamically add tabs
RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
assert( tabs );

tabs->clearAllChildren();

const std::vector<std::string>& groups = track_manager->getAllTrackGroups();
Expand All @@ -188,85 +161,72 @@ void TracksScreen::beforeAddingWidget()
//I18N: track group name
FOR_GETTEXT_ONLY( _("Add-Ons") )

// add others after
// add behind the other categories
for (int n=0; n<group_amount; n++)
{
// try to translate the group name
tabs->addTextChild( _(groups[n].c_str()), groups[n] );
}

DynamicRibbonWidget* tracks_widget = getWidget<DynamicRibbonWidget>("tracks");
assert( tracks_widget );
tracks_widget->setItemCountHint( track_manager->getNumberOfTracks()+1 );
} // beforeAddingWidget

// -----------------------------------------------------------------------------

void TracksScreen::init()
{
DynamicRibbonWidget* gps_widget = getWidget<DynamicRibbonWidget>("gps");
assert( gps_widget );

DynamicRibbonWidget* gps_widget = getWidget<DynamicRibbonWidget>("gps");
DynamicRibbonWidget* tracks_widget = getWidget<DynamicRibbonWidget>("tracks");
assert( tracks_widget );
assert(tracks_widget != NULL);

// Reset GP list everytime (accounts for locking changes, etc.)
gps_widget->clearItems();

// Ensure that no GP and no track is NULL
grand_prix_manager->checkConsistency();

// Build GP list
const int gpAmount = grand_prix_manager->getNumberOfGrandPrix();
for (int n=0; n<gpAmount; n++)
{
const GrandPrixData* gp = grand_prix_manager->getGrandPrix(n);

const std::vector<std::string> tracks = gp->getTrackNames(true);

std::vector<std::string> sshot_files;
std::vector<std::string> screenshots;
for (unsigned int t=0; t<tracks.size(); t++)
{
Track* curr = track_manager->getTrack(tracks[t]);
if (!curr )
{
Log::warn("TracksScreen", "Grand Prix '%s' refers to track '%s',"
"which does not exist.",
gp->getId().c_str(), tracks[t].c_str());
}
else
{
sshot_files.push_back(curr->getScreenshotFile());
}
}
if (sshot_files.size() == 0)
{
Log::warn("TracksScreen",
"Grand Prix '%s' does not contain any valid track.",
gp->getId().c_str());
sshot_files.push_back("gui/main_help.png");
const Track* curr = track_manager->getTrack(tracks[t]);
screenshots.push_back(curr->getScreenshotFile());
}
assert(screenshots.size() > 0);

if (PlayerManager::getCurrentPlayer()->isLocked(gp->getId()))
{
gps_widget->addAnimatedItem(_("Locked!"),
"locked", sshot_files, 1.5f,
gps_widget->addAnimatedItem(_("Locked!"), "locked",
screenshots, 1.5f,
LOCKED_BADGE | TROPHY_BADGE,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE);
}
else
{
gps_widget->addAnimatedItem(translations->fribidize(gp->getName()),
gp->getId(),
sshot_files, 1.5f, TROPHY_BADGE,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE );
gp->getId(), screenshots, 1.5f,
TROPHY_BADGE,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE);
}
}

/*// Random GP - not finished yet
std::vector<std::string> screenshots;
screenshots.push_back("gui/main_help.png");
gps_widget->addAnimatedItem(translations->fribidize("Random"), "Random",
screenshots, 1.5f, 0,
IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE);*/

gps_widget->updateItemDisplay();


RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
assert( tabs );
tabs->select(UserConfigParams::m_last_used_track_group, PLAYER_ID_GAME_MASTER);


buildTrackList();

// select old track for the game master (if found)
Expand All @@ -287,11 +247,8 @@ void TracksScreen::init()
*/
void TracksScreen::buildTrackList()
{
DynamicRibbonWidget* tracks_widget = getWidget<DynamicRibbonWidget>("tracks");
assert( tracks_widget);

RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
assert( tabs );
DynamicRibbonWidget* tracks_widget = this->getWidget<DynamicRibbonWidget>("tracks");
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");

// Reset track list everytime (accounts for locking changes, etc.)
tracks_widget->clearItems();
Expand Down Expand Up @@ -338,8 +295,8 @@ void TracksScreen::buildTrackList()
}
}

tracks_widget->addItem(_("Random Track"), "random_track",
"/gui/track_random.png", 0 /* no badge */,
tracks_widget->addItem(_("Random Track"), "random_track",
"/gui/track_random.png", 0 /* no badge */,
IconButtonWidget::ICON_PATH_TYPE_RELATIVE);

tracks_widget->updateItemDisplay();
Expand All @@ -350,8 +307,7 @@ void TracksScreen::buildTrackList()

void TracksScreen::setFocusOnTrack(const std::string& trackName)
{
DynamicRibbonWidget* tracks_widget = getWidget<DynamicRibbonWidget>("tracks");
assert( tracks_widget);
DynamicRibbonWidget* tracks_widget = this->getWidget<DynamicRibbonWidget>("tracks");

// only the game master can select tracks,
// so it's safe to use 'PLAYER_ID_GAME_MASTER'
Expand All @@ -363,7 +319,6 @@ void TracksScreen::setFocusOnTrack(const std::string& trackName)
void TracksScreen::setFocusOnGP(const std::string& gpName)
{
DynamicRibbonWidget* gps_widget = getWidget<DynamicRibbonWidget>("gps");
assert( gps_widget );

// only the game master can select tracks/GPs,
// so it's safe to use 'PLAYER_ID_GAME_MASTER'
Expand Down
10 changes: 6 additions & 4 deletions src/states_screens/tracks_screen.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ namespace GUIEngine { class Widget; }
* \brief screen where the user can select a track
* \ingroup states_screens
*/
class TracksScreen : public GUIEngine::Screen, public GUIEngine::ScreenSingleton<TracksScreen>
class TracksScreen : public GUIEngine::Screen,
public GUIEngine::ScreenSingleton<TracksScreen>
{
friend class GUIEngine::ScreenSingleton<TracksScreen>;

TracksScreen();
TracksScreen() : Screen("tracks.stkgui") {}

/** adds the tracks from the current track group into the tracks ribbon */
void buildTrackList();
Expand All @@ -41,10 +42,11 @@ class TracksScreen : public GUIEngine::Screen, public GUIEngine::ScreenSingleton
public:

/** \brief implement callback from parent class GUIEngine::Screen */
virtual void loadedFromFile() OVERRIDE;
virtual void loadedFromFile() {} OVERRIDE;

/** \brief implement callback from parent class GUIEngine::Screen */
virtual void eventCallback(GUIEngine::Widget* widget, const std::string& name,
virtual void eventCallback(GUIEngine::Widget* widget,
const std::string& name,
const int playerID) OVERRIDE;

/** \brief implement callback from parent class GUIEngine::Screen */
Expand Down

0 comments on commit 2877ced

Please sign in to comment.