📄 ui_controls2.c
字号:
if (!bindptr->label)
break;
if (bindptr->bind1 != -1)
{
trap_Key_SetBinding( bindptr->bind1, bindptr->command );
if (bindptr->bind2 != -1)
trap_Key_SetBinding( bindptr->bind2, bindptr->command );
}
}
if ( s_controls.invertmouse.curvalue )
trap_Cvar_SetValue( "m_pitch", -fabs( trap_Cvar_VariableValue( "m_pitch" ) ) );
else
trap_Cvar_SetValue( "m_pitch", fabs( trap_Cvar_VariableValue( "m_pitch" ) ) );
trap_Cvar_SetValue( "m_filter", s_controls.smoothmouse.curvalue );
trap_Cvar_SetValue( "cl_run", s_controls.alwaysrun.curvalue );
trap_Cvar_SetValue( "cg_autoswitch", s_controls.autoswitch.curvalue );
trap_Cvar_SetValue( "sensitivity", s_controls.sensitivity.curvalue );
trap_Cvar_SetValue( "in_joystick", s_controls.joyenable.curvalue );
trap_Cvar_SetValue( "joy_threshold", s_controls.joythreshold.curvalue );
trap_Cvar_SetValue( "cl_freelook", s_controls.freelook.curvalue );
trap_Cmd_ExecuteText( EXEC_APPEND, "in_restart\n" );
}
/*
=================
Controls_SetDefaults
=================
*/
static void Controls_SetDefaults( void )
{
int i;
bind_t* bindptr;
// set the bindings from the local store
bindptr = g_bindings;
// iterate each command, set its default binding
for (i=0; ;i++,bindptr++)
{
if (!bindptr->label)
break;
bindptr->bind1 = bindptr->defaultbind1;
bindptr->bind2 = bindptr->defaultbind2;
}
s_controls.invertmouse.curvalue = Controls_GetCvarDefault( "m_pitch" ) < 0;
s_controls.smoothmouse.curvalue = Controls_GetCvarDefault( "m_filter" );
s_controls.alwaysrun.curvalue = Controls_GetCvarDefault( "cl_run" );
s_controls.autoswitch.curvalue = Controls_GetCvarDefault( "cg_autoswitch" );
s_controls.sensitivity.curvalue = Controls_GetCvarDefault( "sensitivity" );
s_controls.joyenable.curvalue = Controls_GetCvarDefault( "in_joystick" );
s_controls.joythreshold.curvalue = Controls_GetCvarDefault( "joy_threshold" );
s_controls.freelook.curvalue = Controls_GetCvarDefault( "cl_freelook" );
}
/*
=================
Controls_MenuKey
=================
*/
static sfxHandle_t Controls_MenuKey( int key )
{
int id;
int i;
qboolean found;
bind_t* bindptr;
found = qfalse;
if (!s_controls.waitingforkey)
{
switch (key)
{
case K_BACKSPACE:
case K_DEL:
case K_KP_DEL:
key = -1;
break;
case K_MOUSE2:
case K_ESCAPE:
if (s_controls.changesmade)
Controls_SetConfig();
goto ignorekey;
default:
goto ignorekey;
}
}
else
{
if (key & K_CHAR_FLAG)
goto ignorekey;
switch (key)
{
case K_ESCAPE:
s_controls.waitingforkey = qfalse;
Controls_Update();
return (menu_out_sound);
case '`':
goto ignorekey;
}
}
s_controls.changesmade = qtrue;
if (key != -1)
{
// remove from any other bind
bindptr = g_bindings;
for (i=0; ;i++,bindptr++)
{
if (!bindptr->label)
break;
if (bindptr->bind2 == key)
bindptr->bind2 = -1;
if (bindptr->bind1 == key)
{
bindptr->bind1 = bindptr->bind2;
bindptr->bind2 = -1;
}
}
}
// assign key to local store
id = ((menucommon_s*)(s_controls.menu.items[s_controls.menu.cursor]))->id;
bindptr = g_bindings;
for (i=0; ;i++,bindptr++)
{
if (!bindptr->label)
break;
if (bindptr->id == id)
{
found = qtrue;
if (key == -1)
{
if( bindptr->bind1 != -1 ) {
trap_Key_SetBinding( bindptr->bind1, "" );
bindptr->bind1 = -1;
}
if( bindptr->bind2 != -1 ) {
trap_Key_SetBinding( bindptr->bind2, "" );
bindptr->bind2 = -1;
}
}
else if (bindptr->bind1 == -1) {
bindptr->bind1 = key;
}
else if (bindptr->bind1 != key && bindptr->bind2 == -1) {
bindptr->bind2 = key;
}
else
{
trap_Key_SetBinding( bindptr->bind1, "" );
trap_Key_SetBinding( bindptr->bind2, "" );
bindptr->bind1 = key;
bindptr->bind2 = -1;
}
break;
}
}
s_controls.waitingforkey = qfalse;
if (found)
{
Controls_Update();
return (menu_out_sound);
}
ignorekey:
return Menu_DefaultKey( &s_controls.menu, key );
}
/*
=================
Controls_ResetDefaults_Action
=================
*/
static void Controls_ResetDefaults_Action( qboolean result ) {
if( !result ) {
return;
}
s_controls.changesmade = qtrue;
Controls_SetDefaults();
Controls_Update();
}
/*
=================
Controls_ResetDefaults_Draw
=================
*/
static void Controls_ResetDefaults_Draw( void ) {
UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 0, "WARNING: This will reset all", UI_CENTER|UI_SMALLFONT, color_yellow );
UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 1, "controls to their default values.", UI_CENTER|UI_SMALLFONT, color_yellow );
}
/*
=================
Controls_MenuEvent
=================
*/
static void Controls_MenuEvent( void* ptr, int event )
{
switch (((menucommon_s*)ptr)->id)
{
case ID_MOVEMENT:
if (event == QM_ACTIVATED)
{
s_controls.section = C_MOVEMENT;
Controls_Update();
}
break;
case ID_LOOKING:
if (event == QM_ACTIVATED)
{
s_controls.section = C_LOOKING;
Controls_Update();
}
break;
case ID_WEAPONS:
if (event == QM_ACTIVATED)
{
s_controls.section = C_WEAPONS;
Controls_Update();
}
break;
case ID_MISC:
if (event == QM_ACTIVATED)
{
s_controls.section = C_MISC;
Controls_Update();
}
break;
case ID_DEFAULTS:
if (event == QM_ACTIVATED)
{
UI_ConfirmMenu( "SET TO DEFAULTS?", Controls_ResetDefaults_Draw, Controls_ResetDefaults_Action );
}
break;
case ID_BACK:
if (event == QM_ACTIVATED)
{
if (s_controls.changesmade)
Controls_SetConfig();
UI_PopMenu();
}
break;
case ID_SAVEANDEXIT:
if (event == QM_ACTIVATED)
{
Controls_SetConfig();
UI_PopMenu();
}
break;
case ID_EXIT:
if (event == QM_ACTIVATED)
{
UI_PopMenu();
}
break;
case ID_FREELOOK:
case ID_MOUSESPEED:
case ID_INVERTMOUSE:
case ID_SMOOTHMOUSE:
case ID_ALWAYSRUN:
case ID_AUTOSWITCH:
case ID_JOYENABLE:
case ID_JOYTHRESHOLD:
if (event == QM_ACTIVATED)
{
s_controls.changesmade = qtrue;
}
break;
}
}
/*
=================
Controls_ActionEvent
=================
*/
static void Controls_ActionEvent( void* ptr, int event )
{
if (event == QM_LOSTFOCUS)
{
Controls_UpdateModel( ANIM_IDLE );
}
else if (event == QM_GOTFOCUS)
{
Controls_UpdateModel( g_bindings[((menucommon_s*)ptr)->id].anim );
}
else if ((event == QM_ACTIVATED) && !s_controls.waitingforkey)
{
s_controls.waitingforkey = 1;
Controls_Update();
}
}
/*
=================
Controls_InitModel
=================
*/
static void Controls_InitModel( void )
{
memset( &s_controls.playerinfo, 0, sizeof(playerInfo_t) );
UI_PlayerInfo_SetModel( &s_controls.playerinfo, UI_Cvar_VariableString( "model" ) );
Controls_UpdateModel( ANIM_IDLE );
}
/*
=================
Controls_InitWeapons
=================
*/
static void Controls_InitWeapons( void ) {
gitem_t * item;
for ( item = bg_itemlist + 1 ; item->classname ; item++ ) {
if ( item->giType != IT_WEAPON ) {
continue;
}
trap_R_RegisterModel( item->world_model[0] );
}
}
/*
=================
Controls_MenuInit
=================
*/
static void Controls_MenuInit( void )
{
static char playername[32];
// zero set all our globals
memset( &s_controls, 0 ,sizeof(controls_t) );
Controls_Cache();
s_controls.menu.key = Controls_MenuKey;
s_controls.menu.wrapAround = qtrue;
s_controls.menu.fullscreen = qtrue;
s_controls.banner.generic.type = MTYPE_BTEXT;
s_controls.banner.generic.flags = QMF_CENTER_JUSTIFY;
s_controls.banner.generic.x = 320;
s_controls.banner.generic.y = 16;
s_controls.banner.string = "CONTROLS";
s_controls.banner.color = color_white;
s_controls.banner.style = UI_CENTER;
s_controls.framel.generic.type = MTYPE_BITMAP;
s_controls.framel.generic.name = ART_FRAMEL;
s_controls.framel.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
s_controls.framel.generic.x = 0;
s_controls.framel.generic.y = 78;
s_controls.framel.width = 256;
s_controls.framel.height = 329;
s_controls.framer.generic.type = MTYPE_BITMAP;
s_controls.framer.generic.name = ART_FRAMER;
s_controls.framer.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
s_controls.framer.generic.x = 376;
s_controls.framer.generic.y = 76;
s_controls.framer.width = 256;
s_controls.framer.height = 334;
s_controls.looking.generic.type = MTYPE_PTEXT;
s_controls.looking.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
s_controls.looking.generic.id = ID_LOOKING;
s_controls.looking.generic.callback = Controls_MenuEvent;
s_controls.looking.generic.x = 152;
s_controls.looking.generic.y = 240 - 2 * PROP_HEIGHT;
s_controls.looking.string = "LOOK";
s_controls.looking.style = UI_RIGHT;
s_controls.looking.color = color_red;
s_controls.movement.generic.type = MTYPE_PTEXT;
s_controls.movement.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
s_controls.movement.generic.id = ID_MOVEMENT;
s_controls.movement.generic.callback = Controls_MenuEvent;
s_controls.movement.generic.x = 152;
s_controls.movement.generic.y = 240 - PROP_HEIGHT;
s_controls.movement.string = "MOVE";
s_controls.movement.style = UI_RIGHT;
s_controls.movement.color = color_red;
s_controls.weapons.generic.type = MTYPE_PTEXT;
s_controls.weapons.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
s_controls.weapons.generic.id = ID_WEAPONS;
s_controls.weapons.generic.callback = Controls_MenuEvent;
s_controls.weapons.generic.x = 152;
s_controls.weapons.generic.y = 240;
s_controls.weapons.string = "SHOOT";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -