484 lines
14 KiB
C++
484 lines
14 KiB
C++
/*
|
|
Copyright (C) 1997-2001 Id Software, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
#include "extdll.h"
|
|
#include "basemenu.h"
|
|
#include "utils.h"
|
|
#include "menu_btnsbmp_table.h"
|
|
|
|
#define ART_BANNER "gfx/shell/head_gamepad"
|
|
|
|
#define ID_BACKGROUND 0
|
|
#define ID_BANNER 1
|
|
|
|
enum
|
|
{
|
|
ID_DONE = 2,
|
|
ID_RT_THRESHOLD,
|
|
ID_LT_THRESHOLD,
|
|
ID_SIDE,
|
|
ID_FORWARD,
|
|
ID_PITCH,
|
|
ID_YAW,
|
|
ID_INVERT_SIDE,
|
|
ID_INVERT_FORWARD,
|
|
ID_INVERT_PITCH,
|
|
ID_INVERT_YAW,
|
|
ID_AXIS_BIND1,
|
|
ID_AXIS_BIND2,
|
|
ID_AXIS_BIND3,
|
|
ID_AXIS_BIND4,
|
|
ID_AXIS_BIND5,
|
|
ID_AXIS_BIND6,
|
|
ID_JOY_ENABLE,
|
|
ID_CONTROLS
|
|
};
|
|
|
|
enum engineAxis_t
|
|
{
|
|
JOY_AXIS_SIDE = 0,
|
|
JOY_AXIS_FWD,
|
|
JOY_AXIS_PITCH,
|
|
JOY_AXIS_YAW,
|
|
JOY_AXIS_RT,
|
|
JOY_AXIS_LT,
|
|
JOY_AXIS_NULL
|
|
};
|
|
|
|
static const char *axisNames[7] =
|
|
{
|
|
"Side Movement",
|
|
"Forward Movement",
|
|
"Camera Vertical Turn",
|
|
"Camera Horizontal Turn",
|
|
"Right Trigger",
|
|
"Left Trigger",
|
|
"NOT BOUND"
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
menuFramework_s menu;
|
|
|
|
menuBitmap_s background;
|
|
menuBitmap_s banner;
|
|
|
|
menuPicButton_s done;
|
|
menuPicButton_s controls;
|
|
menuSlider_s side, forward, pitch, yaw;
|
|
menuCheckBox_s invSide, invFwd, invPitch, invYaw;
|
|
menuCheckBox_s joyEnable;
|
|
|
|
menuSpinControl_s axisBind[6];
|
|
|
|
menuAction_s axisBind_label;
|
|
} uiGamePad_t;
|
|
|
|
static uiGamePad_t uiGamePad;
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_GetConfig
|
|
=================
|
|
*/
|
|
static void UI_GamePad_GetConfig( void )
|
|
{
|
|
float side, forward, pitch, yaw;
|
|
char binding[7] = { 0 };
|
|
|
|
strncpy( binding, CVAR_GET_STRING( "joy_axis_binding"), sizeof( binding ));
|
|
|
|
side = CVAR_GET_FLOAT( "joy_side" );
|
|
forward = CVAR_GET_FLOAT( "joy_forward" );
|
|
pitch = CVAR_GET_FLOAT( "joy_pitch" );
|
|
yaw = CVAR_GET_FLOAT( "joy_yaw" );
|
|
|
|
uiGamePad.side.curValue = fabs( side );
|
|
uiGamePad.forward.curValue = fabs( forward );
|
|
uiGamePad.pitch.curValue = fabs( pitch );
|
|
uiGamePad.yaw.curValue = fabs( yaw );
|
|
|
|
uiGamePad.invSide.enabled = side < 0.0f ? true: false;
|
|
uiGamePad.invFwd.enabled = forward < 0.0f ? true: false;
|
|
uiGamePad.invPitch.enabled = pitch < 0.0f ? true: false;
|
|
uiGamePad.invYaw.enabled = yaw < 0.0f ? true: false;
|
|
|
|
uiGamePad.joyEnable.enabled = (int)CVAR_GET_FLOAT( "joy_enable" );
|
|
|
|
// I made a monster...
|
|
for( unsigned int i = 0; i < sizeof( binding ) - 1; i++ )
|
|
{
|
|
switch( binding[i] )
|
|
{
|
|
case 's':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_SIDE];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_SIDE;
|
|
break;
|
|
case 'f':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_FWD];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_FWD;
|
|
break;
|
|
case 'p':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_PITCH];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_PITCH;
|
|
break;
|
|
case 'y':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_YAW];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_YAW;
|
|
break;
|
|
case 'r':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_RT];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_RT;
|
|
break;
|
|
case 'l':
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_LT];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_LT;
|
|
break;
|
|
default:
|
|
uiGamePad.axisBind[i].generic.name = axisNames[JOY_AXIS_NULL];
|
|
uiGamePad.axisBind[i].curValue = JOY_AXIS_NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_SetConfig
|
|
=================
|
|
*/
|
|
static void UI_GamePad_SetConfig( void )
|
|
{
|
|
float side, forward, pitch, yaw;
|
|
char binding[7] = { 0 };
|
|
|
|
side = uiGamePad.side.curValue;
|
|
if( uiGamePad.invSide.enabled )
|
|
side *= -1;
|
|
|
|
forward = uiGamePad.forward.curValue;
|
|
if( uiGamePad.invFwd.enabled )
|
|
forward *= -1;
|
|
|
|
pitch = uiGamePad.pitch.curValue;
|
|
if( uiGamePad.invPitch.enabled )
|
|
pitch *= -1;
|
|
|
|
yaw = uiGamePad.yaw.curValue;
|
|
if( uiGamePad.invYaw.enabled )
|
|
yaw *= -1;
|
|
|
|
for( int i = 0; i < 6; i++ )
|
|
{
|
|
switch( (int)uiGamePad.axisBind[i].curValue )
|
|
{
|
|
case JOY_AXIS_SIDE: binding[i] = 's'; break;
|
|
case JOY_AXIS_FWD: binding[i] = 'f'; break;
|
|
case JOY_AXIS_PITCH: binding[i] = 'p'; break;
|
|
case JOY_AXIS_YAW: binding[i] = 'y'; break;
|
|
case JOY_AXIS_RT: binding[i] = 'r'; break;
|
|
case JOY_AXIS_LT: binding[i] = 'l'; break;
|
|
default: binding[i] = '0'; break;
|
|
}
|
|
}
|
|
|
|
CVAR_SET_FLOAT( "joy_side", side );
|
|
CVAR_SET_FLOAT( "joy_forward", forward );
|
|
CVAR_SET_FLOAT( "joy_pitch", pitch );
|
|
CVAR_SET_FLOAT( "joy_yaw", yaw );
|
|
CVAR_SET_FLOAT( "joy_enable", uiGamePad.joyEnable.enabled );
|
|
CVAR_SET_STRING( "joy_axis_binding", binding );
|
|
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_UpdateConfig
|
|
=================
|
|
*/
|
|
static void UI_GamePad_UpdateConfig( void )
|
|
{
|
|
UI_GamePad_SetConfig();
|
|
UI_GamePad_GetConfig();
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_Callback
|
|
=================
|
|
*/
|
|
static void UI_GamePad_Callback( void *self, int event )
|
|
{
|
|
menuCommon_s *item = (menuCommon_s *)self;
|
|
|
|
switch( item->id )
|
|
{
|
|
case ID_INVERT_SIDE:
|
|
case ID_INVERT_FORWARD:
|
|
case ID_INVERT_PITCH:
|
|
case ID_INVERT_YAW:
|
|
case ID_JOY_ENABLE:
|
|
if( event == QM_PRESSED )
|
|
((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_PRESSED;
|
|
else ((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_FOCUS;
|
|
break;
|
|
}
|
|
|
|
if( event == QM_CHANGED )
|
|
{
|
|
UI_GamePad_UpdateConfig();
|
|
return;
|
|
}
|
|
|
|
if( event != QM_ACTIVATED )
|
|
return;
|
|
|
|
switch( item->id )
|
|
{
|
|
case ID_CONTROLS:
|
|
UI_Controls_Menu();
|
|
break;
|
|
case ID_DONE:
|
|
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
|
|
UI_PopMenu();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_Init
|
|
=================
|
|
*/
|
|
static void UI_GamePad_Init( void )
|
|
{
|
|
memset( &uiGamePad, 0, sizeof( uiGamePad_t ));
|
|
|
|
uiGamePad.menu.vidInitFunc = UI_GamePad_Init;
|
|
|
|
uiGamePad.background.generic.id = ID_BACKGROUND;
|
|
uiGamePad.background.generic.type = QMTYPE_BITMAP;
|
|
uiGamePad.background.generic.flags = QMF_INACTIVE;
|
|
uiGamePad.background.generic.x = 0;
|
|
uiGamePad.background.generic.y = 0;
|
|
uiGamePad.background.generic.width = uiStatic.width;
|
|
uiGamePad.background.generic.height = 768;
|
|
uiGamePad.background.pic = ART_BACKGROUND;
|
|
|
|
uiGamePad.banner.generic.id = ID_BANNER;
|
|
uiGamePad.banner.generic.type = QMTYPE_BITMAP;
|
|
uiGamePad.banner.generic.flags = QMF_INACTIVE|QMF_DRAW_ADDITIVE;
|
|
uiGamePad.banner.generic.x = UI_BANNER_POSX;
|
|
uiGamePad.banner.generic.y = UI_BANNER_POSY;
|
|
uiGamePad.banner.generic.width = UI_BANNER_WIDTH;
|
|
uiGamePad.banner.generic.height = UI_BANNER_HEIGHT;
|
|
uiGamePad.banner.pic = ART_BANNER;
|
|
|
|
uiGamePad.done.generic.id = ID_DONE;
|
|
uiGamePad.done.generic.type = QMTYPE_BM_BUTTON;
|
|
uiGamePad.done.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.done.generic.x = 72;
|
|
uiGamePad.done.generic.y = 630;
|
|
uiGamePad.done.generic.name = "Done";
|
|
uiGamePad.done.generic.statusText = "Go back to the Configuration Menu";
|
|
uiGamePad.done.generic.callback = UI_GamePad_Callback;
|
|
|
|
UI_UtilSetupPicButton( &uiGamePad.done, PC_DONE );
|
|
|
|
uiGamePad.axisBind_label.generic.type = QMTYPE_ACTION;
|
|
uiGamePad.axisBind_label.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE|QMF_DROPSHADOW;
|
|
uiGamePad.axisBind_label.generic.x = 72;
|
|
uiGamePad.axisBind_label.generic.y = 180;
|
|
uiGamePad.axisBind_label.generic.color = uiColorHelp;
|
|
uiGamePad.axisBind_label.generic.height = 26;
|
|
uiGamePad.axisBind_label.generic.width = 200;
|
|
uiGamePad.axisBind_label.generic.charHeight = 30;
|
|
uiGamePad.axisBind_label.generic.charWidth = 17;
|
|
uiGamePad.axisBind_label.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.axisBind_label.generic.name = "Axis binding map";
|
|
|
|
|
|
for( int i = 0, y = 230; i < 6; i++, y += 50 )
|
|
{
|
|
uiGamePad.axisBind[i].generic.id = ID_AXIS_BIND1 + i;
|
|
uiGamePad.axisBind[i].generic.type = QMTYPE_SPINCONTROL;
|
|
uiGamePad.axisBind[i].generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.axisBind[i].generic.x = 104;
|
|
uiGamePad.axisBind[i].generic.y = y;
|
|
uiGamePad.axisBind[i].generic.height = 26;
|
|
uiGamePad.axisBind[i].generic.width = 256;
|
|
uiGamePad.axisBind[i].generic.charWidth = 11;
|
|
uiGamePad.axisBind[i].generic.charHeight = 22;
|
|
uiGamePad.axisBind[i].generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.axisBind[i].generic.statusText = "Set axis binding";
|
|
uiGamePad.axisBind[i].minValue = JOY_AXIS_SIDE;
|
|
uiGamePad.axisBind[i].maxValue = JOY_AXIS_NULL;
|
|
uiGamePad.axisBind[i].range = 1;
|
|
}
|
|
|
|
uiGamePad.side.generic.id = ID_SIDE;
|
|
uiGamePad.side.generic.type = QMTYPE_SLIDER;
|
|
uiGamePad.side.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.side.generic.x = 432;
|
|
uiGamePad.side.generic.y = 250;
|
|
uiGamePad.side.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.side.generic.name = "Side";
|
|
uiGamePad.side.generic.statusText = "Side movement sensitivity";
|
|
uiGamePad.side.minValue = 0.0f;
|
|
uiGamePad.side.maxValue = 2.0f;
|
|
uiGamePad.side.range = 0.1f;
|
|
|
|
uiGamePad.invSide.generic.id = ID_INVERT_SIDE;
|
|
uiGamePad.invSide.generic.type = QMTYPE_CHECKBOX;
|
|
uiGamePad.invSide.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
|
|
uiGamePad.invSide.generic.name = "Invert";
|
|
uiGamePad.invSide.generic.x = 652;
|
|
uiGamePad.invSide.generic.y = 230;
|
|
uiGamePad.invSide.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.invSide.generic.statusText = "Invert side movement axis";
|
|
|
|
uiGamePad.forward.generic.id = ID_FORWARD;
|
|
uiGamePad.forward.generic.type = QMTYPE_SLIDER;
|
|
uiGamePad.forward.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.forward.generic.x = 432;
|
|
uiGamePad.forward.generic.y = 300;
|
|
uiGamePad.forward.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.forward.generic.name = "Forward";
|
|
uiGamePad.forward.generic.statusText = "Forward movement sensitivity";
|
|
uiGamePad.forward.minValue = 0.0f;
|
|
uiGamePad.forward.maxValue = 2.0f;
|
|
uiGamePad.forward.range = 0.1f;
|
|
|
|
uiGamePad.invFwd.generic.id = ID_INVERT_FORWARD;
|
|
uiGamePad.invFwd.generic.type = QMTYPE_CHECKBOX;
|
|
uiGamePad.invFwd.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
|
|
uiGamePad.invFwd.generic.name = "Invert";
|
|
uiGamePad.invFwd.generic.x = 652;
|
|
uiGamePad.invFwd.generic.y = 280;
|
|
uiGamePad.invFwd.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.invFwd.generic.statusText = "Invert forward movement axis";
|
|
|
|
uiGamePad.pitch.generic.id = ID_PITCH;
|
|
uiGamePad.pitch.generic.type = QMTYPE_SLIDER;
|
|
uiGamePad.pitch.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.pitch.generic.x = 432;
|
|
uiGamePad.pitch.generic.y = 350;
|
|
uiGamePad.pitch.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.pitch.generic.name = "Pitch";
|
|
uiGamePad.pitch.generic.statusText = "Pitch rotating sensitivity";
|
|
uiGamePad.pitch.minValue = 0.0f;
|
|
uiGamePad.pitch.maxValue = 200.0f;
|
|
uiGamePad.pitch.range = 1.0f;
|
|
|
|
uiGamePad.invPitch.generic.id = ID_INVERT_PITCH;
|
|
uiGamePad.invPitch.generic.type = QMTYPE_CHECKBOX;
|
|
uiGamePad.invPitch.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
|
|
uiGamePad.invPitch.generic.name = "Invert";
|
|
uiGamePad.invPitch.generic.x = 652;
|
|
uiGamePad.invPitch.generic.y = 330;
|
|
uiGamePad.invPitch.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.invPitch.generic.statusText = "Invert pitch axis";
|
|
|
|
uiGamePad.yaw.generic.id = ID_YAW;
|
|
uiGamePad.yaw.generic.type = QMTYPE_SLIDER;
|
|
uiGamePad.yaw.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
|
|
uiGamePad.yaw.generic.x = 432;
|
|
uiGamePad.yaw.generic.y = 400;
|
|
uiGamePad.yaw.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.yaw.generic.name = "Yaw";
|
|
uiGamePad.yaw.generic.statusText = "Yaw rotating sensitivity";
|
|
uiGamePad.yaw.minValue = 0.0f;
|
|
uiGamePad.yaw.maxValue = 200.0f;
|
|
uiGamePad.yaw.range = 1.0f;
|
|
|
|
uiGamePad.invYaw.generic.id = ID_INVERT_YAW;
|
|
uiGamePad.invYaw.generic.type = QMTYPE_CHECKBOX;
|
|
uiGamePad.invYaw.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
|
|
uiGamePad.invYaw.generic.name = "Invert";
|
|
uiGamePad.invYaw.generic.x = 652;
|
|
uiGamePad.invYaw.generic.y = 380;
|
|
uiGamePad.invYaw.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.invYaw.generic.statusText = "Invert yaw axis";
|
|
|
|
uiGamePad.joyEnable.generic.id = ID_JOY_ENABLE;
|
|
uiGamePad.joyEnable.generic.type = QMTYPE_CHECKBOX;
|
|
uiGamePad.joyEnable.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
|
|
uiGamePad.joyEnable.generic.name = "Enable gamepad";
|
|
uiGamePad.joyEnable.generic.x = 72;
|
|
uiGamePad.joyEnable.generic.y = 530;
|
|
uiGamePad.joyEnable.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.joyEnable.generic.statusText = "Enable gamepad input in game";
|
|
|
|
uiGamePad.controls.generic.id = ID_CONTROLS;
|
|
uiGamePad.controls.generic.type = QMTYPE_BM_BUTTON;
|
|
uiGamePad.controls.generic.flags= QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
|
|
uiGamePad.controls.generic.x = 72;
|
|
uiGamePad.controls.generic.y = 580;
|
|
uiGamePad.controls.generic.name = "Controls";
|
|
uiGamePad.controls.generic.callback = UI_GamePad_Callback;
|
|
uiGamePad.controls.generic.statusText = "Set gamepad key bindings";
|
|
UI_UtilSetupPicButton( &uiGamePad.controls, PC_CONTROLS );
|
|
|
|
UI_GamePad_GetConfig();
|
|
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.background );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.banner );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.done );
|
|
for( int i = 0; i < 6; i++ )
|
|
{
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.axisBind[i] );
|
|
}
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.side );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.invSide );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.forward );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.invFwd );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.pitch );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.invPitch );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.yaw );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.invYaw );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.axisBind_label );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.joyEnable );
|
|
UI_AddItem( &uiGamePad.menu, &uiGamePad.controls );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_Precache
|
|
=================
|
|
*/
|
|
void UI_GamePad_Precache( void )
|
|
{
|
|
PIC_Load( ART_BACKGROUND );
|
|
PIC_Load( ART_BANNER );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_GamePad_Menu
|
|
=================
|
|
*/
|
|
void UI_GamePad_Menu( void )
|
|
{
|
|
UI_GamePad_Precache();
|
|
UI_GamePad_Init();
|
|
|
|
UI_GamePad_UpdateConfig();
|
|
UI_PushMenu( &uiGamePad.menu );
|
|
}
|