diff --git a/Content/Weapons/Garlic/BP_GarlicWeapon.uasset b/Content/Weapons/Garlic/BP_GarlicWeapon.uasset index f6cf90f..721b993 100644 --- a/Content/Weapons/Garlic/BP_GarlicWeapon.uasset +++ b/Content/Weapons/Garlic/BP_GarlicWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94c9616a6d058483bbcf98680ac21d312ba7d60916afb778878e77f2183648fd -size 23370 +oid sha256:4fdd9890fedfce0ca8761afe410dd617665a94f06c7d08f75c3d4fc645529246 +size 23475 diff --git a/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset b/Content/Widgets/LevelUp/BP_LevelUpWidget.uasset index b6d6480..0177a89 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:498d63ae069ec2024bc731e45fe4f45d91f41a11051fa6d7b231fd34a35132a1 -size 30869 +oid sha256:98a4718700ca5d0729eeb0d07aa40a2e4e8e224e1af46c46983dd3decd02edfd +size 61327 diff --git a/Content/Widgets/LevelUp/BP_Test.uasset b/Content/Widgets/LevelUp/BP_Test.uasset new file mode 100644 index 0000000..3dbf4b1 --- /dev/null +++ b/Content/Widgets/LevelUp/BP_Test.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41e922b73d25533faa71d43f33d53235c207cbd9b9cb3ca3b45f7aa5e90e7eee +size 23105 diff --git a/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset b/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset new file mode 100644 index 0000000..5b8ba41 --- /dev/null +++ b/Content/Widgets/LevelUp/BP_UpgradeButtonTemplate.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53418bb256b5fde052cf1c7bd96ec12322c618c5b9fb55546cf10e239918e771 +size 34320 diff --git a/Content/Widgets/LevelUp/Test.uasset b/Content/Widgets/LevelUp/Test.uasset new file mode 100644 index 0000000..39095bc --- /dev/null +++ b/Content/Widgets/LevelUp/Test.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c16f337e111092daf6d816ac4d6f158d20f7a439a47412d8050bf635defb094f +size 6212 diff --git a/Source/vampires/VampireCharacter.h b/Source/vampires/VampireCharacter.h index e3d676b..c70c055 100644 --- a/Source/vampires/VampireCharacter.h +++ b/Source/vampires/VampireCharacter.h @@ -7,6 +7,7 @@ #include "GameFramework/Character.h" #include "VampireCharacter.generated.h" +class AWeapon; class UWeaponInventoryComponent; class UInputAction; class UHealthComponent; @@ -22,7 +23,6 @@ public: UPaperFlipbookComponent* PaperFlipbookComponent; FVector2D PreviousMovementDirection = FVector2d(1.0f, 0.0f); - protected: UPROPERTY() UHealthComponent* HealthComponent; diff --git a/Source/vampires/Weapon.h b/Source/vampires/Weapon.h index f054a38..e85a0b0 100644 --- a/Source/vampires/Weapon.h +++ b/Source/vampires/Weapon.h @@ -23,6 +23,15 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") TObjectPtr WeaponDataAsset; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") + FText Name; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") + FText Description; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") + TObjectPtr Icon; + private: FTimerHandle WeaponTimerHandle; diff --git a/Source/vampires/WeaponInventoryComponent.cpp b/Source/vampires/WeaponInventoryComponent.cpp index 7dfef42..b82b0f0 100644 --- a/Source/vampires/WeaponInventoryComponent.cpp +++ b/Source/vampires/WeaponInventoryComponent.cpp @@ -42,3 +42,8 @@ void UWeaponInventoryComponent::AddWeaponToInventory(TSubclassOf Weapon weapon->AttachToActor(GetOwner(), FAttachmentTransformRules::KeepRelativeTransform); inventory.Add(weapon); } + +TArray UWeaponInventoryComponent::GetInventory() +{ + return inventory; +} diff --git a/Source/vampires/WeaponInventoryComponent.h b/Source/vampires/WeaponInventoryComponent.h index 8f6748c..f8e7595 100644 --- a/Source/vampires/WeaponInventoryComponent.h +++ b/Source/vampires/WeaponInventoryComponent.h @@ -36,4 +36,7 @@ public: UFUNCTION() void AddWeaponToInventory(TSubclassOf Weapon); + + UFUNCTION() + TArray GetInventory(); }; diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp index d7422a5..a306932 100644 --- a/Source/vampires/Widgets/LevelUpWidget.cpp +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -5,7 +5,14 @@ #include "Blueprint/WidgetBlueprintLibrary.h" #include "Components/Button.h" +#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" +#include "vampires/WeaponInventoryComponent.h" void ULevelUpWidget::NativeConstruct() { @@ -16,6 +23,33 @@ void ULevelUpWidget::NativeConstruct() ResumeButton->OnClicked.AddUniqueDynamic(this, &ULevelUpWidget::ResumeButtonClicked); } + if (UpgradesListView) + { + ACharacter* Player = Cast( UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); + if (!Player) return; + + UWeaponInventoryComponent* InventoryComponent = Player->GetComponentByClass(); + if (!InventoryComponent) return; + + TArray Inventory = InventoryComponent->GetInventory(); + TArray upgradeItems; + + UpgradesListView->ClearListItems(); + + for (AWeapon* weapon : Inventory) + { + UUpgradeButtonDataObject* Temp = NewObject(this); + Temp->SetData(weapon); + upgradeItems.Add(Temp); + } + + UpgradesListView->SetListItems(upgradeItems); + + // for (TSubclassOf item : UpgradeItems) + // { + // upgradeItems.Add(NewObject(this, item)); + // } + } SetIsFocusable(true); } diff --git a/Source/vampires/Widgets/LevelUpWidget.h b/Source/vampires/Widgets/LevelUpWidget.h index b596824..a0ee9c5 100644 --- a/Source/vampires/Widgets/LevelUpWidget.h +++ b/Source/vampires/Widgets/LevelUpWidget.h @@ -6,11 +6,13 @@ #include "Blueprint/UserWidget.h" #include "LevelUpWidget.generated.h" +class UUpgradeButtonDataObject; +class UListView; class UButton; /** * */ -UCLASS() +UCLASS(Blueprintable) class VAMPIRES_API ULevelUpWidget : public UUserWidget { GENERATED_BODY() @@ -20,8 +22,14 @@ public: UPROPERTY(BlueprintReadWrite, meta=(BindWidget)) UButton* ResumeButton; - virtual void NativeConstruct() override; + UPROPERTY(BlueprintReadWrite, meta=(BindWidget)) + UListView* UpgradesListView; + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray> UpgradeItems; + + virtual void NativeConstruct() override; + private: diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp new file mode 100644 index 0000000..506ef66 --- /dev/null +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "UpgradeButtonDataObject.h" + +#include "vampires/Weapon.h" + +void UUpgradeButtonDataObject::SetData(AWeapon* Weapon) +{ + WeaponName = Weapon->Name; + Description = Weapon->Description; + WeaponIcon = Weapon->Icon; + WeaponInstance = Weapon; +} + +void UUpgradeButtonDataObject::SetData(TSubclassOf Weapon) +{ + AWeapon* temp = NewObject(this, Weapon); + if (temp) + { + WeaponName = temp->Name; + Description = temp->Description; + WeaponIcon = temp->Icon; + WeaponTemplate = Weapon; + } +} diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.h b/Source/vampires/Widgets/UpgradeButtonDataObject.h new file mode 100644 index 0000000..5e980d4 --- /dev/null +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.h @@ -0,0 +1,36 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Object.h" +#include "UpgradeButtonDataObject.generated.h" + +class AWeapon; +/** + * + */ +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; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr WeaponInstance; + + void SetData(AWeapon* Weapon); + void SetData(TSubclassOf Weapon); +}; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.cpp b/Source/vampires/Widgets/UpgradeButtonWidget.cpp new file mode 100644 index 0000000..09bd2bd --- /dev/null +++ b/Source/vampires/Widgets/UpgradeButtonWidget.cpp @@ -0,0 +1,46 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "UpgradeButtonWidget.h" + +#include "UpgradeButtonDataObject.h" +#include "Components/Button.h" +#include "Components/Image.h" +#include "Components/TextBlock.h" + +void UUpgradeButtonWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (Body) + { + Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked); + } +} + +void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) +{ + UUpgradeButtonDataObject* Item = Cast(ListItemObject); + + if (Item) + { + WeaponNameTextBlock->SetText(Item->WeaponName); + DescriptionTextBlock->SetText(Item->Description); + WeaponIcon->SetBrushFromTexture(Item->WeaponIcon); + } + + + switch (UpgradeType) { + case Upgrade: + UpgradeTypeIcon->SetBrushFromTexture(UpgradeIcon); + break; + case NewWeapon: + UpgradeTypeIcon->SetBrushFromTexture(NewWeaponIcon); + break; + default: ; + } +} + +void UUpgradeButtonWidget::OnClicked() +{ +} diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.h b/Source/vampires/Widgets/UpgradeButtonWidget.h new file mode 100644 index 0000000..730dcb0 --- /dev/null +++ b/Source/vampires/Widgets/UpgradeButtonWidget.h @@ -0,0 +1,63 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/IUserObjectListEntry.h" +#include "Blueprint/UserWidget.h" +#include "UpgradeButtonWidget.generated.h" + +UENUM(BlueprintType) +enum EUpgradeType +{ + Upgrade, + NewWeapon +}; + +class UTextBlock; +class UImage; +class UButton; + +/** + * + */ +UCLASS() +class VAMPIRES_API UUpgradeButtonWidget : public UUserWidget, public IUserObjectListEntry +{ + GENERATED_BODY() + +public: + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr Body; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr WeaponIcon; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr WeaponNameTextBlock; + + UPROPERTY(EditDefaultsOnly, meta=(BindWidget)) + TObjectPtr DescriptionTextBlock; + + UPROPERTY(EditDefaultsOnly) + TObjectPtr UpgradeIcon; + + UPROPERTY(EditDefaultsOnly) + TObjectPtr NewWeaponIcon; + + UPROPERTY(EditDefaultsOnly) + TEnumAsByte UpgradeType; + +private: + UPROPERTY(meta=(BindWidget)) + UImage* UpgradeTypeIcon; + +protected: + virtual void NativeConstruct() override; + + virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override; + +private: + UFUNCTION() + virtual void OnClicked(); +};