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

#include <WaveInfoWidget.h>

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

Protected 멤버 함수

virtual void NativeConstruct () override
 
virtual void NativeDestruct () override
 
void UpdateEnemyCount (const int32 Count)
 
void UpdateCountdownTime (const float SecondsRemaining)
 
- UUserWidgetBase(으)로부터 상속된 Protected 멤버 함수
virtual void OnWidgetActivated ()
 
virtual void OnWidgetDeactivated ()
 
void OnPushedToLayer_Internal ()
 
void OnPoppedFromLayer_Internal ()
 
void OnActivated_Internal ()
 
void OnDeactivated_Internal ()
 

Protected 속성

TObjectPtr< UTextBlock > RemainingEnemyCount
 
TObjectPtr< UTextBlock > CurrentWaveIndex
 
TObjectPtr< UTextBlock > NextWaveCountdown
 
- UUserWidgetBase(으)로부터 상속된 Protected 속성
EWidgetState WidgetState
 
TObjectPtr< UAbilitySystemComponent > ASC
 
FGameplayTag LayerTag
 
bool bPrimary = false
 
TObjectPtr< UWidgetAnimation > AppearanceAnim
 
TObjectPtr< UWidgetAnimation > DisappearanceAnim
 

Private 멤버 함수

void ApplyRemainingEnemyCount (int32 Count)
 
void UpdateCountdownText ()
 
void StartCountdown (float Seconds)
 
void StopCountdown ()
 
void TickCountdown ()
 
void OnEnemyRemainingCountChanged (int32 RemainingCount)
 
void OnSpawnedEnemyKilled (const AEnemyCharacterBase *DiedEnemy, const int32 RemainingCount)
 
void OnUpdateWave (const FWaveDataCollection &WaveDataCollection, const int32 CurrentWaveIdx)
 

Private 속성

float NextWaveCountdownSeconds = 0.0f
 
int32 WidgetRemainingTotal = 0
 
int32 LastEnemyCountBroadcast = 0
 
int32 WidgetTotalBeforeLastBroadcast = 0
 
FTimerHandle CountdownTimerHandle
 

정적 Private 속성

static constexpr float CountdownTickInterval = 0.1f
 

추가로 상속된 멤버들

- UUserWidgetBase(으)로부터 상속된 Public 멤버 함수
virtual void SetAbilitySystemComponent (AActor *InOwner)
 
virtual UAbilitySystemComponent * GetAbilitySystemComponent () const override
 
virtual void OnPushedToLayer ()
 
virtual void OnPoppedFromLayer ()
 
virtual void OnActivated ()
 
virtual void OnDeactivated ()
 
void Activate ()
 
void Deactivate ()
 
FORCEINLINE FGameplayTag GetLayerTag () const
 
FORCEINLINE void SetLayerTag (const FGameplayTag InTag)
 
FORCEINLINE bool IsPrimary () const
 
FORCEINLINE void SetPrimary (const bool InPrimary)
 
FORCEINLINE EWidgetState GetWidgetState () const
 
FORCEINLINE void SetWidgetState (const EWidgetState InState)
 
FORCEINLINE UWaitForWidgetActivationGetActivationHandle ()
 
FORCEINLINE bool HasAppearanceAnim () const
 
FORCEINLINE bool HasDisappearanceAnim () const
 

멤버 함수 문서화

◆ ApplyRemainingEnemyCount()

void UWaveInfoWidget::ApplyRemainingEnemyCount ( int32  Count)
private
175{
176 if (UTextBlock* CountBlock = RemainingEnemyCount.Get())
177 {
178 CountBlock->SetText(FText::FromString(FString::FromInt(Count)));
179 }
180 else
181 {
182 LOG_ERROR(LogCK, "%s(%s)의 RemainingEnemyCount BindWidget 연결이 없습니다.", *GetName(), *GetClass()->GetPathName());
183 }
184
185 UpdateEnemyCount(Count);
186}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
TObjectPtr< UTextBlock > RemainingEnemyCount
Definition WaveInfoWidget.h:58
void UpdateEnemyCount(const int32 Count)
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NativeConstruct()

void UWaveInfoWidget::NativeConstruct ( )
overrideprotectedvirtual
14{
15 Super::NativeConstruct();
16
17 // 첫 브로드캐스트 전 빈 화면을 막기 위해 1-based 1번 웨이브로 초기 표시.
18 if (UTextBlock* WaveText = CurrentWaveIndex.Get())
19 {
20 WaveText->SetText(FText::FromString(TEXT("Wave : 1")));
21 }
22
24 UWorld* World = GetWorld();
25
26 if (World == nullptr)
27 {
28 return;
29 }
30
31 UStageManagementSubsystem* StageManager = World->GetSubsystem<UStageManagementSubsystem>();
32
33 if (StageManager == nullptr)
34 {
35 return;
36 }
37
39 StageManager->OnSpawnedEnemyKilled.AddDynamic(this, &UWaveInfoWidget::OnSpawnedEnemyKilled);
40 StageManager->OnWaveStarted.AddDynamic(this, &UWaveInfoWidget::OnUpdateWave);
41 StageManager->OnNextWaveCountdownStarted.AddDynamic(this, &UWaveInfoWidget::StartCountdown);
42 StageManager->OnNextWaveCountdownStopped.AddDynamic(this, &UWaveInfoWidget::StopCountdown);
43
44 const int32 InitialRemainingCount = StageManager->GetTotalSpawnRemainingCount();
45 WidgetRemainingTotal = InitialRemainingCount;
46 LastEnemyCountBroadcast = InitialRemainingCount;
48 ApplyRemainingEnemyCount(InitialRemainingCount);
49
50 const float CountdownRemaining = StageManager->GetNextWaveCountdownRemainingTime();
51
52 if (CountdownRemaining > KINDA_SMALL_NUMBER)
53 {
54 StartCountdown(CountdownRemaining);
55 }
56}
Definition StageManagementSubsystem.h:147
float GetNextWaveCountdownRemainingTime() const
Definition StageManagementSubsystem.cpp:234
int32 GetTotalSpawnRemainingCount() const
Definition StageManagementSubsystem.cpp:165
FOnSpawnedEnemyKilled OnSpawnedEnemyKilled
Definition StageManagementSubsystem.h:245
FOnWaveStarted OnWaveStarted
Definition StageManagementSubsystem.h:236
FOnEnemyRemainingCountChanged OnEnemyRemainingCountChanged
Definition StageManagementSubsystem.h:248
FOnNextWaveCountdownStarted OnNextWaveCountdownStarted
Definition StageManagementSubsystem.h:251
FOnNextWaveCountdownStopped OnNextWaveCountdownStopped
Definition StageManagementSubsystem.h:254
void OnEnemyRemainingCountChanged(int32 RemainingCount)
Definition WaveInfoWidget.cpp:79
void UpdateCountdownText()
Definition WaveInfoWidget.cpp:189
int32 WidgetTotalBeforeLastBroadcast
Definition WaveInfoWidget.h:82
int32 WidgetRemainingTotal
Definition WaveInfoWidget.h:74
void StopCountdown()
Definition WaveInfoWidget.cpp:147
void StartCountdown(float Seconds)
Definition WaveInfoWidget.cpp:124
void OnSpawnedEnemyKilled(const AEnemyCharacterBase *DiedEnemy, const int32 RemainingCount)
Definition WaveInfoWidget.cpp:92
void ApplyRemainingEnemyCount(int32 Count)
Definition WaveInfoWidget.cpp:174
TObjectPtr< UTextBlock > CurrentWaveIndex
Definition WaveInfoWidget.h:61
void OnUpdateWave(const FWaveDataCollection &WaveDataCollection, const int32 CurrentWaveIdx)
Definition WaveInfoWidget.cpp:102
int32 LastEnemyCountBroadcast
Definition WaveInfoWidget.h:78
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ NativeDestruct()

void UWaveInfoWidget::NativeDestruct ( )
overrideprotectedvirtual
60{
62
63 if (UWorld* World = GetWorld())
64 {
65 if (UStageManagementSubsystem* StageManager = World->GetSubsystem<UStageManagementSubsystem>())
66 {
67 StageManager->OnEnemyRemainingCountChanged.RemoveDynamic(this, &UWaveInfoWidget::OnEnemyRemainingCountChanged);
68 StageManager->OnSpawnedEnemyKilled.RemoveDynamic(this, &UWaveInfoWidget::OnSpawnedEnemyKilled);
69 StageManager->OnWaveStarted.RemoveDynamic(this, &UWaveInfoWidget::OnUpdateWave);
70 StageManager->OnNextWaveCountdownStarted.RemoveDynamic(this, &UWaveInfoWidget::StartCountdown);
71 StageManager->OnNextWaveCountdownStopped.RemoveDynamic(this, &UWaveInfoWidget::StopCountdown);
72 }
73 }
74
75 Super::NativeDestruct();
76}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnEnemyRemainingCountChanged()

void UWaveInfoWidget::OnEnemyRemainingCountChanged ( int32  RemainingCount)
private
80{
81 LOG_INFO(LogCK, "남은 몬스터 카운트 업데이트 (%d)", RemainingCount);
82
83 // StageManager의 CurrentWaveRemainingEnemyCount는 새 웨이브 시작 시 덮어쓰기되고
84 // 잔존 누적은 추적하지 않으므로 위젯 총합을 그대로 따라가지 않는다.
85 // 위젯 총합 갱신은 OnSpawnedEnemyKilled(킬당 1 감소) 및 OnUpdateWave(새 웨이브 합산)에서 처리하고,
86 // 본 핸들러는 OnUpdateWave가 합산에 사용할 값(이전 잔존, 새 웨이브 예정 스폰)을 캐싱만 한다.
88 LastEnemyCountBroadcast = RemainingCount;
89}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnSpawnedEnemyKilled()

void UWaveInfoWidget::OnSpawnedEnemyKilled ( const AEnemyCharacterBase DiedEnemy,
const int32  RemainingCount 
)
private
93{
94 // 잔존 몬스터가 죽을 때마다 위젯 총합을 1씩 감소시킨다.
95 // (StageManager의 카운트는 새 웨이브에서 덮어쓰기되어 잔존 누적을 잃을 수 있으므로
96 // 킬 1건당 1 감소시키는 본 신호를 권위로 사용한다.)
97 WidgetRemainingTotal = FMath::Max(WidgetRemainingTotal - 1, 0);
99}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnUpdateWave()

void UWaveInfoWidget::OnUpdateWave ( const FWaveDataCollection WaveDataCollection,
const int32  CurrentWaveIdx 
)
private
103{
104 if (UTextBlock* WaveText = CurrentWaveIndex.Get())
105 {
106 const int32 CurrentWave = CurrentWaveIdx + 1;
107 WaveText->SetText(FText::FromString("Wave : " + FString::FromInt(CurrentWave)));
108 }
109 else
110 {
111 LOG_ERROR(LogCK, "%s(%s)의 CurrentWaveIndex BindWidget 연결이 없습니다.", *GetName(), *GetClass()->GetPathName());
112 }
113
114 // 새 웨이브 시작: 직전 OnEnemyRemainingCountChanged 도착 직전의 잔존(WidgetTotalBeforeLastBroadcast)에
115 // 새 웨이브의 예정 스폰 수(LastEnemyCountBroadcast = 직전 브로드캐스트 값)를 더해 총합을 갱신한다.
116 const int32 CombinedCount = WidgetTotalBeforeLastBroadcast + LastEnemyCountBroadcast;
117 WidgetRemainingTotal = CombinedCount;
118 ApplyRemainingEnemyCount(CombinedCount);
119
120 // 다음 웨이브 카운트다운은 StageManagementSubsystem의 별도 알림으로 처리한다.
121}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StartCountdown()

void UWaveInfoWidget::StartCountdown ( float  Seconds)
private
125{
126 if (Seconds <= KINDA_SMALL_NUMBER)
127 {
129 return;
130 }
131
132 NextWaveCountdownSeconds = Seconds;
134
135 UWorld* World = GetWorld();
136
137 if (World == nullptr)
138 {
139 return;
140 }
141
142 // 기존 타이머는 SetTimer 가 자동 교체.
143 World->GetTimerManager().SetTimer(CountdownTimerHandle, this, &UWaveInfoWidget::TickCountdown, CountdownTickInterval, true);
144}
float NextWaveCountdownSeconds
Definition WaveInfoWidget.h:71
static constexpr float CountdownTickInterval
Definition WaveInfoWidget.h:68
FTimerHandle CountdownTimerHandle
Definition WaveInfoWidget.h:84
void TickCountdown()
Definition WaveInfoWidget.cpp:160
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopCountdown()

void UWaveInfoWidget::StopCountdown ( )
private
148{
150
151 if (UWorld* World = GetWorld())
152 {
153 World->GetTimerManager().ClearTimer(CountdownTimerHandle);
154 }
155
157}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ TickCountdown()

void UWaveInfoWidget::TickCountdown ( )
private
161{
164
165 if (NextWaveCountdownSeconds > 0.f)
166 {
167 return;
168 }
169
171}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateCountdownText()

void UWaveInfoWidget::UpdateCountdownText ( )
private
190{
191 if (UTextBlock* CountdownBlock = NextWaveCountdown.Get())
192 {
193 if (NextWaveCountdownSeconds > KINDA_SMALL_NUMBER)
194 {
195 CountdownBlock->SetText(FText::FromString(FString::Printf(TEXT("Next Wave : %.1fs"), NextWaveCountdownSeconds)));
196 }
197 else
198 {
199 CountdownBlock->SetText(FText::FromString(TEXT("0.0")));
200 }
201 }
202
204}
void UpdateCountdownTime(const float SecondsRemaining)
TObjectPtr< UTextBlock > NextWaveCountdown
Definition WaveInfoWidget.h:64
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateCountdownTime()

void UWaveInfoWidget::UpdateCountdownTime ( const float  SecondsRemaining)
protected
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateEnemyCount()

void UWaveInfoWidget::UpdateEnemyCount ( const int32  Count)
protected
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ CountdownTickInterval

constexpr float UWaveInfoWidget::CountdownTickInterval = 0.1f
staticconstexprprivate

◆ CountdownTimerHandle

FTimerHandle UWaveInfoWidget::CountdownTimerHandle
private

◆ CurrentWaveIndex

TObjectPtr<UTextBlock> UWaveInfoWidget::CurrentWaveIndex
protected

◆ LastEnemyCountBroadcast

int32 UWaveInfoWidget::LastEnemyCountBroadcast = 0
private

◆ NextWaveCountdown

TObjectPtr<UTextBlock> UWaveInfoWidget::NextWaveCountdown
protected

◆ NextWaveCountdownSeconds

float UWaveInfoWidget::NextWaveCountdownSeconds = 0.0f
private

◆ RemainingEnemyCount

TObjectPtr<UTextBlock> UWaveInfoWidget::RemainingEnemyCount
protected

◆ WidgetRemainingTotal

int32 UWaveInfoWidget::WidgetRemainingTotal = 0
private

◆ WidgetTotalBeforeLastBroadcast

int32 UWaveInfoWidget::WidgetTotalBeforeLastBroadcast = 0
private

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