From 804597fbff460b032edbcd4ac2d7fa2b4e51f61e Mon Sep 17 00:00:00 2001 From: baz Date: Wed, 5 Feb 2025 23:05:16 +0000 Subject: [PATCH] Add Health and Gold Options to Level Up menu when there are no upgrades left --- Source/vampires/Widgets/LevelUpWidget.cpp | 30 +++++++++-- .../Widgets/UpgradeButtonDataObject.cpp | 9 ++++ .../Widgets/UpgradeButtonDataObject.h | 7 +-- .../vampires/Widgets/UpgradeButtonWidget.cpp | 53 ++++++++++++++++--- Source/vampires/Widgets/UpgradeButtonWidget.h | 16 ++++-- 5 files changed, 96 insertions(+), 19 deletions(-) diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp index d777be1..dce1e0a 100644 --- a/Source/vampires/Widgets/LevelUpWidget.cpp +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -8,7 +8,6 @@ #include "Components/ListView.h" #include "Kismet/GameplayStatics.h" #include "UpgradeButtonDataObject.h" -#include "EntitySystem/MovieSceneEntitySystemRunner.h" #include "GameFramework/Character.h" #include "vampires/VampireCharacter.h" #include "vampires/Weapon.h" @@ -25,11 +24,17 @@ void ULevelUpWidget::NativeConstruct() if (UpgradesListView) { - ACharacter* Player = Cast( UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); - if (!Player) return; + ACharacter* Player = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); + if (!Player) + { + return; + } UWeaponInventoryComponent* InventoryComponent = Player->GetComponentByClass(); - if (!InventoryComponent) return; + if (!InventoryComponent) + { + return; + } TArray Inventory = InventoryComponent->GetInventory(); TArray upgradeItems; @@ -46,6 +51,23 @@ void ULevelUpWidget::NativeConstruct() } } + if (upgradeItems.Num() == 0) + { + UUpgradeButtonDataObject* tempHealth = NewObject(this); + tempHealth->SetData(FText::FromString("Health"), + FText::FromString("Recover 10% of your health"), + nullptr, + this); + upgradeItems.Add(tempHealth); + + UUpgradeButtonDataObject* tempGold = NewObject(this); + tempGold->SetData(FText::FromString("Gold"), + FText::FromString("Gain 10 gold"), + nullptr, + this); + upgradeItems.Add(tempGold); + } + UpgradesListView->SetListItems(upgradeItems); } SetIsFocusable(true); diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp index cf954d2..394cf68 100644 --- a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp @@ -26,3 +26,12 @@ void UUpgradeButtonDataObject::SetData(TSubclassOf Weapon, UUserWidget* Parent = parent; } } + +void UUpgradeButtonDataObject::SetData(FText weaponName, FText description, TObjectPtr weaponIcon, + UUserWidget* parent) +{ + WeaponName = weaponName; + Description = description; + WeaponIcon = weaponIcon; + Parent = parent; +} diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.h b/Source/vampires/Widgets/UpgradeButtonDataObject.h index 57a89a2..150dc39 100644 --- a/Source/vampires/Widgets/UpgradeButtonDataObject.h +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.h @@ -14,17 +14,17 @@ UCLASS(BlueprintType) class VAMPIRES_API UUpgradeButtonDataObject : public UObject { GENERATED_BODY() - + public: UPROPERTY(EditAnywhere, BlueprintReadWrite) FText WeaponName; UPROPERTY(EditAnywhere, BlueprintReadWrite) FText Description; - + UPROPERTY(EditAnywhere, BlueprintReadWrite) TObjectPtr WeaponIcon; - + UPROPERTY(EditAnywhere, BlueprintReadWrite) TSubclassOf WeaponTemplate; @@ -36,4 +36,5 @@ public: void SetData(AWeapon* Weapon, UUserWidget* parent); void SetData(TSubclassOf Weapon, UUserWidget* parent); + void SetData(FText weaponName, FText description, TObjectPtr weaponIcon, UUserWidget* parent); }; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.cpp b/Source/vampires/Widgets/UpgradeButtonWidget.cpp index 25708e8..6980378 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.cpp +++ b/Source/vampires/Widgets/UpgradeButtonWidget.cpp @@ -9,9 +9,10 @@ #include "Components/Image.h" #include "Components/TextBlock.h" #include "Kismet/GameplayStatics.h" -#include "Kismet/KismetSystemLibrary.h" #include "vampires/Weapon.h" #include "UObject/UObjectBase.h" +#include "vampires/GoldComponent.h" +#include "vampires/HealthComponent.h" void UUpgradeButtonWidget::NativeConstruct() { @@ -31,14 +32,22 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) if (Item->WeaponInstance != nullptr) { - UpgradeType = EUpgradeType::Upgrade; + UpgradeType = Upgrade; WeaponInstance = Item->WeaponInstance; } else if (Item->WeaponTemplate != nullptr) { - UpgradeType = EUpgradeType::NewWeapon; + UpgradeType = NewWeapon; WeaponTemplate = Item->WeaponTemplate; } + else if (Item->WeaponName.ToString() == "Health") + { + UpgradeType = Health; + } + else if (Item->WeaponName.ToString() == "Gold") + { + UpgradeType = Gold; + } if (Body) @@ -46,28 +55,56 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked); } } - - - switch (UpgradeType) { + + + switch (UpgradeType) + { case Upgrade: UpgradeTypeIcon->SetBrushFromTexture(UpgradeIcon); break; case NewWeapon: UpgradeTypeIcon->SetBrushFromTexture(NewWeaponIcon); break; + case Health: + UpgradeTypeIcon->SetBrushFromTexture(HealthIcon); + break; + case Gold: + UpgradeTypeIcon->SetBrushFromTexture(GoldIcon); + break; default: ; } } void UUpgradeButtonWidget::OnClicked() { - switch (UpgradeType) { + APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0); + + switch (UpgradeType) + { case Upgrade: WeaponInstance->UpgradeWeapon(); break; case NewWeapon: // TODO: Spawn weapon break; + case Health: + if (playerController) + { + if (UHealthComponent* healthComponent = playerController->GetComponentByClass()) + { + healthComponent->RecoverHealth(healthComponent->GetMaxHealth() / 10.0f); + } + } + break; + case Gold: + if (playerController) + { + if (UGoldComponent* goldComponent = playerController->GetComponentByClass()) + { + goldComponent->IncrementGold(10); + } + } + break; default: ; } @@ -75,7 +112,7 @@ void UUpgradeButtonWidget::OnClicked() { Parent->RemoveFromParent(); - if (APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) + if (playerController) { UWidgetBlueprintLibrary::SetInputMode_GameOnly(playerController); playerController->bShowMouseCursor = false; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.h b/Source/vampires/Widgets/UpgradeButtonWidget.h index 818e8c7..197d0de 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.h +++ b/Source/vampires/Widgets/UpgradeButtonWidget.h @@ -13,7 +13,9 @@ UENUM(BlueprintType) enum EUpgradeType { Upgrade, - NewWeapon + NewWeapon, + Health, + Gold }; class UTextBlock; @@ -34,7 +36,7 @@ public: UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) TObjectPtr WeaponIcon; - + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) TObjectPtr WeaponNameTextBlock; @@ -47,6 +49,12 @@ public: UPROPERTY(EditDefaultsOnly) TObjectPtr NewWeaponIcon; + UPROPERTY(EditDefaultsOnly) + TObjectPtr HealthIcon; + + UPROPERTY(EditDefaultsOnly) + TObjectPtr GoldIcon; + UPROPERTY(EditDefaultsOnly) TEnumAsByte UpgradeType; @@ -61,12 +69,12 @@ public: private: UPROPERTY(meta=(BindWidget)) UImage* UpgradeTypeIcon; - + protected: virtual void NativeConstruct() override; virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; - + private: UFUNCTION() virtual void OnClicked();