From 20dbb97b7cdb592e64fe243e08affd3930b466c9 Mon Sep 17 00:00:00 2001 From: baz Date: Mon, 8 Sep 2025 21:30:16 +0100 Subject: [PATCH] Update Pause Menu to custom buttons --- Content/Widgets/Pause/BP_PauseWidget.uasset | 4 ++-- Source/vampires/VampirePlayerController.cpp | 3 ++- Source/vampires/Widgets/PauseWidget.cpp | 23 +++++++++++++++++++-- Source/vampires/Widgets/PauseWidget.h | 13 +++++++++++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Content/Widgets/Pause/BP_PauseWidget.uasset b/Content/Widgets/Pause/BP_PauseWidget.uasset index 82158af..fc8fb41 100644 --- a/Content/Widgets/Pause/BP_PauseWidget.uasset +++ b/Content/Widgets/Pause/BP_PauseWidget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27e60f2df8b9692f85813f69bb12d4ab3832d2416b7f4696dbb518372bdbd4b9 -size 31562 +oid sha256:4a567f7d8148f1d779504fccfca200f35bc8bd47e508a949072034eb62d19cf5 +size 35498 diff --git a/Source/vampires/VampirePlayerController.cpp b/Source/vampires/VampirePlayerController.cpp index 1189109..99ddec1 100644 --- a/Source/vampires/VampirePlayerController.cpp +++ b/Source/vampires/VampirePlayerController.cpp @@ -15,6 +15,7 @@ #include "Blueprint/UserWidget.h" #include "Blueprint/WidgetBlueprintLibrary.h" #include "Kismet/GameplayStatics.h" +#include "Widgets/CustomButton.h" #include "Widgets/GameOverWidget.h" #include "Widgets/HUDWidget.h" #include "Widgets/LevelUpWidget.h" @@ -126,7 +127,7 @@ void AVampirePlayerController::OnPause(const FInputActionValue& PauseInput) if (CurrentPauseUI) { CurrentPauseUI->AddToViewport(); - UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentPauseUI, EMouseLockMode::LockInFullscreen); + UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentPauseUI->ResumeButton, EMouseLockMode::LockInFullscreen); bShowMouseCursor = true; } } diff --git a/Source/vampires/Widgets/PauseWidget.cpp b/Source/vampires/Widgets/PauseWidget.cpp index f6ea5c6..0dfbaea 100644 --- a/Source/vampires/Widgets/PauseWidget.cpp +++ b/Source/vampires/Widgets/PauseWidget.cpp @@ -13,17 +13,28 @@ void UPauseWidget::NativeConstruct() { Super::NativeConstruct(); + SetIsFocusable(false); + if (ResumeButton) { ResumeButton->OnClicked.AddUniqueDynamic(this, &UPauseWidget::ResumeButtonOnClicked); + ResumeButton->OnFocused.AddUniqueDynamic(this, &UPauseWidget::ResumeButtonOnFocused); } if (ReturnToMainMenuButton) { ReturnToMainMenuButton->OnClicked.AddUniqueDynamic(this, &UPauseWidget::ReturnToMainMenuButtonOnClicked); + ReturnToMainMenuButton->OnFocused.AddUniqueDynamic(this, &UPauseWidget::ReturnToMainMenuButtonOnFocused); } - SetIsFocusable(true); + ResumeButton->SetKeyboardFocus(); +} + +FReply UPauseWidget::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) +{ + CurrentFocus->SetKeyboardFocus(); + + return Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent); } void UPauseWidget::ResumeButtonOnClicked() @@ -36,8 +47,11 @@ void UPauseWidget::ResumeButtonOnClicked() PlayerController->bShowMouseCursor = false; PlayerController->SetPause(false); } +} - SetIsFocusable(false); +void UPauseWidget::ResumeButtonOnFocused(FFocusEvent InFocusEvent) +{ + SetCurrentFocus(ResumeButton); } void UPauseWidget::ReturnToMainMenuButtonOnClicked() @@ -56,3 +70,8 @@ void UPauseWidget::ReturnToMainMenuButtonOnClicked() } } } + +void UPauseWidget::ReturnToMainMenuButtonOnFocused(FFocusEvent InFocusEvent) +{ + SetCurrentFocus(ReturnToMainMenuButton); +} diff --git a/Source/vampires/Widgets/PauseWidget.h b/Source/vampires/Widgets/PauseWidget.h index 2ade8d1..0c9e05a 100644 --- a/Source/vampires/Widgets/PauseWidget.h +++ b/Source/vampires/Widgets/PauseWidget.h @@ -13,21 +13,32 @@ class UCustomButton; * */ UCLASS() -class VAMPIRES_API UPauseWidget : public UUserWidget +class VAMPIRES_API UPauseWidget : public UVampireInteractiveWidget { GENERATED_BODY() +public: UPROPERTY(meta=(BindWidget)) TObjectPtr ResumeButton; UPROPERTY(meta=(BindWidget)) TObjectPtr ReturnToMainMenuButton; +protected: virtual void NativeConstruct() override; + virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override; + +private: UFUNCTION() void ResumeButtonOnClicked(); + + UFUNCTION() + void ResumeButtonOnFocused(FFocusEvent InFocusEvent); UFUNCTION() void ReturnToMainMenuButtonOnClicked(); + + UFUNCTION() + void ReturnToMainMenuButtonOnFocused(FFocusEvent InFocusEvent); };