From: <hik...@us...> - 2009-08-11 22:41:54
|
Revision: 3835 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=3835&view=rev Author: hikerstk Date: 2009-08-11 22:41:47 +0000 (Tue, 11 Aug 2009) Log Message: ----------- Work around for the problem that if you press space or enter at the end of a FTL race (e.g. space is assigned to skidding), the race result menu will immediately be canceled when releasing space, since 'back to main menu' is selected. For now selections are only accepted 1 sec. after the menu is displayed, giving the player enough time to release space/enter. Modified Paths: -------------- main/branches/0.6.2/src/gui/race_results_gui.cpp main/branches/0.6.2/src/gui/race_results_gui.hpp Modified: main/branches/0.6.2/src/gui/race_results_gui.cpp =================================================================== --- main/branches/0.6.2/src/gui/race_results_gui.cpp 2009-08-11 12:27:04 UTC (rev 3834) +++ main/branches/0.6.2/src/gui/race_results_gui.cpp 2009-08-11 22:41:47 UTC (rev 3835) @@ -31,8 +31,18 @@ #include "network/network_manager.hpp" #include "utils/translation.hpp" +/** It can happen (e.g. if a player has skidding assigned to space or enter) + * that a selection key is still pressed when this menu is shown (e.g. follow + * the leader race which doesn't have a end-race-camera). To avoid that this + * menu is left as soon as it is entered (since back to main menu is selected + * as default), WAITING_TIME seconds have to pass before a selection is + * accepted. Admittedly a somehwat ugly work around. + */ +#define WAITING_TIME 1 + RaceResultsGUI::RaceResultsGUI() { + m_waiting_time = WAITING_TIME; m_first_time = true; m_selected_widget = WTOK_NONE; @@ -217,6 +227,10 @@ */ void RaceResultsGUI::select() { + // Ignore a selection if the menu is still in 'waiting' mode. This helps + // in case that someone presses space or enter while a FTL race finishes + // --> this menu isn't immediately canceled. + if(m_waiting_time>=0) return; // Push the unlocked-feature menu in for now if(unlock_manager->getUnlockedFeatures().size()>0) { @@ -228,7 +242,6 @@ // The selected token is saved here, which triggers a change of the text // in update(). m_selected_widget = (WidgetTokens)widget_manager->getSelectedWgt(); - // Clients send the ack to the server if(network_manager->getMode()==NetworkManager::NW_CLIENT) network_manager->sendRaceResultAck(); @@ -273,6 +286,7 @@ */ void RaceResultsGUI::update(float dt) { + m_waiting_time -= dt; BaseGUI::update(dt); // If an item is selected (for the first time), change the text // so that the user has feedback about his selection. Modified: main/branches/0.6.2/src/gui/race_results_gui.hpp =================================================================== --- main/branches/0.6.2/src/gui/race_results_gui.hpp 2009-08-11 12:27:04 UTC (rev 3834) +++ main/branches/0.6.2/src/gui/race_results_gui.hpp 2009-08-11 22:41:47 UTC (rev 3835) @@ -51,6 +51,8 @@ WidgetTokens m_selected_widget; Widget *displayRaceResults(); Widget *displayKartList(Widget *w_prev, int *order, float horizontal); + /** Waiting time before this menu can be left. */ + float m_waiting_time; public: RaceResultsGUI(); ~RaceResultsGUI(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |