Add HUD fixes

This commit is contained in:
2026-02-11 19:18:25 +01:00
parent ed374e7a20
commit 41cac0e6eb

View File

@@ -30,6 +30,7 @@ static bool g_fix_enabled = false;
static bool g_fov_fix_enabled = false;
static bool g_ultrawide_fix_enabled = false;
static bool g_HUD_fix_enabled = false;
static bool g_HUDHide_fix_enabled = false;
static bool g_Camera_fix_enabled = false;
static bool g_DOF_fix_enabled = false;
static bool g_CA_fix_enabled = false;
@@ -71,7 +72,7 @@ static SafetyHookMid StealthHook{};
static void FOVFixEnabled();
static void UltraWideFixEnabled();
static void HUDFixEnabled();
static void LogHUD();
static void LogHUD(GameFixes fix);
static void DOFFixEnabled();
static void CAFixEnabled();
static void VignettingFixEnabled();
@@ -142,7 +143,8 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init) {
if (!init && ConstrainAspectRatioaddress) UltraWideFixEnabled();
if (!init) {
HUDFixEnabled();
LogHUD();
LogHUD(GameFixes::HUD);
LogHUD(GameFixes::HUDHide);
}
if (!init && DOFaddress) DOFFixEnabled();
if (!init && CAaddress) CAFixEnabled();
@@ -165,7 +167,8 @@ extern "C" __declspec(dllexport) void SetFixesEnabled(GameFixes fix, bool enable
if (fix == GameFixes::ChromaticAberrations) { g_CA_fix_enabled = enabled; CAFixEnabled(); }
if (fix == GameFixes::Vignetting) { g_Vignetting_fix_enabled = enabled; VignettingFixEnabled(); }
if (fix == GameFixes::Fog) { g_Fog_fix_enabled = enabled; FogFixEnabled(); }
if (fix == GameFixes::HUD) { g_HUD_fix_enabled = enabled; HUDFixEnabled(); LogHUD(); }
if (fix == GameFixes::HUD) { g_HUD_fix_enabled = enabled; HUDFixEnabled(); LogHUD(GameFixes::HUD); }
if (fix == GameFixes::HUDHide) { g_HUDHide_fix_enabled = enabled; HUDFixEnabled(); LogHUD(GameFixes::HUDHide); }
if (fix == GameFixes::TimeDilation) { g_TimeDilation_fix_enabled = enabled; EnableCheats(Cheat::TimeDilation); }
if (fix == GameFixes::GodMode) { g_GodMode_fix_enabled = enabled; EnableCheats(Cheat::GodMode); }
if (fix == GameFixes::Stealth) { g_Stealth_fix_enabled = enabled; EnableCheats(Cheat::Stealth); }
@@ -204,11 +207,12 @@ static void ProcessEvent() {
std::string funcName = func->GetName();
std::string objectName = object->GetName();
if (object->Class->GetName().contains("UPL_LocationAlongArm")) {
logger->debug("{} {}", object->Class->GetName(), funcName);
}
if (!objectName.contains("WBP_InGameHUDLayout_C")) return;
UWBP_InGameHUDLayout_C* hudWidget = static_cast<UWBP_InGameHUDLayout_C*>(object);
if (!hudWidget) return;
ULocalPlayer* lp = nullptr;
UGameViewportClient* viewport = lp->ViewportClient;
if (funcName == "Construct") {
HUDLayout = hudWidget;
g_GameReady = true;
@@ -233,10 +237,18 @@ FMargin initialHints = {};
static bool g_offsetsInitialized = false;
static void HUDFixEnabled() {
if (!HUDLayout) return;
// Hide or show HUD
HUDLayout->Currency->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->PlayerHealth->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->PlayerInfo->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->Objectives->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->GameActionBar->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->Hints->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
HUDLayout->BossHealthBar->SetVisibility(g_HUDHide_fix_enabled ? ESlateVisibility::Collapsed : ESlateVisibility::Visible);
if (g_HUDHide_fix_enabled) return;
auto ApplyOrGetOffset = [](UUIExtensionPointWidget* widget, float left = 0, float right = 0) -> FMargin {
if (!widget || !widget->Slot) return FMargin();
// Browse up to CanvasPanelSlot
UWidget* current = widget;
while (current) {
@@ -271,7 +283,7 @@ static void HUDFixEnabled() {
ApplyOrGetOffset(HUDLayout->PlayerInfo, g_HUDOffsets);
ApplyOrGetOffset(HUDLayout->Objectives, g_HUDOffsets);
ApplyOrGetOffset(HUDLayout->GameActionBar, g_HUDOffsets);
ApplyOrGetOffset(HUDLayout->Hints, g_HUDOffsets);
ApplyOrGetOffset(HUDLayout->Hints, initialGameActionBar.Left - g_HUDOffsets);
}
else { // Restore HUD position
ApplyOrGetOffset(HUDLayout->Currency, initialCurrency.Left);
@@ -284,9 +296,9 @@ static void HUDFixEnabled() {
}
}
static void LogHUD() { // Log toggle state
if (g_HUD_fix_enabled) logger->info("HUD fix enabled");
else logger->info("HUD fix disabled");
static void LogHUD(GameFixes fix) { // Log toggle state
if (fix == GameFixes::HUD) logger->info("HUD fix {}", g_HUD_fix_enabled ? "enabled" : "disabled");
if (fix == GameFixes::HUDHide) logger->info("HUD hide fix {}", g_HUDHide_fix_enabled ? "enabled" : "disabled");
}
static void FOVFixEnabled() {