📄 ui_controls2.c
字号:
/*
===========================================================================
Copyright (C) 1999-2005 Id Software, Inc.
This file is part of Quake III Arena source code.
Quake III Arena source code 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.
Quake III Arena source code 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 Foobar; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
//
/*
=======================================================================
CONTROLS MENU
=======================================================================
*/
#include "ui_local.h"
#define ART_BACK0 "menu/art/back_0"
#define ART_BACK1 "menu/art/back_1"
#define ART_FRAMEL "menu/art/frame2_l"
#define ART_FRAMER "menu/art/frame1_r"
typedef struct {
char *command;
char *label;
int id;
int anim;
int defaultbind1;
int defaultbind2;
int bind1;
int bind2;
} bind_t;
typedef struct
{
char* name;
float defaultvalue;
float value;
} configcvar_t;
#define SAVE_NOOP 0
#define SAVE_YES 1
#define SAVE_NO 2
#define SAVE_CANCEL 3
// control sections
#define C_MOVEMENT 0
#define C_LOOKING 1
#define C_WEAPONS 2
#define C_MISC 3
#define C_MAX 4
#define ID_MOVEMENT 100
#define ID_LOOKING 101
#define ID_WEAPONS 102
#define ID_MISC 103
#define ID_DEFAULTS 104
#define ID_BACK 105
#define ID_SAVEANDEXIT 106
#define ID_EXIT 107
// bindable actions
#define ID_SHOWSCORES 0
#define ID_USEITEM 1
#define ID_SPEED 2
#define ID_FORWARD 3
#define ID_BACKPEDAL 4
#define ID_MOVELEFT 5
#define ID_MOVERIGHT 6
#define ID_MOVEUP 7
#define ID_MOVEDOWN 8
#define ID_LEFT 9
#define ID_RIGHT 10
#define ID_STRAFE 11
#define ID_LOOKUP 12
#define ID_LOOKDOWN 13
#define ID_MOUSELOOK 14
#define ID_CENTERVIEW 15
#define ID_ZOOMVIEW 16
#define ID_WEAPON1 17
#define ID_WEAPON2 18
#define ID_WEAPON3 19
#define ID_WEAPON4 20
#define ID_WEAPON5 21
#define ID_WEAPON6 22
#define ID_WEAPON7 23
#define ID_WEAPON8 24
#define ID_WEAPON9 25
#define ID_ATTACK 26
#define ID_WEAPPREV 27
#define ID_WEAPNEXT 28
#define ID_GESTURE 29
#define ID_CHAT 30
#define ID_CHAT2 31
#define ID_CHAT3 32
#define ID_CHAT4 33
// all others
#define ID_FREELOOK 34
#define ID_INVERTMOUSE 35
#define ID_ALWAYSRUN 36
#define ID_AUTOSWITCH 37
#define ID_MOUSESPEED 38
#define ID_JOYENABLE 39
#define ID_JOYTHRESHOLD 40
#define ID_SMOOTHMOUSE 41
#define ANIM_IDLE 0
#define ANIM_RUN 1
#define ANIM_WALK 2
#define ANIM_BACK 3
#define ANIM_JUMP 4
#define ANIM_CROUCH 5
#define ANIM_STEPLEFT 6
#define ANIM_STEPRIGHT 7
#define ANIM_TURNLEFT 8
#define ANIM_TURNRIGHT 9
#define ANIM_LOOKUP 10
#define ANIM_LOOKDOWN 11
#define ANIM_WEAPON1 12
#define ANIM_WEAPON2 13
#define ANIM_WEAPON3 14
#define ANIM_WEAPON4 15
#define ANIM_WEAPON5 16
#define ANIM_WEAPON6 17
#define ANIM_WEAPON7 18
#define ANIM_WEAPON8 19
#define ANIM_WEAPON9 20
#define ANIM_WEAPON10 21
#define ANIM_ATTACK 22
#define ANIM_GESTURE 23
#define ANIM_DIE 24
#define ANIM_CHAT 25
typedef struct
{
menuframework_s menu;
menutext_s banner;
menubitmap_s framel;
menubitmap_s framer;
menubitmap_s player;
menutext_s movement;
menutext_s looking;
menutext_s weapons;
menutext_s misc;
menuaction_s walkforward;
menuaction_s backpedal;
menuaction_s stepleft;
menuaction_s stepright;
menuaction_s moveup;
menuaction_s movedown;
menuaction_s turnleft;
menuaction_s turnright;
menuaction_s sidestep;
menuaction_s run;
menuaction_s machinegun;
menuaction_s chainsaw;
menuaction_s shotgun;
menuaction_s grenadelauncher;
menuaction_s rocketlauncher;
menuaction_s lightning;
menuaction_s railgun;
menuaction_s plasma;
menuaction_s bfg;
menuaction_s attack;
menuaction_s prevweapon;
menuaction_s nextweapon;
menuaction_s lookup;
menuaction_s lookdown;
menuaction_s mouselook;
menuradiobutton_s freelook;
menuaction_s centerview;
menuaction_s zoomview;
menuaction_s gesture;
menuradiobutton_s invertmouse;
menuslider_s sensitivity;
menuradiobutton_s smoothmouse;
menuradiobutton_s alwaysrun;
menuaction_s showscores;
menuradiobutton_s autoswitch;
menuaction_s useitem;
playerInfo_t playerinfo;
qboolean changesmade;
menuaction_s chat;
menuaction_s chat2;
menuaction_s chat3;
menuaction_s chat4;
menuradiobutton_s joyenable;
menuslider_s joythreshold;
int section;
qboolean waitingforkey;
char playerModel[64];
vec3_t playerViewangles;
vec3_t playerMoveangles;
int playerLegs;
int playerTorso;
int playerWeapon;
qboolean playerChat;
menubitmap_s back;
menutext_s name;
} controls_t;
static controls_t s_controls;
static vec4_t controls_binding_color = {1.00f, 0.43f, 0.00f, 1.00f}; // bk: Win32 C4305
static bind_t g_bindings[] =
{
{"+scores", "show scores", ID_SHOWSCORES, ANIM_IDLE, K_TAB, -1, -1, -1},
{"+button2", "use item", ID_USEITEM, ANIM_IDLE, K_ENTER, -1, -1, -1},
{"+speed", "run / walk", ID_SPEED, ANIM_RUN, K_SHIFT, -1, -1, -1},
{"+forward", "walk forward", ID_FORWARD, ANIM_WALK, K_UPARROW, -1, -1, -1},
{"+back", "backpedal", ID_BACKPEDAL, ANIM_BACK, K_DOWNARROW, -1, -1, -1},
{"+moveleft", "step left", ID_MOVELEFT, ANIM_STEPLEFT, ',', -1, -1, -1},
{"+moveright", "step right", ID_MOVERIGHT, ANIM_STEPRIGHT, '.', -1, -1, -1},
{"+moveup", "up / jump", ID_MOVEUP, ANIM_JUMP, K_SPACE, -1, -1, -1},
{"+movedown", "down / crouch", ID_MOVEDOWN, ANIM_CROUCH, 'c', -1, -1, -1},
{"+left", "turn left", ID_LEFT, ANIM_TURNLEFT, K_LEFTARROW, -1, -1, -1},
{"+right", "turn right", ID_RIGHT, ANIM_TURNRIGHT, K_RIGHTARROW, -1, -1, -1},
{"+strafe", "sidestep / turn", ID_STRAFE, ANIM_IDLE, K_ALT, -1, -1, -1},
{"+lookup", "look up", ID_LOOKUP, ANIM_LOOKUP, K_PGDN, -1, -1, -1},
{"+lookdown", "look down", ID_LOOKDOWN, ANIM_LOOKDOWN, K_DEL, -1, -1, -1},
{"+mlook", "mouse look", ID_MOUSELOOK, ANIM_IDLE, '/', -1, -1, -1},
{"centerview", "center view", ID_CENTERVIEW, ANIM_IDLE, K_END, -1, -1, -1},
{"+zoom", "zoom view", ID_ZOOMVIEW, ANIM_IDLE, -1, -1, -1, -1},
{"weapon 1", "gauntlet", ID_WEAPON1, ANIM_WEAPON1, '1', -1, -1, -1},
{"weapon 2", "machinegun", ID_WEAPON2, ANIM_WEAPON2, '2', -1, -1, -1},
{"weapon 3", "shotgun", ID_WEAPON3, ANIM_WEAPON3, '3', -1, -1, -1},
{"weapon 4", "grenade launcher", ID_WEAPON4, ANIM_WEAPON4, '4', -1, -1, -1},
{"weapon 5", "rocket launcher", ID_WEAPON5, ANIM_WEAPON5, '5', -1, -1, -1},
{"weapon 6", "lightning", ID_WEAPON6, ANIM_WEAPON6, '6', -1, -1, -1},
{"weapon 7", "railgun", ID_WEAPON7, ANIM_WEAPON7, '7', -1, -1, -1},
{"weapon 8", "plasma gun", ID_WEAPON8, ANIM_WEAPON8, '8', -1, -1, -1},
{"weapon 9", "BFG", ID_WEAPON9, ANIM_WEAPON9, '9', -1, -1, -1},
{"+attack", "attack", ID_ATTACK, ANIM_ATTACK, K_CTRL, -1, -1, -1},
{"weapprev", "prev weapon", ID_WEAPPREV, ANIM_IDLE, '[', -1, -1, -1},
{"weapnext", "next weapon", ID_WEAPNEXT, ANIM_IDLE, ']', -1, -1, -1},
{"+button3", "gesture", ID_GESTURE, ANIM_GESTURE, K_MOUSE3, -1, -1, -1},
{"messagemode", "chat", ID_CHAT, ANIM_CHAT, 't', -1, -1, -1},
{"messagemode2", "chat - team", ID_CHAT2, ANIM_CHAT, -1, -1, -1, -1},
{"messagemode3", "chat - target", ID_CHAT3, ANIM_CHAT, -1, -1, -1, -1},
{"messagemode4", "chat - attacker", ID_CHAT4, ANIM_CHAT, -1, -1, -1, -1},
{(char*)NULL, (char*)NULL, 0, 0, -1, -1, -1, -1},
};
static configcvar_t g_configcvars[] =
{
{"cl_run", 0, 0},
{"m_pitch", 0, 0},
{"cg_autoswitch", 0, 0},
{"sensitivity", 0, 0},
{"in_joystick", 0, 0},
{"joy_threshold", 0, 0},
{"m_filter", 0, 0},
{"cl_freelook", 0, 0},
{NULL, 0, 0}
};
static menucommon_s *g_movement_controls[] =
{
(menucommon_s *)&s_controls.alwaysrun,
(menucommon_s *)&s_controls.run,
(menucommon_s *)&s_controls.walkforward,
(menucommon_s *)&s_controls.backpedal,
(menucommon_s *)&s_controls.stepleft,
(menucommon_s *)&s_controls.stepright,
(menucommon_s *)&s_controls.moveup,
(menucommon_s *)&s_controls.movedown,
(menucommon_s *)&s_controls.turnleft,
(menucommon_s *)&s_controls.turnright,
(menucommon_s *)&s_controls.sidestep,
NULL
};
static menucommon_s *g_weapons_controls[] = {
(menucommon_s *)&s_controls.attack,
(menucommon_s *)&s_controls.nextweapon,
(menucommon_s *)&s_controls.prevweapon,
(menucommon_s *)&s_controls.autoswitch,
(menucommon_s *)&s_controls.chainsaw,
(menucommon_s *)&s_controls.machinegun,
(menucommon_s *)&s_controls.shotgun,
(menucommon_s *)&s_controls.grenadelauncher,
(menucommon_s *)&s_controls.rocketlauncher,
(menucommon_s *)&s_controls.lightning,
(menucommon_s *)&s_controls.railgun,
(menucommon_s *)&s_controls.plasma,
(menucommon_s *)&s_controls.bfg,
NULL,
};
static menucommon_s *g_looking_controls[] = {
(menucommon_s *)&s_controls.sensitivity,
(menucommon_s *)&s_controls.smoothmouse,
(menucommon_s *)&s_controls.invertmouse,
(menucommon_s *)&s_controls.lookup,
(menucommon_s *)&s_controls.lookdown,
(menucommon_s *)&s_controls.mouselook,
(menucommon_s *)&s_controls.freelook,
(menucommon_s *)&s_controls.centerview,
(menucommon_s *)&s_controls.zoomview,
(menucommon_s *)&s_controls.joyenable,
(menucommon_s *)&s_controls.joythreshold,
NULL,
};
static menucommon_s *g_misc_controls[] = {
(menucommon_s *)&s_controls.showscores,
(menucommon_s *)&s_controls.useitem,
(menucommon_s *)&s_controls.gesture,
(menucommon_s *)&s_controls.chat,
(menucommon_s *)&s_controls.chat2,
(menucommon_s *)&s_controls.chat3,
(menucommon_s *)&s_controls.chat4,
NULL,
};
static menucommon_s **g_controls[] = {
g_movement_controls,
g_looking_controls,
g_weapons_controls,
g_misc_controls,
};
/*
=================
Controls_InitCvars
=================
*/
static void Controls_InitCvars( void )
{
int i;
configcvar_t* cvarptr;
cvarptr = g_configcvars;
for (i=0; ;i++,cvarptr++)
{
if (!cvarptr->name)
break;
// get current value
cvarptr->value = trap_Cvar_VariableValue( cvarptr->name );
// get default value
trap_Cvar_Reset( cvarptr->name );
cvarptr->defaultvalue = trap_Cvar_VariableValue( cvarptr->name );
// restore current value
trap_Cvar_SetValue( cvarptr->name, cvarptr->value );
}
}
/*
=================
Controls_GetCvarDefault
=================
*/
static float Controls_GetCvarDefault( char* name )
{
configcvar_t* cvarptr;
int i;
cvarptr = g_configcvars;
for (i=0; ;i++,cvarptr++)
{
if (!cvarptr->name)
return (0);
if (!strcmp(cvarptr->name,name))
break;
}
return (cvarptr->defaultvalue);
}
/*
=================
Controls_GetCvarValue
=================
*/
static float Controls_GetCvarValue( char* name )
{
configcvar_t* cvarptr;
int i;
cvarptr = g_configcvars;
for (i=0; ;i++,cvarptr++)
{
if (!cvarptr->name)
return (0);
if (!strcmp(cvarptr->name,name))
break;
}
return (cvarptr->value);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -