X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fquickmenu.qc;h=6d281aa6b6a578b919efacc0d262534d61f95e99;hb=34a18150e22d4ca146bf6d9464e803cb27790dac;hp=d769902b042aa246fde757455feeaf7c990b53eb;hpb=f825aa27eacd6f7d376b2651d113f466cdd410cc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/quickmenu.qc b/qcsrc/client/quickmenu.qc index d769902b0..6d281aa6b 100644 --- a/qcsrc/client/quickmenu.qc +++ b/qcsrc/client/quickmenu.qc @@ -1,8 +1,8 @@ -#include "_all.qh" +#include "quickmenu.qh" -#include "hud_config.qh" - -#include "../dpdefs/keycodes.qh" +#include +#include "hud/all.qh" +#include "mapvoting.qh" // QUICKMENU_MAXLINES must be <= 10 const int QUICKMENU_MAXLINES = 10; @@ -25,9 +25,20 @@ int QuickMenu_Buffer_Size; int QuickMenu_Buffer_Index; string QuickMenu_CurrentSubMenu; float QuickMenu_TimeOut; + +// QuickMenu_Buffer are labeled with these tags +#define QM_TAG_TITLE "T" +#define QM_TAG_SUBMENU "S" +#define QM_TAG_COMMAND "C" +#define QM_TAG_PLCOMMAND "P" + +#define QuickMenu_Buffer_Set(tag, string) bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat(tag, string)) +#define QuickMenu_Buffer_Get() bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index) + // if s1 is not empty s will be displayed as command otherwise as submenu void QuickMenu_Page_LoadEntry(int i, string s, string s1) { + TC(int, i); //printf("^xc80 entry %d: %s, %s\n", i, s, s1); if (QuickMenu_Page_Description[i]) strunzone(QuickMenu_Page_Description[i]); @@ -39,6 +50,7 @@ void QuickMenu_Page_LoadEntry(int i, string s, string s1) void QuickMenu_Page_ClearEntry(int i) { + TC(int, i); if (QuickMenu_Page_Description[i]) strunzone(QuickMenu_Page_Description[i]); QuickMenu_Page_Description[i] = string_null; @@ -62,6 +74,20 @@ bool QuickMenu_Open(string mode, string submenu) mode = "file"; } + if(mode == "file") + { + if(autocvar_hud_panel_quickmenu_file == "" || autocvar_hud_panel_quickmenu_file == "0") + LOG_INFO("No file name is set in hud_panel_quickmenu_file, loading default quickmenu\n"); + else + { + fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ); + if(fh < 0) + LOG_INFOF("Couldn't open file \"%s\", loading default quickmenu\n", autocvar_hud_panel_quickmenu_file); + } + if(fh < 0) + mode = "default"; + } + if(mode == "default") { QuickMenu_Buffer = buf_create(); @@ -72,15 +98,6 @@ bool QuickMenu_Open(string mode, string submenu) } else if(mode == "file") { - if(autocvar_hud_panel_quickmenu_file != "") - if(autocvar_hud_panel_quickmenu_file != "0") - fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ); - if(fh < 0) - { - printf("Couldn't open file \"%s\"\n", autocvar_hud_panel_quickmenu_file); - return false; - } - QuickMenu_Buffer = buf_create(); if(QuickMenu_Buffer < 0) { @@ -94,17 +111,17 @@ bool QuickMenu_Open(string mode, string submenu) // first skip invalid entries, so we don't check them anymore float argc; argc = tokenize_console(s); - if(argc == 0 || argv(0) == "" || substring(argv(0), 0, 2) == "////") + if(argc == 0 || argv(0) == "") continue; if(argc == 1) - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu + QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0)); else if(argc == 2) { if(argv(1) == "") continue; - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", argv(0))); // command Title + QuickMenu_Buffer_Set(QM_TAG_TITLE, argv(0)); ++QuickMenu_Buffer_Size; - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", argv(1))); // command + QuickMenu_Buffer_Set(QM_TAG_COMMAND, argv(1)); } else if(argc == 3) { @@ -112,9 +129,9 @@ bool QuickMenu_Open(string mode, string submenu) float teamplayers = 0, without_me = 0; switch(argv(2)) { - case "ALLPLAYERS_BUT_ME": without_me = 1; + case "ALLPLAYERS_BUT_ME": without_me = 1; // fall through case "ALLPLAYERS": teamplayers = 0; break; - case "OWNTEAMPLAYERS_BUT_ME": without_me = 1; + case "OWNTEAMPLAYERS_BUT_ME": without_me = 1; // fall through case "OWNTEAMPLAYERS": teamplayers = 1; break; case "ENEMYTEAMPLAYERS": teamplayers = 2; break; default: continue; @@ -122,13 +139,13 @@ bool QuickMenu_Open(string mode, string submenu) if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES) { - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu + QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0)); ++QuickMenu_Buffer_Size; - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); // command arguments + QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); // put PLCOMMAND arguments in the title string ++QuickMenu_Buffer_Size; - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", argv(1))); // command for each player + QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, argv(1)); ++QuickMenu_Buffer_Size; - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu + QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0)); } } ++QuickMenu_Buffer_Size; @@ -137,7 +154,7 @@ bool QuickMenu_Open(string mode, string submenu) } else { - printf("Unrecognized mode %s\n", mode); + LOG_WARNINGF("Unrecognized mode %s\n", mode); return false; } @@ -158,7 +175,7 @@ bool QuickMenu_Open(string mode, string submenu) setcursormode(1); hudShiftState = 0; - QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time; + QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0); return true; } @@ -198,8 +215,8 @@ void QuickMenu_skip_submenu(string submenu) z_submenu = strzone(submenu); for(++QuickMenu_Buffer_Index ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index) { - s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index); - if(substring(s, 0, 1) != "S") + s = QuickMenu_Buffer_Get(); + if(substring(s, 0, 1) != QM_TAG_SUBMENU) continue; if(substring(s, 1, -1) == z_submenu) // submenu end break; @@ -213,9 +230,10 @@ bool QuickMenu_IsOpened() return (QuickMenu_Page_Entries > 0); } -void HUD_Quickmenu_PlayerListEntries(string cmd, int teamplayers, float without_me); -bool HUD_Quickmenu_PlayerListEntries_Create(string cmd, int teamplayers, float without_me) +void HUD_Quickmenu_PlayerListEntries(string cmd, int teamplayers, bool without_me); +bool HUD_Quickmenu_PlayerListEntries_Create(string cmd, int teamplayers, bool without_me) { + TC(int, teamplayers); TC(bool, without_me); int i; for(i = 0; i < QUICKMENU_MAXLINES; ++i) QuickMenu_Page_ClearEntry(i); @@ -238,8 +256,9 @@ bool HUD_Quickmenu_PlayerListEntries_Create(string cmd, int teamplayers, float w // new_page 0 means page 0, new_page != 0 means next page int QuickMenu_Buffer_Index_Prev; -bool QuickMenu_Page_Load(string target_submenu, int new_page) +bool QuickMenu_Page_Load(string target_submenu, bool new_page) { + TC(bool, new_page); string s = string_null, cmd = string_null, z_submenu; if (new_page == 0) @@ -261,8 +280,8 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page) // skip everything until the submenu open tag is found for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index) { - s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index); - if(substring(s, 0, 1) == "S" && substring(s, 1, -1) == z_submenu) + s = QuickMenu_Buffer_Get(); + if(substring(s, 0, 1) == QM_TAG_SUBMENU && substring(s, 1, -1) == z_submenu) { // printf("^3 beginning of %s\n", z_submenu); ++QuickMenu_Buffer_Index; @@ -271,7 +290,7 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page) // printf("^1 skipping %s\n", s); } if(QuickMenu_Buffer_Index == QuickMenu_Buffer_Size) - printf("Couldn't find submenu \"%s\"\n", z_submenu); + LOG_WARNINGF("Couldn't find submenu \"%s\"\n", z_submenu); } // only the last page can contain up to QUICKMENU_MAXLINES entries @@ -281,7 +300,7 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page) int entry_num = 0; // counts entries in target_submenu for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index) { - s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index); + s = QuickMenu_Buffer_Get(); if(z_submenu != "" && substring(s, 1, -1) == z_submenu) { @@ -304,20 +323,20 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page) } // NOTE: entries are loaded starting from 1, not from 0 - if(substring(s, 0, 1) == "S") // submenu + if(substring(s, 0, 1) == QM_TAG_SUBMENU) { if(entry_num >= first_entry) QuickMenu_Page_LoadEntry(QuickMenu_Page_Entries, substring(s, 1, -1), ""); QuickMenu_skip_submenu(substring(s, 1, -1)); } - else if(entry_num >= first_entry && substring(s, 0, 1) == "T") + else if(entry_num >= first_entry && substring(s, 0, 1) == QM_TAG_TITLE) { ++QuickMenu_Buffer_Index; - cmd = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index); + cmd = QuickMenu_Buffer_Get(); string command_code = substring(cmd, 0, 1); - if(command_code == "C") + if(command_code == QM_TAG_COMMAND) cmd = substring(cmd, 1, -1); - else if(command_code == "P") + else if(command_code == QM_TAG_PLCOMMAND) { // throw away the current quickmenu buffer and load a new one cmd = substring(cmd, 1, -1); @@ -342,12 +361,13 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page) QuickMenu_Close(); return false; } - QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time; + QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0); return true; } bool QuickMenu_ActionForNumber(int num) { + TC(int, num); if (!QuickMenu_IsLastPage) { if (num < 0 || num >= QUICKMENU_MAXLINES) @@ -365,7 +385,7 @@ bool QuickMenu_ActionForNumber(int num) if (QuickMenu_Page_Command[num] != "") { localcmd(strcat("\n", QuickMenu_Page_Command[num], "\n")); - QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time; + QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0); return true; } if (QuickMenu_Page_Description[num] != "") @@ -373,8 +393,9 @@ bool QuickMenu_ActionForNumber(int num) return false; } -void QuickMenu_Page_ActiveEntry(float entry_num) +void QuickMenu_Page_ActiveEntry(int entry_num) { + TC(int, entry_num); QuickMenu_Page_ActivatedEntry = entry_num; QuickMenu_Page_ActivatedEntry_Time = time + 0.1; if(QuickMenu_Page_Command[QuickMenu_Page_ActivatedEntry]) @@ -390,8 +411,9 @@ void QuickMenu_Page_ActiveEntry(float entry_num) QuickMenu_Page_ActivatedEntry_Close = (!(hudShiftState & S_CTRL)); } -bool QuickMenu_InputEvent(float bInputType, float nPrimary, float nSecondary) +bool QuickMenu_InputEvent(int bInputType, float nPrimary, float nSecondary) { + TC(int, bInputType); // we only care for keyboard events if(bInputType == 2) return false; @@ -517,8 +539,7 @@ void QuickMenu_Mouse() } } - vector cursorsize = '32 32 0'; - drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', 0.8, DRAWFLAG_NORMAL); + draw_cursor_normal(mousepos, '1 1 1', 0.8); prevMouseClicked = mouseClicked; } @@ -559,7 +580,7 @@ void HUD_Quickmenu_DrawEntry(vector pos, string desc, string option, vector font drawcolorcodedstring(pos, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE); } -void HUD_QuickMenu(void) +void HUD_QuickMenu() { if(!autocvar__hud_configure) { @@ -571,6 +592,7 @@ void HUD_QuickMenu(void) //if(!autocvar_hud_panel_quickmenu) return; if(!hud_panel_quickmenu) return; + if(QuickMenu_TimeOut) if(time > QuickMenu_TimeOut) { QuickMenu_Close(); @@ -688,7 +710,7 @@ void HUD_QuickMenu(void) if(target_submenu == eng_submenu && target_submenu_found) \ return; /* target_submenu entries are now loaded, exit */ \ if(QuickMenu_Buffer_Size < QUICKMENU_BUFFER_MAXENTRIES) \ - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", submenu)); \ + QuickMenu_Buffer_Set(QM_TAG_SUBMENU, submenu); \ ++QuickMenu_Buffer_Size; \ if(target_submenu == eng_submenu && !target_submenu_found) { \ QuickMenu_Buffer_Size = 0; /* enable load of next entries */ \ @@ -699,9 +721,9 @@ void HUD_QuickMenu(void) #define QUICKMENU_ENTRY(title,command) { \ if(QuickMenu_Buffer_Size + 1 < QUICKMENU_BUFFER_MAXENTRIES) \ { \ - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", title)); \ + QuickMenu_Buffer_Set(QM_TAG_TITLE, title); \ ++QuickMenu_Buffer_Size; \ - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", command)); \ + QuickMenu_Buffer_Set(QM_TAG_COMMAND, command); \ } \ ++QuickMenu_Buffer_Size; \ } @@ -709,9 +731,9 @@ void HUD_QuickMenu(void) #define QUICKMENU_SMENU_PL(submenu,eng_submenu,command,teamplayers,without_me) { \ if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES) {\ QUICKMENU_SMENU(submenu,eng_submenu) \ - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); \ + QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); \ ++QuickMenu_Buffer_Size; \ - bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", command)); \ + QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, command); \ ++QuickMenu_Buffer_Size; \ QUICKMENU_SMENU(submenu,eng_submenu) \ } \ @@ -729,8 +751,9 @@ void HUD_QuickMenu(void) QUICKMENU_ENTRY(strcat("(", prvm_language, ")", title), sprintf(command, translated_text)) \ } -void HUD_Quickmenu_PlayerListEntries(string cmd, float teamplayers, float without_me) +void HUD_Quickmenu_PlayerListEntries(string cmd, int teamplayers, bool without_me) { + TC(int, teamplayers); TC(bool, without_me); entity pl; if(teamplayers && !team_count) return; @@ -743,7 +766,7 @@ void HUD_Quickmenu_PlayerListEntries(string cmd, float teamplayers, float withou continue; if(without_me && pl.sv_entnum == player_localnum) continue; - QUICKMENU_ENTRY(GetPlayerName(pl.sv_entnum), sprintf(cmd, GetPlayerName(pl.sv_entnum))) + QUICKMENU_ENTRY(entcs_GetName(pl.sv_entnum), sprintf(cmd, entcs_GetName(pl.sv_entnum))) } return; @@ -784,11 +807,11 @@ void QuickMenu_Default(string target_submenu) QUICKMENU_ENTRY_TC(CTX(_("QMCMD^killed flag, icon")), "say_team %s; g_waypointsprite_team_here_p", "killed flagcarrier (l:%y^7)", CTX(_("QMCMD^killed flagcarrier (l:%y^7)"))) QUICKMENU_ENTRY_TC(CTX(_("QMCMD^dropped flag, icon")), "say_team %s; g_waypointsprite_team_here_d", "dropped flag (l:%d^7)", CTX(_("QMCMD^dropped flag (l:%d^7)"))) QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop gun, icon")), "say_team %s; g_waypointsprite_team_here; wait; dropweapon", "dropped gun %w^7 (l:%l^7)", CTX(_("QMCMD^dropped gun %w^7 (l:%l^7)"))) - QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; +use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)"))) + QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)"))) QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat") } - QUICKMENU_SMENU_PL(CTX(_("QMCMD^Send private message to")), "Send private message to", "commandmode tell \"%s\" ^7", 0, 1) + QUICKMENU_SMENU_PL(CTX(_("QMCMD^Send private message to")), "Send private message to", "commandmode tell \"%s^7\"", 0, 1) QUICKMENU_SMENU(CTX(_("QMCMD^Settings")), "Settings") QUICKMENU_SMENU(CTX(_("QMCMD^View/HUD settings")), "View/HUD settings") @@ -802,7 +825,7 @@ void QuickMenu_Default(string target_submenu) QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings") QUICKMENU_ENTRY(CTX(_("QMCMD^Hit sound")), "toggle cl_hitsound") - QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle cl_chatsound") + QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle con_chatsound") QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings") if(spectatee_status > 0) @@ -832,7 +855,7 @@ void QuickMenu_Default(string target_submenu) QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote") QUICKMENU_ENTRY(CTX(_("QMCMD^Restart the map")), "vcall restart") QUICKMENU_ENTRY(CTX(_("QMCMD^End match")), "vcall endmatch") - if(getstatf(STAT_TIMELIMIT) > 0) + if(STAT(TIMELIMIT) > 0) { QUICKMENU_ENTRY(CTX(_("QMCMD^Reduce match time")), "vcall reducematchtime") QUICKMENU_ENTRY(CTX(_("QMCMD^Extend match time")), "vcall extendmatchtime") @@ -843,9 +866,9 @@ void QuickMenu_Default(string target_submenu) if(target_submenu != "" && !target_submenu_found) { - printf("Couldn't find submenu \"%s\"\n", target_submenu); + LOG_WARNINGF("Couldn't find submenu \"%s\"\n", target_submenu); if(prvm_language != "en") - printf("^3Warning: submenu must be in English\n", target_submenu); + LOG_WARNINGF("^3Warning: submenu must be in English\n", target_submenu); QuickMenu_Buffer_Size = 0; } }