From 7932d9ba342b116d020e725fbbc1bcd0891fbdad Mon Sep 17 00:00:00 2001 From: baz Date: Tue, 12 Aug 2025 00:42:03 +0100 Subject: [PATCH] Add Audio Volume slider to Options menu --- .../Options/BP_OptionsMenuWidget.uasset | 4 +-- Source/vampires/Widgets/OptionsMenuWidget.cpp | 32 +++++++++++++++++++ Source/vampires/Widgets/OptionsMenuWidget.h | 16 ++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Content/Widgets/Options/BP_OptionsMenuWidget.uasset b/Content/Widgets/Options/BP_OptionsMenuWidget.uasset index 1673cff..716e302 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:d8167042b65fddd83623fc352cd7e69f98f86735a0312de67843ef77fc9384de -size 67750 +oid sha256:020a5ca34be32fd163afc2a0f5271c533850f5b4133cfb397fe5e17df78cefeb +size 75522 diff --git a/Source/vampires/Widgets/OptionsMenuWidget.cpp b/Source/vampires/Widgets/OptionsMenuWidget.cpp index 7ce21a8..307c232 100644 --- a/Source/vampires/Widgets/OptionsMenuWidget.cpp +++ b/Source/vampires/Widgets/OptionsMenuWidget.cpp @@ -3,12 +3,16 @@ #include "OptionsMenuWidget.h" +#include "AudioMixerDevice.h" #include "Components/Button.h" #include "Components/ComboBoxString.h" #include "GameFramework/GameUserSettings.h" #include "Kismet/GameplayStatics.h" #include "Kismet/KismetSystemLibrary.h" #include "RHI.h" +#include "Components/Slider.h" +#include "Components/TextBlock.h" +#include "Sound/SoundClass.h" void UOptionsMenuWidget::NativeConstruct() { @@ -30,6 +34,9 @@ void UOptionsMenuWidget::NativeConstruct() GenerateRefreshRateOptions(); RefreshRateComboBox->OnSelectionChanged.AddDynamic(this, &UOptionsMenuWidget::OnRefreshRateSelectionChanged); + GenerateAudioLevelOptions(); + MasterAudioSlider->OnValueChanged.AddDynamic(this, &UOptionsMenuWidget::OnAudioLeverValueChanged); + if (ReturnButton) { ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnButtonOnClicked); @@ -138,6 +145,19 @@ void UOptionsMenuWidget::GenerateRefreshRateOptions() } } +void UOptionsMenuWidget::GenerateAudioLevelOptions() +{ + if (MasterSoundClass) + { + float CurrentVolume = FMath::Clamp(MasterSoundClass->Properties.Volume, 0.0f, 1.0f); + + MasterAudioSlider->SetValue(CurrentVolume); + + int AudioLevel = CurrentVolume * 100.0f; + MasterAudioTextBlock->SetText(FText::FromString(FString::FromInt(AudioLevel) + "%")); + } +} + void UOptionsMenuWidget::OnResolutionSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType) { FString Horizontal; @@ -235,6 +255,18 @@ void UOptionsMenuWidget::OnRefreshRateSelectionChanged(FString SelectedItem, ESe GEngine->GameUserSettings->ApplySettings(false); } +void UOptionsMenuWidget::OnAudioLeverValueChanged(float Value) +{ + if (MasterSoundClass) + { + MasterSoundClass->Properties.Volume = FMath::Clamp(Value, 0.0f, 1.0f); + + int AudioLevel = FMath::Clamp(Value, 0.0f, 1.0f) * 100.0f; + + MasterAudioTextBlock->SetText(FText::FromString(FString::FromInt(AudioLevel) + "%")); + } +} + void UOptionsMenuWidget::ReturnButtonOnClicked() { if (MainMenuMenuWidget) diff --git a/Source/vampires/Widgets/OptionsMenuWidget.h b/Source/vampires/Widgets/OptionsMenuWidget.h index be2fbd5..00fee21 100644 --- a/Source/vampires/Widgets/OptionsMenuWidget.h +++ b/Source/vampires/Widgets/OptionsMenuWidget.h @@ -6,6 +6,7 @@ #include "VampireInteractiveWidget.h" #include "OptionsMenuWidget.generated.h" +class USlider; class UComboBoxString; class UButton; /** @@ -33,6 +34,12 @@ class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget UPROPERTY(meta = (BindWidget)) TObjectPtr DynamicResolutionComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr MasterAudioSlider; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr MasterAudioTextBlock; UPROPERTY(meta = (BindWidget)) TObjectPtr ReturnButton; @@ -49,7 +56,11 @@ class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game") TSubclassOf MainMenuMenuWidget; + UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | Sound Settings") + TObjectPtr MasterSoundClass = nullptr; + protected: + UFUNCTION() virtual void NativeConstruct() override; private: @@ -63,6 +74,8 @@ private: void GenerateRefreshRateOptions(); + void GenerateAudioLevelOptions(); + UFUNCTION() void OnResolutionSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType); @@ -81,6 +94,9 @@ private: UFUNCTION() void OnRefreshRateSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType); + UFUNCTION() + void OnAudioLeverValueChanged(float Value); + UFUNCTION() void ReturnButtonOnClicked();