From: Mario Date: Tue, 10 Sep 2013 01:18:14 +0000 (+1000) Subject: Merge branch 'master' into Mario/quickmenu_merge X-Git-Tag: xonotic-v0.8.2~1987^2~55^2~6 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=c092ab283a53142d3c9658bab30ec38e21e44f8c;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into Mario/quickmenu_merge --- c092ab283a53142d3c9658bab30ec38e21e44f8c diff --cc hud_luminos.cfg index c4e2c8e39,f2b4fa4bd..a26aadcff --- a/hud_luminos.cfg +++ b/hud_luminos.cfg @@@ -20,11 -20,11 +20,11 @@@ seta hud_progressbar_health_color "0.6 seta hud_progressbar_armor_color "0 0.6 0" seta hud_progressbar_fuel_color "0.6 0.6 0" seta hud_progressbar_nexball_color "0.7 0.1 0" - seta hud_progressbar_speed_color "1 0.75 0" - seta hud_progressbar_acceleration_color "0.5 0.75 1" - seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" + seta hud_progressbar_speed_color "1 0.75 0" + seta hud_progressbar_acceleration_color "0.5 0.75 1" + seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" -seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 " +seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 17 " seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" diff --cc hud_luminos_minimal.cfg index 3f57bc219,c401132ac..4b5b5cef3 --- a/hud_luminos_minimal.cfg +++ b/hud_luminos_minimal.cfg @@@ -20,11 -20,11 +20,11 @@@ seta hud_progressbar_health_color "0.6 seta hud_progressbar_armor_color "0 0.6 0" seta hud_progressbar_fuel_color "0.6 0.6 0" seta hud_progressbar_nexball_color "0.7 0.1 0" - seta hud_progressbar_speed_color "1 0.75 0" - seta hud_progressbar_acceleration_color "0.5 0.75 1" - seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" + seta hud_progressbar_speed_color "1 0.75 0" + seta hud_progressbar_acceleration_color "0.5 0.75 1" + seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" -seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 " +seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 17 " seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" diff --cc hud_luminos_minimal_xhair.cfg index 1d178af6d,518492ed4..5f606282a --- a/hud_luminos_minimal_xhair.cfg +++ b/hud_luminos_minimal_xhair.cfg @@@ -20,11 -20,11 +20,11 @@@ seta hud_progressbar_health_color "0.6 seta hud_progressbar_armor_color "0 0.6 0" seta hud_progressbar_fuel_color "0.6 0.6 0" seta hud_progressbar_nexball_color "0.7 0.1 0" - seta hud_progressbar_speed_color "1 0.75 0" - seta hud_progressbar_acceleration_color "0.5 0.75 1" - seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" + seta hud_progressbar_speed_color "1 0.75 0" + seta hud_progressbar_acceleration_color "0.5 0.75 1" + seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" -seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 " +seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 17 " seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" diff --cc hud_luminos_old.cfg index ae8280450,0a5f05955..cf0115a96 --- a/hud_luminos_old.cfg +++ b/hud_luminos_old.cfg @@@ -20,11 -20,11 +20,11 @@@ seta hud_progressbar_health_color "0.6 seta hud_progressbar_armor_color "0 0.6 0" seta hud_progressbar_fuel_color "0.6 0.6 0" seta hud_progressbar_nexball_color "0.7 0.1 0" - seta hud_progressbar_speed_color "1 0.75 0" - seta hud_progressbar_acceleration_color "0.5 0.75 1" - seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" + seta hud_progressbar_speed_color "1 0.75 0" + seta hud_progressbar_acceleration_color "0.5 0.75 1" + seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" -seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 " +seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 17 " seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" diff --cc hud_nexuiz.cfg index 5a5242bff,acf3ad921..85442906e --- a/hud_nexuiz.cfg +++ b/hud_nexuiz.cfg @@@ -20,11 -20,11 +20,11 @@@ seta hud_progressbar_health_color "0.6 seta hud_progressbar_armor_color "0 0.6 0" seta hud_progressbar_fuel_color "0.6 0.6 0" seta hud_progressbar_nexball_color "0.7 0.1 0" - seta hud_progressbar_speed_color "1 0.75 0" - seta hud_progressbar_acceleration_color "0.5 0.75 1" - seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" + seta hud_progressbar_speed_color "1 0.75 0" + seta hud_progressbar_acceleration_color "0.5 0.75 1" + seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" -seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 " +seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 17 " seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.01" diff --cc qcsrc/client/autocvars.qh index 5532736d6,8175695ab..21ac57b46 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@@ -328,8 -339,6 +340,8 @@@ float autocvar_hud_panel_weapons_timeou float autocvar_hud_panel_weapons_timeout_fadefgmin; var float autocvar_hud_panel_weapons_timeout_speed_in = 0.25; var float autocvar_hud_panel_weapons_timeout_speed_out = 0.75; - float autocvar_hud_panel_quickmenu; ++//float autocvar_hud_panel_quickmenu; +float autocvar_hud_panel_quickmenu_align; float autocvar_hud_progressbar_alpha; float autocvar_hud_showbinds; float autocvar_hud_showbinds_limit; diff --cc qcsrc/client/hud.qc index 615295f5c,d151a5356..cea90fe4e --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@@ -4358,474 -4390,6 +4390,472 @@@ void HUD_CenterPrint (void } } + +// QUICKMENU_MAXLINES must be <= 10 +#define QUICKMENU_MAXLINES 10 +#define QUICKMENU_MAXENTRIES 256 +string QuickMenu_Command[QUICKMENU_MAXLINES]; +string QuickMenu_Description[QUICKMENU_MAXLINES]; +float QuickMenu_CurrentPage; +float QuickMenu_IsLastPage; +var float QuickMenu_Buffer = -1; +float QuickMenu_Buffer_Size; +float QuickMenu_Buffer_Index; +string QuickMenu_CurrentSubMenu; +float QuickMenu_CurrentPage_FirstEntry; +var float QuickMenu_Entries; +void HUD_QuickMenu_load_entry(float i, string s, string s1) +{ + //print(sprintf("^xc80 entry %d: %s, %s\n", i, s, s1)); + if (QuickMenu_Description[i]) + strunzone(QuickMenu_Description[i]); + QuickMenu_Description[i] = strzone(s); + if (QuickMenu_Command[i]) + strunzone(QuickMenu_Command[i]); + QuickMenu_Command[i] = strzone(s1); +} +void HUD_QuickMenu_clear_entry(float i) +{ + if (QuickMenu_Description[i]) + strunzone(QuickMenu_Description[i]); + QuickMenu_Description[i] = string_null; + if (QuickMenu_Command[i]) + strunzone(QuickMenu_Command[i]); + QuickMenu_Command[i] = string_null; +} + +float HUD_QuickMenu_Buffer_Init() +{ + float fh, i; + string s; + fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ); + if(fh < 0) + { + print(sprintf(_("Error: Couldn't open file %s!\n"), autocvar_hud_panel_quickmenu_file)); + return false; + } + + QuickMenu_Buffer = buf_create(); + if (QuickMenu_Buffer < 0) + { + fclose(fh); + return false; + } + + i = 0; + while((s = fgets(fh)) && i < QUICKMENU_MAXENTRIES) + { + // first skip invalid entries, so we don't check them anymore + float argc; + argc = tokenize_console(s); + if(argc == 0 || argc > 2) + continue; + + bufstr_set(QuickMenu_Buffer, i, s); + ++i; + } + QuickMenu_Buffer_Size = i; + + if (QuickMenu_Buffer_Size <= 0) + { + buf_del(QuickMenu_Buffer); + QuickMenu_Buffer = -1; + } + fclose(fh); + return true; +} + +void HUD_QuickMenu_Buffer_Close() +{ + if (QuickMenu_Buffer >= 0) + { + buf_del(QuickMenu_Buffer); + QuickMenu_Buffer = -1; + QuickMenu_Buffer_Size = 0; + } +} + +void HUD_QuickMenu_Close() +{ + if (QuickMenu_CurrentSubMenu) + strunzone(QuickMenu_CurrentSubMenu); + QuickMenu_CurrentSubMenu = string_null; + float i; + for (i = 0; i < QUICKMENU_MAXLINES; ++i) + HUD_QuickMenu_clear_entry(i); + QuickMenu_Entries = 0; + hud_panel_quickmenu = 0; + mouseClicked = 0; + prevMouseClicked = 0; + HUD_QuickMenu_Buffer_Close(); + + if(autocvar_hud_cursormode) + setcursormode(0); +} + +// It assumes submenu open tag is already detected +void HUD_QuickMenu_skip_submenu(string submenu) +{ + string s, z_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); + float argc; + argc = tokenize_console(s); + if(argc == 2) + continue; + if (argv(0) == "") + continue; + if (argv(0) == z_submenu) // submenu end + break; + HUD_QuickMenu_skip_submenu(argv(0)); + } + strunzone(z_submenu); +} + +float HUD_QuickMenu_IsOpened() +{ + return (QuickMenu_Entries > 0); +} + +// new_page 0 means page 0, new_page != 0 means next page +float QuickMenu_Buffer_Index_Prev; +float HUD_QuickMenu_Page(string target_submenu, float new_page) +{ + string s, z_submenu; + + if (new_page == 0) + QuickMenu_CurrentPage = 0; + else + ++QuickMenu_CurrentPage; + QuickMenu_CurrentPage_FirstEntry = QuickMenu_CurrentPage * (QUICKMENU_MAXLINES - 2); + + z_submenu = strzone(target_submenu); + if (QuickMenu_CurrentSubMenu) + strunzone(QuickMenu_CurrentSubMenu); + QuickMenu_CurrentSubMenu = strzone(z_submenu); + + QuickMenu_IsLastPage = TRUE; + QuickMenu_Entries = 0; + + QuickMenu_Buffer_Index = 0; + if (z_submenu != "") + { + // 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 (tokenize_console(s) == 1 && argv(0) == z_submenu) + { + // print(sprintf("^3 beginning of %s\n", z_submenu)); + ++QuickMenu_Buffer_Index; + break; + } + // print(sprintf("^1 skipping %s\n", s)); + } + } + float total = 0; + for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index) + { + s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index); + float argc; + argc = tokenize_console(s); + + if (z_submenu != "" && z_submenu == argv(0)) + { + // print(sprintf("^3 end of %s\n", z_submenu)); + break; + } + + if (total - QuickMenu_CurrentPage_FirstEntry >= 0) + { + ++QuickMenu_Entries; + if(QuickMenu_Entries == QUICKMENU_MAXLINES - 2) + QuickMenu_Buffer_Index_Prev = QuickMenu_Buffer_Index; + else if(QuickMenu_Entries == QUICKMENU_MAXLINES) + { + HUD_QuickMenu_clear_entry(QUICKMENU_MAXLINES - 1); + QuickMenu_Buffer_Index = QuickMenu_Buffer_Index_Prev; + QuickMenu_IsLastPage = FALSE; + break; + } + } + + // NOTE: entries are loaded starting from 1, not from 0 + if (argc == 1 && argv(0) != "") // submenu + { + if (total - QuickMenu_CurrentPage_FirstEntry >= 0) + HUD_QuickMenu_load_entry(QuickMenu_Entries, argv(0), ""); + HUD_QuickMenu_skip_submenu(argv(0)); + } + else if (total - QuickMenu_CurrentPage_FirstEntry >= 0) + HUD_QuickMenu_load_entry(QuickMenu_Entries, argv(0), argv(1)); + + ++total; + } + strunzone(z_submenu); + if (QuickMenu_Entries == 0) + { + HUD_QuickMenu_Close(); + return 0; + } + return 1; +} + +void HUD_QuickMenu_Open() +{ + if(!HUD_QuickMenu_Buffer_Init()) return; + + hud_panel_quickmenu = 1; + if(autocvar_hud_cursormode) + setcursormode(1); + hudShiftState = 0; + + HUD_QuickMenu_Page("", 0); +} + +float HUD_QuickMenu_ActionForNumber(float num) +{ + if (!QuickMenu_IsLastPage) + { + if (num < 0 || num >= QUICKMENU_MAXLINES) + return 0; + if (num == QUICKMENU_MAXLINES - 1) + return 0; + if (num == 0) + { + HUD_QuickMenu_Page(QuickMenu_CurrentSubMenu, +1); + return 0; + } + } else if (num <= 0 || num > QuickMenu_Entries) + return 0; + + if (QuickMenu_Command[num] != "") + { + localcmd(strcat("\n", QuickMenu_Command[num], "\n")); + return 1; + } + if (QuickMenu_Description[num] != "") + HUD_QuickMenu_Page(QuickMenu_Description[num], 0); + return 0; +} + +float HUD_QuickMenu_InputEvent(float bInputType, float nPrimary, float nSecondary) +{ + // we only care for keyboard events + if(bInputType == 2) + return false; + + if(!HUD_QuickMenu_IsOpened() || autocvar__hud_configure) + return false; + + if(bInputType == 3) + { + mousepos_x = nPrimary; + mousepos_y = nSecondary; + return true; + } + + // allow console bind to work + string con_keys; + float keys; + con_keys = findkeysforcommand("toggleconsole", 0); + keys = tokenize(con_keys); // findkeysforcommand returns data for this + + float hit_con_bind = 0, i; + for (i = 0; i < keys; ++i) + { + if(nPrimary == stof(argv(i))) + hit_con_bind = 1; + } + + if(bInputType == 0) { + if(nPrimary == K_ALT) hudShiftState |= S_ALT; + if(nPrimary == K_CTRL) hudShiftState |= S_CTRL; + if(nPrimary == K_SHIFT) hudShiftState |= S_SHIFT; + } + else if(bInputType == 1) { + if(nPrimary == K_ALT) hudShiftState -= (hudShiftState & S_ALT); + if(nPrimary == K_CTRL) hudShiftState -= (hudShiftState & S_CTRL); + if(nPrimary == K_SHIFT) hudShiftState -= (hudShiftState & S_SHIFT); + } + + if(nPrimary == K_ESCAPE) + { + if (bInputType == 1) + return true; + HUD_QuickMenu_Close(); + } + else if(nPrimary >= '0' && nPrimary <= '9') + { + if (bInputType == 1) + return true; + HUD_QuickMenu_ActionForNumber(stof(chr2str(nPrimary))); + } + if(nPrimary == K_MOUSE1) + { + if(bInputType == 0) // key pressed + mouseClicked |= S_MOUSE1; + else if(bInputType == 1) // key released + mouseClicked -= (mouseClicked & S_MOUSE1); + } + else if(nPrimary == K_MOUSE2) + { + if(bInputType == 0) // key pressed + mouseClicked |= S_MOUSE2; + else if(bInputType == 1) // key released + mouseClicked -= (mouseClicked & S_MOUSE2); + } + else if(hit_con_bind) + return false; + + return true; +} +void HUD_QuickMenu_Mouse() +{ + if(!mouseClicked) + if(prevMouseClicked & S_MOUSE2) + { + HUD_QuickMenu_Close(); + return; + } + + if not(autocvar_hud_cursormode) + { + mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed; + + mousepos_x = bound(0, mousepos_x, vid_conwidth); + mousepos_y = bound(0, mousepos_y, vid_conheight); + } + - HUD_Panel_UpdateCvars(quickmenu) ++ HUD_Panel_UpdateCvars() + + if(panel_bg_padding) + { + panel_pos += '1 1 0' * panel_bg_padding; + panel_size -= '2 2 0' * panel_bg_padding; + } + + float first_entry_pos, entries_height; + vector fontsize; + fontsize = '1 1 0' * (panel_size_y / QUICKMENU_MAXLINES); + first_entry_pos = panel_pos_y + ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y) / 2; + entries_height = panel_size_y - ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y); + + if (mousepos_x >= panel_pos_x && mousepos_y >= first_entry_pos && mousepos_x <= panel_pos_x + panel_size_x && mousepos_y <= first_entry_pos + entries_height) + { + float entry_num; + entry_num = floor((mousepos_y - first_entry_pos) / fontsize_y); + if (QuickMenu_IsLastPage || entry_num != QUICKMENU_MAXLINES - 2) + { + panel_pos_y = first_entry_pos + entry_num * fontsize_y; + vector color; + if(mouseClicked & S_MOUSE1) + color = '0.5 1 0.5'; + else if(hudShiftState & S_CTRL) + color = '1 1 0.3'; + else + color = '1 1 1'; + drawfill(panel_pos, eX * panel_size_x + eY * fontsize_y, color, .2, DRAWFLAG_NORMAL); + + if(!mouseClicked && prevMouseClicked & S_MOUSE1) + { + float f; + if (entry_num < QUICKMENU_MAXLINES - 1) + f = HUD_QuickMenu_ActionForNumber(entry_num + 1); + else + f = HUD_QuickMenu_ActionForNumber(0); + if(f && !(hudShiftState & S_CTRL)) + HUD_QuickMenu_Close(); + } + } + } + + const vector cursorsize = '32 32 0'; + drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', 0.8, DRAWFLAG_NORMAL); + + prevMouseClicked = mouseClicked; +} +void HUD_QuickMenu_DrawEntry(vector pos, string s, vector fontsize) +{ + string entry; + float offset; + entry = textShortenToWidth(s, panel_size_x, fontsize, stringwidth_colors); + if (autocvar_hud_panel_quickmenu_align > 0) + { + offset = (panel_size_x - stringwidth_colors(entry, fontsize)) * min(autocvar_hud_panel_quickmenu_align, 1); + drawcolorcodedstring(pos + eX * offset, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE); + } + else + drawcolorcodedstring(pos, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE); +} +void HUD_QuickMenu(void) +{ + if(!autocvar__hud_configure) + { + if (hud_configure_prev && hud_configure_prev != -1) + HUD_QuickMenu_Close(); + + if(!hud_draw_maximized) return; + //if(!autocvar_hud_panel_quickmenu) return; // autocvar exists only for conformity with other panels + if(!hud_panel_quickmenu) return; + } + else + { + if(!HUD_QuickMenu_IsOpened()) + { + QuickMenu_Entries = 1; + HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Submenu%d"), QuickMenu_Entries), ""); + ++QuickMenu_Entries; + HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Submenu%d"), QuickMenu_Entries), ""); + ++QuickMenu_Entries; + // although real command doesn't matter here, it must not be empty + // otherwise the entry is displayed like a submenu + for (; QuickMenu_Entries < QUICKMENU_MAXLINES - 1; ++QuickMenu_Entries) + HUD_QuickMenu_load_entry(QuickMenu_Entries, sprintf(_("Command%d"), QuickMenu_Entries), "-"); + ++QuickMenu_Entries; + HUD_QuickMenu_clear_entry(QuickMenu_Entries); + QuickMenu_IsLastPage = FALSE; + } - - hud_configure_active_panel = HUD_PANEL_QUICKMENU; + } + - HUD_Panel_UpdateCvars(quickmenu); ++ HUD_Panel_UpdateCvars(); + HUD_Panel_ApplyFadeAlpha(); + + HUD_Panel_DrawBg(1); + + if(panel_bg_padding) + { + panel_pos += '1 1 0' * panel_bg_padding; + panel_size -= '2 2 0' * panel_bg_padding; + } + + float i; + vector fontsize; + string color; + fontsize = '1 1 0' * (panel_size_y / QUICKMENU_MAXLINES); + + if (!QuickMenu_IsLastPage) + { + color = "^5"; + HUD_QuickMenu_DrawEntry(panel_pos + eY * (panel_size_y - fontsize_y), sprintf("%d: %s%s", 0, color, _("Continue...")), fontsize); + } + else + panel_pos_y += ((QUICKMENU_MAXLINES - QuickMenu_Entries) * fontsize_y) / 2; + + for (i = 1; i <= QuickMenu_Entries; ++i) { + if (QuickMenu_Description[i] == "") + break; + if (QuickMenu_Command[i] == "") + color = "^4"; + else + color = "^3"; + HUD_QuickMenu_DrawEntry(panel_pos, sprintf("%d: %s%s", i, color, QuickMenu_Description[i]), fontsize); + panel_pos_y += fontsize_y; + } +} + /* ================== Main HUD system @@@ -5040,11 -4566,9 +5032,11 @@@ void HUD_Main (void hud_draw_maximized = 1; // panels that may be maximized must check this var // draw maximized panels on top if(hud_panel_radar_maximized) - HUD_Radar(); + (panel = HUD_PANEL(RADAR)).panel_draw(); if(autocvar__con_chat_maximized) - HUD_Chat(); + (panel = HUD_PANEL(CHAT)).panel_draw(); + if(hud_panel_quickmenu) - HUD_QuickMenu(); ++ (panel = HUD_PANEL(QUICKMENU)).panel_draw(); if(autocvar__hud_configure) { diff --cc qcsrc/client/hud.qh index 14f9ae5f0,db9405ef6..bb2528cf3 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@@ -77,8 -94,52 +95,53 @@@ var string panel_bg_border_str var float panel_bg_padding; var string panel_bg_padding_str; + .void() panel_draw; + float current_player; + + #define HUD_PANELS \ + HUD_PANEL(WEAPONS , HUD_Weapons , weapons) \ + HUD_PANEL(AMMO , HUD_Ammo , ammo) \ + HUD_PANEL(POWERUPS , HUD_Powerups , powerups) \ + HUD_PANEL(HEALTHARMOR , HUD_HealthArmor , healtharmor) \ + HUD_PANEL(NOTIFY , HUD_Notify , notify) \ + HUD_PANEL(TIMER , HUD_Timer , timer) \ + HUD_PANEL(RADAR , HUD_Radar , radar) \ + HUD_PANEL(SCORE , HUD_Score , score) \ + HUD_PANEL(RACETIMER , HUD_RaceTimer , racetimer) \ + HUD_PANEL(VOTE , HUD_Vote , vote) \ + HUD_PANEL(MODICONS , HUD_ModIcons , modicons) \ + HUD_PANEL(PRESSEDKEYS , HUD_PressedKeys , pressedkeys) \ + HUD_PANEL(CHAT , HUD_Chat , chat) \ + HUD_PANEL(ENGINEINFO , HUD_EngineInfo , engineinfo) \ + HUD_PANEL(INFOMESSAGES , HUD_InfoMessages , infomessages) \ + HUD_PANEL(PHYSICS , HUD_Physics , physics) \ - HUD_PANEL(CENTERPRINT , HUD_CenterPrint , centerprint) ++ HUD_PANEL(CENTERPRINT , HUD_CenterPrint , centerprint) \ ++ HUD_PANEL(QUICKMENU , HUD_QuickMenu , quickmenu) + + #define HUD_PANEL(NAME,draw_func,name) \ + float HUD_PANEL_##NAME; \ + void ##draw_func(void); \ + void RegisterHUD_Panel_##NAME() \ + { \ + HUD_PANEL_LAST = HUD_PANEL_##NAME = HUD_PANEL_NUM; \ + entity hud_panelent = spawn(); \ + hud_panel[HUD_PANEL_##NAME] = hud_panelent; \ + hud_panelent.classname = "hud_panel"; \ + hud_panelent.panel_name = #name; \ + hud_panelent.panel_id = HUD_PANEL_##NAME; \ + hud_panelent.panel_draw = ##draw_func; \ + ++HUD_PANEL_NUM; \ + } \ + ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME) + + HUD_PANELS + #undef HUD_PANEL + + #define HUD_PANEL(NAME) hud_panel[HUD_PANEL_##NAME] + + // Because calling lots of functions in QC apparently cuts fps in half on many machines: // ---------------------- // MACRO HELL STARTS HERE diff --cc qcsrc/common/util.qh index 62bfe7811,3a4dff798..332761787 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@@ -263,36 -272,7 +272,6 @@@ float get_model_parameters_bone_aimweig float get_model_parameters_fixbone; string get_model_parameters_desc; float get_model_parameters(string mod, float skn); // call with string_null to clear; skin -1 means mod is the filename of the txt file and is to be split - - // stupid stupid stupid FTEQCC has a max limit on macro sizes, let's work around by splitting the macro into two macros! :( - #define HUD_Panel_GetName_Part2(id) \ - switch(id) {\ - case HUD_PANEL_ENGINEINFO: panel_name = HUD_PANELNAME_ENGINEINFO; break; \ - case HUD_PANEL_INFOMESSAGES: panel_name = HUD_PANELNAME_INFOMESSAGES; break; \ - case HUD_PANEL_PHYSICS: panel_name = HUD_PANELNAME_PHYSICS; break; \ - case HUD_PANEL_CENTERPRINT: panel_name = HUD_PANELNAME_CENTERPRINT; break; \ - case HUD_PANEL_QUICKMENU: panel_name = HUD_PANELNAME_QUICKMENU; break; \ - } ENDS_WITH_CURLY_BRACE - - // Get name of specified panel id - #define HUD_Panel_GetName(id) \ - switch(id) { \ - case HUD_PANEL_WEAPONS: panel_name = HUD_PANELNAME_WEAPONS; break; \ - case HUD_PANEL_AMMO: panel_name = HUD_PANELNAME_AMMO; break; \ - case HUD_PANEL_POWERUPS: panel_name = HUD_PANELNAME_POWERUPS; break; \ - case HUD_PANEL_HEALTHARMOR: panel_name = HUD_PANELNAME_HEALTHARMOR; break; \ - case HUD_PANEL_NOTIFY: panel_name = HUD_PANELNAME_NOTIFY; break; \ - case HUD_PANEL_TIMER: panel_name = HUD_PANELNAME_TIMER; break; \ - case HUD_PANEL_RADAR: panel_name = HUD_PANELNAME_RADAR; break; \ - case HUD_PANEL_SCORE: panel_name = HUD_PANELNAME_SCORE; break; \ - case HUD_PANEL_RACETIMER: panel_name = HUD_PANELNAME_RACETIMER; break; \ - case HUD_PANEL_VOTE: panel_name = HUD_PANELNAME_VOTE; break; \ - case HUD_PANEL_MODICONS: panel_name = HUD_PANELNAME_MODICONS; break; \ - case HUD_PANEL_PRESSEDKEYS: panel_name = HUD_PANELNAME_PRESSEDKEYS; break; \ - case HUD_PANEL_CHAT: panel_name = HUD_PANELNAME_CHAT; break; \ - default: HUD_Panel_GetName_Part2(id)\ - } -- vector vec2(vector v); #ifndef MENUQC