Add Audio Volume slider to Options menu

This commit is contained in:
baz 2025-08-12 00:42:03 +01:00
parent b369bed850
commit 7932d9ba34
3 changed files with 50 additions and 2 deletions

Binary file not shown.

View File

@ -3,12 +3,16 @@
#include "OptionsMenuWidget.h" #include "OptionsMenuWidget.h"
#include "AudioMixerDevice.h"
#include "Components/Button.h" #include "Components/Button.h"
#include "Components/ComboBoxString.h" #include "Components/ComboBoxString.h"
#include "GameFramework/GameUserSettings.h" #include "GameFramework/GameUserSettings.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "Kismet/KismetSystemLibrary.h" #include "Kismet/KismetSystemLibrary.h"
#include "RHI.h" #include "RHI.h"
#include "Components/Slider.h"
#include "Components/TextBlock.h"
#include "Sound/SoundClass.h"
void UOptionsMenuWidget::NativeConstruct() void UOptionsMenuWidget::NativeConstruct()
{ {
@ -30,6 +34,9 @@ void UOptionsMenuWidget::NativeConstruct()
GenerateRefreshRateOptions(); GenerateRefreshRateOptions();
RefreshRateComboBox->OnSelectionChanged.AddDynamic(this, &UOptionsMenuWidget::OnRefreshRateSelectionChanged); RefreshRateComboBox->OnSelectionChanged.AddDynamic(this, &UOptionsMenuWidget::OnRefreshRateSelectionChanged);
GenerateAudioLevelOptions();
MasterAudioSlider->OnValueChanged.AddDynamic(this, &UOptionsMenuWidget::OnAudioLeverValueChanged);
if (ReturnButton) if (ReturnButton)
{ {
ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnButtonOnClicked); 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) void UOptionsMenuWidget::OnResolutionSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType)
{ {
FString Horizontal; FString Horizontal;
@ -235,6 +255,18 @@ void UOptionsMenuWidget::OnRefreshRateSelectionChanged(FString SelectedItem, ESe
GEngine->GameUserSettings->ApplySettings(false); 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() void UOptionsMenuWidget::ReturnButtonOnClicked()
{ {
if (MainMenuMenuWidget) if (MainMenuMenuWidget)

View File

@ -6,6 +6,7 @@
#include "VampireInteractiveWidget.h" #include "VampireInteractiveWidget.h"
#include "OptionsMenuWidget.generated.h" #include "OptionsMenuWidget.generated.h"
class USlider;
class UComboBoxString; class UComboBoxString;
class UButton; class UButton;
/** /**
@ -34,6 +35,12 @@ class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
TObjectPtr<UComboBoxString> DynamicResolutionComboBox; TObjectPtr<UComboBoxString> DynamicResolutionComboBox;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USlider> MasterAudioSlider;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> MasterAudioTextBlock;
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> ReturnButton; TObjectPtr<UButton> ReturnButton;
@ -49,7 +56,11 @@ class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game") UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game")
TSubclassOf<UUserWidget> MainMenuMenuWidget; TSubclassOf<UUserWidget> MainMenuMenuWidget;
UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | Sound Settings")
TObjectPtr<USoundClass> MasterSoundClass = nullptr;
protected: protected:
UFUNCTION()
virtual void NativeConstruct() override; virtual void NativeConstruct() override;
private: private:
@ -63,6 +74,8 @@ private:
void GenerateRefreshRateOptions(); void GenerateRefreshRateOptions();
void GenerateAudioLevelOptions();
UFUNCTION() UFUNCTION()
void OnResolutionSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType); void OnResolutionSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType);
@ -81,6 +94,9 @@ private:
UFUNCTION() UFUNCTION()
void OnRefreshRateSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType); void OnRefreshRateSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType);
UFUNCTION()
void OnAudioLeverValueChanged(float Value);
UFUNCTION() UFUNCTION()
void ReturnButtonOnClicked(); void ReturnButtonOnClicked();