X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fquickmenu.qc;h=dd2ba0315485d7ab08fe28f828de4fbe3211ed23;hb=70b84d37e2cf1d5336c327cb43593024de2a2c6c;hp=8237fd2f83ef741c62971da16f5b37377ecb2f98;hpb=2648f400c9d865e147d7d1509360d3b1c40b20be;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/quickmenu.qc b/qcsrc/client/quickmenu.qc index 8237fd2f8..dd2ba0315 100644 --- a/qcsrc/client/quickmenu.qc +++ b/qcsrc/client/quickmenu.qc @@ -2,8 +2,6 @@ #include "hud_config.qh" -#include "../dpdefs/keycodes.qh" - // QUICKMENU_MAXLINES must be <= 10 const int QUICKMENU_MAXLINES = 10; // visible entries are loaded from QuickMenu_Buffer into QuickMenu_Page_* arrays @@ -25,6 +23,16 @@ 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) { @@ -62,6 +70,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") + printf("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) + printf("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 +94,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 +107,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 +125,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 +135,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; @@ -158,7 +171,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 +211,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; @@ -261,8 +274,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; @@ -281,7 +294,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 +317,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,7 +355,7 @@ 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; } @@ -365,7 +378,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] != "") @@ -571,6 +584,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 +702,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 +713,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 +723,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) \ } \ @@ -784,7 +798,7 @@ 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") } @@ -802,7 +816,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)