📄 ui_controls2.c
字号:
}
/*
=================
Controls_UpdateModel
=================
*/
static void Controls_UpdateModel( int anim ) {
VectorClear( s_controls.playerViewangles );
VectorClear( s_controls.playerMoveangles );
s_controls.playerViewangles[YAW] = 180 - 30;
s_controls.playerMoveangles[YAW] = s_controls.playerViewangles[YAW];
s_controls.playerLegs = LEGS_IDLE;
s_controls.playerTorso = TORSO_STAND;
s_controls.playerWeapon = -1;
s_controls.playerChat = qfalse;
switch( anim ) {
case ANIM_RUN:
s_controls.playerLegs = LEGS_RUN;
break;
case ANIM_WALK:
s_controls.playerLegs = LEGS_WALK;
break;
case ANIM_BACK:
s_controls.playerLegs = LEGS_BACK;
break;
case ANIM_JUMP:
s_controls.playerLegs = LEGS_JUMP;
break;
case ANIM_CROUCH:
s_controls.playerLegs = LEGS_IDLECR;
break;
case ANIM_TURNLEFT:
s_controls.playerViewangles[YAW] += 90;
break;
case ANIM_TURNRIGHT:
s_controls.playerViewangles[YAW] -= 90;
break;
case ANIM_STEPLEFT:
s_controls.playerLegs = LEGS_WALK;
s_controls.playerMoveangles[YAW] = s_controls.playerViewangles[YAW] + 90;
break;
case ANIM_STEPRIGHT:
s_controls.playerLegs = LEGS_WALK;
s_controls.playerMoveangles[YAW] = s_controls.playerViewangles[YAW] - 90;
break;
case ANIM_LOOKUP:
s_controls.playerViewangles[PITCH] = -45;
break;
case ANIM_LOOKDOWN:
s_controls.playerViewangles[PITCH] = 45;
break;
case ANIM_WEAPON1:
s_controls.playerWeapon = WP_GAUNTLET;
break;
case ANIM_WEAPON2:
s_controls.playerWeapon = WP_MACHINEGUN;
break;
case ANIM_WEAPON3:
s_controls.playerWeapon = WP_SHOTGUN;
break;
case ANIM_WEAPON4:
s_controls.playerWeapon = WP_GRENADE_LAUNCHER;
break;
case ANIM_WEAPON5:
s_controls.playerWeapon = WP_ROCKET_LAUNCHER;
break;
case ANIM_WEAPON6:
s_controls.playerWeapon = WP_LIGHTNING;
break;
case ANIM_WEAPON7:
s_controls.playerWeapon = WP_RAILGUN;
break;
case ANIM_WEAPON8:
s_controls.playerWeapon = WP_PLASMAGUN;
break;
case ANIM_WEAPON9:
s_controls.playerWeapon = WP_BFG;
break;
case ANIM_WEAPON10:
s_controls.playerWeapon = WP_GRAPPLING_HOOK;
break;
case ANIM_ATTACK:
s_controls.playerTorso = TORSO_ATTACK;
break;
case ANIM_GESTURE:
s_controls.playerTorso = TORSO_GESTURE;
break;
case ANIM_DIE:
s_controls.playerLegs = BOTH_DEATH1;
s_controls.playerTorso = BOTH_DEATH1;
s_controls.playerWeapon = WP_NONE;
break;
case ANIM_CHAT:
s_controls.playerChat = qtrue;
break;
default:
break;
}
UI_PlayerInfo_SetInfo( &s_controls.playerinfo, s_controls.playerLegs, s_controls.playerTorso, s_controls.playerViewangles, s_controls.playerMoveangles, s_controls.playerWeapon, s_controls.playerChat );
}
/*
=================
Controls_Update
=================
*/
static void Controls_Update( void ) {
int i;
int j;
int y;
menucommon_s **controls;
menucommon_s *control;
// disable all controls in all groups
for( i = 0; i < C_MAX; i++ ) {
controls = g_controls[i];
// bk001204 - parentheses
for( j = 0; (control = controls[j]) ; j++ ) {
control->flags |= (QMF_HIDDEN|QMF_INACTIVE);
}
}
controls = g_controls[s_controls.section];
// enable controls in active group (and count number of items for vertical centering)
// bk001204 - parentheses
for( j = 0; (control = controls[j]) ; j++ ) {
control->flags &= ~(QMF_GRAYED|QMF_HIDDEN|QMF_INACTIVE);
}
// position controls
y = ( SCREEN_HEIGHT - j * SMALLCHAR_HEIGHT ) / 2;
// bk001204 - parentheses
for( j = 0; (control = controls[j]) ; j++, y += SMALLCHAR_HEIGHT ) {
control->x = 320;
control->y = y;
control->left = 320 - 19*SMALLCHAR_WIDTH;
control->right = 320 + 21*SMALLCHAR_WIDTH;
control->top = y;
control->bottom = y + SMALLCHAR_HEIGHT;
}
if( s_controls.waitingforkey ) {
// disable everybody
for( i = 0; i < s_controls.menu.nitems; i++ ) {
((menucommon_s*)(s_controls.menu.items[i]))->flags |= QMF_GRAYED;
}
// enable action item
((menucommon_s*)(s_controls.menu.items[s_controls.menu.cursor]))->flags &= ~QMF_GRAYED;
// don't gray out player's name
s_controls.name.generic.flags &= ~QMF_GRAYED;
return;
}
// enable everybody
for( i = 0; i < s_controls.menu.nitems; i++ ) {
((menucommon_s*)(s_controls.menu.items[i]))->flags &= ~QMF_GRAYED;
}
// makes sure flags are right on the group selection controls
s_controls.looking.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
s_controls.movement.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
s_controls.weapons.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
s_controls.misc.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
s_controls.looking.generic.flags |= QMF_PULSEIFFOCUS;
s_controls.movement.generic.flags |= QMF_PULSEIFFOCUS;
s_controls.weapons.generic.flags |= QMF_PULSEIFFOCUS;
s_controls.misc.generic.flags |= QMF_PULSEIFFOCUS;
// set buttons
switch( s_controls.section ) {
case C_MOVEMENT:
s_controls.movement.generic.flags &= ~QMF_PULSEIFFOCUS;
s_controls.movement.generic.flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
break;
case C_LOOKING:
s_controls.looking.generic.flags &= ~QMF_PULSEIFFOCUS;
s_controls.looking.generic.flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
break;
case C_WEAPONS:
s_controls.weapons.generic.flags &= ~QMF_PULSEIFFOCUS;
s_controls.weapons.generic.flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
break;
case C_MISC:
s_controls.misc.generic.flags &= ~QMF_PULSEIFFOCUS;
s_controls.misc.generic.flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS);
break;
}
}
/*
=================
Controls_DrawKeyBinding
=================
*/
static void Controls_DrawKeyBinding( void *self )
{
menuaction_s* a;
int x;
int y;
int b1;
int b2;
qboolean c;
char name[32];
char name2[32];
a = (menuaction_s*) self;
x = a->generic.x;
y = a->generic.y;
c = (Menu_ItemAtCursor( a->generic.parent ) == a);
b1 = g_bindings[a->generic.id].bind1;
if (b1 == -1)
strcpy(name,"???");
else
{
trap_Key_KeynumToStringBuf( b1, name, 32 );
Q_strupr(name);
b2 = g_bindings[a->generic.id].bind2;
if (b2 != -1)
{
trap_Key_KeynumToStringBuf( b2, name2, 32 );
Q_strupr(name2);
strcat( name, " or " );
strcat( name, name2 );
}
}
if (c)
{
UI_FillRect( a->generic.left, a->generic.top, a->generic.right-a->generic.left+1, a->generic.bottom-a->generic.top+1, listbar_color );
UI_DrawString( x - SMALLCHAR_WIDTH, y, g_bindings[a->generic.id].label, UI_RIGHT|UI_SMALLFONT, text_color_highlight );
UI_DrawString( x + SMALLCHAR_WIDTH, y, name, UI_LEFT|UI_SMALLFONT|UI_PULSE, text_color_highlight );
if (s_controls.waitingforkey)
{
UI_DrawChar( x, y, '=', UI_CENTER|UI_BLINK|UI_SMALLFONT, text_color_highlight);
UI_DrawString(SCREEN_WIDTH * 0.50, SCREEN_HEIGHT * 0.80, "Waiting for new key ... ESCAPE to cancel", UI_SMALLFONT|UI_CENTER|UI_PULSE, colorWhite );
}
else
{
UI_DrawChar( x, y, 13, UI_CENTER|UI_BLINK|UI_SMALLFONT, text_color_highlight);
UI_DrawString(SCREEN_WIDTH * 0.50, SCREEN_HEIGHT * 0.78, "Press ENTER or CLICK to change", UI_SMALLFONT|UI_CENTER, colorWhite );
UI_DrawString(SCREEN_WIDTH * 0.50, SCREEN_HEIGHT * 0.82, "Press BACKSPACE to clear", UI_SMALLFONT|UI_CENTER, colorWhite );
}
}
else
{
if (a->generic.flags & QMF_GRAYED)
{
UI_DrawString( x - SMALLCHAR_WIDTH, y, g_bindings[a->generic.id].label, UI_RIGHT|UI_SMALLFONT, text_color_disabled );
UI_DrawString( x + SMALLCHAR_WIDTH, y, name, UI_LEFT|UI_SMALLFONT, text_color_disabled );
}
else
{
UI_DrawString( x - SMALLCHAR_WIDTH, y, g_bindings[a->generic.id].label, UI_RIGHT|UI_SMALLFONT, controls_binding_color );
UI_DrawString( x + SMALLCHAR_WIDTH, y, name, UI_LEFT|UI_SMALLFONT, controls_binding_color );
}
}
}
/*
=================
Controls_StatusBar
=================
*/
static void Controls_StatusBar( void *self )
{
UI_DrawString(SCREEN_WIDTH * 0.50, SCREEN_HEIGHT * 0.80, "Use Arrow Keys or CLICK to change", UI_SMALLFONT|UI_CENTER, colorWhite );
}
/*
=================
Controls_DrawPlayer
=================
*/
static void Controls_DrawPlayer( void *self ) {
menubitmap_s *b;
char buf[MAX_QPATH];
trap_Cvar_VariableStringBuffer( "model", buf, sizeof( buf ) );
if ( strcmp( buf, s_controls.playerModel ) != 0 ) {
UI_PlayerInfo_SetModel( &s_controls.playerinfo, buf );
strcpy( s_controls.playerModel, buf );
Controls_UpdateModel( ANIM_IDLE );
}
b = (menubitmap_s*) self;
UI_DrawPlayer( b->generic.x, b->generic.y, b->width, b->height, &s_controls.playerinfo, uis.realtime/2 );
}
/*
=================
Controls_GetKeyAssignment
=================
*/
static void Controls_GetKeyAssignment (char *command, int *twokeys)
{
int count;
int j;
char b[256];
twokeys[0] = twokeys[1] = -1;
count = 0;
for ( j = 0; j < 256; j++ )
{
trap_Key_GetBindingBuf( j, b, 256 );
if ( *b == 0 ) {
continue;
}
if ( !Q_stricmp( b, command ) ) {
twokeys[count] = j;
count++;
if (count == 2)
break;
}
}
}
/*
=================
Controls_GetConfig
=================
*/
static void Controls_GetConfig( void )
{
int i;
int twokeys[2];
bind_t* bindptr;
// put the bindings into a local store
bindptr = g_bindings;
// iterate each command, get its numeric binding
for (i=0; ;i++,bindptr++)
{
if (!bindptr->label)
break;
Controls_GetKeyAssignment(bindptr->command, twokeys);
bindptr->bind1 = twokeys[0];
bindptr->bind2 = twokeys[1];
}
s_controls.invertmouse.curvalue = Controls_GetCvarValue( "m_pitch" ) < 0;
s_controls.smoothmouse.curvalue = UI_ClampCvar( 0, 1, Controls_GetCvarValue( "m_filter" ) );
s_controls.alwaysrun.curvalue = UI_ClampCvar( 0, 1, Controls_GetCvarValue( "cl_run" ) );
s_controls.autoswitch.curvalue = UI_ClampCvar( 0, 1, Controls_GetCvarValue( "cg_autoswitch" ) );
s_controls.sensitivity.curvalue = UI_ClampCvar( 2, 30, Controls_GetCvarValue( "sensitivity" ) );
s_controls.joyenable.curvalue = UI_ClampCvar( 0, 1, Controls_GetCvarValue( "in_joystick" ) );
s_controls.joythreshold.curvalue = UI_ClampCvar( 0.05f, 0.75f, Controls_GetCvarValue( "joy_threshold" ) );
s_controls.freelook.curvalue = UI_ClampCvar( 0, 1, Controls_GetCvarValue( "cl_freelook" ) );
}
/*
=================
Controls_SetConfig
=================
*/
static void Controls_SetConfig( void )
{
int i;
bind_t* bindptr;
// set the bindings from the local store
bindptr = g_bindings;
// iterate each command, get its numeric binding
for (i=0; ;i++,bindptr++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -