From: <au...@us...> - 2010-02-26 20:10:50
|
Revision: 4864 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4864&view=rev Author: auria Date: 2010-02-26 20:10:43 +0000 (Fri, 26 Feb 2010) Log Message: ----------- Modified 'setup new race' to skip kart selection (what use is this feature otherwise...) Modified Paths: -------------- main/trunk/src/guiengine/abstract_state_manager.cpp main/trunk/src/guiengine/abstract_state_manager.hpp main/trunk/src/input/input_manager.cpp main/trunk/src/karts/controller/player_controller.cpp main/trunk/src/race/race_manager.cpp main/trunk/src/states_screens/dialogs/race_over_dialog.cpp main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp main/trunk/src/states_screens/main_menu_screen.cpp main/trunk/src/states_screens/state_manager.cpp Modified: main/trunk/src/guiengine/abstract_state_manager.cpp =================================================================== --- main/trunk/src/guiengine/abstract_state_manager.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/guiengine/abstract_state_manager.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -185,6 +185,7 @@ } // ----------------------------------------------------------------------------- + void AbstractStateManager::resetAndGoToScreen(Screen* screen) { std::string name = screen->getName(); @@ -200,3 +201,27 @@ getCurrentScreen()->init(); } +// ----------------------------------------------------------------------------- + +void AbstractStateManager::resetAndSetStack(Screen* screens[]) +{ + assert(screens != NULL); + assert(screens[0] != NULL); + + input_manager->setMode(InputManager::MENU); + + m_menu_stack.clear(); + + for (int n=0; screens[n] != NULL; n++) + { + m_menu_stack.push_back(screens[n]->getName()); + } + + setGameState(MENU); + + sound_manager->positionListener( Vec3(0,0,0), Vec3(0,1,0) ); + switchToScreen(m_menu_stack[m_menu_stack.size()-1].c_str()); + getCurrentScreen()->init(); +} + + Modified: main/trunk/src/guiengine/abstract_state_manager.hpp =================================================================== --- main/trunk/src/guiengine/abstract_state_manager.hpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/guiengine/abstract_state_manager.hpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -45,6 +45,15 @@ void replaceTopMostScreen(Screen* screen); void popMenu(); void resetAndGoToScreen(Screen* screen); + + /** + * Sets the whole menu stack. Only the topmost screen will be inited/shown, but others remain + * under for cases where the user wants to go back. + * @param screens an array containing the menus that should go into stack. The first item will be + * the bottom item in the stack, the last item will be the stack top. Array must be + * NULL-terminated. + */ + void resetAndSetStack(Screen* screens[]); void enterGameState(); GameState getGameState(); Modified: main/trunk/src/input/input_manager.cpp =================================================================== --- main/trunk/src/input/input_manager.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/input/input_manager.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -90,8 +90,8 @@ { #ifdef DEBUG static bool control_is_pressed=false; + World *world=World::getWorld(); #endif - World *world=World::getWorld(); switch (key) { #ifdef DEBUG @@ -659,6 +659,8 @@ */ void InputManager::setMode(InputDriverMode new_mode) { + if (new_mode == m_mode) return; // no change + switch (new_mode) { case MENU: @@ -678,9 +680,9 @@ m_mouse_val_x = m_mouse_val_y = 0; irr_driver->showPointer(); - m_device_manager->setAssignMode(NO_ASSIGN); - - // Fall through expected. + m_mode = MENU; + break; + case BOOTSTRAP: // Leaving boot strap mode. Modified: main/trunk/src/karts/controller/player_controller.cpp =================================================================== --- main/trunk/src/karts/controller/player_controller.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/karts/controller/player_controller.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -44,6 +44,7 @@ unsigned int player_index) : Controller(kart) { + assert(player != NULL); m_player = player; m_player->setKart(kart); m_penalty_time = 0.0f; Modified: main/trunk/src/race/race_manager.cpp =================================================================== --- main/trunk/src/race/race_manager.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/race/race_manager.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -388,10 +388,6 @@ delete World::getWorld(); m_track_number = 0; - - StateManager::get()->resetActivePlayers(); - input_manager->getDeviceList()->setAssignMode(NO_ASSIGN); - input_manager->setMasterPlayerOnly(false); } // exitRace //----------------------------------------------------------------------------- Modified: main/trunk/src/states_screens/dialogs/race_over_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -26,8 +26,8 @@ #include "network/network_manager.hpp" #include "race/race_manager.hpp" #include "states_screens/dialogs/race_over_dialog.hpp" -#include "states_screens/kart_selection.hpp" #include "states_screens/main_menu_screen.hpp" +#include "states_screens/race_setup_screen.hpp" #include "states_screens/state_manager.hpp" #include "utils/string_utils.hpp" #include "utils/translation.hpp" @@ -319,8 +319,8 @@ ModalDialog::dismiss(); World::getWorld()->unpause(); race_manager->exitRace(); - StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); - StateManager::get()->pushScreen(KartSelectionScreen::getInstance()); + Screen* newStack[] = {MainMenuScreen::getInstance(), RaceSetupScreen::getInstance(), NULL}; + StateManager::get()->resetAndSetStack( newStack ); return GUIEngine::EVENT_BLOCK; } else if (eventSource == "backtomenu") Modified: main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -25,8 +25,8 @@ #include "network/network_manager.hpp" #include "race/race_manager.hpp" #include "states_screens/help_screen_1.hpp" -#include "states_screens/kart_selection.hpp" #include "states_screens/main_menu_screen.hpp" +#include "states_screens/race_setup_screen.hpp" #include "states_screens/options_screen_av.hpp" #include "states_screens/state_manager.hpp" #include "utils/translation.hpp" @@ -201,12 +201,20 @@ } else if (selection == "newrace") { + /* ModalDialog::dismiss(); World::getWorld()->unpause(); race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); StateManager::get()->pushScreen(KartSelectionScreen::getInstance()); return GUIEngine::EVENT_BLOCK; + */ + ModalDialog::dismiss(); + World::getWorld()->unpause(); + race_manager->exitRace(); + Screen* newStack[] = {MainMenuScreen::getInstance(), RaceSetupScreen::getInstance(), NULL}; + StateManager::get()->resetAndSetStack( newStack ); + return GUIEngine::EVENT_BLOCK; } } return GUIEngine::EVENT_LET; Modified: main/trunk/src/states_screens/main_menu_screen.cpp =================================================================== --- main/trunk/src/states_screens/main_menu_screen.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/states_screens/main_menu_screen.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -46,8 +46,7 @@ void MainMenuScreen::init() { - // on most circumstances, the RaceManager will take care of foing this. - // but e.g. if the player clicks on new game then backs, this needs to happen here + // reset in case we're coming back from a race StateManager::get()->resetActivePlayers(); input_manager->getDeviceList()->setAssignMode(NO_ASSIGN); input_manager->setMasterPlayerOnly(false); Modified: main/trunk/src/states_screens/state_manager.cpp =================================================================== --- main/trunk/src/states_screens/state_manager.cpp 2010-02-26 20:09:51 UTC (rev 4863) +++ main/trunk/src/states_screens/state_manager.cpp 2010-02-26 20:10:43 UTC (rev 4864) @@ -56,7 +56,8 @@ else { fprintf(stderr, "getActivePlayer(): id out of bounds\n"); - return false; + assert(false); + return NULL; } assert( returnPlayer->m_id == id ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |