From cb8ca1606a366aaca74a1f51971cfc560dbbdfc2 Mon Sep 17 00:00:00 2001 From: baz <bazzadobs@live.co.uk> Date: Tue, 24 Jun 2025 16:23:58 +0100 Subject: [PATCH] Populate list view with starter weapons --- .../Weapons/FireWand/BP_FireWandWeapon.uasset | 4 +- .../LevelUp/BP_UpgradeButtonTemplate.uasset | 2 +- .../MainMenu/BP_SelectWeaponWidget.uasset | 4 +- .../MainMenu/BP_StarterButtonWIdget.uasset | 3 ++ .../vampires/Widgets/SelectWeaponWidget.cpp | 14 ++++++ Source/vampires/Widgets/SelectWeaponWidget.h | 4 ++ .../Widgets/StarterWeaponButtonDataObject.cpp | 37 ++++++++++++++ .../Widgets/StarterWeaponButtonDataObject.h | 39 +++++++++++++++ .../Widgets/StarterWeaponButtonWidget.cpp | 37 ++++++++++++++ .../Widgets/StarterWeaponButtonWidget.h | 49 +++++++++++++++++++ Source/vampires/Widgets/UpgradeButtonWidget.h | 1 + 11 files changed, 189 insertions(+), 5 deletions(-) create mode 100644 Content/Widgets/MainMenu/BP_StarterButtonWIdget.uasset create mode 100644 Source/vampires/Widgets/StarterWeaponButtonDataObject.cpp create mode 100644 Source/vampires/Widgets/StarterWeaponButtonDataObject.h create mode 100644 Source/vampires/Widgets/StarterWeaponButtonWidget.cpp create mode 100644 Source/vampires/Widgets/StarterWeaponButtonWidget.h diff --git a/Content/Weapons/FireWand/BP_FireWandWeapon.uasset b/Content/Weapons/FireWand/BP_FireWandWeapon.uasset index 7f743b6..dccdb68 100644 --- a/Content/Weapons/FireWand/BP_FireWandWeapon.uasset +++ b/Content/Weapons/FireWand/BP_FireWandWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e8956e4c7ae4a2ca79d847068342fe6a76c5a1370d39b8b92c1dc8713b4784b -size 24533 +oid sha256:53fa481533b3b4a04efcc0e1acd36e6508ca9ffc307c093498a653f9134a16df +size 24671 diff --git a/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset b/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset index 0915d33..2d2f103 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:dff06b420cd72355e62ca8a3a688e689ce59729f5ff9ed859758b3a074118eea +oid sha256:ae1b6fcace4f2168c00cb57569422bee910b313f4e4d2ef7964bde187696287b size 35553 diff --git a/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset b/Content/Widgets/MainMenu/BP_SelectWeaponWidget.uasset index 817bd02..6389df5 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:3030be4067391da9a4d1e06594278fe5eec20d81426519fd7580ca04b306e6b1 -size 31057 +oid sha256:2ec5786143e6e67bc90193fc0db42a1c9df540171914a0ad1a35e7264e7e3197 +size 37344 diff --git a/Content/Widgets/MainMenu/BP_StarterButtonWIdget.uasset b/Content/Widgets/MainMenu/BP_StarterButtonWIdget.uasset new file mode 100644 index 0000000..77214ab --- /dev/null +++ b/Content/Widgets/MainMenu/BP_StarterButtonWIdget.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f39a382b0e96995f040175ffc22c6c3217277d0f5af52487ebd7bfc59baf4e39 +size 34087 diff --git a/Source/vampires/Widgets/SelectWeaponWidget.cpp b/Source/vampires/Widgets/SelectWeaponWidget.cpp index e43c998..d74aa44 100644 --- a/Source/vampires/Widgets/SelectWeaponWidget.cpp +++ b/Source/vampires/Widgets/SelectWeaponWidget.cpp @@ -4,7 +4,10 @@ #include "SelectWeaponWidget.h" #include "MainMenuWidget.h" +#include "StarterWeaponButtonDataObject.h" +#include "UpgradeButtonDataObject.h" #include "Components/Button.h" +#include "Components/ListView.h" #include "Kismet/GameplayStatics.h" void USelectWeaponWidget::NativeConstruct() @@ -15,6 +18,17 @@ void USelectWeaponWidget::NativeConstruct() { BackButton->OnClicked.AddUniqueDynamic(this, &USelectWeaponWidget::BackButtonClicked); } + + if (UpgradesListView) + { + // Get a list of weapons that the player owns that can be upgraded + for (TSubclassOf<AWeapon> weapon : starterWeapons) + { + UStarterWeaponButtonDataObject* Temp = NewObject<UStarterWeaponButtonDataObject>(this); + Temp->SetData(weapon, this); + UpgradesListView->AddItem(Temp); + } + } } void USelectWeaponWidget::BackButtonClicked() diff --git a/Source/vampires/Widgets/SelectWeaponWidget.h b/Source/vampires/Widgets/SelectWeaponWidget.h index fda2271..b274142 100644 --- a/Source/vampires/Widgets/SelectWeaponWidget.h +++ b/Source/vampires/Widgets/SelectWeaponWidget.h @@ -7,6 +7,7 @@ #include "SelectWeaponWidget.generated.h" +class AWeapon; class UListView; class UButton; /** @@ -23,6 +24,9 @@ public: UPROPERTY(BlueprintReadWrite, meta=(BindWidget)) UListView* UpgradesListView; + + UPROPERTY(EditDefaultsOnly) + TArray<TSubclassOf<AWeapon>> starterWeapons; UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) TSubclassOf<class UUserWidget> PreviousWidget; diff --git a/Source/vampires/Widgets/StarterWeaponButtonDataObject.cpp b/Source/vampires/Widgets/StarterWeaponButtonDataObject.cpp new file mode 100644 index 0000000..b05d916 --- /dev/null +++ b/Source/vampires/Widgets/StarterWeaponButtonDataObject.cpp @@ -0,0 +1,37 @@ +// Louis Hobbs | 2024-2025 + + +#include "StarterWeaponButtonDataObject.h" + +#include "vampires/Weapon.h" + +void UStarterWeaponButtonDataObject::SetData(AWeapon* Weapon, UUserWidget* parent) +{ + WeaponName = Weapon->Name; + Description = Weapon->UpgradeDescriptions[Weapon->CurrentLevel]; + WeaponIcon = Weapon->Icon; + WeaponInstance = Weapon; + Parent = parent; +} + +void UStarterWeaponButtonDataObject::SetData(TSubclassOf<AWeapon> Weapon, UUserWidget* parent) +{ + AWeapon* temp = NewObject<AWeapon>(this, Weapon); + if (temp) + { + WeaponName = temp->Name; + Description = temp->Description; + WeaponIcon = temp->Icon; + WeaponTemplate = Weapon; + Parent = parent; + } +} + +void UStarterWeaponButtonDataObject::SetData(FText weaponName, FText description, TObjectPtr<UTexture2D> weaponIcon, + UUserWidget* parent) +{ + WeaponName = weaponName; + Description = description; + WeaponIcon = weaponIcon; + Parent = parent; +} diff --git a/Source/vampires/Widgets/StarterWeaponButtonDataObject.h b/Source/vampires/Widgets/StarterWeaponButtonDataObject.h new file mode 100644 index 0000000..3d9027c --- /dev/null +++ b/Source/vampires/Widgets/StarterWeaponButtonDataObject.h @@ -0,0 +1,39 @@ +// Louis Hobbs | 2024-2025 + +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Object.h" +#include "StarterWeaponButtonDataObject.generated.h" + +class AWeapon; +/** + * + */ +UCLASS() +class VAMPIRES_API UStarterWeaponButtonDataObject : public UObject +{ + GENERATED_BODY() +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FText WeaponName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FText Description; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr<UTexture2D> WeaponIcon; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TSubclassOf<AWeapon> WeaponTemplate; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr<AWeapon> WeaponInstance; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr<UUserWidget> Parent; + + void SetData(AWeapon* Weapon, UUserWidget* parent); + void SetData(TSubclassOf<AWeapon> Weapon, UUserWidget* parent); + void SetData(FText weaponName, FText description, TObjectPtr<UTexture2D> weaponIcon, UUserWidget* parent); +}; diff --git a/Source/vampires/Widgets/StarterWeaponButtonWidget.cpp b/Source/vampires/Widgets/StarterWeaponButtonWidget.cpp new file mode 100644 index 0000000..99e2c22 --- /dev/null +++ b/Source/vampires/Widgets/StarterWeaponButtonWidget.cpp @@ -0,0 +1,37 @@ +// Louis Hobbs | 2024-2025 + + +#include "StarterWeaponButtonWidget.h" + +#include "StarterWeaponButtonDataObject.h" +#include "Components/Button.h" +#include "Components/Image.h" +#include "Components/TextBlock.h" + +void UStarterWeaponButtonWidget::NativeConstruct() +{ + Super::NativeConstruct(); +} + +void UStarterWeaponButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) +{ + UStarterWeaponButtonDataObject* Item = Cast<UStarterWeaponButtonDataObject>(ListItemObject); + + if (Item) + { + WeaponNameTextBlock->SetText(Item->WeaponName); + DescriptionTextBlock->SetText(Item->Description); + WeaponIcon->SetBrushFromTexture(Item->WeaponIcon); + Parent = Item->Parent; + WeaponTemplate = Item->WeaponTemplate; + + if (Body) + { + Body->OnClicked.AddUniqueDynamic(this, &UStarterWeaponButtonWidget::OnClicked); + } + } +} + +void UStarterWeaponButtonWidget::OnClicked() +{ +} diff --git a/Source/vampires/Widgets/StarterWeaponButtonWidget.h b/Source/vampires/Widgets/StarterWeaponButtonWidget.h new file mode 100644 index 0000000..b1c3adc --- /dev/null +++ b/Source/vampires/Widgets/StarterWeaponButtonWidget.h @@ -0,0 +1,49 @@ +// Louis Hobbs | 2024-2025 + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/IUserObjectListEntry.h" +#include "Blueprint/UserWidget.h" +#include "StarterWeaponButtonWidget.generated.h" + +class AWeapon; +class UTextBlock; +class UImage; +class UButton; +/** + * + */ +UCLASS() +class VAMPIRES_API UStarterWeaponButtonWidget : public UUserWidget, public IUserObjectListEntry +{ + GENERATED_BODY() + +public: + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr<UButton> Body; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr<UImage> WeaponIcon; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr<UTextBlock> WeaponNameTextBlock; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr<UTextBlock> DescriptionTextBlock; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TSubclassOf<AWeapon> WeaponTemplate; + + UPROPERTY() + TObjectPtr<UUserWidget> Parent; + +protected: + virtual void NativeConstruct() override; + + virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; + +private: + UFUNCTION() + virtual void OnClicked(); +}; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.h b/Source/vampires/Widgets/UpgradeButtonWidget.h index 7ee36dd..3755ab0 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.h +++ b/Source/vampires/Widgets/UpgradeButtonWidget.h @@ -64,6 +64,7 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite) TObjectPtr<AWeapon> WeaponInstance; + UPROPERTY() TObjectPtr<UUserWidget> Parent; private: