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

#include <PlayerManagementSubsystem.h>

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

Public 멤버 함수

virtual void Initialize (FSubsystemCollectionBase &Collection) override
 
virtual void Deinitialize () override
 
virtual void ChangeTargetingActor (ITargetableInterface *TargetableActor)
 
virtual void PlayerControllerChanged (APlayerController *NewPlayerController) override
 
virtual void OnLevelStreamingEnded () override
 
virtual void OnLevelStreamingStarted () override
 
virtual void OnLevelLoaded (ULevel *NewLevel, const ULevelStreamingData *LevelStreamingData) override
 
virtual void OnLevelUnloaded () override
 
ATargetableWeaponFindSpawnedWeapon (const FGameplayTag &WeaponTag)
 
void RegisterSpawnedWeapon (ATargetableWeapon *SpawnedWeapon)
 
void UnregisterSpawnedWeapon (const FGameplayTag &WeaponTag, const ATargetableWeapon *SpawnedWeapon=nullptr)
 
bool EquipWeapon (const FGameplayTag &NewWeaponTag)
 
bool SwapWeapon (const FGameplayTag &NewWeaponTag)
 
bool HandlePlayerSpawn (AActor *PlayerActor, const FPrimaryAssetId &LevelAssetID, const UObject *LevelContextObject)
 
void FreezePlayer ()
 
void UnfreezePlayer ()
 
void CacheCheckPoint (ACheckPoint *CheckPoint)
 
void CacheLastStageEventID (const FName StageEventID)
 
bool RespawnPlayer ()
 
bool HandlePlayerDeath (AActor *PlayerActor)
 
bool HandlePlayerSpawn (AActor *PlayerActor, const UObject *LevelContextObject=nullptr)
 
void ApplyUILayerInputBlockOptions (bool bBlockPlayerMovement, bool bBlockPlayerInput)
 
FORCEINLINE FGameplayTag GetPreviousWeaponTag () const
 
FORCEINLINE FGameplayTag GetCurrentWeaponTag () const
 
FORCEINLINE AMainPlayerCharacterGetPlayer () const
 
FORCEINLINE FGameplayTag GetWeaponTagToSwitchTo () const
 
FORCEINLINE AMainPlayerStateGetPlayerState () const
 

Public 속성

FPlayerWeaponChangedDelegate WeaponChangedDelegate
 

Private 멤버 함수

bool ApplyWeapon (const FGameplayTag &NewWeaponTag, bool bActivateSwapInSkill)
 
void UpdateEquippedWeapon (const FGameplayTag &NewWeaponTag)
 
void BindControllerDelegates (APlayerController *PlayerController)
 
void UnbindControllerDelegates (APlayerController *PlayerController)
 
ACharacter * ResolveOwningCharacter () const
 
AMainPlayerCharacterResolveOwningPlayer () const
 
UAbilitySystemComponentResolveOwningAbilitySystemComponent () const
 
ULevelRuleDataResolveCurrentLevelRule (const UObject *LevelContextObject=nullptr) const
 
ULevelRuleDataResolveCurrentLevelRule (const FPrimaryAssetId &LevelAssetID, const UObject *LevelContextObject) const
 
void RefreshUILayerInputBlockTags ()
 
void AddUILayerInputBlockTag (UAbilitySystemComponent *AbilitySystemComponent, FGameplayTag Tag, bool &bAppliedFlag)
 
void RemoveUILayerInputBlockTag (FGameplayTag Tag, bool &bAppliedFlag)
 
void OnPlayerWeaponChanged (FGameplayTag PrevWeaponTag, FGameplayTag NewWeaponTag)
 
void HandlePossessedPawnChanged (APawn *OldPawn, APawn *NewPawn)
 

Private 속성

TWeakObjectPtr< ULevelStreamingSubsystemStreamingSubsystem
 
TWeakObjectPtr< APlayerController > BoundPC
 
bool bFrozen = false
 
FGameplayTag PreviousWeaponTag
 
FGameplayTag CurrentWeaponTag
 
TMap< FGameplayTag, TWeakObjectPtr< ATargetableWeapon > > SpawnedWeaponMap
 
TWeakObjectPtr< ACheckPointCachedCheckPoint
 
FTransform CachedCheckPointTransform
 
bool bHasCachedCheckPoint = false
 
FName LastStageEventIDBeforeDeath = NAME_None
 
TWeakObjectPtr< UPlayerDeathFlowDefinitionActivePlayerDeathFlowDefinition
 
TWeakObjectPtr< UPlayerSpawnFlowDefinitionActivePlayerSpawnFlowDefinition
 
float CachedSpawnFlowGravityScale = 1.0f
 
bool bHasCachedSpawnFlowGravityScale = false
 
TWeakObjectPtr< UAbilitySystemComponentUILayerBlockASC
 
bool bShouldBlockUILayerMovement = false
 
bool bShouldBlockUILayerInput = false
 
bool bAppliedUILayerMovementBlock = false
 
bool bAppliedUILayerInputBlock = false
 
FName CachedRollbackPointID = NAME_None
 
TEnumAsByte< ECollisionEnabled::Type > SavedCapsuleCollision = ECollisionEnabled::QueryAndPhysics
 

상세한 설명

로컬 플레이어 수명 주기에 붙어 플레이어 관련 횡단 관심사를 관리하는 서브시스템. 현재 역할:

  • 레벨 스트리밍 동안 플레이어 캐릭터를 물리/콜리전에서 일시 격리 (Freeze/Unfreeze).

멤버 함수 문서화

◆ AddUILayerInputBlockTag()

void UPlayerManagementSubsystem::AddUILayerInputBlockTag ( UAbilitySystemComponent AbilitySystemComponent,
FGameplayTag  Tag,
bool bAppliedFlag 
)
private
710{
711 if (bAppliedFlag)
712 {
713 return;
714 }
715
716 if (AbilitySystemComponent == nullptr)
717 {
718 LOG_WARNING(LogCKPlayer, "플레이어 %s를 찾지 못해 UI 입력 차단 태그 '%s'를 적용하지 못했습니다.", NAMEOF(UAbilitySystemComponent), *Tag.ToString());
719 return;
720 }
721
722 AbilitySystemComponent->AddLooseGameplayTag(Tag);
724 bAppliedFlag = true;
725}
#define NAMEOF(Type)
Definition CK_UE.h:30
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
TWeakObjectPtr< UAbilitySystemComponent > UILayerBlockASC
Definition PlayerManagementSubsystem.h:183
FORCEINLINE AMainPlayerState * GetPlayerState() const
Definition PlayerManagementSubsystem.h:110
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyUILayerInputBlockOptions()

void UPlayerManagementSubsystem::ApplyUILayerInputBlockOptions ( bool  bBlockPlayerMovement,
bool  bBlockPlayerInput 
)
364{
365 bShouldBlockUILayerMovement = bBlockPlayerMovement;
366 bShouldBlockUILayerInput = bBlockPlayerInput;
368}
void RefreshUILayerInputBlockTags()
Definition PlayerManagementSubsystem.cpp:674
bool bShouldBlockUILayerInput
Definition PlayerManagementSubsystem.h:189
bool bShouldBlockUILayerMovement
Definition PlayerManagementSubsystem.h:186
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyWeapon()

bool UPlayerManagementSubsystem::ApplyWeapon ( const FGameplayTag NewWeaponTag,
bool  bActivateSwapInSkill 
)
private
429{
430 if (NewWeaponTag.IsValid() == false)
431 {
432 LOG_WARNING(LogCK, "ApplyWeapon: 비어 있는 태그로 호출됨. 무시.");
433 return false;
434 }
435
437 if (Player == nullptr)
438 {
439 LOG_ERROR(LogCK, "%s를 가져올 수 없어 무기를 적용할 수 없습니다.", NAMEOF(AMainPlayerCharacter));
440 return false;
441 }
442
443 UWeaponLoadoutComponent* WeaponLoadoutComponent = Player->GetWeaponLoadoutComponent();
444 if (WeaponLoadoutComponent == nullptr)
445 {
446 LOG_ERROR(LogCK, "%s를 가져올 수 없어 무기를 적용할 수 없습니다.", NAMEOF(UWeaponLoadoutComponent));
447 return false;
448 }
449
450 const bool bSucceeded = bActivateSwapInSkill ? WeaponLoadoutComponent->SwapWeapon(NewWeaponTag) : WeaponLoadoutComponent->EquipWeapon(NewWeaponTag);
451
452 if (bSucceeded == false)
453 {
454 return false;
455 }
456
458 return true;
459}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
Definition MainPlayerCharacter.h:39
void UpdateEquippedWeapon(const FGameplayTag &NewWeaponTag)
Definition PlayerManagementSubsystem.cpp:462
AMainPlayerCharacter * ResolveOwningPlayer() const
Definition PlayerManagementSubsystem.cpp:655
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ BindControllerDelegates()

void UPlayerManagementSubsystem::BindControllerDelegates ( APlayerController *  PlayerController)
private
614{
615 if (PlayerController == nullptr)
616 {
617 return;
618 }
619
620 PlayerController->OnPossessedPawnChanged.AddDynamic(this, &ThisClass::HandlePossessedPawnChanged);
621}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CacheCheckPoint()

void UPlayerManagementSubsystem::CacheCheckPoint ( ACheckPoint CheckPoint)
228{
229 if (CheckPoint == nullptr)
230 {
231 return;
232 }
233
236 CachedCheckPointTransform = CheckPoint->GetSpawnTransform();
237
238 CachedRollbackPointID = CheckPoint->GetFName();
239
241 {
242 SnapshotSubsystem->MarkRollbackPoint(CachedRollbackPointID);
243 }
244 else
245 {
246 LOG_ERROR(LogCK, "%s를 찾을 수 없습니다. ", NAMEOF(USnapshotSubsystem));
247 }
248}
FName CachedRollbackPointID
Definition PlayerManagementSubsystem.h:198
bool bHasCachedCheckPoint
Definition PlayerManagementSubsystem.h:165
TWeakObjectPtr< ACheckPoint > CachedCheckPoint
Definition PlayerManagementSubsystem.h:159
FTransform CachedCheckPointTransform
Definition PlayerManagementSubsystem.h:162
Definition SnapshotSubsystem.h:16
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CacheLastStageEventID()

void UPlayerManagementSubsystem::CacheLastStageEventID ( const FName  StageEventID)
252{
254}
FName LastStageEventIDBeforeDeath
Definition PlayerManagementSubsystem.h:168
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ChangeTargetingActor()

void UPlayerManagementSubsystem::ChangeTargetingActor ( ITargetableInterface TargetableActor)
virtual
95{
96 if (BoundPC == nullptr || IsValid(BoundPC.Get()) == false)
97 {
98 LOG_ERROR(LogCK, "타겟팅할 액터를 변경할 수 없습니다. ");
99 return;
100 }
101
102 if (TargetableActor == nullptr)
103 {
104 LOG_ERROR(LogCK, "%s가 Nullptr 이므로 대상으로 설정할 수 없습니다. ", NAMEOF(ITargetableInterface));
105 return;
106 }
107
109 {
110 GameCameraManager->GetPlayerTargetingComponent()->SetTargetingActor(TargetableActor);
111 }
112 else
113 {
114 LOG_ERROR(LogCK, "%s 를 가져올 수 없습니다. ", NAMEOF(AGameCameraManager));
115 }
116}
Definition GameCameraManager.h:28
Definition TargetableInterface.h:20
TWeakObjectPtr< APlayerController > BoundPC
Definition PlayerManagementSubsystem.h:144
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Deinitialize()

void UPlayerManagementSubsystem::Deinitialize ( )
overridevirtual
50{
52 UILayerBlockASC.Reset();
53
54 if (BoundPC.IsValid())
55 {
57 BoundPC.Reset();
58 }
59
60 bFrozen = false;
62 CachedCheckPoint.Reset();
63 SpawnedWeaponMap.Reset();
64
71
73 {
75 }
76
78
80 {
82 }
83
85 Super::Deinitialize();
86
87 if (WeaponChangedDelegate.IsBound())
88 {
89 WeaponChangedDelegate.RemoveDynamic(this, &ThisClass::OnPlayerWeaponChanged);
90 }
91}
bool bAppliedUILayerMovementBlock
Definition PlayerManagementSubsystem.h:192
void UnbindControllerDelegates(APlayerController *PlayerController)
Definition PlayerManagementSubsystem.cpp:624
TWeakObjectPtr< UPlayerSpawnFlowDefinition > ActivePlayerSpawnFlowDefinition
Definition PlayerManagementSubsystem.h:174
void ApplyUILayerInputBlockOptions(bool bBlockPlayerMovement, bool bBlockPlayerInput)
Definition PlayerManagementSubsystem.cpp:363
bool bFrozen
Definition PlayerManagementSubsystem.h:147
bool bAppliedUILayerInputBlock
Definition PlayerManagementSubsystem.h:195
TMap< FGameplayTag, TWeakObjectPtr< ATargetableWeapon > > SpawnedWeaponMap
Definition PlayerManagementSubsystem.h:156
TWeakObjectPtr< UPlayerDeathFlowDefinition > ActivePlayerDeathFlowDefinition
Definition PlayerManagementSubsystem.h:171
FPlayerWeaponChangedDelegate WeaponChangedDelegate
Definition PlayerManagementSubsystem.h:137
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ EquipWeapon()

bool UPlayerManagementSubsystem::EquipWeapon ( const FGameplayTag NewWeaponTag)
417{
418 return ApplyWeapon(NewWeaponTag, false);
419}
bool ApplyWeapon(const FGameplayTag &NewWeaponTag, bool bActivateSwapInSkill)
Definition PlayerManagementSubsystem.cpp:428
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ FindSpawnedWeapon()

ATargetableWeapon * UPlayerManagementSubsystem::FindSpawnedWeapon ( const FGameplayTag WeaponTag)
478{
479 if (WeaponTag.IsValid() == false)
480 {
481 return nullptr;
482 }
483
485
486 if (FoundWeapon == nullptr)
487 {
488 return nullptr;
489 }
490
491 if (FoundWeapon->IsValid() == false)
492 {
493 SpawnedWeaponMap.Remove(WeaponTag);
494 return nullptr;
495 }
496
497 return FoundWeapon->Get();
498}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ FreezePlayer()

void UPlayerManagementSubsystem::FreezePlayer ( )
168{
169 if (bFrozen == true)
170 {
171 return;
172 }
173
174 ACharacter* Character = ResolveOwningCharacter();
175
176 if (Character == nullptr)
177 {
178 LOG_WARNING(LogCKPlayer, "소유 캐릭터를 찾을 수 없어 이동을 정지할 수 없습니다.");
179 return;
180 }
181
182 if (UCharacterMovementComponent* Movement = Character->GetCharacterMovement())
183 {
184 Movement->StopMovementImmediately();
185 Movement->DisableMovement();
186 }
187
188 if (UCapsuleComponent* Capsule = Character->GetCapsuleComponent())
189 {
190 SavedCapsuleCollision = Capsule->GetCollisionEnabled();
191 Capsule->SetCollisionEnabled(ECollisionEnabled::NoCollision);
192 }
193
194 bFrozen = true;
195}
ACharacter * ResolveOwningCharacter() const
Definition PlayerManagementSubsystem.cpp:635
TEnumAsByte< ECollisionEnabled::Type > SavedCapsuleCollision
Definition PlayerManagementSubsystem.h:199
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetCurrentWeaponTag()

FORCEINLINE FGameplayTag UPlayerManagementSubsystem::GetCurrentWeaponTag ( ) const
inline
96 {
97 return CurrentWeaponTag;
98 }
FGameplayTag CurrentWeaponTag
Definition PlayerManagementSubsystem.h:153
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetPlayer()

FORCEINLINE AMainPlayerCharacter * UPlayerManagementSubsystem::GetPlayer ( ) const
inline
101 {
102 return ResolveOwningPlayer();
103 }

◆ GetPlayerState()

FORCEINLINE AMainPlayerState * UPlayerManagementSubsystem::GetPlayerState ( ) const
inline
111 {
113 }
FORCEINLINE AMainPlayerCharacter * GetPlayer() const
Definition PlayerManagementSubsystem.h:100
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetPreviousWeaponTag()

FORCEINLINE FGameplayTag UPlayerManagementSubsystem::GetPreviousWeaponTag ( ) const
inline
91 {
92 return PreviousWeaponTag;
93 }
FGameplayTag PreviousWeaponTag
Definition PlayerManagementSubsystem.h:150
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetWeaponTagToSwitchTo()

FORCEINLINE FGameplayTag UPlayerManagementSubsystem::GetWeaponTagToSwitchTo ( ) const
inline
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HandlePlayerDeath()

bool UPlayerManagementSubsystem::HandlePlayerDeath ( AActor *  PlayerActor)
317{
318 if (PlayerActor == nullptr)
319 {
320 LOG_ERROR(LogCKPlayer, "PlayerActor를 가져올 수 없습니다.");
321 return false;
322 }
323
325
326 if (LevelRule == nullptr)
327 {
328 LOG_ERROR(LogCKPlayer, "%s를 가져올 수 없습니다. ", NAMEOF(ULevelRuleData));
329 return false;
330 }
331
332 UPlayerDeathFlowDefinition* PlayerDeathFlowDefinition = LevelRule->GetPlayerDeathFlowDefinition();
333
334 if (PlayerDeathFlowDefinition == nullptr)
335 {
336 LOG_ERROR(LogCKPlayer, "%s이 설정되지 않았습니다. ", NAMEOF(UPlayerDeathFlowDefinition));
337 return false;
338 }
339
340 if (PlayerDeathFlowDefinition->StartPlayerDeathFlow(this, PlayerActor) == false)
341 {
342 return false;
343 }
344
345 ActivePlayerDeathFlowDefinition = PlayerDeathFlowDefinition;
346
347 // 성좌 채팅 생성을 멈추고 아직 출력되지 않은 대기열을 비운다. 반응 태그는 그대로 둔다.
349 {
350 ChatStreaming->StopChatFlow();
351 }
352
353 return true;
354}
Definition LevelRuleData.h:18
UPlayerDeathFlowDefinition * GetPlayerDeathFlowDefinition() const
Definition LevelRuleData.cpp:13
Definition PlayerDeathFlowDefinition.h:17
bool StartPlayerDeathFlow(UPlayerManagementSubsystem *InPlayerManagementSubsystem, AActor *InPlayerActor)
Definition PlayerDeathFlowDefinition.cpp:23
ULevelRuleData * ResolveCurrentLevelRule(const UObject *LevelContextObject=nullptr) const
Definition PlayerManagementSubsystem.cpp:744
Definition StreamingSubsystem.h:73
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HandlePlayerSpawn() [1/2]

bool UPlayerManagementSubsystem::HandlePlayerSpawn ( AActor *  PlayerActor,
const FPrimaryAssetId LevelAssetID,
const UObject *  LevelContextObject 
)
372{
373 if (PlayerActor == nullptr)
374 {
375 LOG_ERROR(LogCKPlayer, "PlayerActor를 가져올 수 없습니다.");
376 return false;
377 }
378
380
381 if (LevelRule == nullptr)
382 {
383 LOG_ERROR(LogCKPlayer, "%s를 가져올 수 없습니다. ", NAMEOF(ULevelRuleData));
384 return false;
385 }
386
387 UPlayerSpawnFlowDefinition* PlayerSpawnFlowDefinition = LevelRule->GetPlayerSpawnFlowDefinition();
388
389 if (PlayerSpawnFlowDefinition == nullptr)
390 {
391 LOG_ERROR(LogCKPlayer, "%s이 설정되지 않았습니다. ", NAMEOF(UPlayerSpawnFlowDefinition));
392 return false;
393 }
394
396 {
398 }
399
401
402 if (PlayerSpawnFlowDefinition->StartPlayerSpawnFlow(this, PlayerActor) == false)
403 {
404 LOG_ERROR(LogCK, "%s 실행에 실패했습니다. ", NAMEOF_VAR(PlayerSpawnFlowDefinition));
405 return false;
406 }
407 else
408 {
409 LOG_INFO(LogCK, "%s 실행에 성공했습니다. ", NAMEOF_VAR(PlayerSpawnFlowDefinition));
410 ActivePlayerSpawnFlowDefinition = PlayerSpawnFlowDefinition;
411 return true;
412 }
413}
#define NAMEOF_VAR(Expr)
Definition CK_UE.h:34
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
UPlayerSpawnFlowDefinition * GetPlayerSpawnFlowDefinition() const
Definition LevelRuleData.cpp:19
Definition PlayerSpawnFlowDefinition.h:16
bool StartPlayerSpawnFlow(UPlayerManagementSubsystem *InPlayerManagementSubsystem, AActor *InPlayerActor)
Definition PlayerSpawnFlowDefinition.cpp:15
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HandlePlayerSpawn() [2/2]

bool UPlayerManagementSubsystem::HandlePlayerSpawn ( AActor *  PlayerActor,
const UObject *  LevelContextObject = nullptr 
)
358{
360}
bool HandlePlayerSpawn(AActor *PlayerActor, const FPrimaryAssetId &LevelAssetID, const UObject *LevelContextObject)
Definition PlayerManagementSubsystem.cpp:371
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ HandlePossessedPawnChanged()

void UPlayerManagementSubsystem::HandlePossessedPawnChanged ( APawn OldPawn,
APawn NewPawn 
)
private
571{
572 LOG_INFO(LogCKPlayer, "플레이어(:%s) 가 스폰되었습니다. ", *(NewPawn ? NewPawn->GetName() : TEXT("Nullptr")));
573
574 if (NewPawn == nullptr)
575 {
576 return;
577 }
578
580
582
583 if (Player && CurrentWeaponTag.IsValid() == false)
584 {
585 const FGameplayTag DefaultWeaponTag = Player->GetDefaultWeaponTag();
586
587 if (DefaultWeaponTag.IsValid())
588 {
589 EquipWeapon(DefaultWeaponTag);
590 }
591 }
592
593 if (StreamingSubsystem.IsValid() == false)
594 {
595 LOG_WARNING(LogCKPlayer, "%s가 유효하지 않아 플레이어 Freeze 여부를 판단할 수 없습니다.", NAMEOF(ULevelStreamingSubsystem));
596 return;
597 }
598
599 bool bShouldFreeze = false;
600
601 bShouldFreeze |= StreamingSubsystem->IsLevelLoadRequested();
602 bShouldFreeze |= StreamingSubsystem->IsInitialStageInitialized() == false;
603
604 if (bShouldFreeze == false)
605 {
606 return;
607 }
608
609 FreezePlayer();
610}
Definition LevelStreamingSubsystem.h:38
TWeakObjectPtr< ULevelStreamingSubsystem > StreamingSubsystem
Definition PlayerManagementSubsystem.h:141
bool EquipWeapon(const FGameplayTag &NewWeaponTag)
Definition PlayerManagementSubsystem.cpp:416
void FreezePlayer()
Definition PlayerManagementSubsystem.cpp:167
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Initialize()

void UPlayerManagementSubsystem::Initialize ( FSubsystemCollectionBase Collection)
overridevirtual
37{
38 Super::Initialize(Collection);
39
40 if (WeaponChangedDelegate.IsBound())
41 {
43 }
44
45 WeaponChangedDelegate.AddDynamic(this, &ThisClass::OnPlayerWeaponChanged);
46}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLevelLoaded()

virtual void UPlayerManagementSubsystem::OnLevelLoaded ( ULevel NewLevel,
const ULevelStreamingData LevelStreamingData 
)
inlineoverridevirtual

◆ OnLevelStreamingEnded()

void UPlayerManagementSubsystem::OnLevelStreamingEnded ( )
overridevirtual

IStreamingEventListenerInterface를 구현.

143{
144 // 초기 스테이지처럼 Placer 경로를 타지 않는 케이스 대비 백업 해제.
145 if (!bFrozen)
146 {
147 return;
148 }
149
150 LOG_INFO(LogCK, "플레이어 움직임 및 조작 활성화");
152}
void UnfreezePlayer()
Definition PlayerManagementSubsystem.cpp:198
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLevelStreamingStarted()

void UPlayerManagementSubsystem::OnLevelStreamingStarted ( )
overridevirtual

IStreamingEventListenerInterface를 구현.

156{
157 if (bFrozen)
158 {
159 return;
160 }
161
162 LOG_INFO(LogCK, "플레이어 움직임 및 조작 '비'활성화");
163 FreezePlayer();
164}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLevelUnloaded()

virtual void UPlayerManagementSubsystem::OnLevelUnloaded ( )
inlineoverridevirtual

◆ OnPlayerWeaponChanged()

void UPlayerManagementSubsystem::OnPlayerWeaponChanged ( FGameplayTag  PrevWeaponTag,
FGameplayTag  NewWeaponTag 
)
private
542{
543 const UWorld* World = GetWorld();
544
545 if (World == nullptr || World->GetGameInstance() == nullptr)
546 {
547 LOG_WARNING(LogCK, "World 또는 GameInstance가 유효하지 않아 무기 변경 이벤트를 전달할 수 없습니다.");
548 return;
549 }
550
551 ULevelStreamingSubsystem* Subsystem = World->GetGameInstance()->GetSubsystem<ULevelStreamingSubsystem>();
552
553 if (Subsystem == nullptr)
554 {
555 LOG_ERROR(LogCK, "%s를 얻어올 수 없습니다. ", NAMEOF(ULevelStreamingSubsystem));
556 return;
557 }
558
559 if (AUStageFlowDefinition* Definition = Subsystem->GetCurrentFlowDefinition())
560 {
561 Definition->OnPlayerWeaponChanged(PrevWeaponTag, NewWeaponTag);
562 }
563 else
564 {
565 LOG_WARNING(LogCK, "Failed to get %s.", NAMEOF(AUStageFlowDefinition));
566 }
567}
Definition StageFlowDefinition.h:27
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PlayerControllerChanged()

void UPlayerManagementSubsystem::PlayerControllerChanged ( APlayerController *  NewPlayerController)
overridevirtual
120{
121 Super::PlayerControllerChanged(NewPlayerController);
122
123 if (BoundPC.IsValid())
124 {
126 }
127
129
130 if (NewPlayerController == nullptr)
131 {
132 return;
133 }
134
136
137 //바인딩 시점에 이미 Pawn 이 possess 되어 있을 수 있으므로 수동 평가.
139}
void BindControllerDelegates(APlayerController *PlayerController)
Definition PlayerManagementSubsystem.cpp:613
void HandlePossessedPawnChanged(APawn *OldPawn, APawn *NewPawn)
Definition PlayerManagementSubsystem.cpp:570
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RefreshUILayerInputBlockTags()

void UPlayerManagementSubsystem::RefreshUILayerInputBlockTags ( )
private
675{
677
679 {
682 }
683
685 {
687 }
688 else
689 {
691 }
692
694 {
696 }
697 else
698 {
700 }
701
703 {
704 UILayerBlockASC.Reset();
705 }
706}
UAbilitySystemComponent * ResolveOwningAbilitySystemComponent() const
Definition PlayerManagementSubsystem.cpp:661
void AddUILayerInputBlockTag(UAbilitySystemComponent *AbilitySystemComponent, FGameplayTag Tag, bool &bAppliedFlag)
Definition PlayerManagementSubsystem.cpp:709
void RemoveUILayerInputBlockTag(FGameplayTag Tag, bool &bAppliedFlag)
Definition PlayerManagementSubsystem.cpp:728
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterSpawnedWeapon()

void UPlayerManagementSubsystem::RegisterSpawnedWeapon ( ATargetableWeapon SpawnedWeapon)
502{
503 if (SpawnedWeapon == nullptr)
504 {
505 return;
506 }
507
508 if (SpawnedWeapon->WeaponTag.IsValid() == false)
509 {
510 LOG_WARNING(LogCK, "스폰된 무기의 WeaponTag가 비어 있어 등록할 수 없습니다.");
511 return;
512 }
513
514 SpawnedWeaponMap.FindOrAdd(SpawnedWeapon->WeaponTag) = SpawnedWeapon;
515}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RemoveUILayerInputBlockTag()

void UPlayerManagementSubsystem::RemoveUILayerInputBlockTag ( FGameplayTag  Tag,
bool bAppliedFlag 
)
private
729{
730 if (bAppliedFlag == false)
731 {
732 return;
733 }
734
735 if (UILayerBlockASC.IsValid())
736 {
737 UILayerBlockASC->RemoveLooseGameplayTag(Tag);
738 }
739
740 bAppliedFlag = false;
741}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveCurrentLevelRule() [1/2]

ULevelRuleData * UPlayerManagementSubsystem::ResolveCurrentLevelRule ( const FPrimaryAssetId LevelAssetID,
const UObject *  LevelContextObject 
) const
private
751{
753
754 if (StageDictionary == nullptr)
755 {
756 LOG_ERROR(LogCKPlayer, "%s를 가져올 수 없습니다.", NAMEOF(UStageDictionary));
757 return nullptr;
758 }
759
761 ULevelStreamingData* StreamingData = StageDictionary->GetLevelStreamingDataByPrimaryAssetIdOrWorld(LevelAssetID, RouteContextObject);
762
763 if (StreamingData == nullptr)
764 {
765 LOG_ERROR(LogCKPlayer, "현재 월드에 대응하는 %s를 찾지 못했습니다.", NAMEOF(ULevelStreamingData));
766 return nullptr;
767 }
768
769 return StreamingData->LevelRule;
770}
static UStageDictionary * GetStreamingDataFromStageDictionary()
Definition CK_BPFunctionLibrary.cpp:230
Definition LevelStreamingData.h:19
TObjectPtr< ULevelRuleData > LevelRule
Definition LevelStreamingData.h:50
Definition StageDictionary.h:14
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveCurrentLevelRule() [2/2]

ULevelRuleData * UPlayerManagementSubsystem::ResolveCurrentLevelRule ( const UObject *  LevelContextObject = nullptr) const
private
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveOwningAbilitySystemComponent()

UAbilitySystemComponent * UPlayerManagementSubsystem::ResolveOwningAbilitySystemComponent ( ) const
private
662{
664
665 if (Player == nullptr)
666 {
667 return nullptr;
668 }
669
670 return Player->GetAbilitySystemComponent();
671}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveOwningCharacter()

ACharacter * UPlayerManagementSubsystem::ResolveOwningCharacter ( ) const
private
636{
638
639 if (LocalPlayer == nullptr)
640 {
641 return nullptr;
642 }
643
644 APlayerController* PlayerController = LocalPlayer->GetPlayerController(LocalPlayer->GetWorld());
645
646 if (PlayerController == nullptr)
647 {
648 return nullptr;
649 }
650
651 return Cast<ACharacter>(PlayerController->GetPawn());
652}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveOwningPlayer()

AMainPlayerCharacter * UPlayerManagementSubsystem::ResolveOwningPlayer ( ) const
private
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RespawnPlayer()

bool UPlayerManagementSubsystem::RespawnPlayer ( )
258{
260
261 if (Player == nullptr)
262 {
263 LOG_ERROR(LogCKPlayer, "%s를 가져올 수 없습니다. ", NAMEOF(AMainPlayerCharacter));
264 return false;
265 }
266
267 if (bHasCachedCheckPoint == false)
268 {
269 LOG_WARNING(LogCKPlayer, "저장된 CheckPoint가 없어 리스폰할 수 없습니다.");
270 return false;
271 }
272
273 bool bRollbackSucceeded = false;
274
275 if (CachedRollbackPointID.IsNone() == false)
276 {
278 {
280 }
281 }
282
283 if (bRollbackSucceeded == false && LastStageEventIDBeforeDeath.IsNone() == false)
284 {
286 checkf(StageManagement, TEXT("%s is required to rollback StageEvent trigger counts."), NAMEOF(UStageManagementSubsystem));
288 }
289
291
292 Player->RespawnAtTransform(CachedCheckPointTransform);
293
295 {
298 }
299
300 if (CachedCheckPoint.IsValid())
301 {
302 CachedCheckPoint->SendRespawnEvent(Player);
303 }
304
305 // 사망 전 반응 태그 상태 그대로 성좌 채팅 생성을 다시 시작한다.
307 {
308 ChatStreaming->StartChatFlow();
309 }
310
312 return true;
313}
static UStageManagementSubsystem * GetStageManagementSubsystem(const UObject *WorldContextObject)
Definition CK_BPFunctionLibrary.cpp:104
Definition StageManagementSubsystem.h:147
bool RollbackLastPlayerTriggeredProcessorCounts(const FName EventID)
Definition StageManagementSubsystem.cpp:484
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SwapWeapon()

bool UPlayerManagementSubsystem::SwapWeapon ( const FGameplayTag NewWeaponTag)
423{
424 return ApplyWeapon(NewWeaponTag, true);
425}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnbindControllerDelegates()

void UPlayerManagementSubsystem::UnbindControllerDelegates ( APlayerController *  PlayerController)
private
625{
626 if (PlayerController == nullptr)
627 {
628 return;
629 }
630
631 PlayerController->OnPossessedPawnChanged.RemoveDynamic(this, &ThisClass::HandlePossessedPawnChanged);
632}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnfreezePlayer()

void UPlayerManagementSubsystem::UnfreezePlayer ( )
199{
200 if (bFrozen == false)
201 {
202 return;
203 }
204
205 bFrozen = false;
206
207 const ACharacter* Character = ResolveOwningCharacter();
208
209 if (Character == nullptr)
210 {
211 LOG_WARNING(LogCKPlayer, "소유 캐릭터를 찾을 수 없어 이동을 재개할 수 없습니다.");
212 return;
213 }
214
215 if (auto Capsule = Character->GetCapsuleComponent())
216 {
217 Capsule->SetCollisionEnabled(SavedCapsuleCollision);
218 }
219
220 if (auto Movement = Character->GetCharacterMovement())
221 {
222 Movement->SetMovementMode(MOVE_Falling);
223 }
224}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnregisterSpawnedWeapon()

void UPlayerManagementSubsystem::UnregisterSpawnedWeapon ( const FGameplayTag WeaponTag,
const ATargetableWeapon SpawnedWeapon = nullptr 
)
519{
520 if (WeaponTag.IsValid() == false)
521 {
522 return;
523 }
524
526
527 if (FoundWeapon == nullptr)
528 {
529 return;
530 }
531
532 if (SpawnedWeapon && FoundWeapon->Get() != SpawnedWeapon)
533 {
534 return;
535 }
536
537 SpawnedWeaponMap.Remove(WeaponTag);
538}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateEquippedWeapon()

void UPlayerManagementSubsystem::UpdateEquippedWeapon ( const FGameplayTag NewWeaponTag)
private
463{
465 {
466 // 동일 무기 빠른 리턴
467 LOG_WARNING(LogCK, "SetEquippedWeapon:동일 무기 태그. 무시.");
468 return;
469 }
470
474}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ ActivePlayerDeathFlowDefinition

TWeakObjectPtr<UPlayerDeathFlowDefinition> UPlayerManagementSubsystem::ActivePlayerDeathFlowDefinition
private

◆ ActivePlayerSpawnFlowDefinition

TWeakObjectPtr<UPlayerSpawnFlowDefinition> UPlayerManagementSubsystem::ActivePlayerSpawnFlowDefinition
private

◆ bAppliedUILayerInputBlock

bool UPlayerManagementSubsystem::bAppliedUILayerInputBlock = false
private

◆ bAppliedUILayerMovementBlock

bool UPlayerManagementSubsystem::bAppliedUILayerMovementBlock = false
private

◆ bFrozen

bool UPlayerManagementSubsystem::bFrozen = false
private

◆ bHasCachedCheckPoint

bool UPlayerManagementSubsystem::bHasCachedCheckPoint = false
private

◆ bHasCachedSpawnFlowGravityScale

bool UPlayerManagementSubsystem::bHasCachedSpawnFlowGravityScale = false
private

◆ BoundPC

TWeakObjectPtr<APlayerController> UPlayerManagementSubsystem::BoundPC
private

◆ bShouldBlockUILayerInput

bool UPlayerManagementSubsystem::bShouldBlockUILayerInput = false
private

◆ bShouldBlockUILayerMovement

bool UPlayerManagementSubsystem::bShouldBlockUILayerMovement = false
private

◆ CachedCheckPoint

TWeakObjectPtr<ACheckPoint> UPlayerManagementSubsystem::CachedCheckPoint
private

◆ CachedCheckPointTransform

FTransform UPlayerManagementSubsystem::CachedCheckPointTransform
private

◆ CachedRollbackPointID

FName UPlayerManagementSubsystem::CachedRollbackPointID = NAME_None
private

◆ CachedSpawnFlowGravityScale

float UPlayerManagementSubsystem::CachedSpawnFlowGravityScale = 1.0f
private

◆ CurrentWeaponTag

FGameplayTag UPlayerManagementSubsystem::CurrentWeaponTag
private

◆ LastStageEventIDBeforeDeath

FName UPlayerManagementSubsystem::LastStageEventIDBeforeDeath = NAME_None
private

◆ PreviousWeaponTag

FGameplayTag UPlayerManagementSubsystem::PreviousWeaponTag
private

◆ SavedCapsuleCollision

TEnumAsByte<ECollisionEnabled::Type> UPlayerManagementSubsystem::SavedCapsuleCollision = ECollisionEnabled::QueryAndPhysics
private

◆ SpawnedWeaponMap

TMap<FGameplayTag, TWeakObjectPtr<ATargetableWeapon> > UPlayerManagementSubsystem::SpawnedWeaponMap
private

◆ StreamingSubsystem

TWeakObjectPtr<ULevelStreamingSubsystem> UPlayerManagementSubsystem::StreamingSubsystem
private

◆ UILayerBlockASC

TWeakObjectPtr<UAbilitySystemComponent> UPlayerManagementSubsystem::UILayerBlockASC
private

◆ WeaponChangedDelegate

FPlayerWeaponChangedDelegate UPlayerManagementSubsystem::WeaponChangedDelegate

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