From 7e940e33fd7a081dd88965f7c80c22a0d58e19d0 Mon Sep 17 00:00:00 2001 From: baz Date: Tue, 9 Sep 2025 23:00:47 +0100 Subject: [PATCH] Convert Game Over Widget to Custom Button --- .../Widgets/GameOver/BP_GameOverWidget.uasset | 4 +-- Source/vampires/Widgets/GameOverWidget.cpp | 30 +++++++++---------- Source/vampires/Widgets/GameOverWidget.h | 15 ++++------ 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/Content/Widgets/GameOver/BP_GameOverWidget.uasset b/Content/Widgets/GameOver/BP_GameOverWidget.uasset index 5d40ac9..db77978 100644 --- a/Content/Widgets/GameOver/BP_GameOverWidget.uasset +++ b/Content/Widgets/GameOver/BP_GameOverWidget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e2624ad58a78123ba75f6d8560ed4acf1444ffbad3eca832c85458e3e6e3203 -size 58260 +oid sha256:dbe974fc430eba7f3d246614ce59dc3098dadd79ce900802409ae6575b5c7061 +size 57015 diff --git a/Source/vampires/Widgets/GameOverWidget.cpp b/Source/vampires/Widgets/GameOverWidget.cpp index e1ad6f3..3775274 100644 --- a/Source/vampires/Widgets/GameOverWidget.cpp +++ b/Source/vampires/Widgets/GameOverWidget.cpp @@ -3,8 +3,7 @@ #include "GameOverWidget.h" -#include "Blueprint/WidgetBlueprintLibrary.h" -#include "Components/Button.h" +#include "CustomButton.h" #include "Components/TextBlock.h" #include "Kismet/GameplayStatics.h" #include "vampires/VampireGameInstance.h" @@ -13,12 +12,22 @@ void UGameOverWidget::NativeConstruct() { Super::NativeConstruct(); + SetIsFocusable(false); + if (ReturnButton) { ReturnButton->OnClicked.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonOnClicked); - ReturnButton->OnHovered.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonOnHovered); - ReturnButton->OnUnhovered.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonOnUnhovered); + ReturnButton->OnFocused.AddUniqueDynamic(this, &UGameOverWidget::ReturnButtonOnFocused); } + + ReturnButton->SetKeyboardFocus(); +} + +FReply UGameOverWidget::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) +{ + CurrentFocus->SetKeyboardFocus(); + + return Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent); } void UGameOverWidget::SetGameInfo(int Level, float Timer, int Kill, int Gold) @@ -52,8 +61,6 @@ void UGameOverWidget::SetGameInfo(int Level, float Timer, int Kill, int Gold) void UGameOverWidget::ReturnButtonOnClicked() { - PlayClickedSound(); - if (UVampireGameInstance* GameInstance = Cast(GetGameInstance())) { if (!GameInstance->MainMenuWorld.IsNull()) @@ -69,14 +76,7 @@ void UGameOverWidget::ReturnButtonOnClicked() } } -void UGameOverWidget::ReturnButtonOnHovered() +void UGameOverWidget::ReturnButtonOnFocused(FFocusEvent InFocusEvent) { - SetTextBlockHovered(ReturnBlock); - PlayHoveredSound(); -} - -void UGameOverWidget::ReturnButtonOnUnhovered() -{ - SetTextBlockUnhovered(ReturnBlock); - PlayUnhoveredSound(); + SetCurrentFocus(ReturnButton); } diff --git a/Source/vampires/Widgets/GameOverWidget.h b/Source/vampires/Widgets/GameOverWidget.h index a27579c..fa94b2e 100644 --- a/Source/vampires/Widgets/GameOverWidget.h +++ b/Source/vampires/Widgets/GameOverWidget.h @@ -4,11 +4,10 @@ #include "CoreMinimal.h" #include "VampireInteractiveWidget.h" -#include "Blueprint/UserWidget.h" #include "GameOverWidget.generated.h" +class UCustomButton; class UTextBlock; -class UButton; /** * */ @@ -18,10 +17,7 @@ class VAMPIRES_API UGameOverWidget : public UVampireInteractiveWidget GENERATED_BODY() UPROPERTY(meta=(BindWidget)) - TObjectPtr ReturnButton; - - UPROPERTY(meta = (BindWidget)) - TObjectPtr ReturnBlock; + TObjectPtr ReturnButton; UPROPERTY(meta = (BindWidget)) TObjectPtr LevelBlock; @@ -37,6 +33,8 @@ class VAMPIRES_API UGameOverWidget : public UVampireInteractiveWidget virtual void NativeConstruct() override; + virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override; + public: void SetGameInfo(int Level, float Timer, int Kill, int Gold); @@ -45,8 +43,5 @@ private: void ReturnButtonOnClicked(); UFUNCTION() - void ReturnButtonOnHovered(); - - UFUNCTION() - void ReturnButtonOnUnhovered(); + void ReturnButtonOnFocused(FFocusEvent InFocusEvent); };