diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back.uasset new file mode 100644 index 00000000..2d6448db Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back_UE4_Montage.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back_UE4_Montage.uasset new file mode 100644 index 00000000..cb173d6c Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Back_UE4_Montage.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_UE4_Montage.uasset similarity index 67% rename from Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset rename to Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_UE4_Montage.uasset index 2f169f56..1e0f54ad 100644 Binary files a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_UE4_Montage.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset index ea441b51..b47cdfae 100644 Binary files a/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset and b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset index d08b22b3..6b3392f3 100644 Binary files a/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset and b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset index 625e83d3..fbdf8366 100644 Binary files a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset and b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset b/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset index 9ce0fec5..d6e6c0fe 100644 Binary files a/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset and b/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash.uasset index 01173038..effe9269 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash_Montage.uasset index 8a2efabb..5bbdfe63 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash_Montage.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/Attack_Melee_C_Dash_Montage.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1.uasset index ac916a9a..8eb60dc2 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1_Montage.uasset index 328bb8a1..38551a55 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1_Montage.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack1_Montage.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2.uasset index caf9272b..6a5c63ea 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2_Montage.uasset index b86346ac..13c68814 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2_Montage.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack2_Montage.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3.uasset index 0dab6b91..62ae10b9 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3_Montage.uasset index ace7080e..75dfa859 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3_Montage.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_Attack3_Montage.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1.uasset index ddc85e51..f7c638dc 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1_Montage.uasset index debef909..c76dca5d 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1_Montage.uasset and b/Content/CombatSystem/CourseFiles/Animations/DualSword/Attack/DualSword_StrongAttack1_Montage.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back.uasset b/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back.uasset index 8a6a15d8..232797e7 100644 Binary files a/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back.uasset and b/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back.uasset differ diff --git a/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back_Montage.uasset b/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back_Montage.uasset new file mode 100644 index 00000000..b03aef08 Binary files /dev/null and b/Content/CombatSystem/CourseFiles/Animations/HitReactions/Standing_React_Large_Back_Montage.uasset differ diff --git a/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset b/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset index 8614e926..8c823833 100644 Binary files a/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset and b/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset differ diff --git a/Plugins/SideFX_Labs/Content/Blueprints/SideFX_Utilities_BP.uasset b/Plugins/SideFX_Labs/Content/Blueprints/SideFX_Utilities_BP.uasset index 0e5bf75c..748eadaf 100644 Binary files a/Plugins/SideFX_Labs/Content/Blueprints/SideFX_Utilities_BP.uasset and b/Plugins/SideFX_Labs/Content/Blueprints/SideFX_Utilities_BP.uasset differ diff --git a/Source/D1/Actor/BaseDualWeapon.cpp b/Source/D1/Actor/BaseDualWeapon.cpp index ee5ac9fd..e92c8852 100644 --- a/Source/D1/Actor/BaseDualWeapon.cpp +++ b/Source/D1/Actor/BaseDualWeapon.cpp @@ -110,7 +110,7 @@ void ABaseDualWeapon::OnHit_OffhandWeapon(FHitResult HitResult) if(pActor) { if(pActor->Execute_CanReceiveDamage(HitResult.GetActor())) - UGameplayStatics::ApplyPointDamage(HitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), HitResult, GetInstigatorController(), this, TSubclassOf(UDamageType::StaticClass())); + UGameplayStatics::ApplyPointDamage(HitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), HitResult, GetInstigatorController(), this, DamageTypeClass); } } @@ -120,7 +120,7 @@ void ABaseDualWeapon::OnHit_RightFoot(FHitResult HitResult) if(pActor) { if(pActor->Execute_CanReceiveDamage(HitResult.GetActor())) - UGameplayStatics::ApplyPointDamage(HitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), HitResult, GetInstigatorController(), this, TSubclassOf(UDamageType::StaticClass())); + UGameplayStatics::ApplyPointDamage(HitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), HitResult, GetInstigatorController(), this, DamageTypeClass); } } diff --git a/Source/D1/Actor/BaseWeapon.cpp b/Source/D1/Actor/BaseWeapon.cpp index e0c2c962..e8e984f4 100644 --- a/Source/D1/Actor/BaseWeapon.cpp +++ b/Source/D1/Actor/BaseWeapon.cpp @@ -5,6 +5,7 @@ #include "Components/CombatComponent.h" #include "GameFramework/Character.h" #include "Components/CollisionComponent.h" +#include "DamageType/AttackDamageType.h" #include "Interface/CombatInterface.h" #include "Definitions/CombatGameplayTags.h" #include "Kismet/GameplayStatics.h" @@ -22,6 +23,8 @@ ABaseWeapon::ABaseWeapon() CollisionComponent->SetCollisionObjectTypes(InputCollisionObjectTypes); CollisionComponent->SetDrawDebugType(EDrawDebugTrace::None); + DamageTypeClass = UAttackDamageType::StaticClass(); + //Stats Damage = 20.f; if(!FCombatGameplayTags::Get().Character_Action_Attack_LightAttack.IsValid()) @@ -74,7 +77,7 @@ void ABaseWeapon::OnHit(FHitResult hitResult) if (pActor) { if (pActor->Execute_CanReceiveDamage(hitResult.GetActor())) - UGameplayStatics::ApplyPointDamage(hitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), hitResult, GetInstigatorController(), this, TSubclassOf(UDamageType::StaticClass())); + UGameplayStatics::ApplyPointDamage(hitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), hitResult, GetInstigatorController(), this, DamageTypeClass); } } diff --git a/Source/D1/Actor/BaseWeapon.h b/Source/D1/Actor/BaseWeapon.h index cd5f5691..215d905f 100644 --- a/Source/D1/Actor/BaseWeapon.h +++ b/Source/D1/Actor/BaseWeapon.h @@ -51,6 +51,8 @@ protected: FName HandSocketName; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Initialization") ECombatType CombatType; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Initialization") + TSubclassOf DamageTypeClass; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components") TObjectPtr CombatComponent; diff --git a/Source/D1/CombatCharacter.cpp b/Source/D1/CombatCharacter.cpp index d4ef9af9..27183297 100644 --- a/Source/D1/CombatCharacter.cpp +++ b/Source/D1/CombatCharacter.cpp @@ -17,6 +17,7 @@ #include "Engine/DamageEvents.h" #include "NiagaraFunctionLibrary.h" #include "NiagaraComponent.h" +#include "DamageType/AttackDamageType.h" #include "Kismet/KismetSystemLibrary.h" #include "Kismet/KismetMathLibrary.h" #include "Kismet/GameplayStatics.h" @@ -90,7 +91,6 @@ ACombatCharacter::ACombatCharacter() SprintSpeed = 700.f; ChargeAttackTime = 0.18f; - Health = 100.f; PelvisBoneName = TEXT("pelvis"); } @@ -123,26 +123,26 @@ float ACombatCharacter::TakeDamage(float Damage, FDamageEvent const& DamageEvent { float fDamage = Super::TakeDamage(Damage, DamageEvent, EventInstigator, DamageCauser); + 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); - //Play Sound - UGameplayStatics::PlaySoundAtLocation(this, HitSound, PointDamageEvent->HitInfo.Location); - - //Hit Effect - //UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), HitEmitter, PointDamageEvent->HitInfo.Location); - UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), HitEmitter, PointDamageEvent->HitInfo.Location); + //앞에서 맞았는지 뒤에서 맞았는지 판별 + bHitFront = UKismetMathLibrary::InRange_FloatFloat(this->GetDotProductTo(EventInstigator->GetPawn()), -0.1f, 1.f); + LastHitInfo = PointDamageEvent->HitInfo; + + //play sound, effect + ApplyImpactEffect(damageTypeClass->DamageType); if (CanReceiveHitReaction()) - { - StateManagerComponent->SetCurrentState(FCombatGameplayTags::Get().Character_State_Disable); - - //Play Animation - PlayAnimMontage(HitMontage); - } + ApplyHitReaction(damageTypeClass->DamageType); } return fDamage; } @@ -615,6 +615,33 @@ void ACombatCharacter::SprintStaminaCost() } } +void ACombatCharacter::ApplyHitReaction(EDamageType InDamageType) +{ + switch (InDamageType) + { + case EDamageType::None: + PerformHitStun(); + break; + case EDamageType::MeleeDamage: + PerformHitStun(); + break; + case EDamageType::KnockdownDamage: + PerformKnockdown(); + break; + default: + break; + } +} + +void ACombatCharacter::ApplyImpactEffect(EDamageType InDamageType) +{ + //Play Sound + UGameplayStatics::PlaySoundAtLocation(this, HitSound, LastHitInfo.Location); + + //Hit Effect + UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), HitEmitter, LastHitInfo.Location); +} + void ACombatCharacter::PerformAttack(FGameplayTag attackType, int32 attackIndex) { ABaseWeapon* CurrentWeapon = CombatComponent->GetMainWeapon(); @@ -725,6 +752,38 @@ void ACombatCharacter::PerformDeath() }), 4.f, false); // 4초 후에 object 삭제 } +bool ACombatCharacter::PerformHitStun() +{ + UAnimMontage* hitMontage = nullptr; + if(bHitFront) + hitMontage = HitStunFrontMontage; + else + hitMontage = HitStunBackMontage; + + if(!IsValid(hitMontage)) + return false; + + StateManagerComponent->SetCurrentState(FCombatGameplayTags::Get().Character_State_Disable); + PlayAnimMontage(hitMontage); + return true; +} + +bool ACombatCharacter::PerformKnockdown() +{ + UAnimMontage* hitMontage = nullptr; + if(bHitFront) + hitMontage = KnockdownFrontMontage; + else + hitMontage = KnockdownBackMontage; + + if(!IsValid(hitMontage)) + return false; + + StateManagerComponent->SetCurrentState(FCombatGameplayTags::Get().Character_State_Disable); + PlayAnimMontage(hitMontage); + return true; +} + bool ACombatCharacter::CanPerformToggleCombat() { bool ReturnValue = true; diff --git a/Source/D1/CombatCharacter.h b/Source/D1/CombatCharacter.h index 69a722ea..f0948181 100644 --- a/Source/D1/CombatCharacter.h +++ b/Source/D1/CombatCharacter.h @@ -145,14 +145,18 @@ private: bool ResetChargeAttack(); void DisableSprint(); void SprintStaminaCost(); + void ApplyHitReaction(EDamageType InDamageType); + void ApplyImpactEffect(EDamageType InDamageType); private: void PerformAttack(FGameplayTag attackType, int32 attackIndex); void PerformDodge(); bool PerformAction(FGameplayTag characterState, FGameplayTag characterAction, int32 montageIndex); void PerformDeath(); + bool PerformHitStun(); + bool PerformKnockdown(); -protected: +protected: //Check Func bool CanPerformToggleCombat(); bool CanPerformAttack(); bool CanPerformDodge(); @@ -164,13 +168,10 @@ protected: public: UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components", meta=(AllowPrivateAccess="true")) TObjectPtr CombatComponent; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components", meta=(AllowPrivateAccess="true")) TObjectPtr StateManagerComponent; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components", meta=(AllowPrivateAccess="true")) TObjectPtr StatsComponent; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components", meta=(AllowPrivateAccess="true")) TObjectPtr TargetingComponent; @@ -179,30 +180,28 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hit", meta = (AllowPrivateAccess = "true")) FName PelvisBoneName; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hit", meta = (AllowPrivateAccess = "true")) - TObjectPtr HitMontage; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hit", meta = (AllowPrivateAccess = "true")) TObjectPtr HitSound; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hit", meta = (AllowPrivateAccess = "true")) TObjectPtr HitEmitter; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true")) EMovementSpeedMode MovementSpeedMode; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true")) float WalkingSpeed; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true")) float JoggingSpeed; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true")) float SprintSpeed; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats", meta = (AllowPrivateAccess = "true")) - float Health; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + TObjectPtr HitStunFrontMontage; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + TObjectPtr HitStunBackMontage; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + TObjectPtr KnockdownFrontMontage; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage", meta = (AllowPrivateAccess = "true")) + TObjectPtr KnockdownBackMontage; private: FTimerHandle StaminaTimerHandle; @@ -212,5 +211,6 @@ private: float AttackHeldTime; bool bAttackCharged; bool bCanMove = true; + bool bHitFront; + FHitResult LastHitInfo; }; - diff --git a/Source/D1/DamageType/AttackDamageType.cpp b/Source/D1/DamageType/AttackDamageType.cpp new file mode 100644 index 00000000..c85d6edd --- /dev/null +++ b/Source/D1/DamageType/AttackDamageType.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "AttackDamageType.h" + diff --git a/Source/D1/DamageType/AttackDamageType.h b/Source/D1/DamageType/AttackDamageType.h new file mode 100644 index 00000000..da77d04a --- /dev/null +++ b/Source/D1/DamageType/AttackDamageType.h @@ -0,0 +1,20 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Definitions/GameEnums.h" +#include "GameFramework/DamageType.h" +#include "AttackDamageType.generated.h" + +/** + * 다른 DamageType 을 처리하고 싶으면 해당 Class 를 상속해서 EDamageType를 다르게 처리할 것 + */ +UCLASS() +class D1_API UAttackDamageType : public UDamageType +{ + GENERATED_BODY() + +public: + EDamageType DamageType = EDamageType::MeleeDamage; +}; diff --git a/Source/D1/Definitions/GameEnums.h b/Source/D1/Definitions/GameEnums.h index 1d93f038..7443de3d 100644 --- a/Source/D1/Definitions/GameEnums.h +++ b/Source/D1/Definitions/GameEnums.h @@ -29,3 +29,10 @@ enum class ECollisionPart : uint8 RightFoot UMETA(DisplayName = "RightFoot"), }; +UENUM(BlueprintType) +enum class EDamageType : uint8 +{ + None UMETA(DisplayName = "None"), + MeleeDamage UMETA(DisplayName = "MeleeDamage"), + KnockdownDamage UMETA(DisplayName = "KnockdownDamage"), +};