From 29d650d4328f9ba4823a69fc0eab2a3511ab0790 Mon Sep 17 00:00:00 2001 From: pcyoung Date: Sat, 25 Nov 2023 21:50:21 +0900 Subject: [PATCH] =?UTF-8?q?[=EB=B0=95=EC=B9=98=EC=98=81]=20=ED=8F=AC?= =?UTF-8?q?=EC=85=98=20UI=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content/CombatSystem/UI/WBP_MainHUD.uasset | Bin 37588 -> 37737 bytes .../UI/WBP_PotionAmountText.uasset | Bin 0 -> 22981 bytes Source/D1/Actor/BaseConsumable.cpp | 13 +++++-- Source/D1/Actor/BaseConsumable.h | 7 ++++ Source/D1/CombatPlayerCharacter.cpp | 16 +++++++++ Source/D1/CombatPlayerCharacter.h | 4 ++- Source/D1/Interface/CombatInterface.h | 1 - Source/D1/UI/CombatHUD.cpp | 6 ---- Source/D1/UI/CombatHUD.h | 3 +- Source/D1/UI/UI_MainHUD.h | 2 ++ Source/D1/UI/UI_PotionAmountText.cpp | 34 ++++++++++++++++++ Source/D1/UI/UI_PotionAmountText.h | 32 +++++++++++++++++ 12 files changed, 105 insertions(+), 13 deletions(-) create mode 100644 Content/CombatSystem/UI/WBP_PotionAmountText.uasset create mode 100644 Source/D1/UI/UI_PotionAmountText.cpp create mode 100644 Source/D1/UI/UI_PotionAmountText.h diff --git a/Content/CombatSystem/UI/WBP_MainHUD.uasset b/Content/CombatSystem/UI/WBP_MainHUD.uasset index 7a358493bdafaf05908dcdeb1c50ab3751ccb200..6b17f599ccff54410d2002b96b34a1ec1c1cf654 100644 GIT binary patch delta 9532 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 diff --git a/Content/CombatSystem/UI/WBP_PotionAmountText.uasset b/Content/CombatSystem/UI/WBP_PotionAmountText.uasset new file mode 100644 index 0000000000000000000000000000000000000000..f3f8c2303fa5f2614f570888506b1ec9a5c1c0ee GIT binary patch literal 22981 zcmeHP34B!5xjzFzLV!vl$WqW7wh)%=Bmo!5%p@T!A&`VcM7Wu`lZ?#F9p>Ii7>cOW zQtI*)ms+*S>ln zbMF1lcfa#(=R4cIXWy5ne)Gf5&d#;{8O!R&*kQ_%GU@NkedkqtJn!I1Z(qV5*t~w~ z8Q>ym-&h#a}yp&*op>y>tF2vX3>u(-g$S`t?v%P>+VpCT)XB$Qdk1zegO5(SP>HV8(JO zcb7VyMQ&%Q(^X#Mb~~$zirtm&%JTBc(vqt3vY9gp#Y#gcTXZsGr&9h3J^ZUvEJD@8 z2~K}+jbW_xZ+EVH;l>Z^cNX9J!SLln8k)X!igs?sCkrnA&92+t{rk_FQ8DO%kpZk9 zF*5hZmpgLkZrZfw>Y3A)Y5`3(v>7uCN_aVA-+g~eigJ30r;5#U_T$3yMaH(Tv|#d= z%-acFEg`^lwz8wt-JxI1xPl~RRe`{AzqeI04fgn?5!ZhKph!fGHAM8V7BOS2?w&vT zNky!MF!c^MNdqge&ck1Lb2PxNfNB^^we?YdL^JAD)8DQ&`915{Q)B(>M{oo^7}P?h zGuqM;&>H-qkmhCU3nndu(p$*RiNa-m!%sMD$;30yB*|IJJk@CQMEqg1E*K7IK-9bq zsy}41MP;7^$T-PSc>N0=YhB2REYw<6Ppn?kyiIyTG}5XyuG0cbHJ`z*{O-ADKwxJe zs)Zv&wl?bbvR@Az(>&4+wY+ed7BL|B#pa-CT^?$Rg*7%L`|8&QfFE5Cu!6zfLqkD< zZsK|zmT}Le@QRkj?OG(__i8oKkcX>s*!x$l8bl>7)zn(`NQ`~3`P!chvjH0Qi0Kct zvfRj^MTjrwKRkss|3Kx{U{*TkY4_DLLQCX zvGc%ggoSF$(Mfw@e}J4c$Q`vIqIvz6A$Gm9bR3#dUx>43FZTxm+{>arefWp4yS72| zuuX@Kj5&#Jd;wiG+3?sczl5XI;4aSh$9KH?33#m4LRy4W<>l>%ZOvTK1XFTBxEt== z@{4v*<~Oc}kJ=z@U5FZ>se*Ur-csCT!4lMOf3AE!R8?oVHN)Q;;)t&u7 U!cW0 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 @@ -25,5 +25,12 @@ void ABaseConsumable::UseItem() return; ActionObjects->PerformCustomAction(FCombatGameplayTags::Get().Character_Action_Attack_UseItem, FCombatGameplayTags::Get().Character_State_GeneralActionState, UseItemMontage); - CurrentNumberOfUses++; + CurrentNumberOfUses--; + + OnConsumeUpdated.Broadcast(GetNumberOfConsumable()); +} + +int32 ABaseConsumable::GetNumberOfConsumable() +{ + return FMath::Clamp(CurrentNumberOfUses, 0, CurrentNumberOfUses); } diff --git a/Source/D1/Actor/BaseConsumable.h b/Source/D1/Actor/BaseConsumable.h index 44867e11..506cce1d 100644 --- a/Source/D1/Actor/BaseConsumable.h +++ b/Source/D1/Actor/BaseConsumable.h @@ -9,6 +9,8 @@ /** * */ +DECLARE_MULTICAST_DELEGATE_OneParam(FOnConsumeUpdated, int32) + UCLASS() class D1_API ABaseConsumable : public ABaseEquippable { @@ -18,6 +20,11 @@ public: public: virtual void UseItem() override; +public: + int32 GetNumberOfConsumable(); + +public: //Delegate + FOnConsumeUpdated OnConsumeUpdated; private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) TObjectPtr UseItemMontage; diff --git a/Source/D1/CombatPlayerCharacter.cpp b/Source/D1/CombatPlayerCharacter.cpp index 558bd305..beee2e61 100644 --- a/Source/D1/CombatPlayerCharacter.cpp +++ b/Source/D1/CombatPlayerCharacter.cpp @@ -1,6 +1,8 @@ // Copyright Epic Games, Inc. All Rights Reserved. #include "CombatPlayerCharacter.h" + +#include "CombatPlayerController.h" #include "Camera/CameraComponent.h" #include "Components/CapsuleComponent.h" #include "Components/InputComponent.h" @@ -16,10 +18,14 @@ #include "Definitions/CombatGameplayTags.h" #include "Engine/DamageEvents.h" #include "NiagaraFunctionLibrary.h" +#include "Actor/BaseConsumable.h" #include "DamageType/AttackDamageType.h" #include "Kismet/KismetSystemLibrary.h" #include "Kismet/KismetMathLibrary.h" #include "Kismet/GameplayStatics.h" +#include "UI/CombatHUD.h" +#include "UI/UI_MainHUD.h" +#include "UI/UI_PotionAmountText.h" ////////////////////////////////////////////////////////////////////////// // ACombatCharacter @@ -131,6 +137,11 @@ void ACombatPlayerCharacter::BeginPlay() { SpawnItem->OnEquipped(); EquippedItems.Add(SpawnItem); + if(ABaseConsumable* consumableItem = Cast(SpawnItem)) + { + if(UUI_PotionAmountText* PotionAmountText = Cast(PotionUI)) + PotionAmountText->InitializePotionData(consumableItem); //TODO : [UMG] 관련 부분 구조 변경 필요 + } } } @@ -432,6 +443,11 @@ void ACombatPlayerCharacter::SetMovementSpeedMode(EMovementSpeedMode NewSpeedMod } } +void ACombatPlayerCharacter::SetPotionUI(UUserWidget* potionUI) +{ + PotionUI = potionUI; +} + void ACombatPlayerCharacter::Move(const FInputActionValue& Value) { if(!bCanMove) //Value changes SetCanMove Func Call to Animnotify diff --git a/Source/D1/CombatPlayerCharacter.h b/Source/D1/CombatPlayerCharacter.h index 27f21d35..ca5e911d 100644 --- a/Source/D1/CombatPlayerCharacter.h +++ b/Source/D1/CombatPlayerCharacter.h @@ -139,6 +139,7 @@ public: public: void SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode); FORCEINLINE EMovementSpeedMode GetMovementSpeedMode() const { return MovementSpeedMode; } + void SetPotionUI(UUserWidget* potionUI); protected: //Input Funcs @@ -245,7 +246,8 @@ public: TObjectPtr KnockdownBackMontage; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage|Death", meta = (AllowPrivateAccess = "true")) TArray> DeathAnimations; - + + TObjectPtr PotionUI; private: //Timeline UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Timeline", meta = (AllowPrivateAccess = "true")) diff --git a/Source/D1/Interface/CombatInterface.h b/Source/D1/Interface/CombatInterface.h index fad25936..6385f0c9 100644 --- a/Source/D1/Interface/CombatInterface.h +++ b/Source/D1/Interface/CombatInterface.h @@ -56,5 +56,4 @@ public: virtual bool PerformCustomAction(FGameplayTag ActionTag, FGameplayTag StateTag, UAnimMontage* InMontage, float fMontagePlayRate = 1.f, bool bAutoReset = false); UFUNCTION(Category="CombatActions") virtual bool UseItemByTag(FGameplayTag ItemTag); - }; diff --git a/Source/D1/UI/CombatHUD.cpp b/Source/D1/UI/CombatHUD.cpp index 16133d64..185ca6eb 100644 --- a/Source/D1/UI/CombatHUD.cpp +++ b/Source/D1/UI/CombatHUD.cpp @@ -20,9 +20,3 @@ void ACombatHUD::BeginPlay() } } } - -void ACombatHUD::UpdateHealthPotionAmount() -{ - if(!IsValid(MainUI)) - return; -} diff --git a/Source/D1/UI/CombatHUD.h b/Source/D1/UI/CombatHUD.h index 20a338c0..a89d9b5b 100644 --- a/Source/D1/UI/CombatHUD.h +++ b/Source/D1/UI/CombatHUD.h @@ -16,9 +16,8 @@ class D1_API ACombatHUD : public AHUD protected: virtual void BeginPlay() override; + public: - void UpdateHealthPotionAmount(); -private: UPROPERTY(EditDefaultsOnly, Category = UI) TSubclassOf MainUI; }; diff --git a/Source/D1/UI/UI_MainHUD.h b/Source/D1/UI/UI_MainHUD.h index 214b18d3..ad7949f3 100644 --- a/Source/D1/UI/UI_MainHUD.h +++ b/Source/D1/UI/UI_MainHUD.h @@ -18,4 +18,6 @@ public: TObjectPtr HealthBar; UPROPERTY(meta = (BindWidget)) TObjectPtr StaminaBar; + UPROPERTY(meta = (BindWidget)) + TObjectPtr HealthPotionAmountText; }; diff --git a/Source/D1/UI/UI_PotionAmountText.cpp b/Source/D1/UI/UI_PotionAmountText.cpp new file mode 100644 index 00000000..24aea941 --- /dev/null +++ b/Source/D1/UI/UI_PotionAmountText.cpp @@ -0,0 +1,34 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "UI/UI_PotionAmountText.h" + +#include "CombatPlayerCharacter.h" +#include "Actor/BaseConsumable.h" +#include "Components/TextBlock.h" +#include "Kismet/GameplayStatics.h" + +void UUI_PotionAmountText::NativeConstruct() +{ + Super::NativeConstruct(); + + ACombatPlayerCharacter* player = Cast(UGameplayStatics::GetPlayerController(this, 0)->GetPawn()); + if(player) //TODO : [UMG] 관련 부분 구조 변경 필요 + player->SetPotionUI(this); +} + +void UUI_PotionAmountText::InitializePotionData(ABaseConsumable* instance) +{ + if(instance != nullptr) + { + PotionInstance = instance; + PotionInstance->OnConsumeUpdated.AddUObject(this, &UUI_PotionAmountText::SetPotionAmount); + SetPotionAmount(PotionInstance->GetNumberOfConsumable()); + } +} + +void UUI_PotionAmountText::SetPotionAmount(int32 amount) +{ + FString potionStr = FString::Printf(TEXT("%d"), amount); + PotionAmountText->SetText(FText::FromString(potionStr)); +} diff --git a/Source/D1/UI/UI_PotionAmountText.h b/Source/D1/UI/UI_PotionAmountText.h new file mode 100644 index 00000000..8d0c653a --- /dev/null +++ b/Source/D1/UI/UI_PotionAmountText.h @@ -0,0 +1,32 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "UI_PotionAmountText.generated.h" + +/** + * + */ +class ABaseConsumable; + +UCLASS() +class D1_API UUI_PotionAmountText : public UUserWidget +{ + GENERATED_BODY() + +protected: + virtual void NativeConstruct() override; +public: + void InitializePotionData(ABaseConsumable* instance); + //Delegate + void SetPotionAmount(int32 amount); + +private: + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(BindWidget, AllowPrivateAccess="true")) + TObjectPtr PotionAmountText; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess="true")) + TObjectPtr PotionInstance; +};