strafe_ratio = (moveangle - absolute_prebestangle) / (absolute_bestangle - absolute_prebestangle);
}
- if(autocvar_hud_panel_strafehud_style == STRAFEHUD_STYLE_GRADIENT || autocvar_hud_panel_strafehud_style == STRAFEHUD_STYLE_SOFT_GRADIENT)
+ if(StrafeHUD_IsGradient(autocvar_hud_panel_strafehud_style))
currentangle_color = StrafeHUD_MixColors(
autocvar_hud_panel_strafehud_angle_neutral_color,
currentangle_color, fabs(strafe_ratio));
autocvar_hud_panel_strafehud_bar_accel_color,
autocvar_hud_panel_strafehud_bar_accel_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_LEFT,
- true, hudangle);
+ hudangle);
if(autocvar_hud_panel_strafehud_bar_preaccel && preaccelzone_offsetangle > 0)
StrafeHUD_DrawStrafeHUD(
autocvar_hud_panel_strafehud_bar_preaccel_color,
autocvar_hud_panel_strafehud_bar_preaccel_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_RIGHT,
- true, hudangle);
+ hudangle);
// draw right acceleration zone
if(accelzone_offsetangle > 0)
autocvar_hud_panel_strafehud_bar_accel_color,
autocvar_hud_panel_strafehud_bar_accel_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_RIGHT,
- true, hudangle);
+ hudangle);
if(autocvar_hud_panel_strafehud_bar_preaccel && preaccelzone_offsetangle > 0)
StrafeHUD_DrawStrafeHUD(
autocvar_hud_panel_strafehud_bar_preaccel_color,
autocvar_hud_panel_strafehud_bar_preaccel_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_LEFT,
- true, hudangle);
+ hudangle);
// draw overturn zone
if(overturn_offsetangle > 0)
autocvar_hud_panel_strafehud_bar_overturn_color,
autocvar_hud_panel_strafehud_bar_overturn_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_BOTH,
- true, hudangle);
+ hudangle);
// draw neutral zone
if(neutral_offsetangle > 0)
autocvar_hud_panel_strafehud_bar_neutral_color,
autocvar_hud_panel_strafehud_bar_neutral_alpha * panel_fg_alpha,
autocvar_hud_panel_strafehud_style, STRAFEHUD_GRADIENT_NONE,
- true, hudangle);
+ hudangle);
}
}
// draw the strafe-o-meter bar
// aligns HUD elements perfectly in the hud area
// also deals with wrapping around on edges, different HUD styles, etc
-void StrafeHUD_DrawStrafeHUD(float startangle, float offsetangle, vector color, float alpha, int type, int gradient_type, bool project_width, float range)
+void StrafeHUD_DrawStrafeHUD(float startangle, float offsetangle, vector color, float alpha, int type, int gradient_type, float range)
{
float offset = StrafeHUD_AngleToOffset(startangle % 360, range);
float width = StrafeHUD_AngleToWidth(offsetangle, range);
float mirror_offset;
float mirror_width;
- if(type == STRAFEHUD_STYLE_SOFT_GRADIENT)
- {
- project_width = true; // must be fully projected for software gradients
- if(gradient_type == STRAFEHUD_GRADIENT_NONE)
- type = STRAFEHUD_STYLE_DRAWFILL;
- }
+ if(StrafeHUD_IsGradient(type) && gradient_type == STRAFEHUD_GRADIENT_NONE)
+ type = STRAFEHUD_STYLE_DRAWFILL;
- if(alpha <= 0 && type != STRAFEHUD_STYLE_GRADIENT && type != STRAFEHUD_STYLE_SOFT_GRADIENT || width <= 0)
+ if(alpha <= 0 && !StrafeHUD_IsGradient(type) || width <= 0)
return;
// how much is hidden by the current hud angle
// the accelerated gradient does the projection later
if(type != STRAFEHUD_STYLE_GRADIENT)
{
- if(project_width && size.x > 0)
+ if(size.x > 0)
size.x = StrafeHUD_ProjectWidth(offset, size.x, range);
offset = StrafeHUD_ProjectOffset(offset, range, false);
// the accelerated gradient does the projection later
if(type != STRAFEHUD_STYLE_GRADIENT)
{
- if(project_width && mirror_size.x > 0)
+ if(mirror_size.x > 0)
mirror_size.x = StrafeHUD_ProjectWidth(mirror_offset, mirror_size.x, range);
mirror_offset = StrafeHUD_ProjectOffset(mirror_offset, range, false);
return pos;
}
+
+bool StrafeHUD_IsGradient(int style)
+{
+ return style == STRAFEHUD_STYLE_GRADIENT || style == STRAFEHUD_STYLE_SOFT_GRADIENT;
+}
#pragma once
#include "../strafehud.qh"
-void StrafeHUD_DrawStrafeHUD(float, float, vector, float, int, int, bool, float);
+void StrafeHUD_DrawStrafeHUD(float, float, vector, float, int, int, float);
void StrafeHUD_DrawGradient(vector, vector, vector, float, float, float, float, int, float);
void StrafeHUD_DrawSoftGradient(vector, vector, vector, float, float, float, float, float, int, float);
void StrafeHUD_DrawStrafeArrow(vector, float, vector, float, bool, float);
void StrafeHUD_DrawTextIndicator(string, float, vector, float, float, vector, float, float);
vector StrafeHUD_CalculateTextIndicatorPosition(vector);
+bool StrafeHUD_IsGradient(int);