This is an automated email from the git hooks/post-receive script. smcv pushed a commit to annotated tag 1.5a in repository iortcw.
commit 75f5ae6a714adafa8079ab7c51c0b829be554f6d Author: MAN-AT-ARMS <[email protected]> Date: Sun Jun 5 13:18:00 2016 -0400 All: Improve keyboard/joystick input in UI Make Yes/No, Multi, Slider, and Bind items allow enter key to change value without mouse over item. Add support for left and right arrow keys and joystick button 1-4 to Yes/No, Multi, and Slider and many item specific 'ownerdraw' key handlers. --- MP/code/ui/ui_main.c | 357 +++++++++++++++++++++------------------------- MP/code/ui/ui_shared.c | 97 ++++++++++--- MP/code/ui/ui_shared.h | 1 + SP/code/ui/ui_main.c | 373 ++++++++++++++++++++++--------------------------- SP/code/ui/ui_shared.c | 94 ++++++++++--- SP/code/ui/ui_shared.h | 1 + 6 files changed, 485 insertions(+), 438 deletions(-) diff --git a/MP/code/ui/ui_main.c b/MP/code/ui/ui_main.c index fd4c8f5..a8285ec 100644 --- a/MP/code/ui/ui_main.c +++ b/MP/code/ui/ui_main.c @@ -2118,11 +2118,12 @@ static void UI_DrawOpponent( rectDef_t *rect ) { #else UI_PlayerInfo_SetModel( &info2, model ); #endif // #ifdef MISSIONPACK - UI_PlayerInfo_SetInfo( &info2, LEGS_IDLE, TORSO_STAND, viewangles, vec3_origin, WP_MP40, qfalse ); - +#ifdef MISSIONPACK + UI_RegisterClientModelname( &info2, model, headmodel, team ); +#else UI_RegisterClientModelname( &info2, model ); - +#endif // #ifdef MISSIONPACK updateOpponentModel = qfalse; } @@ -2936,106 +2937,105 @@ static qboolean UI_OwnerDrawVisible( int flags ) { return vis; } -static qboolean UI_Handicap_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_Handicap_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int h; - h = Com_Clamp( 5, 100, trap_Cvar_VariableValue( "handicap" ) ); - if ( key == K_MOUSE2 ) { - h -= 5; - } else { - h += 5; - } - if ( h > 100 ) { + + h = Com_Clamp( 5, 100, trap_Cvar_VariableValue("handicap") ); + h += 5 * select; + + if (h > 100) { h = 5; - } else if ( h < 5 ) { + } else if (h < 5) { h = 100; } - trap_Cvar_Set( "handicap", va( "%i", h ) ); + + trap_Cvar_SetValue( "handicap", h ); return qtrue; } return qfalse; } -static qboolean UI_Effects_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_Effects_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.effectsColor += select; - if ( key == K_MOUSE2 ) { - uiInfo.effectsColor--; - } else { - uiInfo.effectsColor++; - } - - if ( uiInfo.effectsColor > 6 ) { + if( uiInfo.effectsColor > 6 ) { uiInfo.effectsColor = 0; - } else if ( uiInfo.effectsColor < 0 ) { + } else if (uiInfo.effectsColor < 0) { uiInfo.effectsColor = 6; } - trap_Cvar_SetValue( "color", uitogamecode[uiInfo.effectsColor] ); + trap_Cvar_SetValue( "color1", uitogamecode[uiInfo.effectsColor] ); return qtrue; } return qfalse; } -static qboolean UI_ClanName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_ClanName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int i; - i = UI_TeamIndexFromName( UI_Cvar_VariableString( "ui_teamName" ) ); - if ( uiInfo.teamList[i].cinematic >= 0 ) { - trap_CIN_StopCinematic( uiInfo.teamList[i].cinematic ); + + i = UI_TeamIndexFromName(UI_Cvar_VariableString("ui_teamName")); + + if (uiInfo.teamList[i].cinematic >= 0) { + trap_CIN_StopCinematic(uiInfo.teamList[i].cinematic); uiInfo.teamList[i].cinematic = -1; } - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } - if ( i >= uiInfo.teamCount ) { + + i += select; + + if (i >= uiInfo.teamCount) { i = 0; - } else if ( i < 0 ) { + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName ); + + trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName); updateModel = qtrue; return qtrue; } return qfalse; } -static qboolean UI_GameType_HandleKey( int flags, float *special, int key, qboolean resetMap ) { +static qboolean UI_GameType_HandleKey(int flags, float *special, int key, qboolean resetMap) { //#ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - int oldCount = UI_MapCountByGameType( qtrue ); + int select = UI_SelectForKey(key); + if (select != 0) { + int oldCount = UI_MapCountByGameType(qtrue); // hard coded mess here - if ( key == K_MOUSE2 ) { + if (select < 0) { ui_gameType.integer--; - if ( ui_gameType.integer == 2 ) { + if (ui_gameType.integer == 2) { ui_gameType.integer = 1; - } else if ( ui_gameType.integer < 2 ) { + } else if (ui_gameType.integer < 2) { ui_gameType.integer = uiInfo.numGameTypes - 1; } } else { ui_gameType.integer++; - if ( ui_gameType.integer >= uiInfo.numGameTypes ) { + if (ui_gameType.integer >= uiInfo.numGameTypes) { ui_gameType.integer = 1; - } else if ( ui_gameType.integer == 2 ) { + } else if (ui_gameType.integer == 2) { ui_gameType.integer = 3; } } - - if ( uiInfo.gameTypes[ui_gameType.integer].gtEnum == GT_TOURNAMENT ) { - trap_Cvar_Set( "ui_Q3Model", "1" ); + + if (uiInfo.gameTypes[ui_gameType.integer].gtEnum < GT_TEAM) { + trap_Cvar_SetValue( "ui_Q3Model", 1 ); } else { - trap_Cvar_Set( "ui_Q3Model", "0" ); + trap_Cvar_SetValue( "ui_Q3Model", 0 ); } - trap_Cvar_Set( "ui_gameType", va( "%d", ui_gameType.integer ) ); - UI_SetCapFragLimits( qtrue ); - UI_LoadBestScores( uiInfo.mapList[ui_currentMap.integer].mapLoadName, uiInfo.gameTypes[ui_gameType.integer].gtEnum ); - if ( resetMap && oldCount != UI_MapCountByGameType( qtrue ) ) { - trap_Cvar_Set( "ui_currentMap", "0" ); - Menu_SetFeederSelection( NULL, FEEDER_MAPS, 0, NULL ); + trap_Cvar_SetValue("ui_gameType", ui_gameType.integer); + UI_SetCapFragLimits(qtrue); + UI_LoadBestScores(uiInfo.mapList[ui_currentMap.integer].mapLoadName, uiInfo.gameTypes[ui_gameType.integer].gtEnum); + if (resetMap && oldCount != UI_MapCountByGameType(qtrue)) { + trap_Cvar_SetValue( "ui_currentMap", 0); + Menu_SetFeederSelection(NULL, FEEDER_MAPS, 0, NULL); } return qtrue; } @@ -3043,51 +3043,43 @@ static qboolean UI_GameType_HandleKey( int flags, float *special, int key, qbool return qfalse; } -static qboolean UI_NetGameType_HandleKey( int flags, float *special, int key ) { +static qboolean UI_NetGameType_HandleKey(int flags, float *special, int key) { //#ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - - if ( key == K_MOUSE2 ) { - ui_netGameType.integer--; - } else { - ui_netGameType.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netGameType.integer += select; - if ( ui_netGameType.integer < 0 ) { + if (ui_netGameType.integer < 0) { ui_netGameType.integer = uiInfo.numGameTypes - 1; - } else if ( ui_netGameType.integer >= uiInfo.numGameTypes ) { + } else if (ui_netGameType.integer >= uiInfo.numGameTypes) { ui_netGameType.integer = 0; } - trap_Cvar_Set( "ui_netGameType", va( "%d", ui_netGameType.integer ) ); - trap_Cvar_Set( "ui_actualnetGameType", va( "%d", uiInfo.gameTypes[ui_netGameType.integer].gtEnum ) ); - trap_Cvar_Set( "ui_currentNetMap", "0" ); - UI_MapCountByGameType( qfalse ); - Menu_SetFeederSelection( NULL, FEEDER_ALLMAPS, 0, NULL ); + trap_Cvar_SetValue( "ui_netGameType", ui_netGameType.integer); + trap_Cvar_SetValue( "ui_actualnetGameType", uiInfo.gameTypes[ui_netGameType.integer].gtEnum); + trap_Cvar_SetValue( "ui_currentNetMap", 0); + UI_MapCountByGameType(qfalse); + Menu_SetFeederSelection(NULL, FEEDER_ALLMAPS, 0, NULL); return qtrue; } //#endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_JoinGameType_HandleKey( int flags, float *special, int key ) { +static qboolean UI_JoinGameType_HandleKey(int flags, float *special, int key) { //#ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { + int select = UI_SelectForKey(key); + if (select != 0) { + ui_joinGameType.integer += select; - if ( key == K_MOUSE2 ) { - ui_joinGameType.integer--; - } else { - ui_joinGameType.integer++; - } - - if ( ui_joinGameType.integer < 0 ) { + if (ui_joinGameType.integer < 0) { ui_joinGameType.integer = uiInfo.numJoinGameTypes - 1; - } else if ( ui_joinGameType.integer >= uiInfo.numJoinGameTypes ) { + } else if (ui_joinGameType.integer >= uiInfo.numJoinGameTypes) { ui_joinGameType.integer = 0; } - trap_Cvar_Set( "ui_joinGameType", va( "%d", ui_joinGameType.integer ) ); - UI_BuildServerDisplayList( qtrue ); + trap_Cvar_SetValue( "ui_joinGameType", ui_joinGameType.integer); + UI_BuildServerDisplayList(qtrue); return qtrue; } //#endif // #ifdef MISSIONPACK @@ -3096,81 +3088,71 @@ static qboolean UI_JoinGameType_HandleKey( int flags, float *special, int key ) -static qboolean UI_Skill_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_Skill_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int i = trap_Cvar_VariableValue( "g_spSkill" ); - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } + i += select; - if ( i < 1 ) { + if (i < 1) { i = numSkillLevels; - } else if ( i > numSkillLevels ) { + } else if (i > numSkillLevels) { i = 1; } - trap_Cvar_Set( "g_spSkill", va( "%i", i ) ); + trap_Cvar_SetValue("g_spSkill", i); return qtrue; } return qfalse; } -static qboolean UI_TeamName_HandleKey( int flags, float *special, int key, qboolean blue ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_TeamName_HandleKey(int flags, float *special, int key, qboolean blue) { + int select = UI_SelectForKey(key); + if (select != 0) { int i; - i = UI_TeamIndexFromName( UI_Cvar_VariableString( ( blue ) ? "ui_blueTeam" : "ui_redTeam" ) ); - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } + i = UI_TeamIndexFromName(UI_Cvar_VariableString((blue) ? "ui_blueTeam" : "ui_redTeam")); + i += select; - if ( i >= uiInfo.teamCount ) { + if (i >= uiInfo.teamCount) { i = 0; - } else if ( i < 0 ) { + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( ( blue ) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName ); - + trap_Cvar_Set( (blue) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName); return qtrue; } return qfalse; } -static qboolean UI_TeamMember_HandleKey( int flags, float *special, int key, qboolean blue, int num ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_TeamMember_HandleKey(int flags, float *special, int key, qboolean blue, int num) { + int select = UI_SelectForKey(key); + if (select != 0) { // 0 - None // 1 - Human // 2..NumCharacters - Bot - char *cvar = va( blue ? "ui_blueteam%i" : "ui_redteam%i", num ); - int value = trap_Cvar_VariableValue( cvar ); + char *cvar = va(blue ? "ui_blueteam%i" : "ui_redteam%i", num); + int value = trap_Cvar_VariableValue(cvar); - if ( key == K_MOUSE2 ) { - value--; - } else { - value++; - } + value += select; - if ( ui_actualNetGameType.integer >= GT_TEAM ) { - if ( value >= uiInfo.characterCount + 2 ) { + if (ui_actualNetGameType.integer >= GT_TEAM) { + if (value >= uiInfo.characterCount + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = uiInfo.characterCount + 2 - 1; } } else { - if ( value >= UI_GetNumBots() + 2 ) { + if (value >= UI_GetNumBots() + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = UI_GetNumBots() + 2 - 1; } } - trap_Cvar_Set( cvar, va( "%i", value ) ); + trap_Cvar_SetValue(cvar, value); return qtrue; } return qfalse; @@ -3178,13 +3160,9 @@ static qboolean UI_TeamMember_HandleKey( int flags, float *special, int key, qbo static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { //#ifdef MISSIONPACK - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netSource.integer += select; if(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5) { @@ -3196,12 +3174,8 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { trap_Cvar_VariableStringBuffer(cvarname, masterstr, sizeof(masterstr)); if(*masterstr) break; - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + + ui_netSource.integer += select; } } @@ -3215,38 +3189,35 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { if (!(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5)) { UI_StartServerRefresh(qtrue); } - trap_Cvar_Set( "ui_netSource", va("%d", ui_netSource.integer)); + trap_Cvar_SetValue( "ui_netSource", ui_netSource.integer); return qtrue; } //#endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_NetFilter_HandleKey( int flags, float *special, int key ) { +static qboolean UI_NetFilter_HandleKey(int flags, float *special, int key) { //#ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - - if ( key == K_MOUSE2 ) { - ui_serverFilterType.integer--; - } else { - ui_serverFilterType.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_serverFilterType.integer += select; - if ( ui_serverFilterType.integer >= numServerFilters ) { + if (ui_serverFilterType.integer >= numServerFilters) { ui_serverFilterType.integer = 0; - } else if ( ui_serverFilterType.integer < 0 ) { + } else if (ui_serverFilterType.integer < 0) { ui_serverFilterType.integer = numServerFilters - 1; } - UI_BuildServerDisplayList( qtrue ); + UI_BuildServerDisplayList(qtrue); return qtrue; } //#endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_OpponentName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { +static qboolean UI_OpponentName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + if (select < 0) { UI_PriorOpponent(); } else { UI_NextOpponent(); @@ -3256,27 +3227,24 @@ static qboolean UI_OpponentName_HandleKey( int flags, float *special, int key ) return qfalse; } -static qboolean UI_BotName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - int game = trap_Cvar_VariableValue( "g_gametype" ); +static qboolean UI_BotName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + int game = trap_Cvar_VariableValue("g_gametype"); int value = uiInfo.botIndex; - if ( key == K_MOUSE2 ) { - value--; - } else { - value++; - } + value += select; - if ( game >= GT_TEAM ) { - if ( value >= uiInfo.characterCount + 2 ) { + if (game >= GT_TEAM) { + if (value >= uiInfo.characterCount + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = uiInfo.characterCount + 2 - 1; } } else { - if ( value >= UI_GetNumBots() + 2 ) { + if (value >= UI_GetNumBots() + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = UI_GetNumBots() + 2 - 1; } } @@ -3286,45 +3254,41 @@ static qboolean UI_BotName_HandleKey( int flags, float *special, int key ) { return qfalse; } -static qboolean UI_BotSkill_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { - uiInfo.skillIndex--; - } else { - uiInfo.skillIndex++; - } - if ( uiInfo.skillIndex >= numSkillLevels ) { +static qboolean UI_BotSkill_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.skillIndex += select; + + if (uiInfo.skillIndex >= numSkillLevels) { uiInfo.skillIndex = 0; - } else if ( uiInfo.skillIndex < 0 ) { - uiInfo.skillIndex = numSkillLevels - 1; + } else if (uiInfo.skillIndex < 0) { + uiInfo.skillIndex = numSkillLevels-1; } return qtrue; } return qfalse; } -static qboolean UI_RedBlue_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_RedBlue_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { uiInfo.redBlue ^= 1; return qtrue; } return qfalse; } -static qboolean UI_Crosshair_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { - uiInfo.currentCrosshair--; - } else { - uiInfo.currentCrosshair++; - } +static qboolean UI_Crosshair_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.currentCrosshair += select; - if ( uiInfo.currentCrosshair >= NUM_CROSSHAIRS ) { + if (uiInfo.currentCrosshair >= NUM_CROSSHAIRS) { uiInfo.currentCrosshair = 0; - } else if ( uiInfo.currentCrosshair < 0 ) { + } else if (uiInfo.currentCrosshair < 0) { uiInfo.currentCrosshair = NUM_CROSSHAIRS - 1; } - trap_Cvar_Set( "cg_drawCrosshair", va( "%d", uiInfo.currentCrosshair ) ); + trap_Cvar_SetValue("cg_drawCrosshair", uiInfo.currentCrosshair); return qtrue; } return qfalse; @@ -3332,34 +3296,31 @@ static qboolean UI_Crosshair_HandleKey( int flags, float *special, int key ) { -static qboolean UI_SelectedPlayer_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_SelectedPlayer_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int selected; UI_BuildPlayerList(); - if ( !uiInfo.teamLeader ) { + if (!uiInfo.teamLeader) { return qfalse; } - selected = trap_Cvar_VariableValue( "cg_selectedPlayer" ); + selected = trap_Cvar_VariableValue("cg_selectedPlayer"); - if ( key == K_MOUSE2 ) { - selected--; - } else { - selected++; - } + selected += select; - if ( selected > uiInfo.myTeamCount ) { + if (selected > uiInfo.myTeamCount) { selected = 0; - } else if ( selected < 0 ) { + } else if (selected < 0) { selected = uiInfo.myTeamCount; } - if ( selected == uiInfo.myTeamCount ) { - trap_Cvar_Set( "cg_selectedPlayerName", "Everyone" ); + if (selected == uiInfo.myTeamCount) { + trap_Cvar_Set( "cg_selectedPlayerName", "Everyone"); } else { - trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected] ); + trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected]); } - trap_Cvar_Set( "cg_selectedPlayer", va( "%d", selected ) ); + trap_Cvar_SetValue( "cg_selectedPlayer", selected); } return qfalse; } diff --git a/MP/code/ui/ui_shared.c b/MP/code/ui/ui_shared.c index 0dae2a3..31a9a2a 100644 --- a/MP/code/ui/ui_shared.c +++ b/MP/code/ui/ui_shared.c @@ -2314,13 +2314,19 @@ qboolean Item_ListBox_HandleKey( itemDef_t *item, int key, qboolean down, qboole } qboolean Item_YesNo_HandleKey( itemDef_t *item, int key ) { - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && item->window.flags & WINDOW_HASFOCUS && item->cvar ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { - // ATVI Wolfenstein Misc #462 - // added the flag to toggle via action script only - if ( !( item->cvarFlags & CVAR_NOTOGGLE ) ) { - DC->setCVar( item->cvar, va( "%i", !DC->getCVarValue( item->cvar ) ) ); + if (item->cvar) { + qboolean action = qfalse; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + action = qtrue; } + } else if (UI_SelectForKey(key) != 0) { + action = qtrue; + } + // ATVI Wolfenstein Misc #462 + // added the flag to toggle via action script only + if (action && !(item->cvarFlags & CVAR_NOTOGGLE)) { + DC->setCVar(item->cvar, va("%i", !DC->getCVarValue(item->cvar))); return qtrue; } } @@ -2390,11 +2396,21 @@ const char *Item_Multi_Setting( itemDef_t *item ) { qboolean Item_Multi_HandleKey( itemDef_t *item, int key ) { multiDef_t *multiPtr = (multiDef_t*)item->typeData; if ( multiPtr ) { - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && item->window.flags & WINDOW_HASFOCUS && item->cvar ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { - int current = Item_Multi_FindCvarByValue( item ) + 1; + if (item->cvar) { + int select = 0; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + select = (key == K_MOUSE2) ? -1 : 1; + } + } else { + select = UI_SelectForKey(key); + } + if (select != 0) { + int current = Item_Multi_FindCvarByValue(item) + select; int max = Item_Multi_CountSettings( item ); - if ( current < 0 || current >= max ) { + if ( current < 0 ) { + current = max-1; + } else if ( current >= max ) { current = 0; } if ( multiPtr->strDef ) { @@ -2720,10 +2736,10 @@ qboolean Item_Slider_HandleKey( itemDef_t *item, int key, qboolean down ) { float x, value, width, work; //DC->Print("slider handle key\n"); - if ( item->window.flags & WINDOW_HASFOCUS && item->cvar && Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { + if (item->cvar) { + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { editFieldDef_t *editDef = item->typeData; - if ( editDef ) { + if (editDef && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { rectDef_t testRect; width = SLIDER_WIDTH; if ( item->text ) { @@ -2750,6 +2766,23 @@ qboolean Item_Slider_HandleKey( itemDef_t *item, int key, qboolean down ) { return qtrue; } } + } else { + int select = UI_SelectForKey(key); + if (select != 0) { + editFieldDef_t *editDef = item->typeData; + if (editDef) { + // 20 is number of steps + value = DC->getCVarValue(item->cvar) + (((editDef->maxVal - editDef->minVal)/20) * select); + + if (value < editDef->minVal) + value = editDef->minVal; + else if (value > editDef->maxVal) + value = editDef->maxVal; + + DC->setCVar(item->cvar, va("%f", value)); + return qtrue; + } + } } } DC->Print( "slider handle key exit\n" ); @@ -2992,6 +3025,32 @@ static rectDef_t *Item_CorrectedTextRect( itemDef_t *item ) { return ▭ } +// menu item key horizontal action: -1 = previous value, 1 = next value, 0 = no change +int UI_SelectForKey(int key) +{ + switch (key) { + case K_MOUSE1: + case K_MOUSE3: + case K_ENTER: + case K_KP_ENTER: + case K_RIGHTARROW: + case K_KP_RIGHTARROW: + case K_JOY1: + case K_JOY2: + case K_JOY3: + case K_JOY4: + return 1; // next + + case K_MOUSE2: + case K_LEFTARROW: + case K_KP_LEFTARROW: + return -1; // previous + } + + // no change + return 0; +} + void Menu_HandleKey( menuDef_t *menu, int key, qboolean down ) { int i; itemDef_t *item = NULL; @@ -3141,7 +3200,6 @@ void Menu_HandleKey( menuDef_t *menu, int key, qboolean down ) { case K_AUX14: case K_AUX15: case K_AUX16: - break; case K_KP_ENTER: case K_ENTER: case K_MOUSE3: @@ -3940,15 +3998,18 @@ qboolean Item_Bind_HandleKey( itemDef_t *item, int key, qboolean down ) { int id; int i; - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && !g_waitingForKey ) { - if ( down && ( key == K_MOUSE1 || key == K_ENTER ) ) { + if (!g_waitingForKey) + { + if (down && ((key == K_MOUSE1 && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory)) + || key == K_ENTER || key == K_KP_ENTER || key == K_JOY1 || key == K_JOY2 || key == K_JOY3 || key == K_JOY4)) { g_waitingForKey = qtrue; g_bindItem = item; } return qtrue; - } else + } + else { - if ( !g_waitingForKey || g_bindItem == NULL ) { + if (g_bindItem == NULL) { return qtrue; } diff --git a/MP/code/ui/ui_shared.h b/MP/code/ui/ui_shared.h index d4fb4f5..875eff4 100644 --- a/MP/code/ui/ui_shared.h +++ b/MP/code/ui/ui_shared.h @@ -462,6 +462,7 @@ void Menu_Reset( void ); qboolean Menus_AnyFullScreenVisible( void ); void Menus_Activate( menuDef_t *menu ); +int UI_SelectForKey(int key); displayContextDef_t *Display_GetContext( void ); void *Display_CaptureItem( int x, int y ); qboolean Display_MouseMove( void *p, int x, int y ); diff --git a/SP/code/ui/ui_main.c b/SP/code/ui/ui_main.c index 875b4dd..81e85a8 100644 --- a/SP/code/ui/ui_main.c +++ b/SP/code/ui/ui_main.c @@ -2083,7 +2083,11 @@ static void UI_DrawOpponent( rectDef_t *rect ) { UI_PlayerInfo_SetModel( &info2, model ); #endif // #ifdef MISSIONPACK UI_PlayerInfo_SetInfo( &info2, LEGS_IDLE, TORSO_STAND, viewangles, vec3_origin, WP_MP40, qfalse ); +#ifdef MISSIONPACK + UI_RegisterClientModelname( &info2, model, headmodel, team ); +#else UI_RegisterClientModelname( &info2, model ); +#endif // #ifdef MISSIONPACK updateOpponentModel = qfalse; } @@ -2939,66 +2943,60 @@ static qboolean UI_OwnerDrawVisible( int flags ) { return vis; } -static qboolean UI_Handicap_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_Handicap_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int h; - h = Com_Clamp( 5, 100, trap_Cvar_VariableValue( "handicap" ) ); - if ( key == K_MOUSE2 ) { - h -= 5; - } else { - h += 5; - } - if ( h > 100 ) { + + h = Com_Clamp( 5, 100, trap_Cvar_VariableValue("handicap") ); + h += 5 * select; + + if (h > 100) { h = 5; - } else if ( h < 5 ) { + } else if (h < 5) { h = 100; } - trap_Cvar_Set( "handicap", va( "%i", h ) ); + + trap_Cvar_SetValue( "handicap", h ); return qtrue; } return qfalse; } -static qboolean UI_Effects_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - - if ( key == K_MOUSE2 ) { - uiInfo.effectsColor--; - } else { - uiInfo.effectsColor++; - } +static qboolean UI_Effects_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.effectsColor += select; - if ( uiInfo.effectsColor > 6 ) { + if( uiInfo.effectsColor > 6 ) { uiInfo.effectsColor = 0; - } else if ( uiInfo.effectsColor < 0 ) { + } else if (uiInfo.effectsColor < 0) { uiInfo.effectsColor = 6; } - trap_Cvar_SetValue( "color", uitogamecode[uiInfo.effectsColor] ); + trap_Cvar_SetValue( "color1", uitogamecode[uiInfo.effectsColor] ); return qtrue; } return qfalse; } - //----(SA) added static qboolean UI_SavegameName_HandleKey( int flags, float *special, int key ) { // disable return qfalse; #if 0 - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { + int select = UI_SelectForKey(key); + if (select != 0) { int i; + i = UI_SavegameIndexFromName( ui_savegameName.string ); - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } - if ( i >= uiInfo.savegameCount ) { + i += select; + + if (i >= uiInfo.savegameCount) { i = 0; - } else if ( i < 0 ) { + } else if (i < 0) { i = uiInfo.savegameCount - 1; } @@ -3014,66 +3012,68 @@ static qboolean UI_SavegameName_HandleKey( int flags, float *special, int key ) } //----(SA) end - -static qboolean UI_ClanName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_ClanName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int i; - i = UI_TeamIndexFromName( UI_Cvar_VariableString( "ui_teamName" ) ); - if ( uiInfo.teamList[i].cinematic >= 0 ) { - trap_CIN_StopCinematic( uiInfo.teamList[i].cinematic ); + + i = UI_TeamIndexFromName(UI_Cvar_VariableString("ui_teamName")); + + if (uiInfo.teamList[i].cinematic >= 0) { + trap_CIN_StopCinematic(uiInfo.teamList[i].cinematic); uiInfo.teamList[i].cinematic = -1; } - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } - if ( i >= uiInfo.teamCount ) { + + i += select; + + if (i >= uiInfo.teamCount) { i = 0; - } else if ( i < 0 ) { + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName ); + + trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName); updateModel = qtrue; return qtrue; } return qfalse; } -static qboolean UI_GameType_HandleKey( int flags, float *special, int key, qboolean resetMap ) { +static qboolean UI_GameType_HandleKey(int flags, float *special, int key, qboolean resetMap) { #ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - int oldCount = UI_MapCountByGameType( qtrue ); + int select = UI_SelectForKey(key); + if (select != 0) { + int oldCount = UI_MapCountByGameType(qtrue); // hard coded mess here - if ( key == K_MOUSE2 ) { + if (select < 0) { ui_gameType.integer--; - if ( ui_gameType.integer == 2 ) { + if (ui_gameType.integer == 2) { ui_gameType.integer = 1; - } else if ( ui_gameType.integer < 2 ) { + } else if (ui_gameType.integer < 2) { ui_gameType.integer = uiInfo.numGameTypes - 1; } } else { ui_gameType.integer++; - if ( ui_gameType.integer >= uiInfo.numGameTypes ) { + if (ui_gameType.integer >= uiInfo.numGameTypes) { ui_gameType.integer = 1; - } else if ( ui_gameType.integer == 2 ) { + } else if (ui_gameType.integer == 2) { ui_gameType.integer = 3; } } - - if ( uiInfo.gameTypes[ui_gameType.integer].gtEnum == GT_TOURNAMENT ) { - trap_Cvar_Set( "ui_Q3Model", "1" ); + + if (uiInfo.gameTypes[ui_gameType.integer].gtEnum < GT_TEAM) { + trap_Cvar_SetValue( "ui_Q3Model", 1 ); } else { - trap_Cvar_Set( "ui_Q3Model", "0" ); + trap_Cvar_SetValue( "ui_Q3Model", 0 ); } - trap_Cvar_Set( "ui_gameType", va( "%d", ui_gameType.integer ) ); - UI_SetCapFragLimits( qtrue ); - UI_LoadBestScores( uiInfo.mapList[ui_currentMap.integer].mapLoadName, uiInfo.gameTypes[ui_gameType.integer].gtEnum ); - if ( resetMap && oldCount != UI_MapCountByGameType( qtrue ) ) { - trap_Cvar_Set( "ui_currentMap", "0" ); - Menu_SetFeederSelection( NULL, FEEDER_MAPS, 0, NULL ); + trap_Cvar_SetValue("ui_gameType", ui_gameType.integer); + UI_SetCapFragLimits(qtrue); + UI_LoadBestScores(uiInfo.mapList[ui_currentMap.integer].mapLoadName, uiInfo.gameTypes[ui_gameType.integer].gtEnum); + if (resetMap && oldCount != UI_MapCountByGameType(qtrue)) { + trap_Cvar_SetValue( "ui_currentMap", 0); + Menu_SetFeederSelection(NULL, FEEDER_MAPS, 0, NULL); } return qtrue; } @@ -3081,51 +3081,43 @@ static qboolean UI_GameType_HandleKey( int flags, float *special, int key, qbool return qfalse; } -static qboolean UI_NetGameType_HandleKey( int flags, float *special, int key ) { +static qboolean UI_NetGameType_HandleKey(int flags, float *special, int key) { #ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netGameType.integer += select; - if ( key == K_MOUSE2 ) { - ui_netGameType.integer--; - } else { - ui_netGameType.integer++; - } - - if ( ui_netGameType.integer < 0 ) { + if (ui_netGameType.integer < 0) { ui_netGameType.integer = uiInfo.numGameTypes - 1; - } else if ( ui_netGameType.integer >= uiInfo.numGameTypes ) { + } else if (ui_netGameType.integer >= uiInfo.numGameTypes) { ui_netGameType.integer = 0; } - trap_Cvar_Set( "ui_netGameType", va( "%d", ui_netGameType.integer ) ); - trap_Cvar_Set( "ui_actualnetGameType", va( "%d", uiInfo.gameTypes[ui_netGameType.integer].gtEnum ) ); - trap_Cvar_Set( "ui_currentNetMap", "0" ); - UI_MapCountByGameType( qfalse ); - Menu_SetFeederSelection( NULL, FEEDER_ALLMAPS, 0, NULL ); + trap_Cvar_SetValue( "ui_netGameType", ui_netGameType.integer); + trap_Cvar_SetValue( "ui_actualnetGameType", uiInfo.gameTypes[ui_netGameType.integer].gtEnum); + trap_Cvar_SetValue( "ui_currentNetMap", 0); + UI_MapCountByGameType(qfalse); + Menu_SetFeederSelection(NULL, FEEDER_ALLMAPS, 0, NULL); return qtrue; } #endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_JoinGameType_HandleKey( int flags, float *special, int key ) { +static qboolean UI_JoinGameType_HandleKey(int flags, float *special, int key) { #ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { + int select = UI_SelectForKey(key); + if (select != 0) { + ui_joinGameType.integer += select; - if ( key == K_MOUSE2 ) { - ui_joinGameType.integer--; - } else { - ui_joinGameType.integer++; - } - - if ( ui_joinGameType.integer < 0 ) { + if (ui_joinGameType.integer < 0) { ui_joinGameType.integer = uiInfo.numJoinGameTypes - 1; - } else if ( ui_joinGameType.integer >= uiInfo.numJoinGameTypes ) { + } else if (ui_joinGameType.integer >= uiInfo.numJoinGameTypes) { ui_joinGameType.integer = 0; } - trap_Cvar_Set( "ui_joinGameType", va( "%d", ui_joinGameType.integer ) ); - UI_BuildServerDisplayList( qtrue ); + trap_Cvar_SetValue( "ui_joinGameType", ui_joinGameType.integer); + UI_BuildServerDisplayList(qtrue); return qtrue; } #endif // #ifdef MISSIONPACK @@ -3134,81 +3126,71 @@ static qboolean UI_JoinGameType_HandleKey( int flags, float *special, int key ) -static qboolean UI_Skill_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_Skill_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int i = trap_Cvar_VariableValue( "g_spSkill" ); - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } + i += select; - if ( i < 1 ) { + if (i < 1) { i = numSkillLevels; - } else if ( i > numSkillLevels ) { + } else if (i > numSkillLevels) { i = 1; } - trap_Cvar_Set( "g_spSkill", va( "%i", i ) ); + trap_Cvar_SetValue("g_spSkill", i); return qtrue; } return qfalse; } -static qboolean UI_TeamName_HandleKey( int flags, float *special, int key, qboolean blue ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_TeamName_HandleKey(int flags, float *special, int key, qboolean blue) { + int select = UI_SelectForKey(key); + if (select != 0) { int i; - i = UI_TeamIndexFromName( UI_Cvar_VariableString( ( blue ) ? "ui_blueTeam" : "ui_redTeam" ) ); - if ( key == K_MOUSE2 ) { - i--; - } else { - i++; - } + i = UI_TeamIndexFromName(UI_Cvar_VariableString((blue) ? "ui_blueTeam" : "ui_redTeam")); + i += select; - if ( i >= uiInfo.teamCount ) { + if (i >= uiInfo.teamCount) { i = 0; - } else if ( i < 0 ) { + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( ( blue ) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName ); - + trap_Cvar_Set( (blue) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName); return qtrue; } return qfalse; } -static qboolean UI_TeamMember_HandleKey( int flags, float *special, int key, qboolean blue, int num ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_TeamMember_HandleKey(int flags, float *special, int key, qboolean blue, int num) { + int select = UI_SelectForKey(key); + if (select != 0) { // 0 - None // 1 - Human // 2..NumCharacters - Bot - char *cvar = va( blue ? "ui_blueteam%i" : "ui_redteam%i", num ); - int value = trap_Cvar_VariableValue( cvar ); + char *cvar = va(blue ? "ui_blueteam%i" : "ui_redteam%i", num); + int value = trap_Cvar_VariableValue(cvar); - if ( key == K_MOUSE2 ) { - value--; - } else { - value++; - } + value += select; - if ( ui_actualNetGameType.integer >= GT_TEAM ) { - if ( value >= uiInfo.characterCount + 2 ) { + if (ui_actualNetGameType.integer >= GT_TEAM) { + if (value >= uiInfo.characterCount + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = uiInfo.characterCount + 2 - 1; } } else { - if ( value >= UI_GetNumBots() + 2 ) { + if (value >= UI_GetNumBots() + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = UI_GetNumBots() + 2 - 1; } } - trap_Cvar_Set( cvar, va( "%i", value ) ); + trap_Cvar_SetValue(cvar, value); return qtrue; } return qfalse; @@ -3216,13 +3198,9 @@ static qboolean UI_TeamMember_HandleKey( int flags, float *special, int key, qbo static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { #ifdef MISSIONPACK - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netSource.integer += select; if(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5) { @@ -3234,18 +3212,14 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { trap_Cvar_VariableStringBuffer(cvarname, masterstr, sizeof(masterstr)); if(*masterstr) break; - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + + ui_netSource.integer += select; } } if (ui_netSource.integer >= numNetSources) { ui_netSource.integer = 0; - } else if ( ui_netSource.integer < 0 ) { + } else if (ui_netSource.integer < 0) { ui_netSource.integer = numNetSources - 1; } @@ -3253,38 +3227,35 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { if (!(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5)) { UI_StartServerRefresh(qtrue); } - trap_Cvar_Set( "ui_netSource", va( "%d", ui_netSource.integer ) ); + trap_Cvar_SetValue( "ui_netSource", ui_netSource.integer); return qtrue; } #endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_NetFilter_HandleKey( int flags, float *special, int key ) { +static qboolean UI_NetFilter_HandleKey(int flags, float *special, int key) { #ifdef MISSIONPACK - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - - if ( key == K_MOUSE2 ) { - ui_serverFilterType.integer--; - } else { - ui_serverFilterType.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_serverFilterType.integer += select; - if ( ui_serverFilterType.integer >= numServerFilters ) { + if (ui_serverFilterType.integer >= numServerFilters) { ui_serverFilterType.integer = 0; - } else if ( ui_serverFilterType.integer < 0 ) { + } else if (ui_serverFilterType.integer < 0) { ui_serverFilterType.integer = numServerFilters - 1; } - UI_BuildServerDisplayList( qtrue ); + UI_BuildServerDisplayList(qtrue); return qtrue; } #endif // #ifdef MISSIONPACK return qfalse; } -static qboolean UI_OpponentName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { +static qboolean UI_OpponentName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + if (select < 0) { UI_PriorOpponent(); } else { UI_NextOpponent(); @@ -3294,27 +3265,24 @@ static qboolean UI_OpponentName_HandleKey( int flags, float *special, int key ) return qfalse; } -static qboolean UI_BotName_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - int game = trap_Cvar_VariableValue( "g_gametype" ); +static qboolean UI_BotName_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + int game = trap_Cvar_VariableValue("g_gametype"); int value = uiInfo.botIndex; - if ( key == K_MOUSE2 ) { - value--; - } else { - value++; - } + value += select; - if ( game >= GT_TEAM ) { - if ( value >= uiInfo.characterCount + 2 ) { + if (game >= GT_TEAM) { + if (value >= uiInfo.characterCount + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = uiInfo.characterCount + 2 - 1; } } else { - if ( value >= UI_GetNumBots() + 2 ) { + if (value >= UI_GetNumBots() + 2) { value = 0; - } else if ( value < 0 ) { + } else if (value < 0) { value = UI_GetNumBots() + 2 - 1; } } @@ -3324,45 +3292,41 @@ static qboolean UI_BotName_HandleKey( int flags, float *special, int key ) { return qfalse; } -static qboolean UI_BotSkill_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { - uiInfo.skillIndex--; - } else { - uiInfo.skillIndex++; - } - if ( uiInfo.skillIndex >= numSkillLevels ) { +static qboolean UI_BotSkill_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.skillIndex += select; + + if (uiInfo.skillIndex >= numSkillLevels) { uiInfo.skillIndex = 0; - } else if ( uiInfo.skillIndex < 0 ) { - uiInfo.skillIndex = numSkillLevels - 1; + } else if (uiInfo.skillIndex < 0) { + uiInfo.skillIndex = numSkillLevels-1; } return qtrue; } return qfalse; } -static qboolean UI_RedBlue_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_RedBlue_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { uiInfo.redBlue ^= 1; return qtrue; } return qfalse; } -static qboolean UI_Crosshair_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { - if ( key == K_MOUSE2 ) { - uiInfo.currentCrosshair--; - } else { - uiInfo.currentCrosshair++; - } +static qboolean UI_Crosshair_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.currentCrosshair += select; - if ( uiInfo.currentCrosshair >= NUM_CROSSHAIRS ) { + if (uiInfo.currentCrosshair >= NUM_CROSSHAIRS) { uiInfo.currentCrosshair = 0; - } else if ( uiInfo.currentCrosshair < 0 ) { + } else if (uiInfo.currentCrosshair < 0) { uiInfo.currentCrosshair = NUM_CROSSHAIRS - 1; } - trap_Cvar_Set( "cg_drawCrosshair", va( "%d", uiInfo.currentCrosshair ) ); + trap_Cvar_SetValue("cg_drawCrosshair", uiInfo.currentCrosshair); return qtrue; } return qfalse; @@ -3370,34 +3334,31 @@ static qboolean UI_Crosshair_HandleKey( int flags, float *special, int key ) { -static qboolean UI_SelectedPlayer_HandleKey( int flags, float *special, int key ) { - if ( key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER ) { +static qboolean UI_SelectedPlayer_HandleKey(int flags, float *special, int key) { + int select = UI_SelectForKey(key); + if (select != 0) { int selected; UI_BuildPlayerList(); - if ( !uiInfo.teamLeader ) { + if (!uiInfo.teamLeader) { return qfalse; } - selected = trap_Cvar_VariableValue( "cg_selectedPlayer" ); + selected = trap_Cvar_VariableValue("cg_selectedPlayer"); - if ( key == K_MOUSE2 ) { - selected--; - } else { - selected++; - } + selected += select; - if ( selected > uiInfo.myTeamCount ) { + if (selected > uiInfo.myTeamCount) { selected = 0; - } else if ( selected < 0 ) { + } else if (selected < 0) { selected = uiInfo.myTeamCount; } - if ( selected == uiInfo.myTeamCount ) { - trap_Cvar_Set( "cg_selectedPlayerName", "Everyone" ); + if (selected == uiInfo.myTeamCount) { + trap_Cvar_Set( "cg_selectedPlayerName", "Everyone"); } else { - trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected] ); + trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected]); } - trap_Cvar_Set( "cg_selectedPlayer", va( "%d", selected ) ); + trap_Cvar_SetValue( "cg_selectedPlayer", selected); } return qfalse; } diff --git a/SP/code/ui/ui_shared.c b/SP/code/ui/ui_shared.c index ed0efd1..bf77d9a 100644 --- a/SP/code/ui/ui_shared.c +++ b/SP/code/ui/ui_shared.c @@ -2309,10 +2309,17 @@ qboolean Item_ListBox_HandleKey( itemDef_t *item, int key, qboolean down, qboole } qboolean Item_YesNo_HandleKey( itemDef_t *item, int key ) { - - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && item->window.flags & WINDOW_HASFOCUS && item->cvar ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { - DC->setCVar( item->cvar, va( "%i", !DC->getCVarValue( item->cvar ) ) ); + if (item->cvar) { + qboolean action = qfalse; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + action = qtrue; + } + } else if (UI_SelectForKey(key) != 0) { + action = qtrue; + } + if (action) { + DC->setCVar(item->cvar, va("%i", !DC->getCVarValue(item->cvar))); return qtrue; } } @@ -2384,11 +2391,21 @@ const char *Item_Multi_Setting( itemDef_t *item ) { qboolean Item_Multi_HandleKey( itemDef_t *item, int key ) { multiDef_t *multiPtr = (multiDef_t*)item->typeData; if ( multiPtr ) { - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && item->window.flags & WINDOW_HASFOCUS && item->cvar ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { - int current = Item_Multi_FindCvarByValue( item ) + 1; + if (item->cvar) { + int select = 0; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + select = (key == K_MOUSE2) ? -1 : 1; + } + } else { + select = UI_SelectForKey(key); + } + if (select != 0) { + int current = Item_Multi_FindCvarByValue(item) + select; int max = Item_Multi_CountSettings( item ); - if ( current < 0 || current >= max ) { + if ( current < 0 ) { + current = max-1; + } else if ( current >= max ) { current = 0; } if ( multiPtr->strDef ) { @@ -2722,10 +2739,10 @@ qboolean Item_Slider_HandleKey( itemDef_t *item, int key, qboolean down ) { float x, value, width, work; //DC->Print("slider handle key\n"); - if ( item->window.flags & WINDOW_HASFOCUS && item->cvar && Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) ) { - if ( key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3 ) { + if (item->cvar) { + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { editFieldDef_t *editDef = item->typeData; - if ( editDef ) { + if (editDef && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { rectDef_t testRect; width = SLIDER_WIDTH; if ( item->text ) { @@ -2752,6 +2769,23 @@ qboolean Item_Slider_HandleKey( itemDef_t *item, int key, qboolean down ) { return qtrue; } } + } else { + int select = UI_SelectForKey(key); + if (select != 0) { + editFieldDef_t *editDef = item->typeData; + if (editDef) { + // 20 is number of steps + value = DC->getCVarValue(item->cvar) + (((editDef->maxVal - editDef->minVal)/20) * select); + + if (value < editDef->minVal) + value = editDef->minVal; + else if (value > editDef->maxVal) + value = editDef->maxVal; + + DC->setCVar(item->cvar, va("%f", value)); + return qtrue; + } + } } } //DC->Print("slider handle key exit\n"); @@ -2993,6 +3027,32 @@ static rectDef_t *Item_CorrectedTextRect( itemDef_t *item ) { return ▭ } +// menu item key horizontal action: -1 = previous value, 1 = next value, 0 = no change +int UI_SelectForKey(int key) +{ + switch (key) { + case K_MOUSE1: + case K_MOUSE3: + case K_ENTER: + case K_KP_ENTER: + case K_RIGHTARROW: + case K_KP_RIGHTARROW: + case K_JOY1: + case K_JOY2: + case K_JOY3: + case K_JOY4: + return 1; // next + + case K_MOUSE2: + case K_LEFTARROW: + case K_KP_LEFTARROW: + return -1; // previous + } + + // no change + return 0; +} + void Menu_HandleKey( menuDef_t *menu, int key, qboolean down ) { int i; itemDef_t *item = NULL; @@ -3141,7 +3201,6 @@ void Menu_HandleKey( menuDef_t *menu, int key, qboolean down ) { case K_AUX14: case K_AUX15: case K_AUX16: - break; case K_KP_ENTER: case K_ENTER: case K_MOUSE3: @@ -3886,15 +3945,18 @@ qboolean Item_Bind_HandleKey( itemDef_t *item, int key, qboolean down ) { int id; int i; - if ( Rect_ContainsPoint( &item->window.rect, DC->cursorx, DC->cursory ) && !g_waitingForKey ) { - if ( down && ( key == K_MOUSE1 || key == K_ENTER ) ) { + if (!g_waitingForKey) + { + if (down && ((key == K_MOUSE1 && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory)) + || key == K_ENTER || key == K_KP_ENTER || key == K_JOY1 || key == K_JOY2 || key == K_JOY3 || key == K_JOY4)) { g_waitingForKey = qtrue; g_bindItem = item; } return qtrue; - } else + } + else { - if ( !g_waitingForKey || g_bindItem == NULL ) { + if (g_bindItem == NULL) { return qtrue; } diff --git a/SP/code/ui/ui_shared.h b/SP/code/ui/ui_shared.h index ca4d681..719718f 100644 --- a/SP/code/ui/ui_shared.h +++ b/SP/code/ui/ui_shared.h @@ -474,6 +474,7 @@ void Menu_Reset( void ); qboolean Menus_AnyFullScreenVisible( void ); void Menus_Activate( menuDef_t *menu ); +int UI_SelectForKey(int key); displayContextDef_t *Display_GetContext( void ); void *Display_CaptureItem( int x, int y ); qboolean Display_MouseMove( void *p, int x, int y ); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

