From 544b2387395eaa9ce052d33eff5d941194e52895 Mon Sep 17 00:00:00 2001 From: baz Date: Fri, 15 Aug 2025 02:55:56 +0100 Subject: [PATCH] Implement Reset To Defaults button --- .../Options/BP_OptionsMenuWidget.uasset | 4 +- Source/vampires/Widgets/OptionsMenuWidget.cpp | 83 +++++++++++++++++-- Source/vampires/Widgets/OptionsMenuWidget.h | 11 +++ 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/Content/Widgets/Options/BP_OptionsMenuWidget.uasset b/Content/Widgets/Options/BP_OptionsMenuWidget.uasset index 716e302..6cdc39b 100644 --- a/Content/Widgets/Options/BP_OptionsMenuWidget.uasset +++ b/Content/Widgets/Options/BP_OptionsMenuWidget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:020a5ca34be32fd163afc2a0f5271c533850f5b4133cfb397fe5e17df78cefeb -size 75522 +oid sha256:5359c9e0e496124e2fe5934bd5c83af4e13f3a018c9e04b038e2eda5591f18e5 +size 54100 diff --git a/Source/vampires/Widgets/OptionsMenuWidget.cpp b/Source/vampires/Widgets/OptionsMenuWidget.cpp index 307c232..5486f56 100644 --- a/Source/vampires/Widgets/OptionsMenuWidget.cpp +++ b/Source/vampires/Widgets/OptionsMenuWidget.cpp @@ -3,7 +3,6 @@ #include "OptionsMenuWidget.h" -#include "AudioMixerDevice.h" #include "Components/Button.h" #include "Components/ComboBoxString.h" #include "GameFramework/GameUserSettings.h" @@ -37,6 +36,18 @@ void UOptionsMenuWidget::NativeConstruct() GenerateAudioLevelOptions(); MasterAudioSlider->OnValueChanged.AddDynamic(this, &UOptionsMenuWidget::OnAudioLeverValueChanged); + if (ResetToDefaultsButton) + { + ResetToDefaultsButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ResetToDefaultsOnClicked); + ResetToDefaultsButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayClickedSound); + + ResetToDefaultsButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayHoveredSound); + ResetToDefaultsButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ResetToDefaultsTextBlockHoveredDelegate); + + ResetToDefaultsButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ResetToDefaultsTextBlockUnhoveredDelegate); + ResetToDefaultsButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayUnhoveredSound); + } + if (ReturnButton) { ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnButtonOnClicked); @@ -117,15 +128,10 @@ void UOptionsMenuWidget::GenerateRefreshRateOptions() { RefreshRateComboBox->ClearOptions(); - FScreenResolutionArray ScreenResolutions; - RHIGetAvailableResolutions(ScreenResolutions, false); TArray RefreshRates; - for (FScreenResolutionRHI ScreenResolution : ScreenResolutions) - { - RefreshRates.AddUnique(ScreenResolution.RefreshRate); - } - - RefreshRates.Sort(); + + GetListOfUniqueRefreshRates(RefreshRates); + for (uint32 RefreshRate : RefreshRates) { RefreshRateComboBox->AddOption(FString::FromInt(RefreshRate)); @@ -267,6 +273,53 @@ void UOptionsMenuWidget::OnAudioLeverValueChanged(float Value) } } +void UOptionsMenuWidget::ResetToDefaultsOnClicked() +{ + // Set Resolution to Monitor Res + TArray Resolutions; + UKismetSystemLibrary::GetSupportedFullscreenResolutions(Resolutions); + + if (Resolutions.Num() > 0) + { + GEngine->GameUserSettings->SetScreenResolution(Resolutions.Last()); + FString ResolutionString = FString::FromInt(Resolutions.Last().X) + "x" + FString::FromInt(Resolutions.Last().Y); + ResolutionComboBox->SetSelectedOption(ResolutionString); + } + else + { + // Fallback to 1080p + GEngine->GameUserSettings->SetScreenResolution({1920, 1080}); + FString ResolutionString = FString::FromInt(1920) + "x" + FString::FromInt(1080); + ResolutionComboBox->SetSelectedOption(ResolutionString); + } + + // Set Fullscreen + GEngine->GameUserSettings->SetFullscreenMode(EWindowMode::Fullscreen); + WindowTypeComboBox->SetSelectedOption(LexToString(GEngine->GameUserSettings->GetFullscreenMode())); + + // Set Dynamic Resolution on + GEngine->GameUserSettings->SetDynamicResolutionEnabled(true); + DynamicResolutionComboBox->SetSelectedOption("Enabled"); + + // Set VSync Off + GEngine->GameUserSettings->SetVSyncEnabled(false); + VsyncComboBox->SetSelectedOption("Disabled"); + + // Set Refresh rate to monitor refresh rate + TArray RefreshRates; + GetListOfUniqueRefreshRates(RefreshRates); + GEngine->GameUserSettings->SetFrameRateLimit(RefreshRates.Last()); + RefreshRateComboBox->SetSelectedOption(FString::FromInt(RefreshRates.Last())); + + // Set Audio Volume to 50% + MasterSoundClass->Properties.Volume = 0.5f; + MasterAudioTextBlock->SetText(FText::FromString(FString::FromInt(50) + "%")); + MasterAudioSlider->SetValue(0.5f); + + // Save Settings + GEngine->GameUserSettings->ApplySettings(false); +} + void UOptionsMenuWidget::ReturnButtonOnClicked() { if (MainMenuMenuWidget) @@ -282,3 +335,15 @@ void UOptionsMenuWidget::ReturnButtonOnClicked() } } } + +void UOptionsMenuWidget::GetListOfUniqueRefreshRates(TArray& RefreshRates) +{ + FScreenResolutionArray ScreenResolutions; + RHIGetAvailableResolutions(ScreenResolutions, false); + for (FScreenResolutionRHI ScreenResolution : ScreenResolutions) + { + RefreshRates.AddUnique(ScreenResolution.RefreshRate); + } + + RefreshRates.Sort(); +} diff --git a/Source/vampires/Widgets/OptionsMenuWidget.h b/Source/vampires/Widgets/OptionsMenuWidget.h index 00fee21..059d50c 100644 --- a/Source/vampires/Widgets/OptionsMenuWidget.h +++ b/Source/vampires/Widgets/OptionsMenuWidget.h @@ -97,12 +97,23 @@ private: UFUNCTION() void OnAudioLeverValueChanged(float Value); + UFUNCTION() + void ResetToDefaultsOnClicked(); + UFUNCTION() void ReturnButtonOnClicked(); + UFUNCTION() + void ResetToDefaultsTextBlockHoveredDelegate() { SetTextBlockHovered(ResetToDefaultsBlock); } + + UFUNCTION() + void ResetToDefaultsTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(ResetToDefaultsBlock); } + UFUNCTION() void ReturnTextBlockHoveredDelegate() { SetTextBlockHovered(ReturnBlock); } UFUNCTION() void ReturnTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(ReturnBlock); } + + void GetListOfUniqueRefreshRates(TArray& RefreshRates); };