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

#include <StageManagementSubsystem.h>

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

Public 멤버 함수

virtual void Deinitialize () override
 
virtual void OnLevelLoaded (ULevel *NewLevel, const ULevelStreamingData *LevelStreamingData) override
 
virtual void OnLevelUnloaded () override
 
virtual void OnLevelStreamingStarted () override
 
virtual void OnLevelStreamingEnded () override
 
void SetCurrentWaveRemainingEnemyCount (int32 Count)
 
void IncreaseCurrentWaveRemainingEnemyCount (int32 Count)
 
void DecreaseCurrentWaveRemainingEnemyCount (int32 Count=1)
 
void NotifyNextWaveCountdownStarted (float Duration)
 
void NotifyNextWaveCountdownStopped ()
 
ASpawnHubGetOrCreateSpawnHub ()
 
TargetableQuery GetStageTargetableQueryHandle () const
 
int32 GetTotalSpawnRemainingCount () const
 
int32 GetCurrentWaveRemainingEnemyCount () const
 
int32 GetSpawnedEnemyCount () const
 
void NotifyEnemyRemainingCountChanged ()
 
float GetNextWaveCountdownRemainingTime () const
 
bool IsNextWaveCountdownActive () const
 
FStageManagementHandle GetStageManagementHandle ()
 
void RegisterListener (const FName EventID, UStageEventListenerComponent *Listener)
 
void UnregisterListener (const FName EventID, UStageEventListenerComponent *Listener)
 
void DispatchStageEvent (const FName EventID, const AActor *Caller, const AActor *Sender)
 
int32 GetProcessorTriggerCount (const UStageEventProcessor *Processor) const
 
int32 IncrementProcessorTriggerCount (const UStageEventProcessor *Processor)
 
int32 DecrementProcessorTriggerCount (const UStageEventProcessor *Processor)
 
void NotifyProcessorTriggered (const FName EventID, const AActor *Caller, const UStageEventProcessor *Processor)
 
FName GetLastPlayerTriggeredEventID () const
 
bool RollbackLastPlayerTriggeredProcessorCounts (const FName EventID)
 
void ResetProcessorTriggerCount (UStageEventProcessor *Processor)
 
void ResetAllProcessorTriggerCounts ()
 
FORCEINLINE ASpawnHubGetSpawnHub () const
 
FORCEINLINE FName GetCurrentStageID () const
 
template<CSpawnSystem TSpawnSystem>
TSpawnSystem * GetOrCreateSpawnSystem ()
 

Public 속성

FOnWaveManagerReadyToSpawning ReadyToSpawn
 
FOnWaveStarted OnWaveStarted
 
FOnWaveCleared OnWaveCleared
 
FOnAllWavesCleared OnAllWavesCleared
 
FOnSpawnedEnemyKilled OnSpawnedEnemyKilled
 
FOnEnemyRemainingCountChanged OnEnemyRemainingCountChanged
 
FOnNextWaveCountdownStarted OnNextWaveCountdownStarted
 
FOnNextWaveCountdownStopped OnNextWaveCountdownStopped
 

Protected 속성

TObjectPtr< ASpawnHubSpawnHub
 

Private 멤버 함수

bool EnsureStageDictionaryLoaded ()
 
const FStoryboardEntryResolveEntry (const FName EventID) const
 
const UStoryboardDefinitionResolveStoryboard () const
 
bool IsPlayerEventCaller (const AActor *Caller) const
 
FStageEventContext BuildStageEventContext (FName EventID)
 

Private 속성

FStageProgressState StageProgress
 
TObjectPtr< UStageDictionaryCachedStageDictionary
 
TArray< TWeakObjectPtr< const UStageEventProcessor > > LastPlayerTriggeredProcessors
 
TMap< TWeakObjectPtr< const UStageEventProcessor >, int32 > ProcessorTriggerCounts
 
TMap< FName, TArray< TWeakObjectPtr< UStageEventListenerComponent > > > ListenersByEventID
 
FName LastPlayerTriggeredEventID = NAME_None
 
int32 PlayerTriggeredDispatchSerial = 0
 
int32 ActivePlayerTriggeredDispatchSerial = INDEX_NONE
 
int32 LastPlayerTriggeredDispatchSerial = INDEX_NONE
 

Friends

struct FStageManagementHandle
 

멤버 함수 문서화

◆ BuildStageEventContext()

FStageEventContext UStageManagementSubsystem::BuildStageEventContext ( FName  EventID)
private
570{
571 FStageEventContext Context;
572 static const FName AllEventID = TEXT("All");
573
574 auto CleanupBucket = [this](const FName BucketEventID) -> TArray<TWeakObjectPtr<UStageEventListenerComponent>>*
575 {
576 TArray<TWeakObjectPtr<UStageEventListenerComponent>>* Bucket = ListenersByEventID.Find(BucketEventID);
577
578 if (Bucket == nullptr)
579 {
580 return nullptr;
581 }
582
583 Bucket->RemoveAllSwap([](const TWeakObjectPtr<UStageEventListenerComponent>& Weak)
584 {
585 return Weak.IsValid() == false;
586 });
587
588 if (Bucket->IsEmpty())
589 {
590 ListenersByEventID.Remove(BucketEventID);
591 return nullptr;
592 }
593
594 return Bucket;
595 };
596
597 TSet<const UStageEventListenerComponent*> AddedListeners;
598
599 auto AppendBucket = [EventID, &Context, &AddedListeners](const TArray<TWeakObjectPtr<UStageEventListenerComponent>>* Bucket)
600 {
601 if (Bucket == nullptr)
602 {
603 return;
604 }
605
606 for (const TWeakObjectPtr<UStageEventListenerComponent>& Weak : *Bucket)
607 {
608 const UStageEventListenerComponent* Listener = Weak.Get();
609
610 if (Listener == nullptr || AddedListeners.Contains(Listener))
611 {
612 continue;
613 }
614
615 AActor* Owner = Listener->GetOwner();
616
617 if (Owner == nullptr || Owner->Implements<UStageEventListenerInterface>() == false)
618 {
619 continue;
620 }
621
622 AddedListeners.Add(Listener);
623
624 const EListenerSlot Slot = Listener->GetSlotForEvent(EventID);
625
626 Context.ValidListeners.Add(Owner);
627
628 if (Slot == EListenerSlot::None)
629 {
630 continue;
631 }
632
633 if (Context.ValidListenersBySlot.Contains(Slot))
634 {
635 LOG_WARNING(LogCKLevel, "EventID '%s' 의 ListenerSlot이 중복되어 Slot 등록을 건너뜁니다. Actor = %s", *EventID.ToString(), *Owner->GetName());
636 continue;
637 }
638
639 Context.ValidListenersBySlot.Add(Slot, Owner);
640 }
641 };
642
643 AppendBucket(CleanupBucket(EventID));
644
645 if (EventID != AllEventID)
646 {
647 AppendBucket(CleanupBucket(AllEventID));
648 }
649
650 return Context;
651}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
EListenerSlot
Definition EStageEventEnums.h:29
Definition StageEventListenerInterface.h:14
TMap< FName, TArray< TWeakObjectPtr< UStageEventListenerComponent > > > ListenersByEventID
Definition StageManagementSubsystem.h:269
Definition StageEventContext.h:18
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DecreaseCurrentWaveRemainingEnemyCount()

void UStageManagementSubsystem::DecreaseCurrentWaveRemainingEnemyCount ( int32  Count = 1)
223{
224 if (Count <= 0)
225 {
226 return;
227 }
228
231}
FStageProgressState StageProgress
Definition StageManagementSubsystem.h:262
void NotifyEnemyRemainingCountChanged()
Definition StageManagementSubsystem.cpp:202
void DecreaseCurrentWaveRemainingEnemyCount(const int32 Count)
Definition StageManagementSubsystem.h:48
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ DecrementProcessorTriggerCount()

int32 UStageManagementSubsystem::DecrementProcessorTriggerCount ( const UStageEventProcessor Processor)
434{
435 checkf(Processor, TEXT("%s가 유효하지 않습니다. "), NAMEOF(UStageEventProcessor));
436 int32* Found = ProcessorTriggerCounts.Find(Processor);
437
438 if (Found == nullptr)
439 {
440 return 0;
441 }
442
443 *Found = FMath::Max(*Found - 1, 0);
444
445 if (*Found == 0)
446 {
447 ProcessorTriggerCounts.Remove(Processor);
448 return 0;
449 }
450
451 return *Found;
452}
#define NAMEOF(Type)
Definition CK_UE.h:30
Definition StageEventProcessor.h:28
TMap< TWeakObjectPtr< const UStageEventProcessor >, int32 > ProcessorTriggerCounts
Definition StageManagementSubsystem.h:268
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Deinitialize()

void UStageManagementSubsystem::Deinitialize ( )
overridevirtual
63{
65 ListenersByEventID.Empty();
67
70
73
74 Super::Deinitialize();
75}
FName LastPlayerTriggeredEventID
Definition StageManagementSubsystem.h:271
TArray< TWeakObjectPtr< const UStageEventProcessor > > LastPlayerTriggeredProcessors
Definition StageManagementSubsystem.h:267
int32 ActivePlayerTriggeredDispatchSerial
Definition StageManagementSubsystem.h:273
int32 LastPlayerTriggeredDispatchSerial
Definition StageManagementSubsystem.h:274
void Reset()
Definition StageManagementSubsystem.h:68
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ DispatchStageEvent()

void UStageManagementSubsystem::DispatchStageEvent ( const FName  EventID,
const AActor *  Caller,
const AActor *  Sender 
)
344{
345 if (EventID.IsNone())
346 {
347 LOG_WARNING(LogCKLevel, "EventID가 비어 디스패치를 건너뜁니다.");
348 return;
349 }
350
351 const FStoryboardEntry* Entry = ResolveEntry(EventID);
352
353 if (Entry == nullptr || Entry->ProcessorGroup == nullptr || Entry->ProcessorGroup->IsEmpty())
354 {
355 LOG_WARNING(LogCKLevel, "EventID '%s' 엔트리에 ProcessorGroup 또는 Processor 인스턴스가 지정되지 않았습니다.", *EventID.ToString());
356 return;
357 }
358
359 if (Entry->ExecutionCondition && Entry->ExecutionCondition->Evaluate(Caller, Cast<AEventGate>(Sender)) == false)
360 {
361 LOG_INFO(LogCKLevel, "EventID '%s' 의 실행 조건이 충족되지 않아 디스패치를 중단합니다.", *EventID.ToString());
362 return;
363 }
364
365 const FStageEventContext Context = BuildStageEventContext(EventID);
366
367 const FString CallerName = Caller ? Caller->GetName() : TEXT("None");
368 const FString SenderName = Sender ? Sender->GetName() : TEXT("None");
369
371 (
372 FColor::Yellow,
373 "[StageEvent] %-9s EventID = %-16s Caller = %-28s Sender = %-28s ValidListeners = %-3d Processors = %-3d",
374 TEXT("Dispatch"),
375 *EventID.ToString(),
376 *CallerName,
377 *SenderName,
378 Context.ValidListeners.Num(),
379 Entry->ProcessorGroup->Num()
380 );
381
382 const bool bPlayerEventCaller = IsPlayerEventCaller(Caller);
383 const int32 PreviousActivePlayerTriggeredDispatchSerial = ActivePlayerTriggeredDispatchSerial;
384
385 if (bPlayerEventCaller)
386 {
388 }
389
390 Entry->ProcessorGroup->Process(this, EventID, Caller, Sender, Context);
391
392 if (bPlayerEventCaller)
393 {
394 ActivePlayerTriggeredDispatchSerial = PreviousActivePlayerTriggeredDispatchSerial;
395 }
396}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
#define LOG_SCREEN_C(Color, Format,...)
Definition CK_UE.h:49
const FStoryboardEntry * ResolveEntry(const FName EventID) const
Definition StageManagementSubsystem.cpp:529
int32 PlayerTriggeredDispatchSerial
Definition StageManagementSubsystem.h:272
bool IsPlayerEventCaller(const AActor *Caller) const
Definition StageManagementSubsystem.cpp:542
FStageEventContext BuildStageEventContext(FName EventID)
Definition StageManagementSubsystem.cpp:569
TArray< TObjectPtr< AActor > > ValidListeners
Definition StageEventContext.h:23
Definition StoryboardDefinition.h:18
TObjectPtr< UStageEventProcessorGroup > ProcessorGroup
Definition StoryboardDefinition.h:29
TObjectPtr< UStageEventCondition > ExecutionCondition
Definition StoryboardDefinition.h:26
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ EnsureStageDictionaryLoaded()

bool UStageManagementSubsystem::EnsureStageDictionaryLoaded ( )
private
655{
657 {
658 return true;
659 }
660
661 CachedStageDictionary = GetEnvironmentAssetByKey<UStageDictionary>("StageDictionary");
662
663 if (CachedStageDictionary == nullptr)
664 {
665 LOG_ERROR(LogCK, "StageDictionary 로드에 실패했습니다.");
666 return false;
667 }
668 else
669 {
670 return true;
671 }
672}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
TObjectPtr< UStageDictionary > CachedStageDictionary
Definition StageManagementSubsystem.h:265

◆ GetCurrentStageID()

FORCEINLINE FName UStageManagementSubsystem::GetCurrentStageID ( ) const
inline
216 {
218 }
FORCEINLINE FName GetCurrentStageID() const
Definition StageManagementSubsystem.h:76

◆ GetCurrentWaveRemainingEnemyCount()

int32 UStageManagementSubsystem::GetCurrentWaveRemainingEnemyCount ( ) const
172{
174}
FORCEINLINE int32 GetCurrentWaveRemainingEnemyCount() const
Definition StageManagementSubsystem.h:86
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetLastPlayerTriggeredEventID()

FName UStageManagementSubsystem::GetLastPlayerTriggeredEventID ( ) const
479{
481}

◆ GetNextWaveCountdownRemainingTime()

float UStageManagementSubsystem::GetNextWaveCountdownRemainingTime ( ) const
235{
236 const UWorld* World = GetWorld();
237
238 if (World == nullptr || StageProgress.GetNextWaveCountdownEndTime() <= 0.f)
239 {
240 return 0.f;
241 }
242
243 return FMath::Max(StageProgress.GetNextWaveCountdownEndTime() - World->GetTimeSeconds(), 0.f);
244}
FORCEINLINE float GetNextWaveCountdownEndTime() const
Definition StageManagementSubsystem.h:81
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetOrCreateSpawnHub()

ASpawnHub * UStageManagementSubsystem::GetOrCreateSpawnHub ( )
99{
100 if (IsValid(SpawnHub))
101 {
102 return SpawnHub;
103 }
104
105 UWorld* World = GetWorld();
106
107 if (World == nullptr)
108 {
109 LOG_ERROR(LogCK, "World가 없어 %s를 생성할 수 없습니다.", NAMEOF(ASpawnHub));
110 return nullptr;
111 }
112
113 SpawnHub = World->SpawnActor<ASpawnHub>(ASpawnHub::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator);
114
115 if (SpawnHub == nullptr)
116 {
117 LOG_ERROR(LogCK, "%s 생성에 실패했습니다.", NAMEOF(ASpawnHub));
118 return nullptr;
119 }
120
121 SpawnHub->InitializeHub(this);
122 return SpawnHub;
123}
Definition SpawnHub.h:27
TObjectPtr< ASpawnHub > SpawnHub
Definition StageManagementSubsystem.h:258
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetOrCreateSpawnSystem()

template<CSpawnSystem TSpawnSystem>
TSpawnSystem * UStageManagementSubsystem::GetOrCreateSpawnSystem ( )
283{
285 return Hub ? Hub->GetOrCreateSpawnSystem<TSpawnSystem>() : nullptr;
286}
UActorComponent * GetOrCreateSpawnSystem(UPARAM(meta=(MustImplement="/Script/CK_UE.SpawnSystemInterface")) TSubclassOf< UActorComponent > SpawnSystemClass)
ASpawnHub * GetOrCreateSpawnHub()
Definition StageManagementSubsystem.cpp:98
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetProcessorTriggerCount()

int32 UStageManagementSubsystem::GetProcessorTriggerCount ( const UStageEventProcessor Processor) const
400{
401 if (Processor == nullptr)
402 {
403 return 0;
404 }
405
406 if (const int32* Found = ProcessorTriggerCounts.Find(Processor))
407 {
408 return *Found;
409 }
410 else
411 {
412 return 0;
413 }
414}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetSpawnedEnemyCount()

int32 UStageManagementSubsystem::GetSpawnedEnemyCount ( ) const
178{
179 if (SpawnHub == nullptr || IsValid(SpawnHub) == false)
180 {
181 return 0;
182 }
183
184 int32 Total = 0;
185
186 for (UEnemySpawnDirectorSystemComponent* SpawnSystem : SpawnHub->GetRegisteredSpawnSystems<UEnemySpawnDirectorSystemComponent>())
187 {
188 TArray<AEnemyCharacterBase*> Array = SpawnSystem->GetAllSpawnedEnemies();
189
190 Array.RemoveAllSwap([](const AEnemyCharacterBase* Enemy)
191 {
192 return !IsValid(Enemy);
193 });
194
195 Total += Array.Num();
196 }
197
198 return Total;
199}
Definition EnemyCharacterBase.h:49
Definition EnemySpawnDirectorSystemComponent.h:75

◆ GetSpawnHub()

FORCEINLINE ASpawnHub * UStageManagementSubsystem::GetSpawnHub ( ) const
inline
211 {
212 return SpawnHub;
213 }

◆ GetStageManagementHandle()

FStageManagementHandle UStageManagementSubsystem::GetStageManagementHandle ( )
155{
158 Handle.OnWaveCleared = this->OnWaveCleared;
159 Handle.OnWaveStarted = this->OnWaveStarted;
161 return Handle;
162}
FOnWaveCleared OnWaveCleared
Definition StageManagementSubsystem.h:239
FOnSpawnedEnemyKilled OnSpawnedEnemyKilled
Definition StageManagementSubsystem.h:245
FOnWaveStarted OnWaveStarted
Definition StageManagementSubsystem.h:236
friend struct FStageManagementHandle
Definition StageManagementSubsystem.h:277
FOnAllWavesCleared OnAllWavesCleared
Definition StageManagementSubsystem.h:242
Definition StageManagementSubsystem.h:105
FOnWaveCleared OnWaveCleared
Definition StageManagementSubsystem.h:131
FOnWaveStarted OnWaveStarted
Definition StageManagementSubsystem.h:128
FOnSpawnedEnemyKilled OnSpawnedEnemyKilled
Definition StageManagementSubsystem.h:137
FOnAllWavesCleared OnAllWavesCleared
Definition StageManagementSubsystem.h:134

◆ GetStageTargetableQueryHandle()

TargetableQuery UStageManagementSubsystem::GetStageTargetableQueryHandle ( ) const
281{
282 if (SpawnHub == nullptr || IsValid(SpawnHub) == false)
283 {
284 return TargetableQuery(GetWorld(), {});
285 }
286 else
287 {
288 return TargetableQuery(GetWorld(), SpawnHub->GetAllSpawnedTargetableEntity());
289 }
290}
Definition TargetableQuery.h:92
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetTotalSpawnRemainingCount()

int32 UStageManagementSubsystem::GetTotalSpawnRemainingCount ( ) const
166{
168}
int32 GetCurrentWaveRemainingEnemyCount() const
Definition StageManagementSubsystem.cpp:171
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IncreaseCurrentWaveRemainingEnemyCount()

void UStageManagementSubsystem::IncreaseCurrentWaveRemainingEnemyCount ( int32  Count)
216{
219}
void IncreaseCurrentWaveRemainingEnemyCount(const int32 Count)
Definition StageManagementSubsystem.h:43
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IncrementProcessorTriggerCount()

int32 UStageManagementSubsystem::IncrementProcessorTriggerCount ( const UStageEventProcessor Processor)
418{
419 checkf(Processor, TEXT("%s가 유효하지 않습니다. "), NAMEOF(UStageEventProcessor));
420
421 if (ProcessorTriggerCounts.Contains(Processor))
422 {
423 int32* ExecutedCount = ProcessorTriggerCounts.Find(Processor);
424 int32& CurrentCount = *ExecutedCount;
425 return (++CurrentCount);
426 }
427
428 ProcessorTriggerCounts.Add(Processor, 1);
429 return 1;
430}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsNextWaveCountdownActive()

bool UStageManagementSubsystem::IsNextWaveCountdownActive ( ) const
248{
249 return GetNextWaveCountdownRemainingTime() > KINDA_SMALL_NUMBER;
250}
float GetNextWaveCountdownRemainingTime() const
Definition StageManagementSubsystem.cpp:234
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IsPlayerEventCaller()

bool UStageManagementSubsystem::IsPlayerEventCaller ( const AActor *  Caller) const
private
543{
544 const APawn* Pawn = Cast<APawn>(Caller);
545 return Pawn && Pawn->IsPlayerControlled();
546}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyEnemyRemainingCountChanged()

void UStageManagementSubsystem::NotifyEnemyRemainingCountChanged ( )
203{
205}
FOnEnemyRemainingCountChanged OnEnemyRemainingCountChanged
Definition StageManagementSubsystem.h:248
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyNextWaveCountdownStarted()

void UStageManagementSubsystem::NotifyNextWaveCountdownStarted ( float  Duration)
254{
255 UWorld* World = GetWorld();
256
257 if (World == nullptr || Duration < KINDA_SMALL_NUMBER)
258 {
260 return;
261 }
262
263 StageProgress.SetNextWaveCountdownEndTime(World->GetTimeSeconds() + Duration);
264 OnNextWaveCountdownStarted.Broadcast(Duration);
265}
FOnNextWaveCountdownStarted OnNextWaveCountdownStarted
Definition StageManagementSubsystem.h:251
void NotifyNextWaveCountdownStopped()
Definition StageManagementSubsystem.cpp:268
void SetNextWaveCountdownEndTime(const float InEndTime)
Definition StageManagementSubsystem.h:58
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyNextWaveCountdownStopped()

void UStageManagementSubsystem::NotifyNextWaveCountdownStopped ( )
269{
270 const bool bWasScheduled = StageProgress.GetNextWaveCountdownEndTime() > 0.0f;
272
273 if (bWasScheduled)
274 {
275 OnNextWaveCountdownStopped.Broadcast();
276 }
277}
FOnNextWaveCountdownStopped OnNextWaveCountdownStopped
Definition StageManagementSubsystem.h:254
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyProcessorTriggered()

void UStageManagementSubsystem::NotifyProcessorTriggered ( const FName  EventID,
const AActor *  Caller,
const UStageEventProcessor Processor 
)
456{
457 if (EventID.IsNone() || Processor == nullptr || IsPlayerEventCaller(Caller) == false)
458 {
459 return;
460 }
461
462 if (ActivePlayerTriggeredDispatchSerial == INDEX_NONE)
463 {
464 return;
465 }
466
468 {
472 }
473
474 LastPlayerTriggeredProcessors.AddUnique(TWeakObjectPtr<const UStageEventProcessor>(Processor));
475}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnLevelLoaded()

void UStageManagementSubsystem::OnLevelLoaded ( ULevel *  NewLevel,
const ULevelStreamingData LevelStreamingData 
)
overridevirtual

IStreamingEventListenerInterface를 구현.

79{
80 LOG_INFO(LogCK, "Level Loaded");
81
82 if (LevelStreamingData == nullptr)
83 {
84 LOG_WARNING(LogCK, "LevelStreamingData가 nullptr 입니다.");
85 return;
86 }
87
88 FName ResolvedStageID = LevelStreamingData->TargetMap.PrimaryAssetName;
89 StageProgress.SetCurrentStageID(ResolvedStageID);
90
91 LOG_INFO(LogCK, "스테이지 정보 로드 완료: %s", *ResolvedStageID.ToString());
92
93 // SpawnHub는 레벨당 하나이며, 각 SpawnSystemComponent를 소유한다.
95}
FPrimaryAssetId TargetMap
Definition LevelStreamingData.h:44
void SetCurrentStageID(const FName InStageID)
Definition StageManagementSubsystem.h:53
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLevelStreamingEnded()

virtual void UStageManagementSubsystem::OnLevelStreamingEnded ( )
inlineoverridevirtual

◆ OnLevelStreamingStarted()

virtual void UStageManagementSubsystem::OnLevelStreamingStarted ( )
inlineoverridevirtual

◆ OnLevelUnloaded()

void UStageManagementSubsystem::OnLevelUnloaded ( )
overridevirtual

IStreamingEventListenerInterface를 구현.

127{
128 if (SpawnHub == nullptr || IsValid(SpawnHub) == false)
129 {
133 return;
134 }
135
136 // 등록된 모든 EncounterField EnemySpawnSystem에서 살아있는 적을 풀로 반환한다.
137 for (UEnemySpawnDirectorSystemComponent* SpawnSystem : SpawnHub->GetRegisteredSpawnSystems<UEnemySpawnDirectorSystemComponent>())
138 {
139 for (AEnemyCharacterBase* Enemy : SpawnSystem->GetAllSpawnedEnemies())
140 {
141 checkf(Enemy, TEXT("%s가 유효하지 않습니다. "), NAMEOF(AEnemyCharacterBase));
142 Enemy->ForceReturnToPool(true);
143 }
144 }
145
146 SpawnHub->Destroy();
147 SpawnHub = nullptr;
151}
void SetCurrentWaveRemainingEnemyCount(int32 Count)
Definition StageManagementSubsystem.cpp:208
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterListener()

void UStageManagementSubsystem::RegisterListener ( const FName  EventID,
UStageEventListenerComponent *  Listener 
)
294{
295 if (Listener == nullptr)
296 {
297 LOG_WARNING(LogCKLevel, "Listener가 nullptr 입니다.");
298 return;
299 }
300
301 if (EventID.IsNone() == false)
302 {
303 TArray<TWeakObjectPtr<UStageEventListenerComponent>>& Bucket = ListenersByEventID.FindOrAdd(EventID);
304 Bucket.AddUnique(Listener);
305 return;
306 }
307
309 (
310 LogCKLevel,
311 "EventID가 비어있어 등록을 건너뜁니다. (Owner: %s)",
312 Listener->GetOwner() ? *Listener->GetOwner()->GetName() : TEXT("None")
313 );
314}

◆ ResetAllProcessorTriggerCounts()

void UStageManagementSubsystem::ResetAllProcessorTriggerCounts ( )
521{
523 LastPlayerTriggeredEventID = NAME_None;
526}

◆ ResetProcessorTriggerCount()

void UStageManagementSubsystem::ResetProcessorTriggerCount ( UStageEventProcessor Processor)
510{
511 if (Processor == nullptr)
512 {
513 return;
514 }
515
516 ProcessorTriggerCounts.Remove(Processor);
517}

◆ ResolveEntry()

const FStoryboardEntry * UStageManagementSubsystem::ResolveEntry ( const FName  EventID) const
private
530{
531 const UStoryboardDefinition* Storyboard = ResolveStoryboard();
532
533 if (Storyboard == nullptr)
534 {
535 return nullptr;
536 }
537
538 return Storyboard->FindEntry(EventID);
539}
const UStoryboardDefinition * ResolveStoryboard() const
Definition StageManagementSubsystem.cpp:549
Definition StoryboardDefinition.h:37
const FStoryboardEntry * FindEntry(const FName &EventID) const
Definition StoryboardDefinition.cpp:7
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveStoryboard()

const UStoryboardDefinition * UStageManagementSubsystem::ResolveStoryboard ( ) const
private
550{
552
553 if (StageDictionary == nullptr)
554 {
555 return nullptr;
556 }
557
558 ULevelStreamingData* StreamingData = StageDictionary->GetLevelStreamingDataByWorld(this);
559
560 if (StreamingData == nullptr || StreamingData->LevelRule == nullptr)
561 {
562 return nullptr;
563 }
564
565 return StreamingData->LevelRule->GetStoryboardDefinition();
566}
static UStageDictionary * GetStreamingDataFromStageDictionary()
Definition CK_BPFunctionLibrary.cpp:230
Definition LevelStreamingData.h:19
TObjectPtr< ULevelRuleData > LevelRule
Definition LevelStreamingData.h:50
Definition StageDictionary.h:14
ULevelStreamingData * GetLevelStreamingDataByWorld(const UObject *WorldContextObject) const
Definition StageDictionary.cpp:129
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RollbackLastPlayerTriggeredProcessorCounts()

bool UStageManagementSubsystem::RollbackLastPlayerTriggeredProcessorCounts ( const FName  EventID)
485{
486 if (EventID.IsNone() || LastPlayerTriggeredEventID != EventID)
487 {
488 return false;
489 }
490
491 bool bRolledBack = false;
492
493 for (const TWeakObjectPtr<const UStageEventProcessor>& WeakProcessor : LastPlayerTriggeredProcessors)
494 {
495 if (const UStageEventProcessor* Processor = WeakProcessor.Get())
496 {
498 bRolledBack = true;
499 }
500 }
501
502 LastPlayerTriggeredEventID = NAME_None;
505 return bRolledBack;
506}
int32 DecrementProcessorTriggerCount(const UStageEventProcessor *Processor)
Definition StageManagementSubsystem.cpp:433
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetCurrentWaveRemainingEnemyCount()

void UStageManagementSubsystem::SetCurrentWaveRemainingEnemyCount ( int32  Count)
209{
212}
void SetCurrentWaveRemainingEnemyCount(const int32 Count)
Definition StageManagementSubsystem.h:63
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnregisterListener()

void UStageManagementSubsystem::UnregisterListener ( const FName  EventID,
UStageEventListenerComponent *  Listener 
)
318{
319 if (EventID.IsNone() || Listener == nullptr)
320 {
321 return;
322 }
323
324 TArray<TWeakObjectPtr<UStageEventListenerComponent>>* Bucket = ListenersByEventID.Find(EventID);
325
326 if (Bucket == nullptr)
327 {
328 return;
329 }
330
331 Bucket->RemoveAllSwap([Listener](const TWeakObjectPtr<UStageEventListenerComponent>& Weak)
332 {
333 return Weak.IsValid() == false || Weak.Get() == Listener;
334 });
335
336 if (Bucket->IsEmpty())
337 {
338 ListenersByEventID.Remove(EventID);
339 }
340}

Friend, 그리고 관련된 함수 문서화

◆ FStageManagementHandle

friend struct FStageManagementHandle
friend

멤버 데이터 문서화

◆ ActivePlayerTriggeredDispatchSerial

int32 UStageManagementSubsystem::ActivePlayerTriggeredDispatchSerial = INDEX_NONE
private

◆ CachedStageDictionary

TObjectPtr<UStageDictionary> UStageManagementSubsystem::CachedStageDictionary
private

◆ LastPlayerTriggeredDispatchSerial

int32 UStageManagementSubsystem::LastPlayerTriggeredDispatchSerial = INDEX_NONE
private

◆ LastPlayerTriggeredEventID

FName UStageManagementSubsystem::LastPlayerTriggeredEventID = NAME_None
private

◆ LastPlayerTriggeredProcessors

TArray<TWeakObjectPtr<const UStageEventProcessor> > UStageManagementSubsystem::LastPlayerTriggeredProcessors
private

◆ ListenersByEventID

TMap<FName, TArray<TWeakObjectPtr<UStageEventListenerComponent> > > UStageManagementSubsystem::ListenersByEventID
private

◆ OnAllWavesCleared

FOnAllWavesCleared UStageManagementSubsystem::OnAllWavesCleared

◆ OnEnemyRemainingCountChanged

FOnEnemyRemainingCountChanged UStageManagementSubsystem::OnEnemyRemainingCountChanged

◆ OnNextWaveCountdownStarted

FOnNextWaveCountdownStarted UStageManagementSubsystem::OnNextWaveCountdownStarted

◆ OnNextWaveCountdownStopped

FOnNextWaveCountdownStopped UStageManagementSubsystem::OnNextWaveCountdownStopped

◆ OnSpawnedEnemyKilled

FOnSpawnedEnemyKilled UStageManagementSubsystem::OnSpawnedEnemyKilled

◆ OnWaveCleared

FOnWaveCleared UStageManagementSubsystem::OnWaveCleared

◆ OnWaveStarted

FOnWaveStarted UStageManagementSubsystem::OnWaveStarted

◆ PlayerTriggeredDispatchSerial

int32 UStageManagementSubsystem::PlayerTriggeredDispatchSerial = 0
private

◆ ProcessorTriggerCounts

TMap<TWeakObjectPtr<const UStageEventProcessor>, int32> UStageManagementSubsystem::ProcessorTriggerCounts
private

◆ ReadyToSpawn

FOnWaveManagerReadyToSpawning UStageManagementSubsystem::ReadyToSpawn

◆ SpawnHub

TObjectPtr<ASpawnHub> UStageManagementSubsystem::SpawnHub
protected

◆ StageProgress

FStageProgressState UStageManagementSubsystem::StageProgress
private

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