From: Juhu <5894800-Juhu_@users.noreply.gitlab.com> Date: Wed, 25 Jan 2023 19:33:19 +0000 (+0100) Subject: strafehud: fix switch indicator positioning when using projection X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ff200e525953a8b223f2b9df7e11315ea7edcdf6;p=xonotic%2Fxonotic-data.pk3dir.git strafehud: fix switch indicator positioning when using projection --- diff --git a/qcsrc/client/hud/panel/strafehud.qc b/qcsrc/client/hud/panel/strafehud.qc index 9a2c90d14..edec4fb00 100644 --- a/qcsrc/client/hud/panel/strafehud.qc +++ b/qcsrc/client/hud/panel/strafehud.qc @@ -761,6 +761,9 @@ void HUD_StrafeHUD() float offset = !odd_angles ? bestangle_offset : odd_bestangle_offset; float switch_offset = !odd_angles ? switch_bestangle_offset : switch_odd_bestangle_offset; + offset = StrafeHUD_projectOffset(offset, hudangle); + switch_offset = StrafeHUD_projectOffset(switch_offset, hudangle); + // remove switch indicator width from offset if(direction == STRAFEHUD_DIRECTION_LEFT) { @@ -1209,7 +1212,7 @@ float StrafeHUD_projectWidth(float offset, float width, float range) } // functions to make hud elements align perfectly in the hud area -void HUD_Panel_DrawStrafeHUD(float offset, float width, float hidden_width, vector color, float alpha, int type, int gradientType, bool projectWidth, float range) +void HUD_Panel_DrawStrafeHUD(float offset, float width, float hidden_width, vector color, float alpha, int type, int gradientType, bool doProject, float range) { float mirror_offset, mirror_width; vector size = panel_size; @@ -1246,8 +1249,11 @@ void HUD_Panel_DrawStrafeHUD(float offset, float width, float hidden_width, vect vector original_size = size; float original_offset = offset; - if(projectWidth && size.x > 0) size.x = StrafeHUD_projectWidth(offset, size.x, range); - offset = StrafeHUD_projectOffset(offset, range); + if(doProject) + { + if(size.x > 0) size.x = StrafeHUD_projectWidth(offset, size.x, range); + offset = StrafeHUD_projectOffset(offset, range); + } if(mirror_offset < 0) { @@ -1265,8 +1271,11 @@ void HUD_Panel_DrawStrafeHUD(float offset, float width, float hidden_width, vect vector original_mirror_size = mirror_size; float original_mirror_offset = mirror_offset; - if(projectWidth && mirror_size.x > 0) mirror_size.x = StrafeHUD_projectWidth(mirror_offset, mirror_size.x, range); - mirror_offset = StrafeHUD_projectOffset(mirror_offset, range); + if(doProject) + { + if(mirror_size.x > 0) mirror_size.x = StrafeHUD_projectWidth(mirror_offset, mirror_size.x, range); + mirror_offset = StrafeHUD_projectOffset(mirror_offset, range); + } switch(type) { @@ -1323,12 +1332,12 @@ void HUD_Panel_DrawStrafeHUD(float offset, float width, float hidden_width, vect StrafeHUD_drawGradient( color, autocvar_hud_panel_strafehud_bar_neutral_color, original_mirror_size, original_width, original_mirror_offset, - alpha, gradient_mirror_offset, gradientType, range); + alpha, gradient_mirror_offset, gradientType, doProject, range); StrafeHUD_drawGradient( color, autocvar_hud_panel_strafehud_bar_neutral_color, original_size, original_width, original_offset, - alpha, gradient_offset, gradientType, range); + alpha, gradient_offset, gradientType, doProject, range); } } @@ -1343,7 +1352,7 @@ vector StrafeHUD_mixColors(vector color1, vector color2, float ratio) return mixedColor; } -void StrafeHUD_drawGradient(vector color1, vector color2, vector size, float original_width, float offset, float alpha, float gradientOffset, int gradientType, float range) +void StrafeHUD_drawGradient(vector color1, vector color2, vector size, float original_width, float offset, float alpha, float gradientOffset, int gradientType, bool doProject, float range) { float color_ratio, alpha1, alpha2; vector segment_size = size; @@ -1354,10 +1363,13 @@ void StrafeHUD_drawGradient(vector color1, vector color2, vector size, float ori for(int i = 0; i < size.x; ++i) { float ratio, alpha_ratio, combine_ratio1, combine_ratio2, segment_offset; - segment_offset = offset + i; segment_size.x = min(size.x - i, 1); // each gradient segment is 1 unit wide except if there is less than 1 unit of gradient remaining - segment_size.x = StrafeHUD_projectWidth(segment_offset, segment_size.x, range); - segment_offset = StrafeHUD_projectOffset(segment_offset, range); + segment_offset = offset + i; + if(doProject) + { + segment_size.x = StrafeHUD_projectWidth(segment_offset, segment_size.x, range); + segment_offset = StrafeHUD_projectOffset(segment_offset, range); + } ratio = (i + segment_size.x / 2 + gradientOffset) / original_width * (gradientType == STRAFEHUD_GRADIENT_BOTH ? 2 : 1); if(ratio > 1) ratio = 2 - ratio; if(gradientType != STRAFEHUD_GRADIENT_RIGHT) ratio = 1 - ratio; diff --git a/qcsrc/client/hud/panel/strafehud.qh b/qcsrc/client/hud/panel/strafehud.qh index d5a9f6bdd..19959b7f9 100644 --- a/qcsrc/client/hud/panel/strafehud.qh +++ b/qcsrc/client/hud/panel/strafehud.qh @@ -77,7 +77,7 @@ int autocvar_hud_panel_strafehud_projection = 0; void HUD_Panel_DrawStrafeHUD(float, float, float, vector, float, int, int, bool, float); vector StrafeHUD_mixColors(vector, vector, float); -void StrafeHUD_drawGradient(vector, vector, vector, float, float, float, float, int, float); +void StrafeHUD_drawGradient(vector, vector, vector, float, float, float, float, int, bool, float); float GetLengthUnitFactor(int); string GetLengthUnit(int); void StrafeHUD_drawStrafeArrow(vector, float, vector, float, bool, float);