Update Pause Menu to custom buttons

This commit is contained in:
baz 2025-09-08 21:30:16 +01:00
parent e6f04b30da
commit 20dbb97b7c
4 changed files with 37 additions and 6 deletions

Binary file not shown.

View File

@ -15,6 +15,7 @@
#include "Blueprint/UserWidget.h" #include "Blueprint/UserWidget.h"
#include "Blueprint/WidgetBlueprintLibrary.h" #include "Blueprint/WidgetBlueprintLibrary.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "Widgets/CustomButton.h"
#include "Widgets/GameOverWidget.h" #include "Widgets/GameOverWidget.h"
#include "Widgets/HUDWidget.h" #include "Widgets/HUDWidget.h"
#include "Widgets/LevelUpWidget.h" #include "Widgets/LevelUpWidget.h"
@ -126,7 +127,7 @@ void AVampirePlayerController::OnPause(const FInputActionValue& PauseInput)
if (CurrentPauseUI) if (CurrentPauseUI)
{ {
CurrentPauseUI->AddToViewport(); CurrentPauseUI->AddToViewport();
UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentPauseUI, EMouseLockMode::LockInFullscreen); UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentPauseUI->ResumeButton, EMouseLockMode::LockInFullscreen);
bShowMouseCursor = true; bShowMouseCursor = true;
} }
} }

View File

@ -13,17 +13,28 @@ void UPauseWidget::NativeConstruct()
{ {
Super::NativeConstruct(); Super::NativeConstruct();
SetIsFocusable(false);
if (ResumeButton) if (ResumeButton)
{ {
ResumeButton->OnClicked.AddUniqueDynamic(this, &UPauseWidget::ResumeButtonOnClicked); ResumeButton->OnClicked.AddUniqueDynamic(this, &UPauseWidget::ResumeButtonOnClicked);
ResumeButton->OnFocused.AddUniqueDynamic(this, &UPauseWidget::ResumeButtonOnFocused);
} }
if (ReturnToMainMenuButton) if (ReturnToMainMenuButton)
{ {
ReturnToMainMenuButton->OnClicked.AddUniqueDynamic(this, &UPauseWidget::ReturnToMainMenuButtonOnClicked); 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() void UPauseWidget::ResumeButtonOnClicked()
@ -36,8 +47,11 @@ void UPauseWidget::ResumeButtonOnClicked()
PlayerController->bShowMouseCursor = false; PlayerController->bShowMouseCursor = false;
PlayerController->SetPause(false); PlayerController->SetPause(false);
} }
}
SetIsFocusable(false); void UPauseWidget::ResumeButtonOnFocused(FFocusEvent InFocusEvent)
{
SetCurrentFocus(ResumeButton);
} }
void UPauseWidget::ReturnToMainMenuButtonOnClicked() void UPauseWidget::ReturnToMainMenuButtonOnClicked()
@ -56,3 +70,8 @@ void UPauseWidget::ReturnToMainMenuButtonOnClicked()
} }
} }
} }
void UPauseWidget::ReturnToMainMenuButtonOnFocused(FFocusEvent InFocusEvent)
{
SetCurrentFocus(ReturnToMainMenuButton);
}

View File

@ -13,21 +13,32 @@ class UCustomButton;
* *
*/ */
UCLASS() UCLASS()
class VAMPIRES_API UPauseWidget : public UUserWidget class VAMPIRES_API UPauseWidget : public UVampireInteractiveWidget
{ {
GENERATED_BODY() GENERATED_BODY()
public:
UPROPERTY(meta=(BindWidget)) UPROPERTY(meta=(BindWidget))
TObjectPtr<UCustomButton> ResumeButton; TObjectPtr<UCustomButton> ResumeButton;
UPROPERTY(meta=(BindWidget)) UPROPERTY(meta=(BindWidget))
TObjectPtr<UCustomButton> ReturnToMainMenuButton; TObjectPtr<UCustomButton> ReturnToMainMenuButton;
protected:
virtual void NativeConstruct() override; virtual void NativeConstruct() override;
virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
private:
UFUNCTION() UFUNCTION()
void ResumeButtonOnClicked(); void ResumeButtonOnClicked();
UFUNCTION()
void ResumeButtonOnFocused(FFocusEvent InFocusEvent);
UFUNCTION() UFUNCTION()
void ReturnToMainMenuButtonOnClicked(); void ReturnToMainMenuButtonOnClicked();
UFUNCTION()
void ReturnToMainMenuButtonOnFocused(FFocusEvent InFocusEvent);
}; };