Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/cvars.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@
|sar_give_fly|cmd|sar_give_fly [n] - gives the player in slot n (0 by default) preserved crouchfly.|
|sar_groundframes_reset|cmd|sar_groundframes_reset - reset recorded groundframe statistics.|
|sar_groundframes_total|cmd|sar_groundframes_total [slot] - output a summary of groundframe counts for the given player slot.|
|sar_hud_align|0|Alignment of HUD. (0 = left, 1 = center, 2 = right).|
|sar_hud_angles|0|Draws absolute view angles of the client.<br>0 = Default,<br>1 = XY,<br>2 = XYZ,<br>3 = X,<br>4 = Y.|
|sar_hud_avg|0|Draws calculated average of timer.|
|sar_hud_bg|0|Enable the SAR HUD background.|
Expand Down
28 changes: 11 additions & 17 deletions src/Features/Hud/Hud.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Variable sar_hud_x("sar_hud_x", "2", 0, "X padding of HUD.\n", FCVAR_DONTRECORD)
Variable sar_hud_y("sar_hud_y", "2", 0, "Y padding of HUD.\n", FCVAR_DONTRECORD);
Variable sar_hud_font_index("sar_hud_font_index", "0", 0, "Font index of HUD.\n", FCVAR_DONTRECORD);
Variable sar_hud_font_color("sar_hud_font_color", "255 255 255 255", "RGBA font color of HUD.\n", FCVAR_DONTRECORD);
Variable sar_hud_align("sar_hud_align", "0", 0, "Alignment of HUD. (0 = left, 1 = center, 2 = right).\n", FCVAR_DONTRECORD);

Variable sar_hud_precision("sar_hud_precision", "2", 0, "Precision of HUD numbers.\n");
Variable sar_hud_velocity_precision("sar_hud_velocity_precision", "2", 0, "Precision of velocity HUD numbers.\n");
Expand Down Expand Up @@ -204,26 +205,15 @@ void HudContext::DrawElement(const char *fmt, ...) {
if (colon) strcpy(data, colon + 2);
}

surface->DrawTxt(font, this->xPadding, this->yPadding + this->elements * (this->fontSize + this->spacing), this->textColor, data);

++this->elements;

int align = sar_hud_align.GetInt();
int width = surface->GetFontLength(this->font, "%s", data);
if (width > this->maxWidth) this->maxWidth = width;
}
void HudContext::DrawElementOnScreen(const int groupID, const float xPos, const float yPos, const char *fmt, ...) {
va_list argptr;
va_start(argptr, fmt);
char data[128];
vsnprintf(data, sizeof(data), fmt, argptr);
va_end(argptr);
int offset = !align ? 0 : align == 1 ? width / 2 : width;

int pixLength = surface->GetFontLength(this->font, "%s", data);

surface->DrawTxt(font, xPos - pixLength / 2, yPos + this->group[groupID] * (this->fontSize + this->spacing), this->textColor, data);
surface->DrawTxt(font, this->xPadding - offset, this->yPadding + this->elements * (this->fontSize + this->spacing), this->textColor, data);

++this->elements;

++this->group[groupID];
if (width > this->maxWidth) this->maxWidth = width;
}

void HudContext::Reset(int slot) {
Expand Down Expand Up @@ -414,11 +404,15 @@ HUD_ELEMENT2_NO_DISABLE(text, HudType_InGame | HudType_Paused | HudType_Menu | H
for (auto &t : sar_hud_text_vals) {
int x = ctx->xPadding;
int y = ctx->yPadding + ctx->elements * (ctx->fontSize + ctx->spacing);
int totalPixLen = 0;
for (auto &c : t.second.components) totalPixLen += surface->GetFontLength(ctx->font, "%s", c.text.c_str());
int align = sar_hud_align.GetInt();
int offset = !align ? 0 : align == 1 ? totalPixLen / 2 : totalPixLen;
if (t.second.draw) {
for (auto &c : t.second.components) {
Color color = c.color ? *c.color : t.second.defaultColor ? *t.second.defaultColor : ctx->textColor;
int pixLen = surface->GetFontLength(ctx->font, "%s", c.text.c_str());
surface->DrawTxt(ctx->font, x, y, color, "%s", c.text.c_str());
surface->DrawTxt(ctx->font, x - offset, y, color, "%s", c.text.c_str());
x += pixLen;
}

Expand Down
2 changes: 1 addition & 1 deletion src/Features/Hud/Hud.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ class HudContext {

public:
void DrawElement(const char *fmt, ...);
void DrawElementOnScreen(const int nbElement, const float xPos, const float yPos, const char *fmt, ...);
void Reset(int slot);
};

Expand Down Expand Up @@ -170,6 +169,7 @@ extern Variable sar_hud_font_index;
extern Variable sar_hud_font_color;
extern Variable sar_hud_precision;
extern Variable sar_hud_shorthand;
extern Variable sar_hud_align;
extern QAngle g_bluePortalAngles[2];
extern QAngle g_orangePortalAngles[2];
extern bool g_hudPrecisionWarn;
Expand Down
1 change: 1 addition & 0 deletions src/Modules/MaterialSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ void MaterialSystem::Shutdown() {
RenderContextShutdown();
RenderContextInit();
}
SAFE_DELETE(g_renderContextPatch);
}
IMaterial *MaterialSystem::FindMaterial(const char *materialName, const char *textureGroupName) {
auto func = (IMaterial *(__rescall *)(void *, const char *, const char *, bool, const char *))this->materials->Current(Offsets::FindMaterial);
Expand Down
5 changes: 4 additions & 1 deletion src/Modules/VGui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ static void DrawHudBackground(int slot, HudContext &ctx) {

if (width != 0) width += 4;

int x = ctx.xPadding - 2;
int align = sar_hud_align.GetInt();
int offset = !align ? 2 : align == 1 ? width / 2 : width - 3;

int x = ctx.xPadding - offset;
int y = ctx.yPadding - 2;

surface->DrawRect(Color{0, 0, 0, 192}, x, y, x + width, y + height);
Expand Down