Get Focusing set up on the Main Menu widget
This commit is contained in:
parent
e129f2f0cc
commit
e7a10aa267
BIN
Content/Widgets/BP_CustomButton.uasset
(Stored with Git LFS)
BIN
Content/Widgets/BP_CustomButton.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Widgets/MainMenu/BP_MainMenuWidget.uasset
(Stored with Git LFS)
BIN
Content/Widgets/MainMenu/BP_MainMenuWidget.uasset
(Stored with Git LFS)
Binary file not shown.
@ -36,7 +36,28 @@ void UCustomButton::SynchronizeProperties()
|
||||
}
|
||||
}
|
||||
|
||||
TObjectPtr<UTextBlock> UCustomButton::GetTextBlock()
|
||||
void UCustomButton::NativeOnAddedToFocusPath(const FFocusEvent& InFocusEvent)
|
||||
{
|
||||
Super::NativeOnAddedToFocusPath(InFocusEvent);
|
||||
|
||||
OnFocused.Broadcast(InFocusEvent);
|
||||
OnButtonHovered();
|
||||
}
|
||||
|
||||
void UCustomButton::NativeOnRemovedFromFocusPath(const FFocusEvent& InFocusEvent)
|
||||
{
|
||||
Super::NativeOnRemovedFromFocusPath(InFocusEvent);
|
||||
|
||||
OnUnfocused.Broadcast(InFocusEvent);
|
||||
OnButtonUnhovered();
|
||||
}
|
||||
|
||||
UButton* UCustomButton::GetButton()
|
||||
{
|
||||
return ButtonBody;
|
||||
}
|
||||
|
||||
UTextBlock* UCustomButton::GetTextBlock()
|
||||
{
|
||||
return TextBlock;
|
||||
}
|
||||
|
@ -17,6 +17,8 @@ DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnButtonReleasedEventCustom);
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnButtonHoverEventCustom);
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFocusPath, FFocusEvent, InFocusEvent);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -41,6 +43,12 @@ public:
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FOnButtonHoverEventCustom OnUnhovered;
|
||||
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FFocusPath OnFocused;
|
||||
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FFocusPath OnUnfocused;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Button Settings | Text")
|
||||
FText ButtonText = FText::FromString("Default");
|
||||
|
||||
@ -79,8 +87,16 @@ protected:
|
||||
|
||||
virtual void SynchronizeProperties() override;
|
||||
|
||||
virtual void NativeOnAddedToFocusPath(const FFocusEvent& InFocusEvent) override;
|
||||
|
||||
virtual void NativeOnRemovedFromFocusPath(const FFocusEvent& InFocusEvent) override;
|
||||
|
||||
public:
|
||||
TObjectPtr<UTextBlock> GetTextBlock();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
UButton* GetButton();
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
UTextBlock* GetTextBlock();
|
||||
|
||||
protected:
|
||||
UFUNCTION()
|
||||
|
@ -15,16 +15,19 @@ void UMainMenuWidget::NativeConstruct()
|
||||
if (NewGameButton)
|
||||
{
|
||||
NewGameButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::NewGameButtonOnClicked);
|
||||
NewGameButton->OnFocused.AddUniqueDynamic(this, &UMainMenuWidget::NewGameButtonFocused);
|
||||
}
|
||||
|
||||
if (OptionsButton)
|
||||
{
|
||||
OptionsButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::OptionsButtonOnClicked);
|
||||
OptionsButton->OnFocused.AddUniqueDynamic(this, &UMainMenuWidget::OptionsButtonFocused);
|
||||
}
|
||||
|
||||
if (QuitButton)
|
||||
{
|
||||
QuitButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::QuitButtonOnClicked);
|
||||
QuitButton->OnFocused.AddUniqueDynamic(this, &UMainMenuWidget::QuitButtonFocused);
|
||||
}
|
||||
|
||||
QuitButton->SetIsEnabled(false);
|
||||
@ -38,11 +41,26 @@ void UMainMenuWidget::NativeConstruct()
|
||||
|
||||
FReply UMainMenuWidget::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
|
||||
{
|
||||
NewGameButton->SetKeyboardFocus();
|
||||
CurrentFocus->SetKeyboardFocus();
|
||||
|
||||
return Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent);
|
||||
}
|
||||
|
||||
UCustomButton* UMainMenuWidget::GetNewGameButton()
|
||||
{
|
||||
return NewGameButton;
|
||||
}
|
||||
|
||||
UCustomButton* UMainMenuWidget::GetOptionsButton()
|
||||
{
|
||||
return OptionsButton;
|
||||
}
|
||||
|
||||
UCustomButton* UMainMenuWidget::GetQuitButton()
|
||||
{
|
||||
return QuitButton;
|
||||
}
|
||||
|
||||
void UMainMenuWidget::NewGameButtonOnClicked()
|
||||
{
|
||||
if (NewGameMenuWidget)
|
||||
@ -59,6 +77,11 @@ void UMainMenuWidget::NewGameButtonOnClicked()
|
||||
}
|
||||
}
|
||||
|
||||
void UMainMenuWidget::NewGameButtonFocused(FFocusEvent InFocusEvent)
|
||||
{
|
||||
SetCurrentFocus(NewGameButton);
|
||||
}
|
||||
|
||||
void UMainMenuWidget::OptionsButtonOnClicked()
|
||||
{
|
||||
if (OptionsMenuWidget)
|
||||
@ -75,6 +98,11 @@ void UMainMenuWidget::OptionsButtonOnClicked()
|
||||
}
|
||||
}
|
||||
|
||||
void UMainMenuWidget::OptionsButtonFocused(FFocusEvent InFocusEvent)
|
||||
{
|
||||
SetCurrentFocus(OptionsButton);
|
||||
}
|
||||
|
||||
void UMainMenuWidget::QuitButtonOnClicked()
|
||||
{
|
||||
// TODO: Add platform specific Exit requests
|
||||
@ -82,3 +110,8 @@ void UMainMenuWidget::QuitButtonOnClicked()
|
||||
// For some reason the generic version does not work the same as FWindowsPlatformMisc
|
||||
FWindowsPlatformMisc::RequestExit(false);
|
||||
}
|
||||
|
||||
void UMainMenuWidget::QuitButtonFocused(FFocusEvent InFocusEvent)
|
||||
{
|
||||
SetCurrentFocus(QuitButton);
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ class UCustomButton;
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class VAMPIRES_API UMainMenuWidget : public UUserWidget
|
||||
class VAMPIRES_API UMainMenuWidget : public UVampireInteractiveWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@ -39,13 +39,32 @@ public:
|
||||
protected:
|
||||
virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
|
||||
|
||||
public:
|
||||
UFUNCTION(BlueprintCallable)
|
||||
UCustomButton* GetNewGameButton();
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
UCustomButton* GetOptionsButton();
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
UCustomButton* GetQuitButton();
|
||||
|
||||
private:
|
||||
UFUNCTION()
|
||||
void NewGameButtonOnClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void NewGameButtonFocused(FFocusEvent InFocusEvent);
|
||||
|
||||
UFUNCTION()
|
||||
void OptionsButtonOnClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void OptionsButtonFocused(FFocusEvent InFocusEvent);
|
||||
|
||||
UFUNCTION()
|
||||
void QuitButtonOnClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void QuitButtonFocused(FFocusEvent InFocusEvent);
|
||||
};
|
||||
|
@ -28,6 +28,11 @@ void UVampireInteractiveWidget::SetReturnScreen(UUserWidget* UserWidget)
|
||||
}
|
||||
}
|
||||
|
||||
void UVampireInteractiveWidget::SetCurrentFocus(UUserWidget* UserWidget)
|
||||
{
|
||||
CurrentFocus = UserWidget;
|
||||
}
|
||||
|
||||
void UVampireInteractiveWidget::PlayHoveredSound()
|
||||
{
|
||||
if (ButtonHoveredSound)
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "VampireInteractiveWidget.generated.h"
|
||||
|
||||
class UCustomButton;
|
||||
class UButton;
|
||||
class UTextBlock;
|
||||
/**
|
||||
@ -16,6 +17,8 @@ class VAMPIRES_API UVampireInteractiveWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
// TODO: Remove a lot of this stuff that has now been replaced by UCustomButton
|
||||
|
||||
protected:
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Widget Settings | Sound")
|
||||
TObjectPtr<USoundBase> ButtonHoveredSound;
|
||||
@ -35,7 +38,8 @@ protected:
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Widget Settings")
|
||||
TArray<TObjectPtr<UButton>> InteractableButtons;
|
||||
|
||||
protected:
|
||||
TObjectPtr<UUserWidget> CurrentFocus;
|
||||
|
||||
UPROPERTY()
|
||||
TObjectPtr<UUserWidget> PreviousScreen;
|
||||
|
||||
@ -49,6 +53,9 @@ public:
|
||||
UFUNCTION()
|
||||
void SetReturnScreen(UUserWidget* UserWidget);
|
||||
|
||||
UFUNCTION()
|
||||
void SetCurrentFocus(UUserWidget* UserWidget);
|
||||
|
||||
protected:
|
||||
UFUNCTION()
|
||||
void PlayHoveredSound();
|
||||
|
Loading…
x
Reference in New Issue
Block a user