diff --git a/docs/cvars.md b/docs/cvars.md index 46f98ba8..476cdea0 100644 --- a/docs/cvars.md +++ b/docs/cvars.md @@ -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.
0 = Default,
1 = XY,
2 = XYZ,
3 = X,
4 = Y.| |sar_hud_avg|0|Draws calculated average of timer.| |sar_hud_bg|0|Enable the SAR HUD background.| diff --git a/src/Features/Hud/Hud.cpp b/src/Features/Hud/Hud.cpp index 442e71f8..68fa3706 100644 --- a/src/Features/Hud/Hud.cpp +++ b/src/Features/Hud/Hud.cpp @@ -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"); @@ -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) { @@ -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; } diff --git a/src/Features/Hud/Hud.hpp b/src/Features/Hud/Hud.hpp index a88f0bc0..0163f00c 100644 --- a/src/Features/Hud/Hud.hpp +++ b/src/Features/Hud/Hud.hpp @@ -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); }; @@ -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; diff --git a/src/Modules/MaterialSystem.cpp b/src/Modules/MaterialSystem.cpp index c68e7089..daf7275c 100644 --- a/src/Modules/MaterialSystem.cpp +++ b/src/Modules/MaterialSystem.cpp @@ -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); diff --git a/src/Modules/VGui.cpp b/src/Modules/VGui.cpp index 0f36cb0f..da07f1cd 100644 --- a/src/Modules/VGui.cpp +++ b/src/Modules/VGui.cpp @@ -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);