Moved the handling for the fire & rescue buttons in the kart selection menu out of the device manager & into the input manager (which makes more sense). No more setting the action to PA_FIRST to signify that it was handled internally (too hackish).
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3842 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
209d679a56
commit
db1c53fa94
@ -163,20 +163,20 @@ InputDevice *DeviceManager::mapKeyboardInput( int deviceID,
|
|||||||
ActivePlayer **player,
|
ActivePlayer **player,
|
||||||
PlayerAction *action )
|
PlayerAction *action )
|
||||||
{
|
{
|
||||||
InputDevice *device = m_keyboard;
|
KeyboardDevice *keyboard = m_keyboard;
|
||||||
|
|
||||||
if (m_keyboard->hasBinding(btnID, action))
|
if (keyboard->hasBinding(btnID, action))
|
||||||
{
|
{
|
||||||
if (m_assign_mode == NO_ASSIGN) // Don't set the player in NO_ASSIGN mode
|
if (m_assign_mode == NO_ASSIGN) // Don't set the player in NO_ASSIGN mode
|
||||||
{
|
{
|
||||||
*player = NULL;
|
*player = NULL;
|
||||||
if (!progGen) m_latest_used_device = m_keyboard;
|
if (!progGen) m_latest_used_device = keyboard;
|
||||||
}
|
}
|
||||||
else *player = m_keyboard->m_player;
|
else *player = keyboard->m_player;
|
||||||
}
|
}
|
||||||
else device = NULL; // If no appropriate bind was found, return NULL
|
else keyboard = NULL; // If no appropriate bind was found, return NULL
|
||||||
|
|
||||||
return device;
|
return keyboard;
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -233,8 +233,6 @@ bool DeviceManager::translateInput( Input::InputType type,
|
|||||||
device = mapKeyboardInput(deviceID, btnID, programaticallyGenerated, player, action);
|
device = mapKeyboardInput(deviceID, btnID, programaticallyGenerated, player, action);
|
||||||
break;
|
break;
|
||||||
case Input::IT_STICKBUTTON:
|
case Input::IT_STICKBUTTON:
|
||||||
device = mapGamepadInput(type, deviceID, btnID, axisDir, value, programaticallyGenerated, player, action);
|
|
||||||
break;
|
|
||||||
case Input::IT_STICKMOTION:
|
case Input::IT_STICKMOTION:
|
||||||
device = mapGamepadInput(type, deviceID, btnID, axisDir, value, programaticallyGenerated, player, action);
|
device = mapGamepadInput(type, deviceID, btnID, axisDir, value, programaticallyGenerated, player, action);
|
||||||
break;
|
break;
|
||||||
@ -242,27 +240,6 @@ bool DeviceManager::translateInput( Input::InputType type,
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
// If a matching device was found
|
|
||||||
if (device != NULL)
|
|
||||||
{
|
|
||||||
// Handle internal events
|
|
||||||
|
|
||||||
|
|
||||||
/* FIXME: only call when in kart selection screen
|
|
||||||
if ((*player != NULL) && (*action == PA_RESCUE))
|
|
||||||
{
|
|
||||||
KartSelectionScreen::playerPressedRescue( *player );
|
|
||||||
*action = PA_FIRST; // FIXME: action set to PA_FIRST if handled internally (too hackish)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((*player == NULL) && (*action == PA_FIRE) && (m_assign_mode == DETECT_NEW))
|
|
||||||
{
|
|
||||||
KartSelectionScreen::firePressedOnNewDevice( device );
|
|
||||||
*action = PA_FIRST;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return true if input was successfully translated to an action and player
|
// Return true if input was successfully translated to an action and player
|
||||||
return (device != NULL);
|
return (device != NULL);
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ public:
|
|||||||
GamepadConfig* getGamepadConfig(const int i) { return m_gamepad_configs.get(i); }
|
GamepadConfig* getGamepadConfig(const int i) { return m_gamepad_configs.get(i); }
|
||||||
PlayerAssignMode playerAssignMode() const { return m_assign_mode; }
|
PlayerAssignMode playerAssignMode() const { return m_assign_mode; }
|
||||||
KeyboardDevice* getKeyboard(const int i) { return m_keyboard; }
|
KeyboardDevice* getKeyboard(const int i) { return m_keyboard; }
|
||||||
|
PlayerAssignMode getAssignMode() { return m_assign_mode; }
|
||||||
GamePadDevice* getGamePadFromIrrID(const int i);
|
GamePadDevice* getGamePadFromIrrID(const int i);
|
||||||
InputDevice* getLatestUsedDevice();
|
InputDevice* getLatestUsedDevice();
|
||||||
void setAssignMode(const PlayerAssignMode assignMode);
|
void setAssignMode(const PlayerAssignMode assignMode);
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "config/user_config.hpp"
|
#include "config/user_config.hpp"
|
||||||
#include "graphics/irr_driver.hpp"
|
#include "graphics/irr_driver.hpp"
|
||||||
#include "states_screens/options_screen.hpp"
|
#include "states_screens/options_screen.hpp"
|
||||||
|
#include "states_screens/kart_selection.hpp"
|
||||||
#include "states_screens/state_manager.hpp"
|
#include "states_screens/state_manager.hpp"
|
||||||
#include "guiengine/modaldialog.hpp"
|
#include "guiengine/modaldialog.hpp"
|
||||||
#include "guiengine/engine.hpp"
|
#include "guiengine/engine.hpp"
|
||||||
@ -239,7 +240,7 @@ void InputManager::input(Input::InputType type, int deviceID, int btnID, int axi
|
|||||||
ActivePlayer* player = NULL;
|
ActivePlayer* player = NULL;
|
||||||
PlayerAction action;
|
PlayerAction action;
|
||||||
bool action_found = m_device_manager->translateInput( type, deviceID, btnID, axisDirection,
|
bool action_found = m_device_manager->translateInput( type, deviceID, btnID, axisDirection,
|
||||||
value, programaticallyGenerated, &player, &action );
|
value, programaticallyGenerated, &player, &action);
|
||||||
|
|
||||||
if (action_found && action == PA_FIRST) return; // input handled internally by the device manager
|
if (action_found && action == PA_FIRST) return; // input handled internally by the device manager
|
||||||
|
|
||||||
@ -274,6 +275,32 @@ void InputManager::input(Input::InputType type, int deviceID, int btnID, int axi
|
|||||||
// Otherwise, do something with the key if it matches a binding
|
// Otherwise, do something with the key if it matches a binding
|
||||||
else if (action_found)
|
else if (action_found)
|
||||||
{
|
{
|
||||||
|
// If we're in the kart menu awaiting new players, do special things
|
||||||
|
// when a device presses fire or rescue
|
||||||
|
if( m_device_manager->getAssignMode() == DETECT_NEW )
|
||||||
|
{
|
||||||
|
// Player is unjoining
|
||||||
|
if ((player != NULL) && (action == PA_RESCUE))
|
||||||
|
{
|
||||||
|
KartSelectionScreen::playerPressedRescue( player );
|
||||||
|
return; // we're done here
|
||||||
|
}
|
||||||
|
|
||||||
|
// New player is joining
|
||||||
|
else if ((player == NULL) && (action == PA_FIRE))
|
||||||
|
{
|
||||||
|
InputDevice *device = NULL;
|
||||||
|
if (type == Input::IT_KEYBOARD)
|
||||||
|
device = m_device_manager->getKeyboard(0);
|
||||||
|
else if (type == Input::IT_STICKBUTTON || type == Input::IT_STICKMOTION)
|
||||||
|
device = m_device_manager->getGamePadFromIrrID(deviceID);
|
||||||
|
|
||||||
|
if (device != NULL)
|
||||||
|
KartSelectionScreen::firePressedOnNewDevice( device );
|
||||||
|
return; // we're done here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ... when in-game
|
// ... when in-game
|
||||||
if(StateManager::get()->isGameState())
|
if(StateManager::get()->isGameState())
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user