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: