From 8031c78a2174ecc4975059c4d10164abf1197e79 Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Tue, 1 Jan 2013 10:44:02 -0500 Subject: [PATCH] Re-write a bit of how weapons panel fading animation is done --- _hud_descriptions.cfg | 6 ++- hud_luminos.cfg | 8 +++- hud_luminos_minimal.cfg | 4 ++ hud_luminos_minimal_xhair.cfg | 4 ++ hud_luminos_old.cfg | 4 ++ hud_nexuiz.cfg | 4 ++ qcsrc/client/autocvars.qh | 5 ++- qcsrc/client/hud.qc | 47 ++++++++++++-------- qcsrc/client/hud_config.qc | 4 ++ qcsrc/menu/xonotic/dialog_hudpanel_weapons.c | 4 +- 10 files changed, 65 insertions(+), 25 deletions(-) diff --git a/_hud_descriptions.cfg b/_hud_descriptions.cfg index cb95f9681..4c832ef1e 100644 --- a/_hud_descriptions.cfg +++ b/_hud_descriptions.cfg @@ -52,7 +52,11 @@ seta hud_panel_weapons_complainbubble_color_unavailable "" "color of the complai seta hud_panel_weapons_ammo_color "" "color of status bar" seta hud_panel_weapons_ammo_alpha "" "alpha of status bar" seta hud_panel_weapons_timeout "" "panel disappears if you don't switch weapon for this amount of seconds" -seta hud_panel_weapons_timeout_effect "" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out" +seta hud_panel_weapons_timeout_effect "" "disappearance effect: 0) no effect; 1) panel fades out; 2) panel moves off the screen; 3) combination of 1 and 2" +seta hud_panel_weapons_timeout_fadebgmin "" "minimum alpha of the panel background while in effect mode 1" +seta hud_panel_weapons_timeout_fadefgmin "" "minimum alpha of the panel foreground while in effect mode 1" +seta hud_panel_weapons_timeout_speed_in "" "speed that fading/moving onto the screen occurs" +seta hud_panel_weapons_timeout_speed_out "" "speed that fading/moving off of the screen occurs" seta hud_panel_weapons_label "" "1 = show number of weapon, 2 = show bound key of weapon" seta hud_panel_weapons_accuracy "" "show accuracy color as the weapon icon background; colors can be configured with accuracy_color* cvars" seta hud_panel_weapons_ammo "" "show ammo as a status bar" diff --git a/hud_luminos.cfg b/hud_luminos.cfg index 6472a2579..c70e1b103 100644 --- a/hud_luminos.cfg +++ b/hud_luminos.cfg @@ -52,8 +52,12 @@ seta hud_panel_weapons_ammo "1" seta hud_panel_weapons_ammo_color "0 1 0" seta hud_panel_weapons_ammo_alpha "1" seta hud_panel_weapons_aspect "2" -seta hud_panel_weapons_timeout "5" -seta hud_panel_weapons_timeout_effect "3" +seta hud_panel_weapons_timeout "1" +seta hud_panel_weapons_timeout_effect "1" +seta hud_panel_weapons_timeout_fadebgmin "0.4" +seta hud_panel_weapons_timeout_fadefgmin "0.4" +seta hud_panel_weapons_timeout_speed_in "0.25" +seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "1" seta hud_panel_ammo 1 diff --git a/hud_luminos_minimal.cfg b/hud_luminos_minimal.cfg index bb7e0662e..4c0a7f46d 100644 --- a/hud_luminos_minimal.cfg +++ b/hud_luminos_minimal.cfg @@ -54,6 +54,10 @@ seta hud_panel_weapons_ammo_alpha "1" seta hud_panel_weapons_aspect "2" seta hud_panel_weapons_timeout "0" seta hud_panel_weapons_timeout_effect "0" +seta hud_panel_weapons_timeout_fadebgmin "0" +seta hud_panel_weapons_timeout_fadefgmin "0" +seta hud_panel_weapons_timeout_speed_in "0.25" +seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "1" seta hud_panel_ammo 1 diff --git a/hud_luminos_minimal_xhair.cfg b/hud_luminos_minimal_xhair.cfg index e0921ad35..56ec31c80 100644 --- a/hud_luminos_minimal_xhair.cfg +++ b/hud_luminos_minimal_xhair.cfg @@ -54,6 +54,10 @@ seta hud_panel_weapons_ammo_alpha "1" seta hud_panel_weapons_aspect "2" seta hud_panel_weapons_timeout "0" seta hud_panel_weapons_timeout_effect "0" +seta hud_panel_weapons_timeout_fadebgmin "0" +seta hud_panel_weapons_timeout_fadefgmin "0" +seta hud_panel_weapons_timeout_speed_in "0.25" +seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "1" seta hud_panel_ammo 1 diff --git a/hud_luminos_old.cfg b/hud_luminos_old.cfg index 119f7b18f..263412734 100644 --- a/hud_luminos_old.cfg +++ b/hud_luminos_old.cfg @@ -54,6 +54,10 @@ seta hud_panel_weapons_ammo_alpha "1" seta hud_panel_weapons_aspect "2" seta hud_panel_weapons_timeout "3" seta hud_panel_weapons_timeout_effect "1" +seta hud_panel_weapons_timeout_fadebgmin "0" +seta hud_panel_weapons_timeout_fadefgmin "0" +seta hud_panel_weapons_timeout_speed_in "0.25" +seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "1" seta hud_panel_ammo 1 diff --git a/hud_nexuiz.cfg b/hud_nexuiz.cfg index 3cf0feb75..42a0571bb 100644 --- a/hud_nexuiz.cfg +++ b/hud_nexuiz.cfg @@ -54,6 +54,10 @@ seta hud_panel_weapons_ammo_alpha "1" seta hud_panel_weapons_aspect "2" seta hud_panel_weapons_timeout "0" seta hud_panel_weapons_timeout_effect "0" +seta hud_panel_weapons_timeout_fadebgmin "0" +seta hud_panel_weapons_timeout_fadefgmin "0" +seta hud_panel_weapons_timeout_speed_in "0.25" +seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "0" seta hud_panel_ammo 1 diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index ed56f7183..eb35425f5 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -315,11 +315,14 @@ string autocvar_hud_panel_weapons_complainbubble_color_unavailable; float autocvar_hud_panel_weapons_complainbubble_fadetime; float autocvar_hud_panel_weapons_complainbubble_padding; float autocvar_hud_panel_weapons_complainbubble_time; -var float autocvar_hud_panel_weapons_fade = 1; float autocvar_hud_panel_weapons_label; float autocvar_hud_panel_weapons_onlyowned; float autocvar_hud_panel_weapons_timeout; float autocvar_hud_panel_weapons_timeout_effect; +float autocvar_hud_panel_weapons_timeout_fadebgmin; +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_progressbar_alpha; float autocvar_hud_showbinds; float autocvar_hud_showbinds_limit; diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 607130ea2..35a0a0448 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -439,15 +439,15 @@ void HUD_Weapons(void) WEPSET_COPY_AS(weapons_stat); float i, f, a, j, factor; float screen_ar, center_x, center_y; - float weapon_count, weapon_id, weapon_alpha; + float weapon_count, weapon_id; float row, column, rows, columns; float aspect = autocvar_hud_panel_weapons_aspect; float show_accuracy = false, panel_weapon_accuracy; float timeout = autocvar_hud_panel_weapons_timeout; - float timein_effect_length = (autocvar_hud_panel_weapons_timeout_effect ? 0.375 : 0); - float timeout_effect_length = (autocvar_hud_panel_weapons_timeout_effect ? 0.75 : 0); + float timein_effect_length = autocvar_hud_panel_weapons_timeout_speed_in; //? 0.375 : 0); + float timeout_effect_length = autocvar_hud_panel_weapons_timeout_speed_out; //? 0.75 : 0); float ammo_type, ammo_full; float barsize_x = 0, barsize_y = 0, baroffset_x = 0, baroffset_y = 0; @@ -468,7 +468,7 @@ void HUD_Weapons(void) { if((!autocvar_hud_panel_weapons) || (spectatee_status == -1)) return; - else if(timeout && time >= weapontime + timeout + timeout_effect_length) + else if(timeout && time >= weapontime + timeout + timeout_effect_length && ((autocvar_hud_panel_weapons_timeout_effect != 1) && !(autocvar_hud_panel_weapons_timeout_fadebgmin + autocvar_hud_panel_weapons_timeout_fadefgmin))) { weaponprevtime = time; return; @@ -483,15 +483,6 @@ void HUD_Weapons(void) draw_beginBoldFont(); - // calculate fading effect to weapon images for when the panel is idle - if(autocvar_hud_panel_weapons_fade) - { - weapon_alpha = 3.2 - 2 * (time - weapontime); - weapon_alpha = bound(0.7, weapon_alpha, 1) * panel_fg_alpha; - } - else - weapon_alpha = panel_fg_alpha; - // figure out weapon order (how the weapons are sorted) // TODO make this configurable if(weaponorder_bypriority != autocvar_cl_weaponpriority || !weaponorder[0]) { @@ -572,12 +563,21 @@ void HUD_Weapons(void) { if (timeout && time >= weapontime + timeout) // apply timeout effect if needed { - f = (time - (weapontime + timeout)) / timeout_effect_length; - if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3) + f = bound(0, (time - (weapontime + timeout)) / timeout_effect_length, 1); + + // fade the panel alpha + if(autocvar_hud_panel_weapons_timeout_effect == 1) + { + panel_bg_alpha *= (autocvar_hud_panel_weapons_timeout_fadebgmin * f + (1 - f)); + panel_fg_alpha *= (autocvar_hud_panel_weapons_timeout_fadefgmin * f + (1 - f)); + } + else if(autocvar_hud_panel_weapons_timeout_effect == 3) { panel_bg_alpha *= (1 - f); panel_fg_alpha *= (1 - f); } + + // move the panel off the screen if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3) { f *= f; // for a cooler movement @@ -603,12 +603,21 @@ void HUD_Weapons(void) } else if (timeout && time < weaponprevtime + timein_effect_length) // apply timein effect if needed { - f = (time - weaponprevtime) / timein_effect_length; - if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3) + f = bound(0, (time - weaponprevtime) / timein_effect_length, 1); + + // fade the panel alpha + if(autocvar_hud_panel_weapons_timeout_effect == 1) + { + panel_bg_alpha *= (autocvar_hud_panel_weapons_timeout_fadebgmin * (1 - f) + f); + panel_fg_alpha *= (autocvar_hud_panel_weapons_timeout_fadefgmin * (1 - f) + f); + } + else if(autocvar_hud_panel_weapons_timeout_effect == 3) { panel_bg_alpha *= (f); panel_fg_alpha *= (f); } + + // move the panel back on screen if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3) { f *= f; // for a cooler movement @@ -701,7 +710,7 @@ void HUD_Weapons(void) // draw background behind currently selected weapon if(self.weapon == switchweapon) - drawpic_aspect_skin(weapon_pos, "weapon_current_bg", weapon_size, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); + drawpic_aspect_skin(weapon_pos, "weapon_current_bg", weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); // draw the weapon accuracy if(show_accuracy) @@ -727,7 +736,7 @@ void HUD_Weapons(void) if(WEPSET_CONTAINS_AW(weapons_stat, self.weapon)) { // draw the weapon image - drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); + drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); // draw weapon label string switch(autocvar_hud_panel_weapons_label) diff --git a/qcsrc/client/hud_config.qc b/qcsrc/client/hud_config.qc index d4bb5de23..acff2892d 100644 --- a/qcsrc/client/hud_config.qc +++ b/qcsrc/client/hud_config.qc @@ -80,6 +80,10 @@ void HUD_Panel_ExportCfg(string cfgname) HUD_Write_PanelCvar_q("_aspect"); HUD_Write_PanelCvar_q("_timeout"); HUD_Write_PanelCvar_q("_timeout_effect"); + HUD_Write_PanelCvar_q("_timeout_fadebgmin"); + HUD_Write_PanelCvar_q("_timeout_fadefgmin"); + HUD_Write_PanelCvar_q("_timeout_speed_in"); + HUD_Write_PanelCvar_q("_timeout_speed_out"); HUD_Write_PanelCvar_q("_onlyowned"); break; case HUD_PANEL_AMMO: diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c index b31622f67..e3cd78eb6 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c @@ -33,8 +33,8 @@ void XonoticHUDWeaponsDialog_fill(entity me) setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_timeout")), "0"); me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_timeout_effect")))); e.addValue(e, ZCTX(_("EF^None")), "0"); - e.addValue(e, _("Slide"), "1"); - e.addValue(e, _("Alpha"), "2"); + e.addValue(e, _("Alpha"), "1"); + e.addValue(e, _("Slide"), "2"); e.addValue(e, ZCTX(_("EF^Both")), "3"); e.configureXonoticTextSliderValues(e); setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_timeout")), "0"); -- 2.39.2