diff --git a/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset b/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset index ab263ac..e44d415 100644 --- a/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset +++ b/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7083fe7a51ccfef735467876a13f136cd22cd8cc9afe12a5b2359505cdf0f05a -size 64818 +oid sha256:36dd490d5619f90af475a0eb4079dae86d9c196e0a34ca21bc56a9c154923d0f +size 63281 diff --git a/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset b/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset index 68efffb..029cf03 100644 --- a/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset +++ b/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7340d7ba4bc5979ad1299ad6fce465c6b6cbdfabdaa95b0b089e4dfdb95c55e5 -size 38281 +oid sha256:f43dfcf691466c23b5837dc24d139aaaaf2feb12fe3a79faf5bb992b06eb19be +size 38959 diff --git a/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset b/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset index 82bf979..7a08e95 100644 --- a/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset +++ b/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1bffb0c9ee441b7b5ee41f9f96e784924d9951e892820166467b9d5fed4583c8 -size 34492 +oid sha256:2727517cc0ae5f3d0ede624dd58bb2fa2671d7d62baa78ee1ba1f9131b194a69 +size 38745 diff --git a/Source/vampires/VampirePlayerController.cpp b/Source/vampires/VampirePlayerController.cpp index 99ddec1..9b769fb 100644 --- a/Source/vampires/VampirePlayerController.cpp +++ b/Source/vampires/VampirePlayerController.cpp @@ -202,9 +202,6 @@ void AVampirePlayerController::ShowLevelUpScreen(int Level) if (CurrentLevelUpUI) { CurrentLevelUpUI->AddToViewport(); - UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(this, CurrentLevelUpUI, - EMouseLockMode::LockInFullscreen); - bShowMouseCursor = true; } } } diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp index 8f58255..e6276e4 100644 --- a/Source/vampires/Widgets/LevelUpWidget.cpp +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -3,11 +3,13 @@ #include "LevelUpWidget.h" +#include "CustomButton.h" #include "Blueprint/WidgetBlueprintLibrary.h" -#include "Components/Button.h" #include "Components/ListView.h" #include "Kismet/GameplayStatics.h" #include "UpgradeButtonDataObject.h" +#include "UpgradeButtonWidget.h" +#include "Components/ScrollBox.h" #include "GameFramework/Character.h" #include "vampires/VampireCharacter.h" #include "vampires/Weapon.h" @@ -20,11 +22,10 @@ void ULevelUpWidget::NativeConstruct() if (ResumeButton) { ResumeButton->OnClicked.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonClicked); - ResumeButton->OnHovered.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonOnHovered); - ResumeButton->OnUnhovered.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonOnUnhovered); + ResumeButton->OnFocused.AddUniqueDynamic(this, &ULevelUpWidget::BackButtonFocused); } - if (UpgradesListView) + if (UpgradesScrollBox && UpgradeButtonWidgetTemplate) { ACharacter* Player = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); if (!Player) @@ -38,7 +39,7 @@ void ULevelUpWidget::NativeConstruct() return; } - UpgradesListView->ClearListItems(); + UpgradesScrollBox->ClearChildren(); TArray Inventory = InventoryComponent->GetInventory(); // 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++) { int Rand = FMath::RandRange(0, UpgradeItems.Num() - 1); - UpgradesListView->AddItem(UpgradeItems[Rand]); + UUpgradeButtonDataObject* Selection = UpgradeItems[Rand]; + UUpgradeButtonWidget* Widget = CreateWidget( + GetWorld(), UpgradeButtonWidgetTemplate); + Widget->SetData(Selection); + UpgradesScrollBox->AddChild(Widget); 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() { - PlayClickedSound(); - RemoveFromParent(); if (APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) @@ -107,14 +125,7 @@ void ULevelUpWidget::ResumeButtonClicked() SetIsFocusable(false); } -void ULevelUpWidget::ResumeButtonOnHovered() +void ULevelUpWidget::BackButtonFocused(FFocusEvent InFocusEvent) { - SetTextBlockHovered(ResumeTextBlock); - PlayHoveredSound(); -} - -void ULevelUpWidget::ResumeButtonOnUnhovered() -{ - SetTextBlockUnhovered(ResumeTextBlock); - PlayUnhoveredSound(); + SetCurrentFocus(ResumeButton); } diff --git a/Source/vampires/Widgets/LevelUpWidget.h b/Source/vampires/Widgets/LevelUpWidget.h index c4057dd..fe75ee8 100644 --- a/Source/vampires/Widgets/LevelUpWidget.h +++ b/Source/vampires/Widgets/LevelUpWidget.h @@ -6,6 +6,8 @@ #include "VampireInteractiveWidget.h" #include "LevelUpWidget.generated.h" +class UUpgradeButtonWidget; +class UScrollBox; class UUpgradeButtonDataObject; class UListView; class UButton; @@ -17,23 +19,25 @@ class VAMPIRES_API ULevelUpWidget : public UVampireInteractiveWidget { GENERATED_BODY() +public: UPROPERTY(meta=(BindWidget)) - TObjectPtr ResumeButton; + TObjectPtr ResumeButton; UPROPERTY(meta=(BindWidget)) - TObjectPtr ResumeTextBlock; + TObjectPtr UpgradesScrollBox; - UPROPERTY(meta=(BindWidget)) - UListView* UpgradesListView; + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + TSubclassOf UpgradeButtonWidgetTemplate; +protected: virtual void NativeConstruct() override; + virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override; + +private: UFUNCTION() void ResumeButtonClicked(); UFUNCTION() - void ResumeButtonOnHovered(); - - UFUNCTION() - void ResumeButtonOnUnhovered(); + void BackButtonFocused(FFocusEvent InFocusEvent); }; diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp index 1331df8..38676ae 100644 --- a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp @@ -11,7 +11,7 @@ void UUpgradeButtonDataObject::SetData(AWeapon* Weapon, UUserWidget* ParentWidge WeaponIcon = Weapon->GetIcon(); WeaponInstance = Weapon; Parent = ParentWidget; - + if (Weapon->GetUpgradeDescriptions().Num() > Weapon->GetWeaponLevel()) { WeaponDescription = Weapon->GetUpgradeDescriptions()[Weapon->GetWeaponLevel()]; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.cpp b/Source/vampires/Widgets/UpgradeButtonWidget.cpp index 0e67f71..d1b9c04 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.cpp +++ b/Source/vampires/Widgets/UpgradeButtonWidget.cpp @@ -3,9 +3,9 @@ #include "UpgradeButtonWidget.h" +#include "LevelUpWidget.h" #include "UpgradeButtonDataObject.h" #include "Blueprint/WidgetBlueprintLibrary.h" -#include "Components/Button.h" #include "Components/Image.h" #include "Components/TextBlock.h" #include "Kismet/GameplayStatics.h" @@ -18,13 +18,16 @@ void UUpgradeButtonWidget::NativeConstruct() { Super::NativeConstruct(); + + OnFocused.AddUniqueDynamic(this, &UUpgradeButtonWidget::SetFocusInParent); } -void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) +void UUpgradeButtonWidget::SetData(UUpgradeButtonDataObject* ListItemObject) { if (UUpgradeButtonDataObject* Item = Cast(ListItemObject)) { - WeaponNameTextBlock->SetText(Item->WeaponName); + TextBlock->SetText(Item->WeaponName); + ButtonText = Item->WeaponName; DescriptionTextBlock->SetText(Item->WeaponDescription); WeaponIcon->SetBrushFromTexture(Item->WeaponIcon); Parent = Item->Parent; @@ -47,13 +50,6 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) { 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); @@ -136,16 +132,10 @@ void UUpgradeButtonWidget::OnClicked() } } -void UUpgradeButtonWidget::OnHoveredDelegate() +void UUpgradeButtonWidget::SetFocusInParent(FFocusEvent InFocusEvent) { - PlayHoveredSound(); - SetTextBlockHovered(WeaponNameTextBlock); - SetTextBlockHovered(DescriptionTextBlock); -} - -void UUpgradeButtonWidget::OnUnhoveredDelegate() -{ - PlayUnhoveredSound(); - SetTextBlockUnhovered(WeaponNameTextBlock); - SetTextBlockUnhovered(DescriptionTextBlock); + if (ULevelUpWidget* LevelUpMenu = Cast(Parent)) + { + LevelUpMenu->SetCurrentFocus(this); + } } diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.h b/Source/vampires/Widgets/UpgradeButtonWidget.h index 2747c98..745230d 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.h +++ b/Source/vampires/Widgets/UpgradeButtonWidget.h @@ -3,11 +3,12 @@ #pragma once #include "CoreMinimal.h" -#include "VampireInteractiveWidget.h" +#include "CustomButton.h" #include "Blueprint/IUserObjectListEntry.h" #include "Blueprint/UserWidget.h" #include "UpgradeButtonWidget.generated.h" +class UUpgradeButtonDataObject; class AWeapon; UENUM(BlueprintType) @@ -27,7 +28,7 @@ class UButton; * */ UCLASS() -class VAMPIRES_API UUpgradeButtonWidget : public UVampireInteractiveWidget, public IUserObjectListEntry +class VAMPIRES_API UUpgradeButtonWidget : public UCustomButton, public IUserObjectListEntry { GENERATED_BODY() @@ -45,16 +46,9 @@ protected: TObjectPtr GoldIcon; private: - - UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) - TObjectPtr Body; - UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) TObjectPtr WeaponIcon; - UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) - TObjectPtr WeaponNameTextBlock; - UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) TObjectPtr DescriptionTextBlock; @@ -70,22 +64,18 @@ private: UPROPERTY() TObjectPtr Parent; -private: UPROPERTY(meta=(BindWidget)) UImage* UpgradeTypeIcon; protected: virtual void NativeConstruct() override; - virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; +public: + virtual void SetData(UUpgradeButtonDataObject* ListItemObject); private: - UFUNCTION() - virtual void OnClicked(); + virtual void OnButtonClicked() override; UFUNCTION() - void OnHoveredDelegate(); - - UFUNCTION() - void OnUnhoveredDelegate(); + void SetFocusInParent(FFocusEvent InFocusEvent); };