Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
draw_core.qc File Reference
#include "draw_core.qh"
#include <client/draw.qh>
Include dependency graph for draw_core.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void StrafeHUD_DrawAngleIndicator (float angle, vector line_size, float arrow_size, int num_dashes, bool has_top_arrow, bool has_bottom_arrow, vector color, float alpha, float hudangle)
void StrafeHUD_DrawAngleIndicatorArrow (float size, float offset, vector line_size, vector color, float alpha, bool top)
void StrafeHUD_DrawAngleIndicatorLine (vector size, float offset, int num_dashes, vector color, float alpha)
void StrafeHUD_DrawDirectionIndicator (int direction, bool opposite_direction, bool fwd)
void StrafeHUD_DrawStrafeMeter (float shiftangle, float wishangle, float absolute_bestangle, float absolute_prebestangle, float absolute_overturnangle, bool moving, float hudangle)

Function Documentation

◆ StrafeHUD_DrawAngleIndicator()

void StrafeHUD_DrawAngleIndicator ( float angle,
vector line_size,
float arrow_size,
int num_dashes,
bool has_top_arrow,
bool has_bottom_arrow,
vector color,
float alpha,
float hudangle )

Definition at line 140 of file draw_core.qc.

143{
144 if (alpha <= 0)
145 return;
146
147 // bound to HUD area
148 angle = bound(hudangle * -0.5, angle, hudangle * 0.5);
149
150 float offset = StrafeHUD_AngleToOffset(angle, hudangle);
151 offset = StrafeHUD_ProjectOffset(offset, hudangle, false);
152
153 StrafeHUD_DrawAngleIndicatorLine(line_size, offset, num_dashes, color, alpha);
154
155 if (has_top_arrow)
156 StrafeHUD_DrawAngleIndicatorArrow(arrow_size, offset, line_size, color, alpha, true);
157
158 if (has_bottom_arrow)
159 StrafeHUD_DrawAngleIndicatorArrow(arrow_size, offset, line_size, color, alpha, false);
160}
float StrafeHUD_AngleToOffset(float angle, float range)
Definition util.qc:18
float StrafeHUD_ProjectOffset(float offset, float range, bool reverse)
Definition util.qc:61
float alpha
Definition items.qc:13
void StrafeHUD_DrawAngleIndicatorLine(vector size, float offset, int num_dashes, vector color, float alpha)
Definition draw_core.qc:163
void StrafeHUD_DrawAngleIndicatorArrow(float size, float offset, vector line_size, vector color, float alpha, bool top)
Definition draw_core.qc:184
vector color
Definition dynlight.qc:15
float angle
Definition viewloc.qc:114
float bound(float min, float value, float max)

References alpha, angle, bound(), color, StrafeHUD_AngleToOffset(), StrafeHUD_DrawAngleIndicatorArrow(), StrafeHUD_DrawAngleIndicatorLine(), StrafeHUD_ProjectOffset(), and vector.

Referenced by HUD_StrafeHUD().

◆ StrafeHUD_DrawAngleIndicatorArrow()

void StrafeHUD_DrawAngleIndicatorArrow ( float size,
float offset,
vector line_size,
vector color,
float alpha,
bool top )

Definition at line 184 of file draw_core.qc.

185{
186 if (size <= 0)
187 return;
188
189 if (top)
191 panel_pos + eY * ((panel_size.y - line_size.y) * 0.5) + eX * offset,
192 size, color, alpha * panel_fg_alpha, true, line_size.x);
193 else
195 panel_pos + eY * ((panel_size.y - line_size.y) * 0.5 + line_size.y) + eX * offset,
196 size, color, alpha * panel_fg_alpha, false, line_size.x);
197}
void StrafeHUD_DrawStrafeArrow(vector origin, float size, vector color, float alpha, bool flipped, float connection_width)
Definition draw.qc:284
vector size
vector panel_size
Definition hud.qh:163
float panel_fg_alpha
Definition hud.qh:169
vector panel_pos
Definition hud.qh:162
const vector eY
Definition vector.qh:45
const vector eX
Definition vector.qh:44

References alpha, color, eX, eY, panel_fg_alpha, panel_pos, panel_size, size, StrafeHUD_DrawStrafeArrow(), and vector.

Referenced by StrafeHUD_DrawAngleIndicator().

◆ StrafeHUD_DrawAngleIndicatorLine()

void StrafeHUD_DrawAngleIndicatorLine ( vector size,
float offset,
int num_dashes,
vector color,
float alpha )

Definition at line 163 of file draw_core.qc.

164{
165 if (num_dashes <= 0 || size.x <= 0 || size.y <= 0)
166 return;
167
168 vector segment_size = size;
169 segment_size.y = size.y / (bound(1, num_dashes, size.y) * 2 - 1);
170
171 for (float i = 0; i < size.y; i += segment_size.y * 2)
172 {
173 // check if last iteration
174 if (i + segment_size.y * 2 >= size.y)
175 segment_size.y = size.y - i;
176
177 drawfill(
178 panel_pos - eY * ((size.y - panel_size.y) * 0.5 - i) + eX * (offset - segment_size.x * 0.5),
179 segment_size, color, alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
180 }
181}
#define drawfill(position, size, rgb, alpha, flag)
Definition draw.qh:36
const float DRAWFLAG_NORMAL
vector
Definition self.qh:92

References alpha, bound(), color, drawfill, DRAWFLAG_NORMAL, eX, eY, panel_fg_alpha, panel_pos, panel_size, size, and vector.

Referenced by StrafeHUD_DrawAngleIndicator().

◆ StrafeHUD_DrawDirectionIndicator()

void StrafeHUD_DrawDirectionIndicator ( int direction,
bool opposite_direction,
bool fwd )

Definition at line 200 of file draw_core.qc.

201{
202 vector direction_size_vertical;
203 direction_size_vertical.x = max(panel_size.y * min(autocvar_hud_panel_strafehud_direction_width, 1), 1);
204 direction_size_vertical.y = panel_size.y + direction_size_vertical.x * 2;
205 direction_size_vertical.z = 0;
206
207 vector direction_size_horizontal;
208 direction_size_horizontal.x = panel_size.x * min(autocvar_hud_panel_strafehud_direction_length, 0.5);
209 direction_size_horizontal.y = direction_size_vertical.x;
210 direction_size_horizontal.z = 0;
211
212 if (direction != STRAFEHUD_DIRECTION_NONE
213 && direction_size_vertical.x > 0
215 {
216 bool indicator_direction = direction == STRAFEHUD_DIRECTION_LEFT;
217
218 // invert left/right when strafing backwards or when strafing towards the opposite side indicated by the direction variable
219 // if both conditions are true then it's inverted twice hence not inverted at all
220 if (!fwd != opposite_direction)
221 indicator_direction = !indicator_direction;
222
223 // draw the direction indicator caps at the sides of the hud
224 // vertical line
225 if (direction_size_vertical.y > 0)
226 drawfill(
227 panel_pos - eY * direction_size_horizontal.y + eX * (indicator_direction ? -direction_size_vertical.x : panel_size.x),
228 direction_size_vertical, autocvar_hud_panel_strafehud_direction_color,
231
232 // top horizontal line
233 drawfill(
234 panel_pos + eX * (indicator_direction ? 0 : panel_size.x - direction_size_horizontal.x) - eY * direction_size_horizontal.y,
235 direction_size_horizontal, autocvar_hud_panel_strafehud_direction_color,
238
239 // bottom horizontal line
240 drawfill(
241 panel_pos + eX * (indicator_direction ? 0 : panel_size.x - direction_size_horizontal.x) + eY * panel_size.y,
242 direction_size_horizontal, autocvar_hud_panel_strafehud_direction_color,
245 }
246}
float min(float f,...)
float max(float f,...)
float autocvar_hud_panel_strafehud_direction_width
Definition strafehud.qh:72
float autocvar_hud_panel_strafehud_direction_alpha
Definition strafehud.qh:71
float autocvar_hud_panel_strafehud_direction_length
Definition strafehud.qh:73
vector autocvar_hud_panel_strafehud_direction_color
Definition strafehud.qh:70
const int STRAFEHUD_DIRECTION_LEFT
Definition strafehud.qh:123
const int STRAFEHUD_DIRECTION_NONE
Definition strafehud.qh:122

References autocvar_hud_panel_strafehud_direction_alpha, autocvar_hud_panel_strafehud_direction_color, autocvar_hud_panel_strafehud_direction_length, autocvar_hud_panel_strafehud_direction_width, drawfill, DRAWFLAG_NORMAL, eX, eY, max(), min(), panel_fg_alpha, panel_pos, panel_size, STRAFEHUD_DIRECTION_LEFT, STRAFEHUD_DIRECTION_NONE, and vector.

Referenced by HUD_StrafeHUD().

◆ StrafeHUD_DrawStrafeMeter()

void StrafeHUD_DrawStrafeMeter ( float shiftangle,
float wishangle,
float absolute_bestangle,
float absolute_prebestangle,
float absolute_overturnangle,
bool moving,
float hudangle )

Definition at line 5 of file draw_core.qc.

9{
10 // the neutral zone fills the whole strafe bar
11 if (!moving)
12 {
13 // draw neutral zone
15 {
17 {
18 default:
25 break;
26
29 panel_pos, panel_size, "progressbar", 1, 0, 0,
33 break;
34 }
35 }
36 }
37 else
38 {
39 // calculate various zones of the strafe-o-meter
40 float accelzone_left_startangle;
41 float accelzone_right_startangle;
42 float preaccelzone_left_startangle;
43 float preaccelzone_right_startangle;
44 float neutral_startangle;
45 float overturn_startangle;
46
47 float accelzone_offsetangle = absolute_overturnangle - absolute_bestangle;
48 float preaccelzone_offsetangle = fabs(absolute_bestangle - absolute_prebestangle);
49 float neutral_offsetangle = 360;
50 float overturn_offsetangle = 360 - absolute_overturnangle * 2;
51
53 preaccelzone_offsetangle = 0;
54
55 // assign starting angles and shift the current offset for every element
56 float current_startangle = 0;
57
58 preaccelzone_right_startangle = current_startangle;
59 current_startangle += preaccelzone_offsetangle;
60
61 accelzone_right_startangle = current_startangle;
62 current_startangle += accelzone_offsetangle;
63
64 overturn_startangle = current_startangle;
65 current_startangle += overturn_offsetangle;
66
67 accelzone_left_startangle = current_startangle;
68 current_startangle += accelzone_offsetangle;
69
70 preaccelzone_left_startangle = current_startangle;
71 current_startangle += preaccelzone_offsetangle;
72
73 neutral_startangle = current_startangle;
74 neutral_offsetangle = 360 - current_startangle;
75
76 // calculate how far off-center the strafe zones currently are
77 shiftangle += neutral_offsetangle * 0.5 - wishangle;
78
79 // shift strafe zones into correct place
80 neutral_startangle += shiftangle;
81 accelzone_left_startangle += shiftangle;
82 accelzone_right_startangle += shiftangle;
83 preaccelzone_left_startangle += shiftangle;
84 preaccelzone_right_startangle += shiftangle;
85 overturn_startangle += shiftangle;
86
87 // draw left acceleration zone
88 if (accelzone_offsetangle > 0)
90 accelzone_left_startangle, accelzone_offsetangle,
94 hudangle);
95 if (autocvar_hud_panel_strafehud_bar_preaccel && preaccelzone_offsetangle > 0)
97 preaccelzone_left_startangle, preaccelzone_offsetangle,
101 hudangle);
102
103 // draw right acceleration zone
104 if (accelzone_offsetangle > 0)
106 accelzone_right_startangle, accelzone_offsetangle,
110 hudangle);
111 if (autocvar_hud_panel_strafehud_bar_preaccel && preaccelzone_offsetangle > 0)
113 preaccelzone_right_startangle, preaccelzone_offsetangle,
117 hudangle);
118
119 // draw overturn zone
120 if (overturn_offsetangle > 0)
122 overturn_startangle, overturn_offsetangle,
126 hudangle);
127
128 // draw neutral zone
129 if (neutral_offsetangle > 0)
131 neutral_startangle, neutral_offsetangle,
135 hudangle);
136 }
137}
void StrafeHUD_DrawStrafeHUD(float startangle, float offsetangle, vector color, float alpha, int type, int gradient_type, float range)
Definition draw.qc:8
void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float length_ratio, bool vertical, float baralign, vector theColor, float theAlpha, int drawflag)
Definition hud.qc:269
float fabs(float f)
vector autocvar_hud_panel_strafehud_bar_overturn_color
Definition strafehud.qh:28
float autocvar_hud_panel_strafehud_bar_overturn_alpha
Definition strafehud.qh:29
const int STRAFEHUD_GRADIENT_RIGHT
Definition strafehud.qh:147
float autocvar_hud_panel_strafehud_bar_preaccel_alpha
Definition strafehud.qh:23
const int STRAFEHUD_GRADIENT_NONE
Definition strafehud.qh:145
float autocvar_hud_panel_strafehud_bar_neutral_alpha
Definition strafehud.qh:25
const int STRAFEHUD_GRADIENT_BOTH
Definition strafehud.qh:148
const int STRAFEHUD_STYLE_DRAWFILL
Definition strafehud.qh:140
const int STRAFEHUD_GRADIENT_LEFT
Definition strafehud.qh:146
int autocvar_hud_panel_strafehud_style
Definition strafehud.qh:11
vector autocvar_hud_panel_strafehud_bar_neutral_color
Definition strafehud.qh:24
bool autocvar_hud_panel_strafehud_bar_preaccel
Definition strafehud.qh:21
const int STRAFEHUD_STYLE_PROGRESSBAR
Definition strafehud.qh:141
vector autocvar_hud_panel_strafehud_bar_preaccel_color
Definition strafehud.qh:22
float autocvar_hud_panel_strafehud_bar_accel_alpha
Definition strafehud.qh:27
vector autocvar_hud_panel_strafehud_bar_accel_color
Definition strafehud.qh:26

References autocvar_hud_panel_strafehud_bar_accel_alpha, autocvar_hud_panel_strafehud_bar_accel_color, autocvar_hud_panel_strafehud_bar_neutral_alpha, autocvar_hud_panel_strafehud_bar_neutral_color, autocvar_hud_panel_strafehud_bar_overturn_alpha, autocvar_hud_panel_strafehud_bar_overturn_color, autocvar_hud_panel_strafehud_bar_preaccel, autocvar_hud_panel_strafehud_bar_preaccel_alpha, autocvar_hud_panel_strafehud_bar_preaccel_color, autocvar_hud_panel_strafehud_style, drawfill, DRAWFLAG_NORMAL, fabs(), HUD_Panel_DrawProgressBar(), panel_fg_alpha, panel_pos, panel_size, StrafeHUD_DrawStrafeHUD(), STRAFEHUD_GRADIENT_BOTH, STRAFEHUD_GRADIENT_LEFT, STRAFEHUD_GRADIENT_NONE, STRAFEHUD_GRADIENT_RIGHT, STRAFEHUD_STYLE_DRAWFILL, and STRAFEHUD_STYLE_PROGRESSBAR.

Referenced by HUD_StrafeHUD().