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

#include <ProjectileBase.h>

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

Public 멤버 함수

 AProjectileBase ()
 
virtual void ForceEarlyFinish (const AActor *Terminator, const EProjectileFinishReason FinishReason)
 
virtual void OnLaunched (AActor *LauncherOwner, const FVector &InStart, const FVector &InDirectionOrTarget)
 
bool OverridePendingLaunchPath (const FVector &InStart, const FVector &InDirectionOrTarget)
 
void SetMeshWorldRotation (const FRotator &WorldRotation)
 
virtual void OnFinished (const FVector TerminatedPosition, const AActor *Terminator, EProjectileFinishReason FinishReason)
 
virtual void OnCollided (const AActor *HitTarget, const FHitResult &Hit)
 
virtual void OnInFlight (const float DeltaTime)
 
virtual void Tick (float DeltaSeconds) override
 
FORCEINLINE EProjectileState GetProjectileState () const
 
FORCEINLINE float GetElapsedTimeSinceLaunch () const
 
FORCEINLINE float GetFinishTime () const
 
FORCEINLINE UProjectilePilotComponent * GetProjectilePilotComponent () const
 
FORCEINLINE AActor * GetShootOwner () const
 
FORCEINLINE bool IsLaunched () const
 
FORCEINLINE bool ShootOwnerIsValid () const
 
- IObjectPoolingInterface(으)로부터 상속된 Public 멤버 함수
void OnSpawnFromPool ()
 
void OnReturnToPool ()
 

Public 속성

EProjectileDeactivationOption DeactivationOption = EProjectileDeactivationOption::Immediate
 
FProjectileLaunchedDelegate OnProjectileLaunchedDelegate
 
FProjectileFinishedDelegate OnProjectileFinishedDelegate
 
FProjectileCollidedDelegate OnProjectileCollidedDelegate
 
FProjectileDeactivatedDelegate OnProjectileDeactivatedDelegate
 

Protected 멤버 함수

virtual void BeginPlay () override
 
virtual void OnSpawnFromPool_Implementation () override
 
virtual void OnReturnToPool_Implementation () override
 
void ApplyPawnCollisionResponse () const
 
virtual FTransform GetCollisionParticleTransform (const AActor *OtherActor, const FHitResult &Hit) const
 

Protected 속성

float DeactivationDelay = 0.0f
 
TObjectPtr< ULevelSequence > DeactivationSequencer
 
TObjectPtr< UProjectilePilotComponent > ProjectilePilotComponent
 
TObjectPtr< UStaticMeshComponent > MeshComponent
 
EProjectileMeshRotationMode MeshRotationMode = EProjectileMeshRotationMode::FaceVelocity
 
FRotator MeshRotationRate = FRotator::ZeroRotator
 
bool bCollideWithPawn = false
 
TObjectPtr< AActor > ShootOwner
 

Private 멤버 함수

void OnProcessCollision (AActor *SelfActor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
 
void OnExplosionEffectFinished (UNiagaraComponent *NiagaraComponent)
 
void OnDeactivationProcessingFinished ()
 
void FinalizeProjectileState (const FVector ImpactPoint, const AActor *Terminator, EProjectileFinishReason FinishReason)
 
void ResetMeshRotation ()
 
void UpdateProjectileRotation (float DeltaTime)
 

Private 속성

EProjectileState CurrentProjectileState = EProjectileState::Uninitialized
 
float LaunchTime = 0.0f
 
float FinishTime = 0.0f
 
FRotator InitialMeshRotation = FRotator::ZeroRotator
 
FVector PendingLaunchStart = FVector::ZeroVector
 
FVector PendingLaunchDirectionOrTarget = FVector::ZeroVector
 
bool bHasPendingLaunchPath = false
 
FTimerHandle DeactivationTimerHandle
 

생성자 & 소멸자 문서화

◆ AProjectileBase()

AProjectileBase::AProjectileBase ( )
18{
19 PrimaryActorTick.bCanEverTick = true;
20 PrimaryActorTick.bStartWithTickEnabled = false;
21
22 MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
23 ProjectilePilotComponent = CreateDefaultSubobject<UProjectilePilotComponent>(TEXT("ProjectilePilotComponent"));
24}
TObjectPtr< UProjectilePilotComponent > ProjectilePilotComponent
Definition ProjectileBase.h:196
TObjectPtr< UStaticMeshComponent > MeshComponent
Definition ProjectileBase.h:199

멤버 함수 문서화

◆ ApplyPawnCollisionResponse()

void AProjectileBase::ApplyPawnCollisionResponse ( ) const
protected
101{
102 UPrimitiveComponent* CollisionComponent = Cast<UPrimitiveComponent>(GetRootComponent());
103 if (IsValid(CollisionComponent) == false)
104 {
105 return;
106 }
107
108 const ECollisionResponse PawnCollisionResponse = bCollideWithPawn ? ECR_Block : ECR_Ignore;
109 CollisionComponent->SetCollisionResponseToChannel(ECC_Pawn, PawnCollisionResponse);
110}
bool bCollideWithPawn
Definition ProjectileBase.h:209
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ BeginPlay()

void AProjectileBase::BeginPlay ( )
overrideprotectedvirtual

AExplosiveProjectile에서 재구현되었습니다.

28{
29 Super::BeginPlay();
30 InitialMeshRotation = MeshComponent->GetRelativeRotation();
31 AddTickPrerequisiteComponent(ProjectilePilotComponent);
32
33 OnActorHit.AddDynamic(this, &AProjectileBase::OnProcessCollision);
35}
FRotator InitialMeshRotation
Definition ProjectileBase.h:226
FProjectileCollidedDelegate OnProjectileCollidedDelegate
Definition ProjectileBase.h:182
void OnProcessCollision(AActor *SelfActor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
Definition ProjectileBase.cpp:262
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ FinalizeProjectileState()

void AProjectileBase::FinalizeProjectileState ( const FVector  ImpactPoint,
const AActor *  Terminator,
EProjectileFinishReason  FinishReason 
)
private
114{
116 SetActorTickEnabled(false);
117 ProjectilePilotComponent->ResetFlight();
118 FinishTime = GetWorld()->GetTimeSeconds();
119 OnFinished(ImpactPoint, Terminator, FinishReason);
120
121 if (OnProjectileFinishedDelegate.IsBound())
122 {
123 OnProjectileFinishedDelegate.Broadcast(this, FinishReason, Terminator);
124 }
125
126 switch (DeactivationOption)
127 {
129 {
130 const FMovieSceneSequencePlaybackSettings Settings = FMovieSceneSequencePlaybackSettings();
131 ALevelSequenceActor* OutActor = nullptr;
132
133 if (auto SequencePlayer = ULevelSequencePlayer::CreateLevelSequencePlayer(GetWorld(), DeactivationSequencer, Settings, OutActor))
134 {
135 SequencePlayer->OnFinished.AddDynamic(this, &AProjectileBase::OnDeactivationProcessingFinished);
136 SequencePlayer->Play();
137 }
138 else
139 {
140 LOG_ERROR(LogCK, "%s가 없습니다. ", NAMEOF(ULevelSequencePlayer));
142 }
143
144 break;
145 }
146
148 {
149 if (DeactivationDelay < KINDA_SMALL_NUMBER)
150 {
152 return;
153 }
154
155 auto Lambda = FTimerDelegate::CreateLambda([this]
156 {
158 });
159
160 FTimerManager& TimerManager = GetWorldTimerManager();
161 TimerManager.SetTimer(DeactivationTimerHandle, Lambda, DeactivationDelay, false);
162 break;
163 }
164
166 {
167 FTimerManager& TimerManager = GetWorldTimerManager();
168 TimerManager.ClearTimer(DeactivationTimerHandle);
169 return;
170 }
171
173 {
175 break;
176 }
177 }
178}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF(Type)
Definition CK_UE.h:30
virtual void OnFinished(const FVector TerminatedPosition, const AActor *Terminator, EProjectileFinishReason FinishReason)
Definition ProjectileBase.h:93
float DeactivationDelay
Definition ProjectileBase.h:189
float FinishTime
Definition ProjectileBase.h:223
FTimerHandle DeactivationTimerHandle
Definition ProjectileBase.h:231
EProjectileDeactivationOption DeactivationOption
Definition ProjectileBase.h:173
EProjectileState CurrentProjectileState
Definition ProjectileBase.h:217
TObjectPtr< ULevelSequence > DeactivationSequencer
Definition ProjectileBase.h:192
void OnDeactivationProcessingFinished()
Definition ProjectileBase.cpp:294
FProjectileFinishedDelegate OnProjectileFinishedDelegate
Definition ProjectileBase.h:179
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ForceEarlyFinish()

void AProjectileBase::ForceEarlyFinish ( const AActor *  Terminator,
const EProjectileFinishReason  FinishReason 
)
virtual
182{
183 if (!ensureAlwaysMsgf(CurrentProjectileState != EProjectileState::Finished, TEXT("이미 파괴된 투사체입니다. ")))
184 {
185 return;
186 }
187
188 FinalizeProjectileState(this->GetActorLocation(), Terminator, FinishReason);
189}
void FinalizeProjectileState(const FVector ImpactPoint, const AActor *Terminator, EProjectileFinishReason FinishReason)
Definition ProjectileBase.cpp:113
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetCollisionParticleTransform()

virtual FTransform AProjectileBase::GetCollisionParticleTransform ( const AActor *  OtherActor,
const FHitResult &  Hit 
) const
inlineprotectedvirtual
150 {
151 return FTransform(Hit.ImpactNormal.Rotation(), Hit.ImpactPoint);
152 }

◆ GetElapsedTimeSinceLaunch()

FORCEINLINE float AProjectileBase::GetElapsedTimeSinceLaunch ( ) const
inline
107 {
108 return GetWorld()->GetTimeSeconds() - LaunchTime;
109 }
float LaunchTime
Definition ProjectileBase.h:220

◆ GetFinishTime()

FORCEINLINE float AProjectileBase::GetFinishTime ( ) const
inline
113 {
114 return GetWorld()->GetTimeSeconds() - FinishTime;
115 }

◆ GetProjectilePilotComponent()

FORCEINLINE UProjectilePilotComponent * AProjectileBase::GetProjectilePilotComponent ( ) const
inline
119 {
121 }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetProjectileState()

FORCEINLINE EProjectileState AProjectileBase::GetProjectileState ( ) const
inline
101 {
103 }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetShootOwner()

FORCEINLINE AActor * AProjectileBase::GetShootOwner ( ) const
inline
125 {
126 return ShootOwner;
127 }
TObjectPtr< AActor > ShootOwner
Definition ProjectileBase.h:213

◆ IsLaunched()

FORCEINLINE bool AProjectileBase::IsLaunched ( ) const
inline

◆ OnCollided()

virtual void AProjectileBase::OnCollided ( const AActor *  HitTarget,
const FHitResult &  Hit 
)
inlinevirtual

AWeaponProjectile에서 재구현되었습니다.

94{ }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnDeactivationProcessingFinished()

void AProjectileBase::OnDeactivationProcessingFinished ( )
private
295{
297 {
299 }
300
301 UPoolWorldSubsystem* PoolSubsystem = GetWorld()->GetSubsystem<UPoolWorldSubsystem>();
302 ensureAlwaysMsgf(PoolSubsystem, TEXT("%s가 없습니다. "), NAMEOF(UPoolWorldSubsystem));
303 PoolSubsystem->ReturnActorToPool(this);
304}
FProjectileDeactivatedDelegate OnProjectileDeactivatedDelegate
Definition ProjectileBase.h:185
Definition PoolWorldSubsystem.h:28
void ReturnActorToPool(AActor *ActorToReturn)
Definition PoolWorldSubsystem.cpp:272
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnExplosionEffectFinished()

void AProjectileBase::OnExplosionEffectFinished ( UNiagaraComponent *  NiagaraComponent)
private
283{
284 if (!ensureAlwaysMsgf(CurrentProjectileState != EProjectileState::Finished, TEXT("이미 파괴된 투사체입니다. ")))
285 {
286 return;
287 }
288
289 UCollisionUserData* UserData = NiagaraComponent->GetAssetUserData<UCollisionUserData>();
291}
Definition ProjectileBase.h:67
TWeakObjectPtr< AActor > CachedTerminator
Definition ProjectileBase.h:72
FVector CachedImpactPoint
Definition ProjectileBase.h:75
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnFinished()

virtual void AProjectileBase::OnFinished ( const FVector  TerminatedPosition,
const AActor *  Terminator,
EProjectileFinishReason  FinishReason 
)
inlinevirtual

AExplosiveProjectile에서 재구현되었습니다.

93{ }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnInFlight()

virtual void AProjectileBase::OnInFlight ( const float  DeltaTime)
inlinevirtual
95{ }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnLaunched()

void AProjectileBase::OnLaunched ( AActor *  LauncherOwner,
const FVector &  InStart,
const FVector &  InDirectionOrTarget 
)
virtual

AExplosiveProjectile에서 재구현되었습니다.

47{
49
50 if (OnProjectileLaunchedDelegate.IsBound())
51 {
52 LOG_INFO(LogCK, "Projectile Launched");
53 OnProjectileLaunchedDelegate.Broadcast(this);
54 }
55
56 ShootOwner = LauncherOwner->GetOwner();
57 LaunchTime = GetWorld()->GetTimeSeconds();
58 PendingLaunchStart = InStart;
59 PendingLaunchDirectionOrTarget = InDirectionOrTarget;
61
62 auto Lambda = [this]()
63 {
65 {
66 return;
67 }
68
70 SetActorTickEnabled(true);
73 };
74
75 FTimerManager& TimerManager = GetWorldTimerManager();
76 TimerManager.SetTimerForNextTick(Lambda);
77}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
FVector PendingLaunchDirectionOrTarget
Definition ProjectileBase.h:228
bool bHasPendingLaunchPath
Definition ProjectileBase.h:229
FProjectileLaunchedDelegate OnProjectileLaunchedDelegate
Definition ProjectileBase.h:176
FVector PendingLaunchStart
Definition ProjectileBase.h:227

◆ OnProcessCollision()

void AProjectileBase::OnProcessCollision ( AActor *  SelfActor,
AActor *  OtherActor,
FVector  NormalImpulse,
const FHitResult &  Hit 
)
private
263{
265 {
266 return;
267 }
268
270 SetActorTickEnabled(false);
271 OnCollided(OtherActor, Hit);
272
273 if (OnProjectileCollidedDelegate.IsBound())
274 {
275 OnProjectileCollidedDelegate.Broadcast(this, OtherActor, NormalImpulse, Hit);
276 }
277
279}
virtual void OnCollided(const AActor *HitTarget, const FHitResult &Hit)
Definition ProjectileBase.h:94
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnReturnToPool_Implementation()

void AProjectileBase::OnReturnToPool_Implementation ( )
overrideprotectedvirtual

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

ADamagedProjectile, AExplosiveProjectile, AWeaponProjectile에서 재구현되었습니다.

207{
208 GetWorldTimerManager().ClearTimer(DeactivationTimerHandle);
209 ProjectilePilotComponent->ResetFlight();
212}
void ResetMeshRotation()
Definition ProjectileBase.cpp:215
virtual void OnReturnToPool_Implementation()
Definition ObjectPoolingInterface.h:30
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnSpawnFromPool_Implementation()

void AProjectileBase::OnSpawnFromPool_Implementation ( )
overrideprotectedvirtual

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

ADamagedProjectile, AExplosiveProjectile, AWeaponProjectile에서 재구현되었습니다.

193{
194 GetWorldTimerManager().ClearTimer(DeactivationTimerHandle);
195 ProjectilePilotComponent->ResetFlight();
197 LaunchTime = -1.0f;
198 FinishTime = -1.0f;
199 PendingLaunchStart = FVector::ZeroVector;
200 PendingLaunchDirectionOrTarget = FVector::ZeroVector;
201 bHasPendingLaunchPath = false;
203}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OverridePendingLaunchPath()

bool AProjectileBase::OverridePendingLaunchPath ( const FVector &  InStart,
const FVector &  InDirectionOrTarget 
)
81{
83 {
84 return false;
85 }
86
87 PendingLaunchStart = InStart;
88 PendingLaunchDirectionOrTarget = InDirectionOrTarget;
90 return true;
91}

◆ ResetMeshRotation()

void AProjectileBase::ResetMeshRotation ( )
private
216{
217 MeshComponent->SetRelativeRotation(InitialMeshRotation);
218}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetMeshWorldRotation()

void AProjectileBase::SetMeshWorldRotation ( const FRotator &  WorldRotation)
95{
96 MeshComponent->SetWorldRotation(WorldRotation);
97}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShootOwnerIsValid()

FORCEINLINE bool AProjectileBase::ShootOwnerIsValid ( ) const
inline
137 {
138 return ShootOwner.Get() != nullptr;
139 }

◆ Tick()

void AProjectileBase::Tick ( float  DeltaSeconds)
overridevirtual
39{
40 Super::Tick(DeltaSeconds);
41 UpdateProjectileRotation(DeltaSeconds);
42 this->OnInFlight(DeltaSeconds);
43}
virtual void OnInFlight(const float DeltaTime)
Definition ProjectileBase.h:95
void UpdateProjectileRotation(float DeltaTime)
Definition ProjectileBase.cpp:221
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateProjectileRotation()

void AProjectileBase::UpdateProjectileRotation ( float  DeltaTime)
private
222{
224 {
225 return;
226 }
227
228 switch (MeshRotationMode)
229 {
230 case EProjectileMeshRotationMode::None:
231 {
232 return;
233 }
234
235 case EProjectileMeshRotationMode::RotationRate:
236 {
237 MeshComponent->AddLocalRotation(MeshRotationRate * DeltaTime);
238 return;
239 }
240
241 case EProjectileMeshRotationMode::FaceVelocity:
242 {
243 const FVector CurrentVelocity = ProjectilePilotComponent->GetVelocity();
244 if (CurrentVelocity.IsNearlyZero())
245 {
246 return;
247 }
248
249 const FRotator TargetRotation = CurrentVelocity.Rotation();
250 constexpr float RotationTolerance = 0.1f;
251 if (GetActorRotation().Equals(TargetRotation, RotationTolerance) == false)
252 {
253 SetActorRotation(TargetRotation);
254 }
255
256 return;
257 }
258 }
259}
EProjectileMeshRotationMode MeshRotationMode
Definition ProjectileBase.h:202
FRotator MeshRotationRate
Definition ProjectileBase.h:205
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ bCollideWithPawn

bool AProjectileBase::bCollideWithPawn = false
protected

◆ bHasPendingLaunchPath

bool AProjectileBase::bHasPendingLaunchPath = false
private

◆ CurrentProjectileState

EProjectileState AProjectileBase::CurrentProjectileState = EProjectileState::Uninitialized
private

◆ DeactivationDelay

float AProjectileBase::DeactivationDelay = 0.0f
protected

◆ DeactivationOption

◆ DeactivationSequencer

TObjectPtr<ULevelSequence> AProjectileBase::DeactivationSequencer
protected

◆ DeactivationTimerHandle

FTimerHandle AProjectileBase::DeactivationTimerHandle
private

◆ FinishTime

float AProjectileBase::FinishTime = 0.0f
private

◆ InitialMeshRotation

FRotator AProjectileBase::InitialMeshRotation = FRotator::ZeroRotator
private

◆ LaunchTime

float AProjectileBase::LaunchTime = 0.0f
private

◆ MeshComponent

TObjectPtr<UStaticMeshComponent> AProjectileBase::MeshComponent
protected

◆ MeshRotationMode

EProjectileMeshRotationMode AProjectileBase::MeshRotationMode = EProjectileMeshRotationMode::FaceVelocity
protected

◆ MeshRotationRate

FRotator AProjectileBase::MeshRotationRate = FRotator::ZeroRotator
protected

◆ OnProjectileCollidedDelegate

FProjectileCollidedDelegate AProjectileBase::OnProjectileCollidedDelegate

◆ OnProjectileDeactivatedDelegate

FProjectileDeactivatedDelegate AProjectileBase::OnProjectileDeactivatedDelegate

◆ OnProjectileFinishedDelegate

FProjectileFinishedDelegate AProjectileBase::OnProjectileFinishedDelegate

◆ OnProjectileLaunchedDelegate

FProjectileLaunchedDelegate AProjectileBase::OnProjectileLaunchedDelegate

◆ PendingLaunchDirectionOrTarget

FVector AProjectileBase::PendingLaunchDirectionOrTarget = FVector::ZeroVector
private

◆ PendingLaunchStart

FVector AProjectileBase::PendingLaunchStart = FVector::ZeroVector
private

◆ ProjectilePilotComponent

TObjectPtr<UProjectilePilotComponent> AProjectileBase::ProjectilePilotComponent
protected

◆ ShootOwner

TObjectPtr<AActor> AProjectileBase::ShootOwner
protected

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