Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
ATA_WeaponSphereTrace 클래스 참조

#include <TA_WeaponSphereTrace.h>

ATA_WeaponSphereTrace에 대한 상속 다이어그램 :
Inheritance graph
ATA_WeaponSphereTrace에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

 ATA_WeaponSphereTrace ()
 
- ATA_Trace(으)로부터 상속된 Public 멤버 함수
 ATA_Trace ()
 
virtual void ConfirmTargetingAndContinue () override
 
virtual void Tick (float DeltaSeconds) override
 
FORCEINLINE void SetCombatDataLevel (float InCombatDataLevel)
 
FORCEINLINE void SetTraceChannel (ECollisionChannel InChannel)
 
FORCEINLINE void SetSingleTrace (bool bInSingleTrace)
 
FORCEINLINE void SetMaxHitCountPerTarget (int32 InCount)
 
FORCEINLINE void SetMultiHitProfile (UDA_MultiHitProfile *InProfile)
 
FORCEINLINE void SetOverrideTraceTransform (const FTransform &InTraceTransform)
 

Protected 멤버 함수

virtual void StartTargeting (UGameplayAbility *Ability) override
 
virtual void PerformTrace (TArray< FHitResult > &OutHits) override
 
virtual void StopTargeting () override
 
- ATA_Trace(으)로부터 상속된 Protected 멤버 함수
FTransform ResolveTraceTransform () const
 
bool IsDebugEnabled () const
 

Protected 속성

EWeaponTraceMeshSource MeshSource = EWeaponTraceMeshSource::CharacterMesh
 
FName MeshComponentTag = FName("WeaponTrace")
 
FName StartSocketName = FName("BN_Weapon01")
 
FName EndSocketName = FName("BN_Weapon03_end")
 
float TraceRadius = 30.0f
 
uint8 bUseSubstepSweep: 1 = true
 
int32 MaxSubsteps = 8
 
uint8 bAddTrailSweeps: 1 = false
 
FVector PrevStart = FVector::ZeroVector
 
FVector PrevEnd = FVector::ZeroVector
 
bool bTraceSocketReady = false
 
bool bHasPrevPos = false
 
- ATA_Trace(으)로부터 상속된 Protected 속성
virtual void PerformTrace(TArray< FHitResult > &OutHits) PURE_VIRTUAL(ATA_Trace bool ProcessTraceResults ()
 
float CombatDataLevel = 1.0f
 
ECollisionChannel TraceChannel
 
bool bSingleTrace = false
 
int32 MaxHitCountPerTarget = 1
 
TObjectPtr< UDA_MultiHitProfileMultiHitProfile
 
TMap< TWeakObjectPtr< AActor >, FMultiHitTargetStateHitMap
 
TObjectPtr< ACharacter > Character
 
TObjectPtr< USkeletalMeshComponent > CharacterMesh
 
FTransform OverrideTraceTransform = FTransform::Identity
 
uint8 bHasOverrideTraceTransform: 1 = false
 

Private 멤버 함수

USkeletalMeshComponent * ResolveTraceMeshComponent () const
 

Private 속성

TObjectPtr< USkeletalMeshComponent > TraceMeshComp
 

추가로 상속된 멤버들

- ATA_Trace(으)로부터 상속된 Public 속성
FFinisherTargetDataDelegate OnFinisherTargetDataDelegate
 

생성자 & 소멸자 문서화

◆ ATA_WeaponSphereTrace()

ATA_WeaponSphereTrace::ATA_WeaponSphereTrace ( )
12{
13 TraceRadius = 30.0f;
14}
float TraceRadius
Definition TA_WeaponSphereTrace.h:48

멤버 함수 문서화

◆ PerformTrace()

void ATA_WeaponSphereTrace::PerformTrace ( TArray< FHitResult > &  OutHits)
overrideprotectedvirtual
61{
62 if (bTraceSocketReady == false || IsValid(TraceMeshComp) == false)
63 {
64 return;
65 }
66
67 const FVector CurrStart = TraceMeshComp->GetSocketLocation(StartSocketName);
68 const FVector CurrEnd = TraceMeshComp->GetSocketLocation(EndSocketName);
69
70 if (CurrStart.Equals(CurrEnd, 1.0f))
71 {
72 return;
73 }
74
75 FCollisionQueryParams Params(SCENE_QUERY_STAT(ATA_WeaponSphereTrace), false, SourceActor);
76 const FCollisionShape Shape = FCollisionShape::MakeSphere(TraceRadius);
77
78 if (bHasPrevPos == false || bUseSubstepSweep == false)
79 {
80 GetWorld()->SweepMultiByChannel(OutHits, CurrStart, CurrEnd, FQuat::Identity, TraceChannel, Shape, Params);
81 }
82 else
83 {
84 const float StartMotion = FVector::Dist(PrevStart, CurrStart);
85 const float EndMotion = FVector::Dist(PrevEnd, CurrEnd);
86 const float MaxMotion = FMath::Max(StartMotion, EndMotion);
87
88 const float DesiredStepDist = FMath::Max(TraceRadius * 0.5f, 5.0f);
89 const int32 Substeps = FMath::Clamp(FMath::CeilToInt(MaxMotion / DesiredStepDist), 1, MaxSubsteps);
90
91 for (int32 i = 1; i <= Substeps; ++i)
92 {
93 const float T = (1.0f * i) / Substeps;
94 const FVector LerpStart = FMath::Lerp(PrevStart, CurrStart, T);
95 const FVector LerpEnd = FMath::Lerp(PrevEnd, CurrEnd, T);
96
97 TArray<FHitResult> SubHits;
98 GetWorld()->SweepMultiByChannel(SubHits, LerpStart, LerpEnd, FQuat::Identity, TraceChannel, Shape, Params);
99 OutHits.Append(SubHits);
100 }
101
102 if (bAddTrailSweeps)
103 {
104 TArray<FHitResult> TrailStartHits;
105 if (StartMotion > TraceRadius)
106 {
107 GetWorld()->SweepMultiByChannel(TrailStartHits, PrevStart, CurrStart, FQuat::Identity, TraceChannel, Shape, Params);
108 }
109 OutHits.Append(TrailStartHits);
110
111 TArray<FHitResult> TrailEndHits;
112 GetWorld()->SweepMultiByChannel(TrailEndHits, PrevEnd, CurrEnd, FQuat::Identity, TraceChannel, Shape, Params);
113 OutHits.Append(TrailEndHits);
114
115#if ENABLE_DRAW_DEBUG
116 if (IsDebugEnabled())
117 {
118 const FVector StartCenter = (PrevStart + CurrStart) * 0.5f;
119 const float StartHalfHeight = (CurrStart - PrevStart).Size() * 0.5f;
120 if (StartHalfHeight > KINDA_SMALL_NUMBER)
121 {
122 const FQuat StartRot = FRotationMatrix::MakeFromZ(CurrStart - PrevStart).ToQuat();
123 const FColor StartColor = TrailStartHits.Num() > 0 ? FColor::Green : FColor::Cyan;
124 DrawDebugCapsule(GetWorld(), StartCenter, StartHalfHeight, TraceRadius, StartRot, StartColor, false, 0.5f);
125 }
126
127 const FVector EndCenter = (PrevEnd + CurrEnd) * 0.5f;
128 const float EndHalfHeight = (CurrEnd - PrevEnd).Size() * 0.5f;
129 if (EndHalfHeight > KINDA_SMALL_NUMBER)
130 {
131 const FQuat EndRot = FRotationMatrix::MakeFromZ(CurrEnd - PrevEnd).ToQuat();
132 const FColor EndColor = TrailEndHits.Num() > 0 ? FColor::Green : FColor::Orange;
133 DrawDebugCapsule(GetWorld(), EndCenter, EndHalfHeight, TraceRadius, EndRot, EndColor, false, 0.5f);
134 }
135
136 DrawDebugLine(GetWorld(), PrevStart, PrevEnd, FColor::White, false, 0.5f, 0, 1.0f);
137 DrawDebugLine(GetWorld(), CurrStart, CurrEnd, FColor::White, false, 0.5f, 0, 1.0f);
138 DrawDebugLine(GetWorld(), PrevStart, CurrStart, FColor::Cyan, false, 0.5f, 0, 1.5f);
139 DrawDebugLine(GetWorld(), PrevEnd, CurrEnd, FColor::Orange, false, 0.5f, 0, 1.5f);
140 }
141#endif
142 }
143 }
144
145 PrevStart = CurrStart;
146 PrevEnd = CurrEnd;
147 bHasPrevPos = true;
148}
ECollisionChannel TraceChannel
Definition TA_Trace.h:86
bool IsDebugEnabled() const
Definition TA_Trace.cpp:166
Definition TA_WeaponSphereTrace.h:20
FVector PrevEnd
Definition TA_WeaponSphereTrace.h:61
FName StartSocketName
Definition TA_WeaponSphereTrace.h:42
int32 MaxSubsteps
Definition TA_WeaponSphereTrace.h:54
TObjectPtr< USkeletalMeshComponent > TraceMeshComp
Definition TA_WeaponSphereTrace.h:67
bool bHasPrevPos
Definition TA_WeaponSphereTrace.h:63
uint8 bUseSubstepSweep
Definition TA_WeaponSphereTrace.h:51
bool bTraceSocketReady
Definition TA_WeaponSphereTrace.h:62
FName EndSocketName
Definition TA_WeaponSphereTrace.h:45
uint8 bAddTrailSweeps
Definition TA_WeaponSphereTrace.h:57
FVector PrevStart
Definition TA_WeaponSphereTrace.h:60
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveTraceMeshComponent()

USkeletalMeshComponent * ATA_WeaponSphereTrace::ResolveTraceMeshComponent ( ) const
private
35{
37 {
38 return CharacterMesh;
39 }
40
41 if (SourceActor == nullptr || MeshComponentTag.IsNone())
42 {
43 return nullptr;
44 }
45
46 TArray<USkeletalMeshComponent*> MeshComponents;
47 SourceActor->GetComponents<USkeletalMeshComponent>(MeshComponents);
48
49 for (USkeletalMeshComponent* MeshComp : MeshComponents)
50 {
51 if (MeshComp && MeshComp->ComponentHasTag(MeshComponentTag))
52 {
53 return MeshComp;
54 }
55 }
56
57 return nullptr;
58}
TObjectPtr< USkeletalMeshComponent > CharacterMesh
Definition TA_Trace.h:104
FName MeshComponentTag
Definition TA_WeaponSphereTrace.h:39
EWeaponTraceMeshSource MeshSource
Definition TA_WeaponSphereTrace.h:36
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StartTargeting()

void ATA_WeaponSphereTrace::StartTargeting ( UGameplayAbility *  Ability)
overrideprotectedvirtual

ATA_Trace(으)로부터 재구현되었습니다.

17{
18 Super::StartTargeting(Ability);
19 bHasPrevPos = false;
20
22
24 && TraceMeshComp->GetSkeletalMeshAsset() != nullptr
25 && TraceMeshComp->DoesSocketExist(StartSocketName)
26 && TraceMeshComp->DoesSocketExist(EndSocketName);
27
28 if (bTraceSocketReady == false)
29 {
30 LOG_ERROR(LogCKCharacter, "ATA_WeaponSphereTrace failed to resolve trace mesh or sockets");
31 }
32}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
USkeletalMeshComponent * ResolveTraceMeshComponent() const
Definition TA_WeaponSphereTrace.cpp:34
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StopTargeting()

void ATA_WeaponSphereTrace::StopTargeting ( )
overrideprotectedvirtual

ATA_Trace(으)로부터 재구현되었습니다.

151{
152 Super::StopTargeting();
153 bTraceSocketReady = false;
154 TraceMeshComp = nullptr;
155}

멤버 데이터 문서화

◆ bAddTrailSweeps

uint8 ATA_WeaponSphereTrace::bAddTrailSweeps
protected

◆ bHasPrevPos

bool ATA_WeaponSphereTrace::bHasPrevPos = false
protected

◆ bTraceSocketReady

bool ATA_WeaponSphereTrace::bTraceSocketReady = false
protected

◆ bUseSubstepSweep

uint8 ATA_WeaponSphereTrace::bUseSubstepSweep
protected

◆ EndSocketName

FName ATA_WeaponSphereTrace::EndSocketName = FName("BN_Weapon03_end")
protected

◆ MaxSubsteps

int32 ATA_WeaponSphereTrace::MaxSubsteps = 8
protected

◆ MeshComponentTag

FName ATA_WeaponSphereTrace::MeshComponentTag = FName("WeaponTrace")
protected

◆ MeshSource

EWeaponTraceMeshSource ATA_WeaponSphereTrace::MeshSource = EWeaponTraceMeshSource::CharacterMesh
protected

◆ PrevEnd

FVector ATA_WeaponSphereTrace::PrevEnd = FVector::ZeroVector
protected

◆ PrevStart

FVector ATA_WeaponSphereTrace::PrevStart = FVector::ZeroVector
protected

◆ StartSocketName

FName ATA_WeaponSphereTrace::StartSocketName = FName("BN_Weapon01")
protected

◆ TraceMeshComp

TObjectPtr<USkeletalMeshComponent> ATA_WeaponSphereTrace::TraceMeshComp
private

◆ TraceRadius

float ATA_WeaponSphereTrace::TraceRadius = 30.0f
protected

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: