From 738f4a2b8b84b1bffbdf95156cfe999abf57d474 Mon Sep 17 00:00:00 2001 From: baz Date: Thu, 7 Aug 2025 00:54:36 +0100 Subject: [PATCH] Create options menu widget class --- Source/vampires/Widgets/OptionsMenuWidget.cpp | 69 +++++++++++++++++++ Source/vampires/Widgets/OptionsMenuWidget.h | 69 +++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 Source/vampires/Widgets/OptionsMenuWidget.cpp create mode 100644 Source/vampires/Widgets/OptionsMenuWidget.h diff --git a/Source/vampires/Widgets/OptionsMenuWidget.cpp b/Source/vampires/Widgets/OptionsMenuWidget.cpp new file mode 100644 index 0000000..1001d4d --- /dev/null +++ b/Source/vampires/Widgets/OptionsMenuWidget.cpp @@ -0,0 +1,69 @@ +// Louis Hobbs | 2024-2025 + + +#include "OptionsMenuWidget.h" + +#include + +#include "Components/Button.h" +#include "Components/ComboBoxString.h" +#include "Kismet/GameplayStatics.h" +#include "Kismet/KismetSystemLibrary.h" + + +void UOptionsMenuWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + GenerateResolutionOptions(); + + if (ReturnButton) + { + ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnButtonOnClicked); + ReturnButton->OnClicked.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayClickedSound); + + ReturnButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayHoveredSound); + ReturnButton->OnHovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnTextBlockHoveredDelegate); + + ReturnButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::ReturnTextBlockUnhoveredDelegate); + ReturnButton->OnUnhovered.AddUniqueDynamic(this, &UOptionsMenuWidget::PlayUnhoveredSound); + } +} + +void UOptionsMenuWidget::GenerateResolutionOptions() +{ + ResolutionComboBox->ClearOptions(); + + TArray Resolutions; + UKismetSystemLibrary::GetSupportedFullscreenResolutions(Resolutions); + for (FIntPoint Resolution : Resolutions) + { + ResolutionComboBox->AddOption(FString::FromInt(Resolution.X) + "x" + FString::FromInt(Resolution.Y)); + } + + FVector2D Resolution = FVector2D::ZeroVector; + GEngine->GameViewport->GetViewportSize(Resolution); + FString ResolutionString = FString::FromInt(Resolution.X) + "x" + FString::FromInt(Resolution.Y); + if (ResolutionComboBox->FindOptionIndex(ResolutionString) == -1) + { + ResolutionComboBox->AddOption(ResolutionString); + } + + ResolutionComboBox->SetSelectedOption(ResolutionString); +} + +void UOptionsMenuWidget::ReturnButtonOnClicked() +{ + if (MainMenuMenuWidget) + { + RemoveFromParent(); + + UUserWidget* SelectWeaponWidget = CreateWidget( + UGameplayStatics::GetPlayerController(GetWorld(), 0), MainMenuMenuWidget); + + if (SelectWeaponWidget) + { + SelectWeaponWidget->AddToViewport(); + } + } +} diff --git a/Source/vampires/Widgets/OptionsMenuWidget.h b/Source/vampires/Widgets/OptionsMenuWidget.h new file mode 100644 index 0000000..b47c02c --- /dev/null +++ b/Source/vampires/Widgets/OptionsMenuWidget.h @@ -0,0 +1,69 @@ +// Louis Hobbs | 2024-2025 + +#pragma once + +#include "CoreMinimal.h" +#include "VampireInteractiveWidget.h" +#include "OptionsMenuWidget.generated.h" + +class UComboBoxString; +class UComboBox; +class UComboBox; +class UButton; +/** + * + */ +UCLASS() +class VAMPIRES_API UOptionsMenuWidget : public UVampireInteractiveWidget +{ + GENERATED_BODY() + +public: + UPROPERTY(meta = (BindWidget)) + TObjectPtr ResolutionComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr ResolutionTextBlock; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr WindowTypeComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr VsyncComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr RefreshRateComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr DynamicResolutionComboBox; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr ReturnButton; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr ReturnBlock; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr ResetToDefaultsButton; + + UPROPERTY(meta = (BindWidget)) + TObjectPtr ResetToDefaultsBlock; + + UPROPERTY(EditDefaultsOnly, Category = "Widget Settings | New Game") + TSubclassOf MainMenuMenuWidget; + +protected: + virtual void NativeConstruct() override; + +private: + void GenerateResolutionOptions(); + + UFUNCTION() + void ReturnButtonOnClicked(); + + UFUNCTION() + void ReturnTextBlockHoveredDelegate() { SetTextBlockHovered(ReturnBlock); } + + UFUNCTION() + void ReturnTextBlockUnhoveredDelegate() { SetTextBlockUnhovered(ReturnBlock); } +};