Update Level Up UI to custom buttons

This commit is contained in:
baz 2025-09-08 22:34:03 +01:00
parent 20dbb97b7c
commit a0a3aaddff
9 changed files with 68 additions and 76 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -202,9 +202,6 @@ void AVampirePlayerController::ShowLevelUpScreen(int Level)
if (CurrentLevelUpUI) if (CurrentLevelUpUI)
{ {
CurrentLevelUpUI->AddToViewport(); CurrentLevelUpUI->AddToViewport();
UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentLevelUpUI,
EMouseLockMode::LockInFullscreen);
bShowMouseCursor = true;
} }
} }
} }

View File

@ -3,11 +3,13 @@
#include "LevelUpWidget.h" #include "LevelUpWidget.h"
#include "CustomButton.h"
#include "Blueprint/WidgetBlueprintLibrary.h" #include "Blueprint/WidgetBlueprintLibrary.h"
#include "Components/Button.h"
#include "Components/ListView.h" #include "Components/ListView.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "UpgradeButtonDataObject.h" #include "UpgradeButtonDataObject.h"
#include "UpgradeButtonWidget.h"
#include "Components/ScrollBox.h"
#include "GameFramework/Character.h" #include "GameFramework/Character.h"
#include "vampires/VampireCharacter.h" #include "vampires/VampireCharacter.h"
#include "vampires/Weapon.h" #include "vampires/Weapon.h"
@ -20,11 +22,10 @@ void ULevelUpWidget::NativeConstruct()
if (ResumeButton) if (ResumeButton)
{ {
ResumeButton->OnClicked.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonClicked); ResumeButton->OnClicked.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonClicked);
ResumeButton->OnHovered.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonOnHovered); ResumeButton->OnFocused.AddUniqueDynamic(this, &ULevelUpWidget::BackButtonFocused);
ResumeButton->OnUnhovered.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonOnUnhovered);
} }
if (UpgradesListView) if (UpgradesScrollBox && UpgradeButtonWidgetTemplate)
{ {
ACharacter* Player = Cast<AVampireCharacter>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); ACharacter* Player = Cast<AVampireCharacter>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0));
if (!Player) if (!Player)
@ -38,7 +39,7 @@ void ULevelUpWidget::NativeConstruct()
return; return;
} }
UpgradesListView->ClearListItems(); UpgradesScrollBox->ClearChildren();
TArray<AWeapon*> Inventory = InventoryComponent->GetInventory(); TArray<AWeapon*> Inventory = InventoryComponent->GetInventory();
// Get list of weapons that the player owns that can be upgraded // Get list of weapons that the player owns that can be upgraded
@ -84,17 +85,34 @@ void ULevelUpWidget::NativeConstruct()
for (int i = 0; i < 3 && UpgradeItems.Num() > 0; i++) for (int i = 0; i < 3 && UpgradeItems.Num() > 0; i++)
{ {
int Rand = FMath::RandRange(0, UpgradeItems.Num() - 1); int Rand = FMath::RandRange(0, UpgradeItems.Num() - 1);
UpgradesListView->AddItem(UpgradeItems[Rand]); UUpgradeButtonDataObject* Selection = UpgradeItems[Rand];
UUpgradeButtonWidget* Widget = CreateWidget<UUpgradeButtonWidget>(
GetWorld(), UpgradeButtonWidgetTemplate);
Widget->SetData(Selection);
UpgradesScrollBox->AddChild(Widget);
UpgradeItems.RemoveAt(Rand); UpgradeItems.RemoveAt(Rand);
} }
if (APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0))
{
UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(PlayerController, UpgradesScrollBox->GetChildAt(0),
EMouseLockMode::LockAlways);
PlayerController->bShowMouseCursor = true;
} }
SetIsFocusable(true); }
SetIsFocusable(false);
}
FReply ULevelUpWidget::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
{
CurrentFocus->SetKeyboardFocus();
return Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent);
} }
void ULevelUpWidget::ResumeButtonClicked() void ULevelUpWidget::ResumeButtonClicked()
{ {
PlayClickedSound();
RemoveFromParent(); RemoveFromParent();
if (APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) if (APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0))
@ -107,14 +125,7 @@ void ULevelUpWidget::ResumeButtonClicked()
SetIsFocusable(false); SetIsFocusable(false);
} }
void ULevelUpWidget::ResumeButtonOnHovered() void ULevelUpWidget::BackButtonFocused(FFocusEvent InFocusEvent)
{ {
SetTextBlockHovered(ResumeTextBlock); SetCurrentFocus(ResumeButton);
PlayHoveredSound();
}
void ULevelUpWidget::ResumeButtonOnUnhovered()
{
SetTextBlockUnhovered(ResumeTextBlock);
PlayUnhoveredSound();
} }

View File

@ -6,6 +6,8 @@
#include "VampireInteractiveWidget.h" #include "VampireInteractiveWidget.h"
#include "LevelUpWidget.generated.h" #include "LevelUpWidget.generated.h"
class UUpgradeButtonWidget;
class UScrollBox;
class UUpgradeButtonDataObject; class UUpgradeButtonDataObject;
class UListView; class UListView;
class UButton; class UButton;
@ -17,23 +19,25 @@ class VAMPIRES_API ULevelUpWidget : public UVampireInteractiveWidget
{ {
GENERATED_BODY() GENERATED_BODY()
public:
UPROPERTY(meta=(BindWidget)) UPROPERTY(meta=(BindWidget))
TObjectPtr<UButton> ResumeButton; TObjectPtr<UCustomButton> ResumeButton;
UPROPERTY(meta=(BindWidget)) UPROPERTY(meta=(BindWidget))
TObjectPtr<UTextBlock> ResumeTextBlock; TObjectPtr<UScrollBox> UpgradesScrollBox;
UPROPERTY(meta=(BindWidget)) UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
UListView* UpgradesListView; TSubclassOf<UUpgradeButtonWidget> UpgradeButtonWidgetTemplate;
protected:
virtual void NativeConstruct() override; virtual void NativeConstruct() override;
virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
private:
UFUNCTION() UFUNCTION()
void ResumeButtonClicked(); void ResumeButtonClicked();
UFUNCTION() UFUNCTION()
void ResumeButtonOnHovered(); void BackButtonFocused(FFocusEvent InFocusEvent);
UFUNCTION()
void ResumeButtonOnUnhovered();
}; };

View File

@ -3,9 +3,9 @@
#include "UpgradeButtonWidget.h" #include "UpgradeButtonWidget.h"
#include "LevelUpWidget.h"
#include "UpgradeButtonDataObject.h" #include "UpgradeButtonDataObject.h"
#include "Blueprint/WidgetBlueprintLibrary.h" #include "Blueprint/WidgetBlueprintLibrary.h"
#include "Components/Button.h"
#include "Components/Image.h" #include "Components/Image.h"
#include "Components/TextBlock.h" #include "Components/TextBlock.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
@ -18,13 +18,16 @@
void UUpgradeButtonWidget::NativeConstruct() void UUpgradeButtonWidget::NativeConstruct()
{ {
Super::NativeConstruct(); Super::NativeConstruct();
OnFocused.AddUniqueDynamic(this, &UUpgradeButtonWidget::SetFocusInParent);
} }
void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) void UUpgradeButtonWidget::SetData(UUpgradeButtonDataObject* ListItemObject)
{ {
if (UUpgradeButtonDataObject* Item = Cast<UUpgradeButtonDataObject>(ListItemObject)) if (UUpgradeButtonDataObject* Item = Cast<UUpgradeButtonDataObject>(ListItemObject))
{ {
WeaponNameTextBlock->SetText(Item->WeaponName); TextBlock->SetText(Item->WeaponName);
ButtonText = Item->WeaponName;
DescriptionTextBlock->SetText(Item->WeaponDescription); DescriptionTextBlock->SetText(Item->WeaponDescription);
WeaponIcon->SetBrushFromTexture(Item->WeaponIcon); WeaponIcon->SetBrushFromTexture(Item->WeaponIcon);
Parent = Item->Parent; Parent = Item->Parent;
@ -47,13 +50,6 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject)
{ {
UpgradeType = Gold; UpgradeType = Gold;
} }
if (Body)
{
Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked);
Body->OnHovered.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnHoveredDelegate);
Body->OnUnhovered.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnUnhoveredDelegate);
}
} }
@ -75,9 +71,9 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject)
} }
} }
void UUpgradeButtonWidget::OnClicked() void UUpgradeButtonWidget::OnButtonClicked()
{ {
PlayClickedSound(); Super::OnButtonClicked();
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0); APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
@ -136,16 +132,10 @@ void UUpgradeButtonWidget::OnClicked()
} }
} }
void UUpgradeButtonWidget::OnHoveredDelegate() void UUpgradeButtonWidget::SetFocusInParent(FFocusEvent InFocusEvent)
{ {
PlayHoveredSound(); if (ULevelUpWidget* LevelUpMenu = Cast<ULevelUpWidget>(Parent))
SetTextBlockHovered(WeaponNameTextBlock); {
SetTextBlockHovered(DescriptionTextBlock); LevelUpMenu->SetCurrentFocus(this);
} }
void UUpgradeButtonWidget::OnUnhoveredDelegate()
{
PlayUnhoveredSound();
SetTextBlockUnhovered(WeaponNameTextBlock);
SetTextBlockUnhovered(DescriptionTextBlock);
} }

View File

@ -3,11 +3,12 @@
#pragma once #pragma once
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "VampireInteractiveWidget.h" #include "CustomButton.h"
#include "Blueprint/IUserObjectListEntry.h" #include "Blueprint/IUserObjectListEntry.h"
#include "Blueprint/UserWidget.h" #include "Blueprint/UserWidget.h"
#include "UpgradeButtonWidget.generated.h" #include "UpgradeButtonWidget.generated.h"
class UUpgradeButtonDataObject;
class AWeapon; class AWeapon;
UENUM(BlueprintType) UENUM(BlueprintType)
@ -27,7 +28,7 @@ class UButton;
* *
*/ */
UCLASS() UCLASS()
class VAMPIRES_API UUpgradeButtonWidget : public UVampireInteractiveWidget, public IUserObjectListEntry class VAMPIRES_API UUpgradeButtonWidget : public UCustomButton, public IUserObjectListEntry
{ {
GENERATED_BODY() GENERATED_BODY()
@ -45,16 +46,9 @@ protected:
TObjectPtr<UTexture2D> GoldIcon; TObjectPtr<UTexture2D> GoldIcon;
private: private:
UPROPERTY(EditDefaultsOnly, meta=(BindWidget))
TObjectPtr<UButton> Body;
UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) UPROPERTY(EditDefaultsOnly, meta=(BindWidget))
TObjectPtr<UImage> WeaponIcon; TObjectPtr<UImage> WeaponIcon;
UPROPERTY(EditDefaultsOnly, meta=(BindWidget))
TObjectPtr<UTextBlock> WeaponNameTextBlock;
UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) UPROPERTY(EditDefaultsOnly, meta=(BindWidget))
TObjectPtr<UTextBlock> DescriptionTextBlock; TObjectPtr<UTextBlock> DescriptionTextBlock;
@ -70,22 +64,18 @@ private:
UPROPERTY() UPROPERTY()
TObjectPtr<UUserWidget> Parent; TObjectPtr<UUserWidget> Parent;
private:
UPROPERTY(meta=(BindWidget)) UPROPERTY(meta=(BindWidget))
UImage* UpgradeTypeIcon; UImage* UpgradeTypeIcon;
protected: protected:
virtual void NativeConstruct() override; virtual void NativeConstruct() override;
virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; public:
virtual void SetData(UUpgradeButtonDataObject* ListItemObject);
private: private:
UFUNCTION() virtual void OnButtonClicked() override;
virtual void OnClicked();
UFUNCTION() UFUNCTION()
void OnHoveredDelegate(); void SetFocusInParent(FFocusEvent InFocusEvent);
UFUNCTION()
void OnUnhoveredDelegate();
}; };