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

#include <EnemySpawnDefinition.h>

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

Public 멤버 함수

bool StartEnemySpawnFlow (AEnemyCharacterBase *InEnemyCharacter)
 
FORCEINLINE FMaterialOpacityTransition GetSpawnEnterMaterialTransition () const
 
- UFlowDefinitionBase(으)로부터 상속된 Public 멤버 함수
bool StartFlow (UObject *InFlowOwner)
 
void FinishFlow ()
 
void ResetFlow ()
 
FORCEINLINE bool IsRunning () const
 
FORCEINLINE UObject * GetFlowOwner () const
 

Protected 멤버 함수

virtual void HandleFlowStarted (UObject *InFlowOwner) override
 
virtual void HandleFlowFinished () override
 
virtual void HandleFlowReset () override
 
virtual void PlaySpawnFlow_Implementation (AEnemyCharacterBase *InEnemyCharacter)
 
void PlaySpawnFlow (AEnemyCharacterBase *InEnemyCharacter)
 
- UFlowDefinitionBase(으)로부터 상속된 Protected 멤버 함수
void StopFlow ()
 
void ReceiveFlowStarted (UObject *InFlowOwner)
 
void ReceiveFlowFinished ()
 
void ReceiveFlowReset ()
 

Protected 속성

FMaterialOpacityTransition SpawnEnterMaterialTransition
 

Private 멤버 함수

void ApplyMaterialTransition (AEnemyCharacterBase *InEnemyCharacter, const FMaterialOpacityTransition &InTransition)
 
void UpdateMaterialTransition ()
 
void ClearMaterialTransitionTimer ()
 
void RestoreMaterialSlots ()
 

Private 속성

TWeakObjectPtr< AEnemyCharacterBaseActiveEnemyCharacter
 
TWeakObjectPtr< UWorld > ActiveWorld
 
TArray< int32 > ActiveMaterialSlotIndices
 
TArray< TObjectPtr< UMaterialInterface > > OriginalMaterials
 
TArray< TObjectPtr< UMaterialInstanceDynamic > > DynamicMaterials
 
FTimerHandle MaterialTransitionTimerHandle
 
float MaterialTransitionStartTime = 0.0f
 
float ActiveTransitionDurationSeconds = 0.0f
 
float ActiveTransitionStartOpacity = 0.0f
 
float ActiveTransitionEndOpacity = 1.0f
 
FName ActiveOpacityParameterName = TEXT("Opacity")
 

멤버 함수 문서화

◆ ApplyMaterialTransition()

void UEnemySpawnDefinition::ApplyMaterialTransition ( AEnemyCharacterBase InEnemyCharacter,
const FMaterialOpacityTransition InTransition 
)
private
48{
51
52 if (InEnemyCharacter == nullptr)
53 {
54 FinishFlow();
55 return;
56 }
57
58 USkeletalMeshComponent* MeshComp = InEnemyCharacter->GetMesh();
59
60 if (MeshComp == nullptr)
61 {
62 FinishFlow();
63 return;
64 }
65
66 UWorld* World = InEnemyCharacter->GetWorld();
67
68 if (World == nullptr)
69 {
70 FinishFlow();
71 return;
72 }
73
74 ActiveEnemyCharacter = InEnemyCharacter;
75 ActiveWorld = World;
77 ActiveTransitionDurationSeconds = FMath::Max(InTransition.DurationSeconds, 0.0f);
80
81 const int32 NumMaterials = MeshComp->GetNumMaterials();
82
83 auto ApplyMaterialToSlot = [&](int32 InSlotIndex, UMaterialInterface* InSourceMaterial)
84 {
85 if (InSlotIndex < 0 || InSlotIndex >= NumMaterials)
86 {
87 return;
88 }
89
90 if (InSourceMaterial == nullptr)
91 {
92 return;
93 }
94
95 UMaterialInstanceDynamic* DynamicMaterial = UMaterialInstanceDynamic::Create(InSourceMaterial, this);
96
97 if (DynamicMaterial == nullptr)
98 {
99 return;
100 }
101
102 DynamicMaterial->SetScalarParameterValue(ActiveOpacityParameterName, ActiveTransitionStartOpacity);
103
104 ActiveMaterialSlotIndices.Add(InSlotIndex);
105 OriginalMaterials.Add(MeshComp->GetMaterial(InSlotIndex));
106 DynamicMaterials.Add(DynamicMaterial);
107 MeshComp->SetMaterial(InSlotIndex, DynamicMaterial);
108 };
109
110 if (const FMaterialSlotOverrideWhole* WholeOverride = InTransition.OverrideMaterial.GetPtr<FMaterialSlotOverrideWhole>())
111 {
112 for (int32 SlotIndex = 0; SlotIndex < NumMaterials; ++SlotIndex)
113 {
114 ApplyMaterialToSlot(SlotIndex, WholeOverride->OverrideMaterial.Get());
115 }
116 }
117 else if (const FMaterialSlotOverrideByIndex* IndexedOverride = InTransition.OverrideMaterial.GetPtr<FMaterialSlotOverrideByIndex>())
118 {
119 for (int32 SlotIndex = 0; SlotIndex < IndexedOverride->OverrideMaterials.Num(); ++SlotIndex)
120 {
121 ApplyMaterialToSlot(SlotIndex, IndexedOverride->OverrideMaterials[SlotIndex].Get());
122 }
123 }
124
125 if (DynamicMaterials.IsEmpty())
126 {
127 FinishFlow();
128 return;
129 }
130
132 {
133 MaterialTransitionStartTime = World->GetTimeSeconds();
134 FTimerManager& WorldTimerManager = World->GetTimerManager();
135 WorldTimerManager.SetTimer(MaterialTransitionTimerHandle, this, &ThisClass::UpdateMaterialTransition, 0.01f, true);
136 return;
137 }
138
139 for (UMaterialInstanceDynamic* DynamicMaterial : DynamicMaterials)
140 {
141 DynamicMaterial->SetScalarParameterValue(ActiveOpacityParameterName, ActiveTransitionEndOpacity);
142 }
143
144 FinishFlow();
145}
float ActiveTransitionDurationSeconds
Definition EnemySpawnDefinition.h:73
void ClearMaterialTransitionTimer()
Definition EnemySpawnDefinition.cpp:196
FName ActiveOpacityParameterName
Definition EnemySpawnDefinition.h:76
TWeakObjectPtr< AEnemyCharacterBase > ActiveEnemyCharacter
Definition EnemySpawnDefinition.h:57
TArray< TObjectPtr< UMaterialInstanceDynamic > > DynamicMaterials
Definition EnemySpawnDefinition.h:69
float ActiveTransitionStartOpacity
Definition EnemySpawnDefinition.h:74
float MaterialTransitionStartTime
Definition EnemySpawnDefinition.h:72
TArray< TObjectPtr< UMaterialInterface > > OriginalMaterials
Definition EnemySpawnDefinition.h:66
float ActiveTransitionEndOpacity
Definition EnemySpawnDefinition.h:75
TWeakObjectPtr< UWorld > ActiveWorld
Definition EnemySpawnDefinition.h:60
TArray< int32 > ActiveMaterialSlotIndices
Definition EnemySpawnDefinition.h:63
FTimerHandle MaterialTransitionTimerHandle
Definition EnemySpawnDefinition.h:71
void RestoreMaterialSlots()
Definition EnemySpawnDefinition.cpp:208
void FinishFlow()
Definition FlowDefinitionBase.cpp:23
float DurationSeconds
Definition MaterialTransitionDefinition.h:58
FInstancedStruct OverrideMaterial
Definition MaterialTransitionDefinition.h:52
FName OpacityParameterName
Definition MaterialTransitionDefinition.h:55
float StartOpacity
Definition MaterialTransitionDefinition.h:61
float EndOpacity
Definition MaterialTransitionDefinition.h:64
Definition MaterialTransitionDefinition.h:22
Definition MaterialTransitionDefinition.h:32
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ClearMaterialTransitionTimer()

void UEnemySpawnDefinition::ClearMaterialTransitionTimer ( )
private
197{
198 if (ActiveWorld.IsValid() == false)
199 {
200 return;
201 }
202
203 FTimerManager& WorldTimerManager = ActiveWorld->GetTimerManager();
204 WorldTimerManager.ClearTimer(MaterialTransitionTimerHandle);
205}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetSpawnEnterMaterialTransition()

FORCEINLINE FMaterialOpacityTransition UEnemySpawnDefinition::GetSpawnEnterMaterialTransition ( ) const
inline
31 {
33 }
FMaterialOpacityTransition SpawnEnterMaterialTransition
Definition EnemySpawnDefinition.h:53

◆ HandleFlowFinished()

void UEnemySpawnDefinition::HandleFlowFinished ( )
overrideprotectedvirtual

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

26{
27 Super::HandleFlowFinished();
30}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ HandleFlowReset()

void UEnemySpawnDefinition::HandleFlowReset ( )
overrideprotectedvirtual

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

34{
35 Super::HandleFlowReset();
38}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ HandleFlowStarted()

void UEnemySpawnDefinition::HandleFlowStarted ( UObject *  InFlowOwner)
overrideprotectedvirtual

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

19{
20 Super::HandleFlowStarted(InFlowOwner);
21 PlaySpawnFlow(Cast<AEnemyCharacterBase>(InFlowOwner));
22}
void PlaySpawnFlow(AEnemyCharacterBase *InEnemyCharacter)
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PlaySpawnFlow()

void UEnemySpawnDefinition::PlaySpawnFlow ( AEnemyCharacterBase InEnemyCharacter)
protected
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ PlaySpawnFlow_Implementation()

void UEnemySpawnDefinition::PlaySpawnFlow_Implementation ( AEnemyCharacterBase InEnemyCharacter)
protectedvirtual
42{
44}
void ApplyMaterialTransition(AEnemyCharacterBase *InEnemyCharacter, const FMaterialOpacityTransition &InTransition)
Definition EnemySpawnDefinition.cpp:47
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RestoreMaterialSlots()

void UEnemySpawnDefinition::RestoreMaterialSlots ( )
private
209{
210 AEnemyCharacterBase* EnemyCharacter = ActiveEnemyCharacter.Get();
211
212 if (USkeletalMeshComponent* MeshComp = EnemyCharacter ? EnemyCharacter->GetMesh() : nullptr)
213 {
214 for (int32 Index = 0; Index < ActiveMaterialSlotIndices.Num(); ++Index)
215 {
216 if (OriginalMaterials.IsValidIndex(Index))
217 {
218 MeshComp->SetMaterial(ActiveMaterialSlotIndices[Index], OriginalMaterials[Index]);
219 }
220 }
221 }
222
223 ActiveEnemyCharacter.Reset();
224 ActiveWorld.Reset();
226 OriginalMaterials.Reset();
227 DynamicMaterials.Reset();
228}
Definition EnemyCharacterBase.h:49
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StartEnemySpawnFlow()

bool UEnemySpawnDefinition::StartEnemySpawnFlow ( AEnemyCharacterBase InEnemyCharacter)
13{
14 return StartFlow(InEnemyCharacter);
15}
bool StartFlow(UObject *InFlowOwner)
Definition FlowDefinitionBase.cpp:7
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateMaterialTransition()

void UEnemySpawnDefinition::UpdateMaterialTransition ( )
private
149{
150 AEnemyCharacterBase* EnemyCharacter = ActiveEnemyCharacter.Get();
151
152 if (EnemyCharacter == nullptr)
153 {
154 FinishFlow();
155 return;
156 }
157
158 UWorld* World = EnemyCharacter->GetWorld();
159
160 if (World == nullptr)
161 {
162 FinishFlow();
163 return;
164 }
165
166 const float ElapsedSeconds = World->GetTimeSeconds() - MaterialTransitionStartTime;
167
168 float Alpha = 0.0f;
169
171 {
172 Alpha = FMath::Clamp(ElapsedSeconds / ActiveTransitionDurationSeconds, 0.0f, 1.0f);
173 }
174 else
175 {
176 Alpha = 1.0f;
177 }
178
179 const float Opacity = FMath::Lerp(ActiveTransitionStartOpacity, ActiveTransitionEndOpacity, Alpha);
180
181 for (UMaterialInstanceDynamic* DynamicMaterial : DynamicMaterials)
182 {
183 DynamicMaterial->SetScalarParameterValue(ActiveOpacityParameterName, Opacity);
184 }
185
186 if (Alpha + KINDA_SMALL_NUMBER < 1.0f)
187 {
188 return;
189 }
190
191 // Enter 전이 완료. FinishFlow → HandleFlowFinished → RestoreMaterialSlots로 원본 머테리얼을 복원한다.
192 FinishFlow();
193}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ ActiveEnemyCharacter

TWeakObjectPtr<AEnemyCharacterBase> UEnemySpawnDefinition::ActiveEnemyCharacter
private

◆ ActiveMaterialSlotIndices

TArray<int32> UEnemySpawnDefinition::ActiveMaterialSlotIndices
private

◆ ActiveOpacityParameterName

FName UEnemySpawnDefinition::ActiveOpacityParameterName = TEXT("Opacity")
private

◆ ActiveTransitionDurationSeconds

float UEnemySpawnDefinition::ActiveTransitionDurationSeconds = 0.0f
private

◆ ActiveTransitionEndOpacity

float UEnemySpawnDefinition::ActiveTransitionEndOpacity = 1.0f
private

◆ ActiveTransitionStartOpacity

float UEnemySpawnDefinition::ActiveTransitionStartOpacity = 0.0f
private

◆ ActiveWorld

TWeakObjectPtr<UWorld> UEnemySpawnDefinition::ActiveWorld
private

◆ DynamicMaterials

TArray<TObjectPtr<UMaterialInstanceDynamic> > UEnemySpawnDefinition::DynamicMaterials
private

◆ MaterialTransitionStartTime

float UEnemySpawnDefinition::MaterialTransitionStartTime = 0.0f
private

◆ MaterialTransitionTimerHandle

FTimerHandle UEnemySpawnDefinition::MaterialTransitionTimerHandle
private

◆ OriginalMaterials

TArray<TObjectPtr<UMaterialInterface> > UEnemySpawnDefinition::OriginalMaterials
private

◆ SpawnEnterMaterialTransition

FMaterialOpacityTransition UEnemySpawnDefinition::SpawnEnterMaterialTransition
protected

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