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

#include <WeaponBlackholeAction.h>

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

Public 멤버 함수

virtual void Enter (const FInstancedStruct &InContext) override
 
virtual void BindProjectile (AProjectileBase *InProjectile) override
 
virtual void Update (float DeltaTime) override
 
virtual void Exit () override
 

Protected 멤버 함수

void PerformPullAtLocation (const FVector &Center, float Radius, float DeltaTime)
 

Protected 속성

TObjectPtr< UCurveFloat > PullRadiusCurve = nullptr
 
float DefaultPullRadius = 400.0f
 
float PullStrength = 900.0f
 
float PullInterpSpeed = 3.0f
 
TEnumAsByte< ECollisionChannel > PullOverlapChannel = ECC_Pawn
 

Private 멤버 함수

void OnProjectileCollided (AActor *SelfActor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
 

Private 속성

FVector CachedImpactPoint = FVector::ZeroVector
 
FVector CachedGroundPosition = FVector::ZeroVector
 
float CachedSpawnAltitude = 0.0f
 
TWeakObjectPtr< UWorld > CachedWorld
 
TWeakObjectPtr< AActor > CachedAvatar
 
TWeakObjectPtr< AProjectileBaseCachedProjectile
 

상세한 설명

무기 낙하 중 적을 최종 착탄 지점으로 끌어당기는 동작.

멤버 함수 문서화

◆ BindProjectile()

void UWeaponBlackholeAction::BindProjectile ( AProjectileBase InProjectile)
overridevirtual

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

57{
58 if (InProjectile == nullptr)
59 {
60 return;
61 }
62
63 CachedProjectile = InProjectile;
64 InProjectile->OnProjectileCollidedDelegate.AddUniqueDynamic(this, &ThisClass::OnProjectileCollided);
65}
FProjectileCollidedDelegate OnProjectileCollidedDelegate
Definition ProjectileBase.h:182
TWeakObjectPtr< AProjectileBase > CachedProjectile
Definition WeaponBlackholeAction.h:103

◆ Enter()

void UWeaponBlackholeAction::Enter ( const FInstancedStruct &  InContext)
overridevirtual

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

15{
16 const FWeaponBlackholeActionContext* Context = InContext.GetPtr<FWeaponBlackholeActionContext>();
17
18 if (Context == nullptr)
19 {
20 LOG_ERROR(LogCK, "%s가 필요합니다.", NAMEOF(FWeaponBlackholeActionContext));
21 return;
22 }
23
24 Exit();
25
26 CachedAvatar = Context->GetAvatar();
30 CachedWorld = Context->GetAvatar() ? Context->GetAvatar()->GetWorld() : nullptr;
32
33 UWorld* World = CachedWorld.Get();
34
35 if (World == nullptr)
36 {
37 return;
38 }
39
40 FHitResult Hit;
41 const FVector TraceStart = CachedImpactPoint + FVector::UpVector * 100.0f;
42 const FVector TraceEnd = CachedImpactPoint - FVector::UpVector * 10000.0f;
43
44 FCollisionObjectQueryParams ObjectQuery;
45 ObjectQuery.AddObjectTypesToQuery(ECC_WorldStatic);
46
47 FCollisionQueryParams TraceParams(SCENE_QUERY_STAT(WeaponPullGroundTrace), false);
48
49 if (World->LineTraceSingleByObjectType(Hit, TraceStart, TraceEnd, ObjectQuery, TraceParams))
50 {
51 CachedGroundPosition = Hit.ImpactPoint;
52 }
53}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF(Type)
Definition CK_UE.h:30
virtual void Exit() override
Definition WeaponBlackholeAction.cpp:116
float CachedSpawnAltitude
Definition WeaponBlackholeAction.h:99
TWeakObjectPtr< AActor > CachedAvatar
Definition WeaponBlackholeAction.h:102
FVector CachedGroundPosition
Definition WeaponBlackholeAction.h:98
TWeakObjectPtr< UWorld > CachedWorld
Definition WeaponBlackholeAction.h:101
FVector CachedImpactPoint
Definition WeaponBlackholeAction.h:97
Definition WeaponBlackholeAction.h:16
FORCEINLINE AProjectileBase * GetProjectile() const
Definition WeaponBlackholeAction.h:29
FORCEINLINE AActor * GetAvatar() const
Definition WeaponBlackholeAction.h:24
FORCEINLINE float GetSpawnAltitude() const
Definition WeaponBlackholeAction.h:39
FORCEINLINE const FVector & GetImpactPoint() const
Definition WeaponBlackholeAction.h:34
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Exit()

void UWeaponBlackholeAction::Exit ( )
overridevirtual

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

117{
118 if (AProjectileBase* Projectile = CachedProjectile.Get())
119 {
120 Projectile->OnProjectileCollidedDelegate.RemoveDynamic(this, &ThisClass::OnProjectileCollided);
121 }
122
123 CachedWorld.Reset();
124 CachedAvatar.Reset();
125 CachedProjectile.Reset();
126 CachedImpactPoint = FVector::ZeroVector;
127 CachedGroundPosition = FVector::ZeroVector;
128 CachedSpawnAltitude = 0.0f;
129}
Definition ProjectileBase.h:81
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnProjectileCollided()

void UWeaponBlackholeAction::OnProjectileCollided ( AActor *  SelfActor,
AActor *  OtherActor,
FVector  NormalImpulse,
const FHitResult &  Hit 
)
private
69{
70 Exit();
71}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PerformPullAtLocation()

void UWeaponBlackholeAction::PerformPullAtLocation ( const FVector &  Center,
float  Radius,
float  DeltaTime 
)
protected
133{
134 UWorld* World = CachedWorld.Get();
135
136 if (World == nullptr)
137 {
138 return;
139 }
140
141 TArray<FOverlapResult> Overlaps;
142 FCollisionQueryParams QueryParams(SCENE_QUERY_STAT(WeaponPullBehavior), false);
143
144 if (AActor* Avatar = CachedAvatar.Get())
145 {
146 QueryParams.AddIgnoredActor(Avatar);
147 }
148
149 World->OverlapMultiByChannel(Overlaps, Center, FQuat::Identity, PullOverlapChannel, FCollisionShape::MakeSphere(Radius), QueryParams);
150
151 if (Overlaps.IsEmpty())
152 {
153 return;
154 }
155
156 TArray<AEnemyCharacterBase*> ValidEnemies;
157
158 for (const FOverlapResult& Overlap : Overlaps)
159 {
160 AEnemyCharacterBase* Enemy = Cast<AEnemyCharacterBase>(Overlap.GetActor());
161
162 if (Enemy == nullptr || Enemy->IsDead() == true)
163 {
164 continue;
165 }
166
167 if (ValidEnemies.AddUnique(Enemy) == INDEX_NONE)
168 {
169 continue;
170 }
171
172 FVector PullDirection = Center - Enemy->GetActorLocation();
173 PullDirection.Z = 0.0f;
174 PullDirection = PullDirection.GetSafeNormal();
175
176 if (PullDirection.IsNearlyZero())
177 {
178 continue;
179 }
180
181 const FVector CurrentVelocity = Enemy->GetVelocity();
182 const FVector TargetVelocity = PullDirection * PullStrength;
183 FVector NewVelocity(CurrentVelocity.X, CurrentVelocity.Y, 0.0f);
184 NewVelocity = FMath::VInterpTo(NewVelocity, TargetVelocity, DeltaTime, PullInterpSpeed);
185 Enemy->LaunchCharacter(NewVelocity, true, false);
186 }
187}
virtual bool IsDead() const
Definition CharacterBase.cpp:65
Definition EnemyCharacterBase.h:49
float PullInterpSpeed
Definition WeaponBlackholeAction.h:91
float PullStrength
Definition WeaponBlackholeAction.h:88
TEnumAsByte< ECollisionChannel > PullOverlapChannel
Definition WeaponBlackholeAction.h:94
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Update()

void UWeaponBlackholeAction::Update ( float  DeltaTime)
overridevirtual

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

75{
76 if (CachedWorld.IsValid() == false)
77 {
78 return;
79 }
80
81 const AProjectileBase* Projectile = CachedProjectile.Get();
82 float Normalized = 0.0f;
83
84 if (Projectile)
85 {
86 const float CurrentZ = Projectile->GetActorLocation().Z;
87 const float SpawnZ = CachedImpactPoint.Z + CachedSpawnAltitude;
88 const float Range = SpawnZ - CachedGroundPosition.Z;
89
90 if (Range >= KINDA_SMALL_NUMBER)
91 {
92 Normalized = FMath::Clamp((SpawnZ - CurrentZ) / Range, 0.0f, 1.0f);
93 }
94 }
95
96 float Radius = DefaultPullRadius;
97
99 {
100 Radius *= PullRadiusCurve->GetFloatValue(Normalized);
101 }
102
103 if (Radius <= KINDA_SMALL_NUMBER)
104 {
105 return;
106 }
107
108#if ENABLE_DRAW_DEBUG
109 DrawDebugSphere(CachedWorld.Get(), CachedGroundPosition, Radius, 32, FColor::Green, false, 0.05f, SDPG_Foreground, 3.0f);
110#endif
111
113}
TObjectPtr< UCurveFloat > PullRadiusCurve
Definition WeaponBlackholeAction.h:82
float DefaultPullRadius
Definition WeaponBlackholeAction.h:85
void PerformPullAtLocation(const FVector &Center, float Radius, float DeltaTime)
Definition WeaponBlackholeAction.cpp:132
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ CachedAvatar

TWeakObjectPtr<AActor> UWeaponBlackholeAction::CachedAvatar
private

◆ CachedGroundPosition

FVector UWeaponBlackholeAction::CachedGroundPosition = FVector::ZeroVector
private

◆ CachedImpactPoint

FVector UWeaponBlackholeAction::CachedImpactPoint = FVector::ZeroVector
private

◆ CachedProjectile

TWeakObjectPtr<AProjectileBase> UWeaponBlackholeAction::CachedProjectile
private

◆ CachedSpawnAltitude

float UWeaponBlackholeAction::CachedSpawnAltitude = 0.0f
private

◆ CachedWorld

TWeakObjectPtr<UWorld> UWeaponBlackholeAction::CachedWorld
private

◆ DefaultPullRadius

float UWeaponBlackholeAction::DefaultPullRadius = 400.0f
protected

◆ PullInterpSpeed

float UWeaponBlackholeAction::PullInterpSpeed = 3.0f
protected

◆ PullOverlapChannel

TEnumAsByte<ECollisionChannel> UWeaponBlackholeAction::PullOverlapChannel = ECC_Pawn
protected

◆ PullRadiusCurve

TObjectPtr<UCurveFloat> UWeaponBlackholeAction::PullRadiusCurve = nullptr
protected

◆ PullStrength

float UWeaponBlackholeAction::PullStrength = 900.0f
protected

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