[박치영] 포션 UI 기능 추가

main
pcyoung 2023-11-25 21:50:21 +09:00
parent 1bc4df3e52
commit 29d650d432
12 changed files with 105 additions and 13 deletions

View File

@ -9,7 +9,7 @@ ABaseConsumable::ABaseConsumable()
{
//초기화 구문
MaxNumberOfUses = 3;
CurrentNumberOfUses = 0;
CurrentNumberOfUses = MaxNumberOfUses;
//Settings OwnedGameplayTags
OwnedGameplayTags.AddTag(FCombatGameplayTags::Get().Item_Consumable_Potion);
@ -17,7 +17,7 @@ ABaseConsumable::ABaseConsumable()
void ABaseConsumable::UseItem()
{
if(MaxNumberOfUses < CurrentNumberOfUses)
if(CurrentNumberOfUses <= 0)
return;
ICombatInterface* ActionObjects = Cast<ICombatInterface>(GetOwner());
@ -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);
}

View File

@ -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<UAnimMontage> UseItemMontage;

View File

@ -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<ABaseConsumable>(SpawnItem))
{
if(UUI_PotionAmountText* PotionAmountText = Cast<UUI_PotionAmountText>(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

View File

@ -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<UAnimMontage> KnockdownBackMontage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage|Death", meta = (AllowPrivateAccess = "true"))
TArray<TObjectPtr<UAnimMontage>> DeathAnimations;
TObjectPtr<class UUserWidget> PotionUI;
private: //Timeline
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Timeline", meta = (AllowPrivateAccess = "true"))

View File

@ -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);
};

View File

@ -20,9 +20,3 @@ void ACombatHUD::BeginPlay()
}
}
}
void ACombatHUD::UpdateHealthPotionAmount()
{
if(!IsValid(MainUI))
return;
}

View File

@ -16,9 +16,8 @@ class D1_API ACombatHUD : public AHUD
protected:
virtual void BeginPlay() override;
public:
void UpdateHealthPotionAmount();
private:
UPROPERTY(EditDefaultsOnly, Category = UI)
TSubclassOf<class UUI_MainHUD> MainUI;
};

View File

@ -18,4 +18,6 @@ public:
TObjectPtr<class UUI_StatBar> HealthBar;
UPROPERTY(meta = (BindWidget))
TObjectPtr<class UUI_StatBar> StaminaBar;
UPROPERTY(meta = (BindWidget))
TObjectPtr<class UUI_PotionAmountText> HealthPotionAmountText;
};

View File

@ -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<ACombatPlayerCharacter>(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));
}

View File

@ -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<class UTextBlock> PotionAmountText;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess="true"))
TObjectPtr<ABaseConsumable> PotionInstance;
};