diff --git a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset index 32452975..4d86f80a 100644 Binary files a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset and b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset differ diff --git a/Content/InfinityBladeAdversaries/Enemy/Enemy_Frost_Giant/Enemy_Frost_Giant_All_Animation/Attacks/ExoGame_FrostGiant_Attck_Melee_Combo_Montage.uasset b/Content/InfinityBladeAdversaries/Enemy/Enemy_Frost_Giant/Enemy_Frost_Giant_All_Animation/Attacks/ExoGame_FrostGiant_Attck_Melee_Combo_Montage.uasset index cb013675..bdc1133f 100644 Binary files a/Content/InfinityBladeAdversaries/Enemy/Enemy_Frost_Giant/Enemy_Frost_Giant_All_Animation/Attacks/ExoGame_FrostGiant_Attck_Melee_Combo_Montage.uasset and b/Content/InfinityBladeAdversaries/Enemy/Enemy_Frost_Giant/Enemy_Frost_Giant_All_Animation/Attacks/ExoGame_FrostGiant_Attck_Melee_Combo_Montage.uasset differ diff --git a/Source/D1/CombatPlayerCharacter.cpp b/Source/D1/CombatPlayerCharacter.cpp index c0a79834..39f0645d 100644 --- a/Source/D1/CombatPlayerCharacter.cpp +++ b/Source/D1/CombatPlayerCharacter.cpp @@ -146,26 +146,20 @@ float ACombatPlayerCharacter::TakeDamage(float Damage, FDamageEvent const& Damag { float fDamage = Super::TakeDamage(Damage, DamageEvent, EventInstigator, DamageCauser); - UAttackDamageType* damageTypeClass = Cast(DamageEvent.DamageTypeClass->GetDefaultObject()); + const UAttackDamageType* damageTypeClass = Cast(DamageEvent.DamageTypeClass->GetDefaultObject()); if(!IsValid(damageTypeClass)) return false; if (DamageEvent.IsOfType(FPointDamageEvent::ClassID)) { const FPointDamageEvent* PointDamageEvent = static_cast(&DamageEvent); - - //스텟 관련 처리 - StatsComponent->TakeDamageOnStat(Damage); - - //앞에서 맞았는지 뒤에서 맞았는지 판별 - bHitFront = UKismetMathLibrary::InRange_FloatFloat(this->GetDotProductTo(EventInstigator->GetPawn()), -0.1f, 1.f); - LastHitInfo = PointDamageEvent->HitInfo; - - //play sound, effect - ApplyImpactEffect(damageTypeClass->DamageType); + ReceiveDamage(fDamage, PointDamageEvent, damageTypeClass, EventInstigator); - if (CanReceiveHitReaction()) - ApplyHitReaction(damageTypeClass->DamageType); + } + else if(DamageEvent.IsOfType(FRadialDamageEvent::ClassID)) + { + const FRadialDamageEvent* RadialDamageEvent = static_cast(&DamageEvent); + ReceiveDamage(fDamage, RadialDamageEvent, damageTypeClass, EventInstigator); } return fDamage; } @@ -722,6 +716,38 @@ void ACombatPlayerCharacter::ApplyImpactEffect(EDamageType InDamageType) UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), HitEmitter, LastHitInfo.Location); } +void ACombatPlayerCharacter::ReceiveDamage(float Damage, const FPointDamageEvent* pointDamageEvent, const UAttackDamageType* damageTypeClass, AController* eventInstigator) +{ + //스텟 관련 처리 + StatsComponent->TakeDamageOnStat(Damage); + + //앞에서 맞았는지 뒤에서 맞았는지 판별 + bHitFront = UKismetMathLibrary::InRange_FloatFloat(this->GetDotProductTo(eventInstigator->GetPawn()), -0.1f, 1.f); + LastHitInfo = pointDamageEvent->HitInfo; + + //play sound, effect + ApplyImpactEffect(damageTypeClass->DamageType); + + if (CanReceiveHitReaction()) + ApplyHitReaction(damageTypeClass->DamageType); +} + +void ACombatPlayerCharacter::ReceiveDamage(float Damage, const FRadialDamageEvent* radialDamageEvent, const UAttackDamageType* damageTypeClass, AController* eventInstigator) +{ + //스텟 관련 처리 + StatsComponent->TakeDamageOnStat(Damage); + + //앞에서 맞았는지 뒤에서 맞았는지 판별 + bHitFront = UKismetMathLibrary::InRange_FloatFloat(this->GetDotProductTo(eventInstigator->GetPawn()), -0.1f, 1.f); + LastHitInfo = radialDamageEvent->ComponentHits[0]; + + //play sound, effect + ApplyImpactEffect(damageTypeClass->DamageType); + + if (CanReceiveHitReaction()) + ApplyHitReaction(damageTypeClass->DamageType); +} + void ACombatPlayerCharacter::RotateToTarget() { RotateToTargetTimeLineComponent->PlayFromStart(); diff --git a/Source/D1/CombatPlayerCharacter.h b/Source/D1/CombatPlayerCharacter.h index 1f970ccd..ee1c508b 100644 --- a/Source/D1/CombatPlayerCharacter.h +++ b/Source/D1/CombatPlayerCharacter.h @@ -162,7 +162,10 @@ private: void SprintStaminaCost(); void ApplyHitReaction(EDamageType InDamageType); void ApplyImpactEffect(EDamageType InDamageType); - + + void ReceiveDamage(float Damage, const FPointDamageEvent* pointDamageEvent, const class UAttackDamageType* damageTypeClass, AController* eventInstigator); + void ReceiveDamage(float Damage, const FRadialDamageEvent* radialDamageEvent, const class UAttackDamageType* damageTypeClass, AController* eventInstigator); + //Timeline void RotateToTarget(); void StopRotateToTarget(); diff --git a/Source/D1/DamageType/AttackDamageType.h b/Source/D1/DamageType/AttackDamageType.h index da77d04a..a5a16cd9 100644 --- a/Source/D1/DamageType/AttackDamageType.h +++ b/Source/D1/DamageType/AttackDamageType.h @@ -8,7 +8,7 @@ #include "AttackDamageType.generated.h" /** - * 다른 DamageType 을 처리하고 싶으면 해당 Class 를 상속해서 EDamageType를 다르게 처리할 것 + * 다른 DamageType 을 처리하고 싶으면 해당 Class와 동일하게 UDamageType를 상속해서 만들 것 */ UCLASS() class D1_API UAttackDamageType : public UDamageType diff --git a/Source/D1/DamageType/KnockdownAttackDamageType.cpp b/Source/D1/DamageType/KnockdownAttackDamageType.cpp new file mode 100644 index 00000000..018b06ba --- /dev/null +++ b/Source/D1/DamageType/KnockdownAttackDamageType.cpp @@ -0,0 +1,9 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "DamageType/KnockdownAttackDamageType.h" + +UKnockdownAttackDamageType::UKnockdownAttackDamageType() +{ + DamageType = EDamageType::KnockdownDamage; +} diff --git a/Source/D1/DamageType/KnockdownAttackDamageType.h b/Source/D1/DamageType/KnockdownAttackDamageType.h new file mode 100644 index 00000000..204418ba --- /dev/null +++ b/Source/D1/DamageType/KnockdownAttackDamageType.h @@ -0,0 +1,19 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "DamageType/AttackDamageType.h" +#include "KnockdownAttackDamageType.generated.h" + +/** + * + */ +UCLASS() +class D1_API UKnockdownAttackDamageType : public UAttackDamageType +{ + GENERATED_BODY() + +public: + UKnockdownAttackDamageType(); +};