From: <au...@us...> - 2009-12-06 19:23:14
|
Revision: 4265 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4265&view=rev Author: auria Date: 2009-12-06 19:22:57 +0000 (Sun, 06 Dec 2009) Log Message: ----------- In multiplayer mode, players other than the game master should not be able to select stuff in race setup menus Modified Paths: -------------- main/branches/irrlicht/src/input/input_manager.cpp main/branches/irrlicht/src/input/input_manager.hpp main/branches/irrlicht/src/race/race_manager.cpp main/branches/irrlicht/src/states_screens/kart_selection.cpp Modified: main/branches/irrlicht/src/input/input_manager.cpp =================================================================== --- main/branches/irrlicht/src/input/input_manager.cpp 2009-12-06 18:58:33 UTC (rev 4264) +++ main/branches/irrlicht/src/input/input_manager.cpp 2009-12-06 19:22:57 UTC (rev 4265) @@ -59,6 +59,7 @@ m_device_manager->initialize(); m_timer_in_use = false; + m_master_player_only = false; m_timer = 0; } @@ -380,6 +381,9 @@ m_timer = 0.25; } int playerID = (player == NULL ? 0 : player->m_id); + + // If only the master player can act, and this player is not the master, ignore his input + if (m_device_manager->getAssignMode() == ASSIGN && m_master_player_only && playerID != 0) return; GUIEngine::EventHandler::get()->processAction(action, abs(value), type, playerID); } } @@ -390,8 +394,12 @@ handleStaticAction( btnID, value ); } } // input - //----------------------------------------------------------------------------- +void InputManager::setMasterPlayerOnly(bool enabled) +{ + m_master_player_only = enabled; +} +//----------------------------------------------------------------------------- /** * Called on keyboard events [indirectly] by irrLicht * Modified: main/branches/irrlicht/src/input/input_manager.hpp =================================================================== --- main/branches/irrlicht/src/input/input_manager.hpp 2009-12-06 18:58:33 UTC (rev 4264) +++ main/branches/irrlicht/src/input/input_manager.hpp 2009-12-06 19:22:57 UTC (rev 4265) @@ -63,6 +63,9 @@ InputDriverMode m_mode; + /** When at true, only the master player can play with menus */ + bool m_master_player_only; + /* Helper values to store and track the relative mouse movements. If these * values exceed the deadzone value the input is reported to the game. This * makes the mouse behave like an analog axis on a gamepad/joystick. @@ -86,6 +89,9 @@ void setMode(InputDriverMode); bool isInMode(InputDriverMode); + /** When this mode is enabled, only the master player will be able to play with menus (only works in 'assign' mode) */ + void setMasterPlayerOnly(bool enabled); + void update(float dt); /** Returns the ID of the player that plays with the keyboard, or -1 if none */ Modified: main/branches/irrlicht/src/race/race_manager.cpp =================================================================== --- main/branches/irrlicht/src/race/race_manager.cpp 2009-12-06 18:58:33 UTC (rev 4264) +++ main/branches/irrlicht/src/race/race_manager.cpp 2009-12-06 19:22:57 UTC (rev 4265) @@ -396,6 +396,7 @@ StateManager::get()->resetActivePlayers(); input_manager->getDeviceList()->setAssignMode(NO_ASSIGN); + input_manager->setMasterPlayerOnly(false); } // exitRace //----------------------------------------------------------------------------- Modified: main/branches/irrlicht/src/states_screens/kart_selection.cpp =================================================================== --- main/branches/irrlicht/src/states_screens/kart_selection.cpp 2009-12-06 18:58:33 UTC (rev 4264) +++ main/branches/irrlicht/src/states_screens/kart_selection.cpp 2009-12-06 19:22:57 UTC (rev 4265) @@ -938,6 +938,9 @@ // ----------------------------------------------------------------------------- void KartSelectionScreen::allPlayersDone() { + // FIXME: cancel this when leaving back to main menu + input_manager->setMasterPlayerOnly(true); + DynamicRibbonWidget* w = this->getWidget<DynamicRibbonWidget>("karts"); assert( w != NULL ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |