diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index b1c2dcf5..f4db7e47 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -153,4 +153,6 @@ ManualIPAddress= +PropertyRedirects=(OldName="/Script/D1.CombatPlayerCharacter.Weapon",NewName="/Script/D1.CombatPlayerCharacter.StartingEquipment") +PropertyRedirects=(OldName="/Script/D1.CombatPlayerCharacter.StartingEquipment",NewName="/Script/D1.CombatPlayerCharacter.EquippedItems") +PropertyRedirects=(OldName="/Script/D1.CombatPlayerCharacter.EquippedItems",NewName="/Script/D1.CombatPlayerCharacter.StartingEquipments") ++PropertyRedirects=(OldName="/Script/D1.BaseConsumable.NumberOfUses",NewName="/Script/D1.BaseConsumable.CurrentNumberOfUses") ++PropertyRedirects=(OldName="/Script/D1.BaseConsumable.NumberOfUses",NewName="/Script/D1.BaseConsumable.CurrentNumberOfUses") diff --git a/Content/CombatSystem/CourseFiles/UI/T_UI_Potion_Health.uasset b/Content/CombatSystem/CourseFiles/UI/T_UI_Potion_Health.uasset index a61df8d2..684262ec 100644 Binary files a/Content/CombatSystem/CourseFiles/UI/T_UI_Potion_Health.uasset and b/Content/CombatSystem/CourseFiles/UI/T_UI_Potion_Health.uasset differ diff --git a/Content/CombatSystem/UI/WBP_MainHUD.uasset b/Content/CombatSystem/UI/WBP_MainHUD.uasset index c331b5c6..7a358493 100644 Binary files a/Content/CombatSystem/UI/WBP_MainHUD.uasset and b/Content/CombatSystem/UI/WBP_MainHUD.uasset differ diff --git a/Source/D1/Actor/BaseConsumable.cpp b/Source/D1/Actor/BaseConsumable.cpp index 08621069..34fc46e4 100644 --- a/Source/D1/Actor/BaseConsumable.cpp +++ b/Source/D1/Actor/BaseConsumable.cpp @@ -7,15 +7,23 @@ ABaseConsumable::ABaseConsumable() { + //초기화 구문 + MaxNumberOfUses = 3; + CurrentNumberOfUses = 0; + //Settings OwnedGameplayTags OwnedGameplayTags.AddTag(FCombatGameplayTags::Get().Item_Consumable_Potion); } void ABaseConsumable::UseItem() { + if(MaxNumberOfUses < CurrentNumberOfUses) + return; + ICombatInterface* ActionObjects = Cast(GetOwner()); if(!ActionObjects) return; ActionObjects->PerformCustomAction(FCombatGameplayTags::Get().Character_Action_Attack_UseItem, FCombatGameplayTags::Get().Character_State_GeneralActionState, UseItemMontage); + CurrentNumberOfUses++; } diff --git a/Source/D1/Actor/BaseConsumable.h b/Source/D1/Actor/BaseConsumable.h index 8dc11936..44867e11 100644 --- a/Source/D1/Actor/BaseConsumable.h +++ b/Source/D1/Actor/BaseConsumable.h @@ -21,4 +21,9 @@ public: private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) TObjectPtr UseItemMontage; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + int32 CurrentNumberOfUses; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + int32 MaxNumberOfUses; }; diff --git a/Source/D1/CombatPlayerCharacter.cpp b/Source/D1/CombatPlayerCharacter.cpp index 30413115..558bd305 100644 --- a/Source/D1/CombatPlayerCharacter.cpp +++ b/Source/D1/CombatPlayerCharacter.cpp @@ -605,7 +605,8 @@ void ACombatPlayerCharacter::StopBlocking(const FInputActionValue& Value) void ACombatPlayerCharacter::UseItem(const FInputActionValue& Value) { - UseItemByTag(FCombatGameplayTags::Get().Item_Consumable); + if(CanUseItem()) + UseItemByTag(FCombatGameplayTags::Get().Item_Consumable); } void ACombatPlayerCharacter::CharacterStateBegin(FGameplayTag CharState) @@ -1042,6 +1043,23 @@ bool ACombatPlayerCharacter::CanPerformBlock() return ReturnValue; } +bool ACombatPlayerCharacter::CanUseItem() +{ + bool ReturnValue = true; + + FGameplayTagContainer inputContainer; + inputContainer.AddTag(FCombatGameplayTags::Get().Character_State_Attacking); + inputContainer.AddTag(FCombatGameplayTags::Get().Character_State_Dodging); + inputContainer.AddTag(FCombatGameplayTags::Get().Character_State_Dead); + inputContainer.AddTag(FCombatGameplayTags::Get().Character_State_Disable); + inputContainer.AddTag(FCombatGameplayTags::Get().Character_State_GeneralActionState); + + ReturnValue &= !StateManagerComponent->IsCurrentStateEqualToAny(inputContainer); + ReturnValue &= (StatsComponent->GetCurrentStatValue(EStats::Stamina) >= 10.f); + + return ReturnValue; +} + FGameplayTag ACombatPlayerCharacter::GetDesiredAttackType() { if (GetCharacterMovement()->IsFalling()) diff --git a/Source/D1/CombatPlayerCharacter.h b/Source/D1/CombatPlayerCharacter.h index cc0b134d..27f21d35 100644 --- a/Source/D1/CombatPlayerCharacter.h +++ b/Source/D1/CombatPlayerCharacter.h @@ -200,6 +200,7 @@ protected: //Check Func bool CanReceiveHitReaction(); bool CanPerformSprint(); bool CanPerformBlock(); + bool CanUseItem(); FGameplayTag GetDesiredAttackType(); bool WasHitBlocked(); diff --git a/Source/D1/UI/CombatHUD.cpp b/Source/D1/UI/CombatHUD.cpp index 185ca6eb..16133d64 100644 --- a/Source/D1/UI/CombatHUD.cpp +++ b/Source/D1/UI/CombatHUD.cpp @@ -20,3 +20,9 @@ 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 15a1d7f7..20a338c0 100644 --- a/Source/D1/UI/CombatHUD.h +++ b/Source/D1/UI/CombatHUD.h @@ -16,6 +16,8 @@ class D1_API ACombatHUD : public AHUD protected: virtual void BeginPlay() override; +public: + void UpdateHealthPotionAmount(); private: UPROPERTY(EditDefaultsOnly, Category = UI) TSubclassOf MainUI;