From 23d74eddfb7b4aa0c1230c4812a84944a4dc04a6 Mon Sep 17 00:00:00 2001 From: baz Date: Thu, 6 Feb 2025 23:51:22 +0000 Subject: [PATCH] Add new weapon option to level up screen --- Source/vampires/WeaponInventoryComponent.h | 4 ++++ Source/vampires/Widgets/LevelUpWidget.cpp | 9 ++++++++ .../vampires/Widgets/UpgradeButtonWidget.cpp | 21 ++++++++++++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Source/vampires/WeaponInventoryComponent.h b/Source/vampires/WeaponInventoryComponent.h index 703a675..caf2877 100644 --- a/Source/vampires/WeaponInventoryComponent.h +++ b/Source/vampires/WeaponInventoryComponent.h @@ -15,6 +15,10 @@ class VAMPIRES_API UWeaponInventoryComponent : public UActorComponent GENERATED_BODY() public: + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray> obtainableWeapons; + UPROPERTY(EditAnywhere, BlueprintReadWrite) TArray> initialInventory; diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp index d1f41de..0620825 100644 --- a/Source/vampires/Widgets/LevelUpWidget.cpp +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -51,6 +51,15 @@ void ULevelUpWidget::NativeConstruct() } } + TArray> ObtainableWeapons = InventoryComponent->obtainableWeapons; + + for (TSubclassOf weapon : ObtainableWeapons) + { + UUpgradeButtonDataObject* Temp = NewObject(this); + Temp->SetData(weapon, this); + upgradeItems.Add(Temp); + } + if (upgradeItems.Num() == 0) { UUpgradeButtonDataObject* tempHealth = NewObject(this); diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.cpp b/Source/vampires/Widgets/UpgradeButtonWidget.cpp index 000e20a..638b532 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.cpp +++ b/Source/vampires/Widgets/UpgradeButtonWidget.cpp @@ -13,6 +13,7 @@ #include "UObject/UObjectBase.h" #include "vampires/GoldComponent.h" #include "vampires/HealthComponent.h" +#include "vampires/WeaponInventoryComponent.h" void UUpgradeButtonWidget::NativeConstruct() { @@ -49,7 +50,6 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) UpgradeType = Gold; } - if (Body) { Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked); @@ -84,28 +84,39 @@ void UUpgradeButtonWidget::OnClicked() case Upgrade: WeaponInstance->UpgradeWeapon(); break; + case NewWeapon: - // TODO: Spawn weapon + if (UWeaponInventoryComponent* Inventory = playerController->GetPawn()->GetComponentByClass< + UWeaponInventoryComponent>()) + { + Inventory->AddWeaponToInventory(WeaponTemplate); + Inventory->obtainableWeapons.Remove(WeaponTemplate); + } break; + case Health: if (playerController) { - if (UHealthComponent* healthComponent = playerController->GetComponentByClass()) + if (UHealthComponent* healthComponent = playerController->GetPawn()->GetComponentByClass< + UHealthComponent>()) { healthComponent->RecoverHealth(healthComponent->GetMaxHealth() / 10.0f); } } break; + case Gold: if (playerController) { - if (UGoldComponent* goldComponent = playerController->GetComponentByClass()) + if (UGoldComponent* goldComponent = playerController->GetPawn()->GetComponentByClass()) { goldComponent->IncrementGold(10); } } break; - default: ; + + default: + break; } if (Parent)