From: Samual Lenks Date: Sat, 4 May 2013 18:30:43 +0000 (-0400) Subject: Merge remote-tracking branch 'origin/terencehill/hud_code_restructure' X-Git-Tag: xonotic-v0.7.0~62 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=55f87426a3f58e4161eae8a7e8523f165cb9da00;hp=33ada41dbd9ed5524f272e0fcae66c03ac213906 Merge remote-tracking branch 'origin/terencehill/hud_code_restructure' --- diff --git a/_hud_common.cfg b/_hud_common.cfg index ca90bc9da2..15453b7dcc 100644 --- a/_hud_common.cfg +++ b/_hud_common.cfg @@ -44,6 +44,8 @@ alias -hud_panel_radar_maximized "cl_cmd hud radar 0" alias hud_panel_radar_maximized "cl_cmd hud radar" // other hud cvars +seta hud_panel_update_interval 2 "how often (in seconds) common panel cvars are reloaded" + seta hud_showbinds 1 "what to show in the HUD to indicate certain keys to press: 0 display commands, 1 bound keys, 2 both" seta hud_showbinds_limit 2 "maximum number of bound keys to show for a command. 0 for unlimited" set _hud_showbinds_reload 0 "set it to 1 to reload binds if you changed any. It is reset to 0 automatically" diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index ecc2000d7c..7a11300ea9 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -156,7 +156,8 @@ void CSQC_Init(void) CALL_ACCUMULATED_FUNCTION(RegisterGametypes); CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); - + CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels); + WaypointSprite_Load(); // precaches @@ -210,7 +211,6 @@ void CSQC_Init(void) hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin)); hud_configure_prev = -1; - tab_panel = -1; draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin"))); } diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 4f00c55341..547f90268e 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -384,6 +384,7 @@ float checkfail[16]; #define BUTTON_3 4 #define BUTTON_4 8 float cl_notice_run(); +float prev_myteam; void CSQC_UpdateView(float w, float h) { entity e; @@ -442,6 +443,14 @@ void CSQC_UpdateView(float w, float h) #endif myteam = GetPlayerColor(player_localentnum - 1); + if(myteam != prev_myteam) + { + myteamcolors = colormapPaletteColor(myteam, 1); + for(i = 0; i < HUD_PANEL_NUM; ++i) + hud_panel[i].update_time = time; + prev_myteam = myteam; + } + ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE); float is_dead = (getstati(STAT_HEALTH) <= 0); diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 150efb1708..6243a00ecf 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -302,6 +302,7 @@ float autocvar_hud_panel_score; float autocvar_hud_panel_score_rankings; float autocvar_hud_panel_timer; float autocvar_hud_panel_timer_increment; +float autocvar_hud_panel_update_interval; float autocvar_hud_panel_vote; float autocvar_hud_panel_vote_alreadyvoted_alpha; string autocvar_hud_panel_vote_bg_alpha; diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index bf72c2f467..e49ac603ac 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -487,11 +487,9 @@ void HUD_Weapons(void) return; } } - else - hud_configure_active_panel = HUD_PANEL_WEAPONS; // update generic hud functions - HUD_Panel_UpdateCvars(weapons); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -950,10 +948,8 @@ void HUD_Ammo(void) if(!autocvar_hud_panel_ammo) return; if(spectatee_status == -1) return; } - else - hud_configure_active_panel = HUD_PANEL_AMMO; - HUD_Panel_UpdateCvars(ammo); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1154,14 +1150,12 @@ void HUD_Powerups(void) } else { - hud_configure_active_panel = HUD_PANEL_POWERUPS; - strength_time = 15; shield_time = 27; superweapons_time = 13; } - HUD_Panel_UpdateCvars(powerups); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1397,14 +1391,12 @@ void HUD_HealthArmor(void) } else { - hud_configure_active_panel = HUD_PANEL_HEALTHARMOR; - health = 150; armor = 75; fuel = 20; } - HUD_Panel_UpdateCvars(healtharmor); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -1656,10 +1648,8 @@ void HUD_Notify(void) { if(!autocvar_hud_panel_notify) return; } - else - hud_configure_active_panel = HUD_PANEL_NOTIFY; - HUD_Panel_UpdateCvars(notify); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -1795,10 +1785,8 @@ void HUD_Timer(void) { if(!autocvar_hud_panel_timer) return; } - else - hud_configure_active_panel = HUD_PANEL_TIMER; - HUD_Panel_UpdateCvars(timer); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1865,12 +1853,10 @@ void HUD_Radar(void) if (autocvar_hud_panel_radar != 2 && !teamplay) return; } } - else - hud_configure_active_panel = HUD_PANEL_RADAR; - HUD_Panel_UpdateCvars(radar); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); - + float f = 0; if (hud_panel_radar_maximized && !autocvar__hud_configure) @@ -2159,10 +2145,8 @@ void HUD_Score(void) if(!autocvar_hud_panel_score) return; if(spectatee_status == -1 && (gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; } - else - hud_configure_active_panel = HUD_PANEL_SCORE; - HUD_Panel_UpdateCvars(score); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -2356,10 +2340,8 @@ void HUD_RaceTimer (void) if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; if(spectatee_status == -1) return; } - else - hud_configure_active_panel = HUD_PANEL_RACETIMER; - HUD_Panel_UpdateCvars(racetimer); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -2508,7 +2490,7 @@ float vote_prev; // previous state of vote_active to check for a change float vote_alpha; float vote_change; // "time" when vote_active changed -void HUD_VoteWindow(void) +void HUD_Vote(void) { if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS))) { @@ -2540,8 +2522,6 @@ void HUD_VoteWindow(void) } else { - hud_configure_active_panel = HUD_PANEL_VOTE; - vote_yescount = 3; vote_nocount = 2; vote_needed = 4; @@ -2562,7 +2542,7 @@ void HUD_VoteWindow(void) if(!vote_alpha) return; - HUD_Panel_UpdateCvars(vote); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); if(uid2name_dialog) @@ -3320,10 +3300,8 @@ void HUD_ModIcons(void) if(!autocvar_hud_panel_modicons) return; if (gametype != MAPINFO_TYPE_CTF && gametype != MAPINFO_TYPE_KEYHUNT && gametype != MAPINFO_TYPE_NEXBALL && gametype != MAPINFO_TYPE_CTS && gametype != MAPINFO_TYPE_RACE && gametype != MAPINFO_TYPE_CA && gametype != MAPINFO_TYPE_FREEZETAG && gametype != MAPINFO_TYPE_KEEPAWAY && gametype != MAPINFO_TYPE_DOMINATION) return; } - else - hud_configure_active_panel = HUD_PANEL_MODICONS; - HUD_Panel_UpdateCvars(modicons); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -3372,18 +3350,15 @@ void HUD_ModIcons(void) // Draw pressed keys (#11) // -void HUD_DrawPressedKeys(void) +void HUD_PressedKeys(void) { if(!autocvar__hud_configure) { if(!autocvar_hud_panel_pressedkeys) return; if(spectatee_status <= 0 && autocvar_hud_panel_pressedkeys < 2) return; } - else - hud_configure_active_panel = HUD_PANEL_PRESSEDKEYS; - - HUD_Panel_UpdateCvars(pressedkeys); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3454,10 +3429,8 @@ void HUD_Chat(void) if(autocvar__con_chat_maximized) if(!hud_draw_maximized) return; } - else - hud_configure_active_panel = HUD_PANEL_CHAT; - HUD_Panel_UpdateCvars(chat); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized @@ -3530,10 +3503,8 @@ void HUD_EngineInfo(void) { if(!autocvar_hud_panel_engineinfo) return; } - else - hud_configure_active_panel = HUD_PANEL_ENGINEINFO; - HUD_Panel_UpdateCvars(engineinfo); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3593,10 +3564,8 @@ void HUD_InfoMessages(void) { if(!autocvar_hud_panel_infomessages) return; } - else - hud_configure_active_panel = HUD_PANEL_INFOMESSAGES; - HUD_Panel_UpdateCvars(infomessages); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3784,10 +3753,8 @@ void HUD_Physics(void) if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return; if(autocvar_hud_panel_physics == 3 && !(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; } - else - hud_configure_active_panel = HUD_PANEL_PHYSICS; - HUD_Panel_UpdateCvars(physics); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -4167,8 +4134,6 @@ void HUD_CenterPrint (void) } else { - hud_configure_active_panel = HUD_PANEL_CENTERPRINT; - if (!hud_configure_prev) reset_centerprint_messages(); if (time > hud_configure_cp_generation_time) @@ -4185,7 +4150,7 @@ void HUD_CenterPrint (void) } } - HUD_Panel_UpdateCvars(centerprint); + HUD_Panel_UpdateCvars(); // this panel doesn't fade when showing the scoreboard if(autocvar__menu_alpha) @@ -4373,44 +4338,6 @@ void HUD_Reset (void) HUD_Mod_CTF_Reset(); } -#define HUD_DrawPanel(id)\ -switch (id) {\ - case (HUD_PANEL_RADAR):\ - HUD_Radar(); break;\ - case (HUD_PANEL_WEAPONS):\ - HUD_Weapons(); break;\ - case (HUD_PANEL_AMMO):\ - HUD_Ammo(); break;\ - case (HUD_PANEL_POWERUPS):\ - HUD_Powerups(); break;\ - case (HUD_PANEL_HEALTHARMOR):\ - HUD_HealthArmor(); break;\ - case (HUD_PANEL_NOTIFY):\ - HUD_Notify(); break;\ - case (HUD_PANEL_TIMER):\ - HUD_Timer(); break;\ - case (HUD_PANEL_SCORE):\ - HUD_Score(); break;\ - case (HUD_PANEL_RACETIMER):\ - HUD_RaceTimer(); break;\ - case (HUD_PANEL_VOTE):\ - HUD_VoteWindow(); break;\ - case (HUD_PANEL_MODICONS):\ - HUD_ModIcons(); break;\ - case (HUD_PANEL_PRESSEDKEYS):\ - HUD_DrawPressedKeys(); break;\ - case (HUD_PANEL_CHAT):\ - HUD_Chat(); break;\ - case (HUD_PANEL_ENGINEINFO):\ - HUD_EngineInfo(); break;\ - case (HUD_PANEL_INFOMESSAGES):\ - HUD_InfoMessages(); break;\ - case (HUD_PANEL_PHYSICS):\ - HUD_Physics(); break;\ - case (HUD_PANEL_CENTERPRINT):\ - HUD_CenterPrint(); break;\ -} ENDS_WITH_CURLY_BRACE - void HUD_Main (void) { float i; @@ -4440,7 +4367,7 @@ void HUD_Main (void) // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu if(scoreboard_fade_alpha == 1) { - HUD_CenterPrint(); + (panel = HUD_PANEL(CENTERPRINT)).panel_draw(); return; } @@ -4489,7 +4416,10 @@ void HUD_Main (void) vector color; float hud_dock_color_team = autocvar_hud_dock_color_team; if((teamplay) && hud_dock_color_team) { - color = colormapPaletteColor(myteam, 1) * hud_dock_color_team; + if(autocvar__hud_configure && myteam == NUM_SPECTATOR) + color = '1 0 0' * hud_dock_color_team; + else + color = myteamcolors * hud_dock_color_team; } else if(autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && hud_dock_color_team) { color = '1 0 0' * hud_dock_color_team; @@ -4564,31 +4494,35 @@ void HUD_Main (void) hud_draw_maximized = 0; // draw panels in order specified by panel_order array for(i = HUD_PANEL_NUM - 1; i >= 0; --i) - HUD_DrawPanel(panel_order[i]); + (panel = hud_panel[panel_order[i]]).panel_draw(); 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(autocvar__hud_configure) { - if(tab_panel != -1) + if(tab_panel) { - HUD_Panel_UpdatePosSizeForId(tab_panel) + panel = tab_panel; + HUD_Panel_UpdatePosSize() drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL); } - if(highlightedPanel != -1) + if(highlightedPanel) { - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha)); } if(!hud_configure_prev || hud_configure_prev == -1) { if(autocvar_hud_cursormode) { setcursormode(1); } hudShiftState = 0; + for(i = HUD_PANEL_NUM - 1; i >= 0; --i) + hud_panel[panel_order[i]].update_time = time; } } else if (hud_configure_prev && autocvar_hud_cursormode) diff --git a/qcsrc/client/hud.qh b/qcsrc/client/hud.qh index bef2079b31..19cd36ddb0 100644 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@ -1,4 +1,10 @@ -float panel_order[HUD_PANEL_NUM]; +#define HUD_PANEL_MAX 24 +entity hud_panel[HUD_PANEL_MAX]; +#define HUD_PANEL_FIRST 0 +float HUD_PANEL_NUM; +float HUD_PANEL_LAST; + +float panel_order[HUD_PANEL_MAX]; string hud_panelorder_prev; float hud_draw_maximized; @@ -8,7 +14,7 @@ vector mousepos; vector panel_click_distance; // mouse cursor distance from the top left corner of the panel (saved only upon a click) vector panel_click_resizeorigin; // coordinates for opposite point when resizing float resizeCorner; // 1 = topleft, 2 = topright, 3 = bottomleft, 4 = bottomright -var float highlightedPanel = -1; +entity highlightedPanel; float highlightedAction; // 0 = nothing, 1 = move, 2 = resize const float BORDER_MULTIPLIER = 0.25; @@ -48,17 +54,29 @@ float hud_fade_alpha; string hud_skin_path; string hud_skin_prev; +vector myteamcolors; + var vector progressbar_color; -var float highlightedPanel_backup = -1; +entity highlightedPanel_backup; var vector panel_pos_backup; var vector panel_size_backup; -var float highlightedPanel_copied = -1; //this is good only to know if there is something copied var vector panel_size_copied; -var float hud_configure_active_panel; // this panel has recently referred the UpdateCvars macro -var string panel_name; +entity panel; +.string panel_name; +.float panel_id; +.vector current_panel_pos; +.vector current_panel_size; +.string current_panel_bg; +.float current_panel_bg_alpha; +.float current_panel_bg_border; +.vector current_panel_bg_color; +.float current_panel_bg_color_team; +.float current_panel_bg_padding; +.float current_panel_fg_alpha; +.float update_time; var float panel_enabled; var vector panel_pos; var vector panel_size; @@ -76,8 +94,52 @@ 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) + +#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 @@ -126,7 +188,10 @@ if(!autocvar__hud_configure && panel_bg_str == "0") {\ // Get value for panel_bg_color: if "" fetch default, else use panel_bg_color. Convert pants, shirt or teamcolor into a vector. #define HUD_Panel_GetColor()\ if((teamplay) && panel_bg_color_team) {\ - panel_bg_color = colormapPaletteColor(myteam, 1) * panel_bg_color_team;\ + if(autocvar__hud_configure && myteam == NUM_SPECTATOR)\ + panel_bg_color = '1 0 0' * panel_bg_color_team;\ + else\ + panel_bg_color = myteamcolors * panel_bg_color_team;\ } else if (autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && panel_bg_color_team) {\ panel_bg_color = '1 0 0' * panel_bg_color_team;\ } else {\ @@ -153,7 +218,7 @@ if(panel_bg_color_team_str == "") {\ // the check doesn't allow to fade this panel when showing the panel-specific menu dialog #define HUD_Panel_ApplyFadeAlpha()\ -if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\ +if(!(menu_enabled == 2 && panel == highlightedPanel))\ {\ panel_bg_alpha *= hud_fade_alpha;\ panel_fg_alpha *= hud_fade_alpha;\ @@ -169,7 +234,7 @@ panel_bg_alpha = stof(panel_bg_alpha_str);\ if(autocvar__hud_configure) {\ if(!panel_enabled)\ panel_bg_alpha = 0.25;\ - else if(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel)\ + else if(menu_enabled == 2 && panel == highlightedPanel)\ panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\ else\ panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha);\ @@ -256,90 +321,60 @@ else\ }\ } -// Update all common cvars of given panel name -#define HUD_Panel_UpdateCvars(name) \ -panel_enabled = autocvar_hud_panel_##name; \ -panel_pos = stov(cvar_string("hud_panel_" #name "_pos")); \ -panel_size = stov(cvar_string("hud_panel_" #name "_size")); \ -panel_bg_str = cvar_string("hud_panel_" #name "_bg"); \ -panel_bg_color_str = cvar_string("hud_panel_" #name "_bg_color"); \ -panel_bg_color_team_str = cvar_string("hud_panel_" #name "_bg_color_team"); \ -panel_bg_alpha_str = cvar_string("hud_panel_" #name "_bg_alpha"); \ -panel_bg_border_str = cvar_string("hud_panel_" #name "_bg_border"); \ -panel_bg_padding_str = cvar_string("hud_panel_" #name "_bg_padding"); \ -HUD_Panel_GetStringVars()\ -if(menu_enabled == 2 && hud_configure_active_panel == highlightedPanel) {\ - HUD_Panel_GetMenuSize()\ - HUD_Panel_GetMenuPos()\ +// NOTE: in hud_configure mode cvars must be reloaded every frame +#define HUD_Panel_UpdateCvars() \ +if(panel.update_time <= time) { \ + if(autocvar__hud_configure) panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ + panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ + panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ + panel_bg_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg")); \ + panel_bg_color_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color")); \ + panel_bg_color_team_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color_team")); \ + panel_bg_alpha_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_alpha")); \ + panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ + panel_bg_padding_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_padding")); \ + HUD_Panel_GetStringVars()\ + if(menu_enabled == 2 && panel == highlightedPanel) {\ + HUD_Panel_GetMenuSize()\ + HUD_Panel_GetMenuPos()\ + } \ + panel.current_panel_pos = panel_pos; \ + panel.current_panel_size = panel_size; \ + if(panel.current_panel_bg != "") \ + strunzone(panel.current_panel_bg); \ + panel.current_panel_bg = strzone(panel_bg); \ + panel.current_panel_bg_alpha = panel_bg_alpha; \ + panel.current_panel_bg_border = panel_bg_border; \ + panel.current_panel_bg_color = panel_bg_color; \ + panel.current_panel_bg_color_team = panel_bg_color_team; \ + panel.current_panel_bg_padding = panel_bg_padding; \ + panel.current_panel_fg_alpha = panel_fg_alpha; \ + panel.update_time = (autocvar__hud_configure) ? time : time + autocvar_hud_panel_update_interval; \ +} else { \ + panel_pos = panel.current_panel_pos; \ + panel_size = panel.current_panel_size; \ + panel_bg = panel.current_panel_bg; \ + panel_bg_alpha = panel.current_panel_bg_alpha; \ + panel_bg_border = panel.current_panel_bg_border; \ + panel_bg_color = panel.current_panel_bg_color; \ + panel_bg_color_team = panel.current_panel_bg_color_team; \ + panel_bg_padding = panel.current_panel_bg_padding; \ + panel_fg_alpha = panel.current_panel_fg_alpha; \ } ENDS_WITH_CURLY_BRACE -// FTEQCC I HATE YOU WHY DO YOU MAKE ME DO THIS??? :( -// max macro length is 1024 characters, I must split it up :( - -// Update all common cvars of given panel id -#define HUD_Panel_UpdateCvarsForId_Part2(id) \ -switch(id) { \ - case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdateCvars(infomessages) break; \ - case HUD_PANEL_PHYSICS: HUD_Panel_UpdateCvars(physics); break;\ - case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdateCvars(centerprint); break;\ -} - -#define HUD_Panel_UpdateCvarsForId(id) \ -switch(id) { \ - case HUD_PANEL_WEAPONS: HUD_Panel_UpdateCvars(weapons) break; \ - case HUD_PANEL_AMMO: HUD_Panel_UpdateCvars(ammo) break; \ - case HUD_PANEL_POWERUPS: HUD_Panel_UpdateCvars(powerups) break; \ - case HUD_PANEL_HEALTHARMOR: HUD_Panel_UpdateCvars(healtharmor) break; \ - case HUD_PANEL_NOTIFY: HUD_Panel_UpdateCvars(notify) break; \ - case HUD_PANEL_TIMER: HUD_Panel_UpdateCvars(timer) break; \ - case HUD_PANEL_RADAR: HUD_Panel_UpdateCvars(radar) break; \ - case HUD_PANEL_SCORE: HUD_Panel_UpdateCvars(score) break; \ - case HUD_PANEL_RACETIMER: HUD_Panel_UpdateCvars(racetimer) break; \ - case HUD_PANEL_VOTE: HUD_Panel_UpdateCvars(vote) break; \ - case HUD_PANEL_MODICONS: HUD_Panel_UpdateCvars(modicons) break; \ - case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdateCvars(pressedkeys) break; \ - case HUD_PANEL_CHAT: HUD_Panel_UpdateCvars(chat) break; \ - case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdateCvars(engineinfo) break; \ - default: HUD_Panel_UpdateCvarsForId_Part2(id)\ -} - -#define HUD_Panel_UpdatePosSize(name) \ -panel_pos = stov(cvar_string("hud_panel_" #name "_pos")); \ -panel_size = stov(cvar_string("hud_panel_" #name "_size")); \ +#define HUD_Panel_UpdatePosSize() {\ +panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ +panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ +panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ HUD_Panel_GetScaledVectors()\ -if(menu_enabled == 2 && hud_configure_active_panel == highlightedPanel) {\ +if(menu_enabled == 2 && panel == highlightedPanel) {\ HUD_Panel_GetMenuSize()\ HUD_Panel_GetMenuPos()\ }\ -panel_bg_border_str = cvar_string("hud_panel_" #name "_bg_border"); \ -HUD_Panel_GetBorder() - -// Update pos and size of given panel id -#define HUD_Panel_UpdatePosSizeForId_Part2(id) \ -switch(id) { \ - case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdatePosSize(infomessages) break;\ - case HUD_PANEL_PHYSICS: HUD_Panel_UpdatePosSize(physics); break;\ - case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdatePosSize(centerprint); break;\ -} +panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ +HUD_Panel_GetBorder() \ +} ENDS_WITH_CURLY_BRACE -#define HUD_Panel_UpdatePosSizeForId(id) \ -switch(id) { \ - case HUD_PANEL_WEAPONS: HUD_Panel_UpdatePosSize(weapons) break;\ - case HUD_PANEL_AMMO: HUD_Panel_UpdatePosSize(ammo) break;\ - case HUD_PANEL_POWERUPS: HUD_Panel_UpdatePosSize(powerups) break;\ - case HUD_PANEL_HEALTHARMOR: HUD_Panel_UpdatePosSize(healtharmor) break;\ - case HUD_PANEL_NOTIFY: HUD_Panel_UpdatePosSize(notify) break;\ - case HUD_PANEL_TIMER: HUD_Panel_UpdatePosSize(timer) break;\ - case HUD_PANEL_RADAR: HUD_Panel_UpdatePosSize(radar) break;\ - case HUD_PANEL_SCORE: HUD_Panel_UpdatePosSize(score) break;\ - case HUD_PANEL_RACETIMER: HUD_Panel_UpdatePosSize(racetimer) break;\ - case HUD_PANEL_VOTE: HUD_Panel_UpdatePosSize(vote) break;\ - case HUD_PANEL_MODICONS: HUD_Panel_UpdatePosSize(modicons) break;\ - case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdatePosSize(pressedkeys) break;\ - case HUD_PANEL_CHAT: HUD_Panel_UpdatePosSize(chat) break;\ - case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdatePosSize(engineinfo) break;\ - default: HUD_Panel_UpdatePosSizeForId_Part2(id)\ -} #define KN_MAX_ENTRIES 10 diff --git a/qcsrc/client/hud_config.qc b/qcsrc/client/hud_config.qc index 21ab08fa70..d478f734dc 100644 --- a/qcsrc/client/hud_config.qc +++ b/qcsrc/client/hud_config.qc @@ -2,8 +2,8 @@ // q: quoted, n: not quoted #define HUD_Write_Cvar_n(cvar) HUD_Write(strcat("seta ", cvar, " ", cvar_string(cvar), "\n")) #define HUD_Write_Cvar_q(cvar) HUD_Write(strcat("seta ", cvar, " \"", cvar_string(cvar), "\"\n")) -#define HUD_Write_PanelCvar_n(cvar_suf) HUD_Write_Cvar_n(strcat("hud_panel_", panel_name, cvar_suf)) -#define HUD_Write_PanelCvar_q(cvar_suf) HUD_Write_Cvar_q(strcat("hud_panel_", panel_name, cvar_suf)) +#define HUD_Write_PanelCvar_n(cvar_suf) HUD_Write_Cvar_n(strcat("hud_panel_", panel.panel_name, cvar_suf)) +#define HUD_Write_PanelCvar_q(cvar_suf) HUD_Write_Cvar_q(strcat("hud_panel_", panel.panel_name, cvar_suf)) // Save the config void HUD_Panel_ExportCfg(string cfgname) { @@ -52,7 +52,7 @@ void HUD_Panel_ExportCfg(string cfgname) float i; for (i = 0; i < HUD_PANEL_NUM; ++i) { - HUD_Panel_GetName(i); + panel = hud_panel[i]; HUD_Write_PanelCvar_n(""); HUD_Write_PanelCvar_q("_pos"); @@ -217,10 +217,10 @@ vector HUD_Panel_CheckMove(vector myPos, vector mySize) myTarget = myPos; for (i = 0; i < HUD_PANEL_NUM; ++i) { - if(i == highlightedPanel || !panel_enabled) - continue; - - HUD_Panel_UpdatePosSizeForId(i); + panel = hud_panel[i]; + if(panel == highlightedPanel) continue; + HUD_Panel_UpdatePosSize() + if(!panel_enabled) continue; panel_pos -= '1 1 0' * panel_bg_border; panel_size += '2 2 0' * panel_bg_border; @@ -280,7 +280,8 @@ vector HUD_Panel_CheckMove(vector myPos, vector mySize) void HUD_Panel_SetPos(vector pos) { - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() vector mySize; mySize = panel_size; @@ -302,8 +303,7 @@ void HUD_Panel_SetPos(vector pos) string s; s = strcat(ftos(pos_x/vid_conwidth), " ", ftos(pos_y/vid_conheight)); - HUD_Panel_GetName(highlightedPanel); - cvar_set(strcat("hud_panel_", panel_name, "_pos"), s); + cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_pos"), s); } // check if resize will result in panel being moved into another panel. If so, return snapped vector, otherwise return the given vector @@ -317,10 +317,10 @@ vector HUD_Panel_CheckResize(vector mySize, vector resizeorigin) { ratio = mySize_x/mySize_y; for (i = 0; i < HUD_PANEL_NUM; ++i) { - if(i == highlightedPanel || !panel_enabled) - continue; - - HUD_Panel_UpdatePosSizeForId(i); + panel = hud_panel[i]; + if(panel == highlightedPanel) continue; + HUD_Panel_UpdatePosSize() + if(!panel_enabled) continue; panel_pos -= '1 1 0' * panel_bg_border; panel_size += '2 2 0' * panel_bg_border; @@ -419,7 +419,8 @@ vector HUD_Panel_CheckResize(vector mySize, vector resizeorigin) { void HUD_Panel_SetPosSize(vector mySize) { - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() vector resizeorigin; resizeorigin = panel_click_resizeorigin; local noref vector myPos; // fteqcc sucks @@ -428,7 +429,7 @@ void HUD_Panel_SetPosSize(vector mySize) mySize_x = max(0.025 * vid_conwidth, mySize_x); mySize_y = max(0.025 * vid_conheight, mySize_y); - if(highlightedPanel == HUD_PANEL_CHAT) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small. + if(highlightedPanel == HUD_PANEL(CHAT)) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small. { mySize_x = max(17 * autocvar_con_chatsize, mySize_x); mySize_y = max(2 * autocvar_con_chatsize + 2 * panel_bg_padding, mySize_y); @@ -499,20 +500,19 @@ void HUD_Panel_SetPosSize(vector mySize) //if(cvar("hud_configure_checkcollisions_debug")) //drawfill(myPos, mySize, '0 1 0', .3, DRAWFLAG_NORMAL); - HUD_Panel_GetName(highlightedPanel); string s; s = strcat(ftos(mySize_x/vid_conwidth), " ", ftos(mySize_y/vid_conheight)); - cvar_set(strcat("hud_panel_", panel_name, "_size"), s); + cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_size"), s); s = strcat(ftos(myPos_x/vid_conwidth), " ", ftos(myPos_y/vid_conheight)); - cvar_set(strcat("hud_panel_", panel_name, "_pos"), s); + cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_pos"), s); } float pressed_key_time; vector highlightedPanel_initial_pos, highlightedPanel_initial_size; void HUD_Panel_Arrow_Action(float nPrimary) { - if (highlightedPanel == -1) + if(!highlightedPanel) return; hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions); @@ -547,7 +547,8 @@ void HUD_Panel_Arrow_Action(float nPrimary) step = (step / 64) * (1 + 2 * (time - pressed_key_time)); } - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() highlightedPanel_initial_pos = panel_pos; highlightedPanel_initial_size = panel_size; @@ -606,7 +607,8 @@ void HUD_Panel_Arrow_Action(float nPrimary) HUD_Panel_SetPos(pos); } - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size) { @@ -626,15 +628,16 @@ float prevMouseClickedTime; // time during previous left mouse click, to check f vector prevMouseClickedPos; // pos during previous left mouse click, to check for doubleclicks void HUD_Panel_EnableMenu(); -float tab_panels[HUD_PANEL_NUM]; -float tab_panel, tab_backward; +entity tab_panels[HUD_PANEL_MAX]; +entity tab_panel; vector tab_panel_pos; +float tab_backward; void HUD_Panel_FirstInDrawQ(float id); void reset_tab_panels() { int i; for(i = 0; i < HUD_PANEL_NUM; ++i) - tab_panels[i] = -1; + tab_panels[i] = world; } float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) { @@ -685,14 +688,14 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) { if (bInputType == 1) //ctrl has been released { - if (tab_panel != -1) + if (tab_panel) { //switch to selected panel highlightedPanel = tab_panel; highlightedAction = 0; - HUD_Panel_FirstInDrawQ(highlightedPanel); + HUD_Panel_FirstInDrawQ(highlightedPanel.panel_id); } - tab_panel = -1; + tab_panel = world; reset_tab_panels(); } } @@ -736,15 +739,18 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) //(it should only after every other panel of the hud) //It's a minor bug anyway, we can live with it - float starting_panel; - float old_tab_panel = tab_panel; - if (tab_panel == -1) //first press of TAB + entity starting_panel; + entity old_tab_panel = tab_panel; + if (!tab_panel) //first press of TAB { - if (highlightedPanel != -1) - HUD_Panel_UpdatePosSizeForId(highlightedPanel) + if (highlightedPanel) + { + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() + } else panel_pos = '0 0 0'; - starting_panel = highlightedPanel; //can be -1, it means no starting panel + starting_panel = highlightedPanel; tab_panel_pos = panel_pos; //to compute level } else @@ -763,35 +769,36 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) level = floor(tab_panel_pos_y / level_height) * level_height; //starting level candidate_pos_x = (!tab_backward) ? vid_conwidth : 0; start_pos_x = tab_panel_pos_x; - tab_panel = -1; + tab_panel = world; k=0; while(++k) { for(i = 0; i < HUD_PANEL_NUM; ++i) { - if (i == tab_panels[i] || i == starting_panel) + panel = hud_panel[i]; + if (panel == tab_panels[i] || panel == starting_panel) continue; - HUD_Panel_UpdatePosSizeForId(i) + HUD_Panel_UpdatePosSize() if (panel_pos_y >= level && (panel_pos_y - level) < level_height) if ( ( !tab_backward && panel_pos_x >= start_pos_x && (panel_pos_x < candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y <= candidate_pos_y)) ) || ( tab_backward && panel_pos_x <= start_pos_x && (panel_pos_x > candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y >= candidate_pos_y)) ) ) { - tab_panel = i; + tab_panel = panel; tab_panel_pos = candidate_pos = panel_pos; } } - if (tab_panel != -1) + if (tab_panel) break; if (k == LEVELS_NUM) //tab_panel not found { reset_tab_panels(); - if (old_tab_panel == -2) //this prevents an infinite loop (should not happen normally) + if (!old_tab_panel) { - tab_panel = -1; + tab_panel = world; return true; } starting_panel = old_tab_panel; - old_tab_panel = -2; + old_tab_panel = world; goto find_tab_panel; //u must find tab_panel! } if (!tab_backward) @@ -808,18 +815,15 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) } } - tab_panels[tab_panel] = tab_panel; + tab_panels[tab_panel.panel_id] = tab_panel; } else if(nPrimary == K_SPACE && hudShiftState & S_CTRL) // enable/disable highlighted panel or dock { if (bInputType == 1 || mouseClicked) return true; - if (highlightedPanel != -1) - { - HUD_Panel_GetName(highlightedPanel); - cvar_set(strcat("hud_panel_", panel_name), ftos(!(panel_enabled))); - } + if (highlightedPanel) + cvar_set(strcat("hud_panel_", highlightedPanel.panel_name), ftos(!cvar(strcat("hud_panel_", highlightedPanel.panel_name)))); else cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : ""); } @@ -828,11 +832,11 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) if (bInputType == 1 || mouseClicked) return true; - if (highlightedPanel != -1) + if (highlightedPanel) { - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() panel_size_copied = panel_size; - highlightedPanel_copied = highlightedPanel; } } else if(nPrimary == 'v' && hudShiftState & S_CTRL) // past copied size on the highlighted panel @@ -840,10 +844,11 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) if (bInputType == 1 || mouseClicked) return true; - if (highlightedPanel_copied == -1 || highlightedPanel == -1) + if (panel_size_copied == '0 0 0' || !highlightedPanel) return true; - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() // reduce size if it'd go beyond screen boundaries vector tmp_size = panel_size_copied; @@ -861,22 +866,20 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) highlightedPanel_backup = highlightedPanel; s = strcat(ftos(tmp_size_x/vid_conwidth), " ", ftos(tmp_size_y/vid_conheight)); - HUD_Panel_GetName(highlightedPanel); - cvar_set(strcat("hud_panel_", panel_name, "_size"), s); + cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_size"), s); } else if(nPrimary == 'z' && hudShiftState & S_CTRL) // undo last action { if (bInputType == 1 || mouseClicked) return true; //restore previous values - if (highlightedPanel_backup != -1) + if (highlightedPanel_backup) { - HUD_Panel_GetName(highlightedPanel_backup); s = strcat(ftos(panel_pos_backup_x/vid_conwidth), " ", ftos(panel_pos_backup_y/vid_conheight)); - cvar_set(strcat("hud_panel_", panel_name, "_pos"), s); + cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_pos"), s); s = strcat(ftos(panel_size_backup_x/vid_conwidth), " ", ftos(panel_size_backup_y/vid_conheight)); - cvar_set(strcat("hud_panel_", panel_name, "_size"), s); - highlightedPanel_backup = -1; + cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_size"), s); + highlightedPanel_backup = world; } } else if(nPrimary == K_UPARROW || nPrimary == K_DOWNARROW || nPrimary == K_LEFTARROW || nPrimary == K_RIGHTARROW) @@ -896,7 +899,7 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary) { if (bInputType == 1) return true; - if (highlightedPanel != -1) + if (highlightedPanel) HUD_Panel_EnableMenu(); } else if(hit_con_bind) @@ -914,7 +917,8 @@ float HUD_Panel_Check_Mouse_Pos(float allow_move) i = panel_order[j]; j += 1; - HUD_Panel_UpdatePosSizeForId(i); + panel = hud_panel[i]; + HUD_Panel_UpdatePosSize() border = max(8, panel_bg_border); // FORCED border so a small border size doesn't mean you can't resize @@ -994,14 +998,15 @@ void HUD_Panel_Highlight(float allow_move) i = panel_order[j]; j += 1; - HUD_Panel_UpdatePosSizeForId(i); + panel = hud_panel[i]; + HUD_Panel_UpdatePosSize() border = max(8, panel_bg_border); // FORCED border so a small border size doesn't mean you can't resize // move if(allow_move && mousepos_x > panel_pos_x && mousepos_y > panel_pos_y && mousepos_x < panel_pos_x + panel_size_x && mousepos_y < panel_pos_y + panel_size_y) { - highlightedPanel = i; + highlightedPanel = hud_panel[i]; HUD_Panel_FirstInDrawQ(i); highlightedAction = 1; panel_click_distance = mousepos - panel_pos; @@ -1010,7 +1015,7 @@ void HUD_Panel_Highlight(float allow_move) // resize from topleft border else if(mousepos_x >= panel_pos_x - border && mousepos_y >= panel_pos_y - border && mousepos_x <= panel_pos_x + 0.5 * panel_size_x && mousepos_y <= panel_pos_y + 0.5 * panel_size_y) { - highlightedPanel = i; + highlightedPanel = hud_panel[i]; HUD_Panel_FirstInDrawQ(i); highlightedAction = 2; resizeCorner = 1; @@ -1021,7 +1026,7 @@ void HUD_Panel_Highlight(float allow_move) // resize from topright border else if(mousepos_x >= panel_pos_x + 0.5 * panel_size_x && mousepos_y >= panel_pos_y - border && mousepos_x <= panel_pos_x + panel_size_x + border && mousepos_y <= panel_pos_y + 0.5 * panel_size_y) { - highlightedPanel = i; + highlightedPanel = hud_panel[i]; HUD_Panel_FirstInDrawQ(i); highlightedAction = 2; resizeCorner = 2; @@ -1033,7 +1038,7 @@ void HUD_Panel_Highlight(float allow_move) // resize from bottomleft border else if(mousepos_x >= panel_pos_x - border && mousepos_y >= panel_pos_y + 0.5 * panel_size_y && mousepos_x <= panel_pos_x + 0.5 * panel_size_x && mousepos_y <= panel_pos_y + panel_size_y + border) { - highlightedPanel = i; + highlightedPanel = hud_panel[i]; HUD_Panel_FirstInDrawQ(i); highlightedAction = 2; resizeCorner = 3; @@ -1045,7 +1050,7 @@ void HUD_Panel_Highlight(float allow_move) // resize from bottomright border else if(mousepos_x >= panel_pos_x + 0.5 * panel_size_x && mousepos_y >= panel_pos_y + 0.5 * panel_size_y && mousepos_x <= panel_pos_x + panel_size_x + border && mousepos_y <= panel_pos_y + panel_size_y + border) { - highlightedPanel = i; + highlightedPanel = hud_panel[i]; HUD_Panel_FirstInDrawQ(i); highlightedAction = 2; resizeCorner = 4; @@ -1054,7 +1059,7 @@ void HUD_Panel_Highlight(float allow_move) return; } } - highlightedPanel = -1; + highlightedPanel = world; highlightedAction = 0; } @@ -1062,8 +1067,7 @@ void HUD_Panel_EnableMenu() { menu_enabled = 2; menu_enabled_time = time; - HUD_Panel_GetName(highlightedPanel); - localcmd("menu_showhudoptions ", panel_name, "\n"); + localcmd("menu_showhudoptions ", highlightedPanel.panel_name, "\n"); } float mouse_over_panel; void HUD_Panel_Mouse() @@ -1093,21 +1097,21 @@ void HUD_Panel_Mouse() { if(prevMouseClicked == 0) { - if (tab_panel != -1) + if (tab_panel) { //stop ctrl-tab selection - tab_panel = -1; + tab_panel = world; reset_tab_panels(); } HUD_Panel_Highlight(mouseClicked & S_MOUSE1); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin - // and calls HUD_Panel_UpdatePosSizeForId() for the highlighted panel - if (highlightedPanel != -1) + // and calls HUD_Panel_UpdatePosSize() for the highlighted panel + if (highlightedPanel) { highlightedPanel_initial_pos = panel_pos; highlightedPanel_initial_size = panel_size; } // doubleclick check - if ((mouseClicked & S_MOUSE1) && time - prevMouseClickedTime < 0.4 && highlightedPanel != -1 && prevMouseClickedPos == mousepos) + if ((mouseClicked & S_MOUSE1) && time - prevMouseClickedTime < 0.4 && highlightedPanel && prevMouseClickedPos == mousepos) { mouseClicked = 0; // to prevent spam, I guess. HUD_Panel_EnableMenu(); @@ -1123,9 +1127,12 @@ void HUD_Panel_Mouse() } } else - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + { + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() + } - if (highlightedPanel != -1) + if (highlightedPanel) { drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL); if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size) @@ -1170,7 +1177,7 @@ void HUD_Panel_Mouse() mouse_over_panel = 0; else mouse_over_panel = HUD_Panel_Check_Mouse_Pos(TRUE); - if (mouse_over_panel && tab_panel == -1) + if (mouse_over_panel && !tab_panel) drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL); } // draw cursor after performing move/resize to have the panel pos/size updated before mouse_over_panel diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index ffec62095b..ccf2725db7 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -391,43 +391,6 @@ float WR_SWITCHABLE = 12; // (CSQC) impact effect float WR_PLAYERDEATH = 13; // (SVQC) does not need to do anything float WR_GONETHINK = 14; // (SVQC) logic to run every frame, also if no longer having the weapon as long as the switch away has not been performed -float HUD_PANEL_WEAPONS = 0; -float HUD_PANEL_AMMO = 1; -float HUD_PANEL_POWERUPS = 2; -float HUD_PANEL_HEALTHARMOR = 3; -float HUD_PANEL_NOTIFY = 4; -float HUD_PANEL_TIMER = 5; -float HUD_PANEL_RADAR = 6; -float HUD_PANEL_SCORE = 7; -float HUD_PANEL_RACETIMER = 8; -float HUD_PANEL_VOTE = 9; -float HUD_PANEL_MODICONS = 10; -float HUD_PANEL_PRESSEDKEYS = 11; -float HUD_PANEL_CHAT = 12; -float HUD_PANEL_ENGINEINFO = 13; -float HUD_PANEL_INFOMESSAGES = 14; -float HUD_PANEL_PHYSICS = 15; -float HUD_PANEL_CENTERPRINT = 16; -float HUD_PANEL_NUM = 17; // always last panel id + 1, please increment when adding a new panel - -string HUD_PANELNAME_WEAPONS = "weapons"; -string HUD_PANELNAME_AMMO = "ammo"; -string HUD_PANELNAME_POWERUPS = "powerups"; -string HUD_PANELNAME_HEALTHARMOR = "healtharmor"; -string HUD_PANELNAME_NOTIFY = "notify"; -string HUD_PANELNAME_TIMER = "timer"; -string HUD_PANELNAME_RADAR = "radar"; -string HUD_PANELNAME_SCORE = "score"; -string HUD_PANELNAME_RACETIMER = "racetimer"; -string HUD_PANELNAME_VOTE = "vote"; -string HUD_PANELNAME_MODICONS = "modicons"; -string HUD_PANELNAME_PRESSEDKEYS = "pressedkeys"; -string HUD_PANELNAME_CHAT = "chat"; -string HUD_PANELNAME_ENGINEINFO = "engineinfo"; -string HUD_PANELNAME_INFOMESSAGES = "infomessages"; -string HUD_PANELNAME_PHYSICS = "physics"; -string HUD_PANELNAME_CENTERPRINT = "centerprint"; - #define SERVERFLAG_ALLOW_FULLBRIGHT 1 #define SERVERFLAG_TEAMPLAY 2 #define SERVERFLAG_PLAYERSTATS 4 diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index df910e3539..e9bd01cfa4 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -264,34 +264,6 @@ 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; \ -} 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