Improvements to input actions handling in GUI, implemented selection of other game modes
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3829 178a84e3-b1eb-0310-8ba1-8eac791a3b58
Before Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 81 KiB |
@ -46,7 +46,8 @@ bool EventHandler::OnEvent (const SEvent &event)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// FIXME : it's a bit unclean that all input events go trough the gui module
|
// FIXME : it's a bit unclean that all input events go trough the gui module
|
||||||
return input_manager->input(event);
|
const bool blockPropagation = input_manager->input(event);
|
||||||
|
return blockPropagation;
|
||||||
}
|
}
|
||||||
|
|
||||||
// to shut up a warning. gcc is too stupid too see the code will never get here
|
// to shut up a warning. gcc is too stupid too see the code will never get here
|
||||||
@ -146,6 +147,8 @@ bool EventHandler::onWidgetActivated(GUIEngine::Widget* w)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "**** widget activated : " << w->m_properties[PROP_ID].c_str() << " ****" << std::endl;
|
||||||
|
|
||||||
Widget* parent = w->m_event_handler;
|
Widget* parent = w->m_event_handler;
|
||||||
if(w->m_event_handler != NULL)
|
if(w->m_event_handler != NULL)
|
||||||
{
|
{
|
||||||
@ -349,29 +352,26 @@ void EventHandler::processAction(const int action, const unsigned int value, Inp
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case PA_FIRE:
|
case PA_FIRE:
|
||||||
if(type == Input::IT_STICKBUTTON)
|
if (pressedDown)
|
||||||
{
|
{
|
||||||
if (pressedDown)
|
IGUIElement* element = GUIEngine::getGUIEnv()->getFocus();
|
||||||
{
|
Widget* w = GUIEngine::getCurrentScreen()->getWidget( element->getID() );
|
||||||
IGUIElement* element = GUIEngine::getGUIEnv()->getFocus();
|
if(w == NULL) break;
|
||||||
Widget* w = GUIEngine::getCurrentScreen()->getWidget( element->getID() );
|
onWidgetActivated( w );
|
||||||
if(w == NULL) break;
|
|
||||||
onWidgetActivated( w );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
// simulate a 'enter' key press
|
|
||||||
irr::SEvent::SKeyInput evt;
|
|
||||||
evt.PressedDown = pressedDown;
|
|
||||||
evt.Key = KEY_SPACE; // FIXME : what if keyboard bindings are not set to use this key?
|
|
||||||
evt.Char = 666; // My magic code to know it's a fake event (FIXME : ugly, but irrlicht doesn't seem to offer better)
|
|
||||||
irr::SEvent wrapper;
|
|
||||||
wrapper.KeyInput = evt;
|
|
||||||
|
|
||||||
wrapper.EventType = EET_KEY_INPUT_EVENT;
|
|
||||||
GUIEngine::getDevice()->postEventFromUser(wrapper);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// simulate a 'enter' key press
|
||||||
|
irr::SEvent::SKeyInput evt;
|
||||||
|
evt.PressedDown = pressedDown;
|
||||||
|
evt.Key = KEY_SPACE; // FIXME : what if keyboard bindings are not set to use this key?
|
||||||
|
evt.Char = 666; // My magic code to know it's a fake event (FIXME : ugly, but irrlicht doesn't seem to offer better)
|
||||||
|
irr::SEvent wrapper;
|
||||||
|
wrapper.KeyInput = evt;
|
||||||
|
|
||||||
|
wrapper.EventType = EET_KEY_INPUT_EVENT;
|
||||||
|
GUIEngine::getDevice()->postEventFromUser(wrapper);
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
@ -251,6 +251,7 @@
|
|||||||
95833240101243ED00C5137E /* player_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95833239101243ED00C5137E /* player_info_dialog.cpp */; };
|
95833240101243ED00C5137E /* player_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95833239101243ED00C5137E /* player_info_dialog.cpp */; };
|
||||||
95833241101243ED00C5137E /* press_a_key_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323B101243ED00C5137E /* press_a_key_dialog.cpp */; };
|
95833241101243ED00C5137E /* press_a_key_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323B101243ED00C5137E /* press_a_key_dialog.cpp */; };
|
||||||
95833242101243ED00C5137E /* track_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323D101243ED00C5137E /* track_info_dialog.cpp */; };
|
95833242101243ED00C5137E /* track_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323D101243ED00C5137E /* track_info_dialog.cpp */; };
|
||||||
|
95B5CD14102DE08F00EF2001 /* device_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B5CD13102DE08F00EF2001 /* device_config.cpp */; };
|
||||||
95CB476C0FF30EF400413BAE /* bezier_curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CB476B0FF30EF400413BAE /* bezier_curve.cpp */; };
|
95CB476C0FF30EF400413BAE /* bezier_curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CB476B0FF30EF400413BAE /* bezier_curve.cpp */; };
|
||||||
95D1F5F70FC8C3E300FF6968 /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D1F5F60FC8C3E300FF6968 /* input.cpp */; };
|
95D1F5F70FC8C3E300FF6968 /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D1F5F60FC8C3E300FF6968 /* input.cpp */; };
|
||||||
95D950D20FE473CA002E10AD /* stk_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D950CE0FE473CA002E10AD /* stk_config.cpp */; };
|
95D950D20FE473CA002E10AD /* stk_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D950CE0FE473CA002E10AD /* stk_config.cpp */; };
|
||||||
@ -415,6 +416,8 @@
|
|||||||
95A1184C0F77FC8800B18B3D /* input_device.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = input_device.hpp; path = ../../input/input_device.hpp; sourceTree = SOURCE_ROOT; };
|
95A1184C0F77FC8800B18B3D /* input_device.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = input_device.hpp; path = ../../input/input_device.hpp; sourceTree = SOURCE_ROOT; };
|
||||||
95A1187A0F78024E00B18B3D /* device_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device_manager.cpp; path = ../../input/device_manager.cpp; sourceTree = SOURCE_ROOT; };
|
95A1187A0F78024E00B18B3D /* device_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device_manager.cpp; path = ../../input/device_manager.cpp; sourceTree = SOURCE_ROOT; };
|
||||||
95A1187C0F78026D00B18B3D /* device_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = device_manager.hpp; path = ../../input/device_manager.hpp; sourceTree = SOURCE_ROOT; };
|
95A1187C0F78026D00B18B3D /* device_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = device_manager.hpp; path = ../../input/device_manager.hpp; sourceTree = SOURCE_ROOT; };
|
||||||
|
95B5CD12102DE08F00EF2001 /* device_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = device_config.hpp; path = ../../config/device_config.hpp; sourceTree = SOURCE_ROOT; };
|
||||||
|
95B5CD13102DE08F00EF2001 /* device_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device_config.cpp; path = ../../config/device_config.cpp; sourceTree = SOURCE_ROOT; };
|
||||||
95C2AC270F296540000D3E5D /* music.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music.hpp; path = ../../audio/music.hpp; sourceTree = SOURCE_ROOT; };
|
95C2AC270F296540000D3E5D /* music.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music.hpp; path = ../../audio/music.hpp; sourceTree = SOURCE_ROOT; };
|
||||||
95C2AC280F296540000D3E5D /* music_information.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = music_information.cpp; path = ../../audio/music_information.cpp; sourceTree = SOURCE_ROOT; };
|
95C2AC280F296540000D3E5D /* music_information.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = music_information.cpp; path = ../../audio/music_information.cpp; sourceTree = SOURCE_ROOT; };
|
||||||
95C2AC290F296540000D3E5D /* music_information.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_information.hpp; path = ../../audio/music_information.hpp; sourceTree = SOURCE_ROOT; };
|
95C2AC290F296540000D3E5D /* music_information.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_information.hpp; path = ../../audio/music_information.hpp; sourceTree = SOURCE_ROOT; };
|
||||||
@ -2115,6 +2118,8 @@
|
|||||||
95D950CC0FE473CA002E10AD /* config */ = {
|
95D950CC0FE473CA002E10AD /* config */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
95B5CD13102DE08F00EF2001 /* device_config.cpp */,
|
||||||
|
95B5CD12102DE08F00EF2001 /* device_config.hpp */,
|
||||||
956D36A610095035007FCB95 /* player.cpp */,
|
956D36A610095035007FCB95 /* player.cpp */,
|
||||||
95D950CD0FE473CA002E10AD /* player.hpp */,
|
95D950CD0FE473CA002E10AD /* player.hpp */,
|
||||||
95D950CE0FE473CA002E10AD /* stk_config.cpp */,
|
95D950CE0FE473CA002E10AD /* stk_config.cpp */,
|
||||||
@ -2468,6 +2473,7 @@
|
|||||||
95ECA10710124C5000D47C5F /* ribbon_widget.cpp in Sources */,
|
95ECA10710124C5000D47C5F /* ribbon_widget.cpp in Sources */,
|
||||||
95ECA10810124C5000D47C5F /* spinner_widget.cpp in Sources */,
|
95ECA10810124C5000D47C5F /* spinner_widget.cpp in Sources */,
|
||||||
95ECA10910124C5000D47C5F /* text_box_widget.cpp in Sources */,
|
95ECA10910124C5000D47C5F /* text_box_widget.cpp in Sources */,
|
||||||
|
95B5CD14102DE08F00EF2001 /* device_config.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -338,6 +338,7 @@ void InputManager::input(Input::InputType type, int deviceID, int btnID, int axi
|
|||||||
* negative direction. This simplifies input configuration and allows greater
|
* negative direction. This simplifies input configuration and allows greater
|
||||||
* flexibility (= treat 4 directions as four buttons).
|
* flexibility (= treat 4 directions as four buttons).
|
||||||
*
|
*
|
||||||
|
* Returns whether to halt the event's propagation here
|
||||||
*/
|
*/
|
||||||
bool InputManager::input(const SEvent& event)
|
bool InputManager::input(const SEvent& event)
|
||||||
{
|
{
|
||||||
@ -375,7 +376,7 @@ bool InputManager::input(const SEvent& event)
|
|||||||
if (gp == NULL)
|
if (gp == NULL)
|
||||||
{
|
{
|
||||||
// Prevent null pointer crash
|
// Prevent null pointer crash
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i=0; i<gp->m_button_count; i++)
|
for(int i=0; i<gp->m_button_count; i++)
|
||||||
@ -455,9 +456,8 @@ bool InputManager::input(const SEvent& event)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// FIXME: to restore the original behaviour (engine returns false in the
|
|
||||||
// case the input_manager::input is called)
|
return getDeviceList()->playerAssignMode() != NO_ASSIGN; // block events in all modes but initial menus
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -182,12 +182,29 @@ void StateManager::menuEventRaceSetup(Widget* widget, const std::string& name)
|
|||||||
}
|
}
|
||||||
else if(name == "gamemode")
|
else if(name == "gamemode")
|
||||||
{
|
{
|
||||||
// TODO - detect more game modes
|
|
||||||
RibbonGridWidget* w = dynamic_cast<RibbonGridWidget*>(widget);
|
RibbonGridWidget* w = dynamic_cast<RibbonGridWidget*>(widget);
|
||||||
if(w->getSelectionIDString() == "normal")
|
const std::string selectedMode = w->getSelectionIDString();
|
||||||
|
|
||||||
|
if (selectedMode == "normal")
|
||||||
{
|
{
|
||||||
|
race_manager->setMinorMode(RaceManager::MINOR_MODE_QUICK_RACE);
|
||||||
pushMenu("tracks.stkgui");
|
pushMenu("tracks.stkgui");
|
||||||
}
|
}
|
||||||
|
else if (selectedMode == "timetrial")
|
||||||
|
{
|
||||||
|
race_manager->setMinorMode(RaceManager::MINOR_MODE_TIME_TRIAL);
|
||||||
|
pushMenu("tracks.stkgui");
|
||||||
|
}
|
||||||
|
else if (selectedMode == "ftl")
|
||||||
|
{
|
||||||
|
race_manager->setMinorMode(RaceManager::MINOR_MODE_FOLLOW_LEADER);
|
||||||
|
pushMenu("tracks.stkgui");
|
||||||
|
}
|
||||||
|
else if (selectedMode == "3strikes")
|
||||||
|
{
|
||||||
|
// TODO - 3 strikes battle mode selection
|
||||||
|
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(name == "aikartamount")
|
else if(name == "aikartamount")
|
||||||
{
|
{
|
||||||
|