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

#include <MainPlayerState.h>

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

Public 멤버 함수

 AMainPlayerState ()
 
virtual UAbilitySystemComponent * GetAbilitySystemComponent () const override
 
FORCEINLINE UPlayerAttributeSetGetPlayerAttributeSet () const
 
void AddExp (float Amount)
 
int32 GetPlayerLevel () const
 
float GetCurrentExp () const
 
float GetRequiredExp () const
 

Public 속성

FOnExpChanged OnExpChanged
 
FOnLevelUp OnLevelUp
 

Protected 멤버 함수

virtual void BeginPlay () override
 
void HandleExperienceThresholdReached ()
 
bool ApplyLevelRequirement ()
 
void RetryLevelRequirement ()
 

Protected 속성

TObjectPtr< UAbilitySystemComponent > ASC
 
TObjectPtr< UPlayerAttributeSetAttributeSet
 

Private 속성

FTimerHandle LevelRequirementRetryTimerHandle
 

생성자 & 소멸자 문서화

◆ AMainPlayerState()

AMainPlayerState::AMainPlayerState ( )
15{
16 ASC = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("ASC"));
17 AttributeSet = CreateDefaultSubobject<UPlayerAttributeSet>(TEXT("AttributeSet"));
18}
TObjectPtr< UAbilitySystemComponent > ASC
Definition MainPlayerState.h:62
TObjectPtr< UPlayerAttributeSet > AttributeSet
Definition MainPlayerState.h:65

멤버 함수 문서화

◆ AddExp()

void AMainPlayerState::AddExp ( float  Amount)
101{
102 if (Amount <= 0.0f || AttributeSet == nullptr)
103 {
104 return;
105 }
106
107 // 어트리뷰트를 직접 올린다. GE 로 주고 싶으면 여기 대신 GE 를 적용하면 된다.
108 AttributeSet->SetExperience(AttributeSet->GetExperience() + Amount);
109
110 // SetExperience 는 PostGameplayEffectExecute 를 타지 않으므로 여기서 직접 판정한다.
112}
void HandleExperienceThresholdReached()
Definition MainPlayerState.cpp:115
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyLevelRequirement()

bool AMainPlayerState::ApplyLevelRequirement ( )
protected
76{
77 if (AttributeSet == nullptr)
78 {
79 return false;
80 }
81
82 UStageManifest* Manifest = UDataBundleRegistry::GetBundleAssetByTag<UStageManifest>(TAG_BUNDLE_INITIAL);
83
84 // 표가 아직 안 채워졌으면 요구치 0 이 "최종 레벨"인지 "미로드"인지 구분할 수 없다.
85 if (Manifest == nullptr || Manifest->HasLevelData() == false)
86 {
87 return false;
88 }
89
90 const float RequiredExp = Manifest->GetRequiredExp(GetPlayerLevel());
91
92 AttributeSet->SetMaxExperience(RequiredExp);
93
94 OnExpChanged.Broadcast(AttributeSet->GetExperience(), RequiredExp);
95
96 return true;
97}
int32 GetPlayerLevel() const
Definition MainPlayerState.cpp:48
FOnExpChanged OnExpChanged
Definition MainPlayerState.h:45
Definition StageManifest.h:161
virtual float GetRequiredExp(int32 Level)
Definition StageManifest.cpp:471
bool HasLevelData() const
Definition StageManifest.h:225
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ BeginPlay()

void AMainPlayerState::BeginPlay ( )
overrideprotectedvirtual
27{
28 Super::BeginPlay();
29
30 if (AttributeSet == nullptr)
31 {
32 LOG_ERROR(LogCKPlayer, "%s 가 없어 경험치를 초기화할 수 없습니다.", NAMEOF(UPlayerAttributeSet));
33 return;
34 }
35
36 AttributeSet->OnExperienceThresholdReached.AddUObject(this, &AMainPlayerState::HandleExperienceThresholdReached);
37
38 AttributeSet->InitExperienceStats(1.0f, 0.0f, 0.0f);
39
40 // 데이터 번들이 비동기 로드라 이 시점엔 레벨 표가 없을 수 있다.
41 if (ApplyLevelRequirement() == false)
42 {
43 GetWorldTimerManager().SetTimer(LevelRequirementRetryTimerHandle, this, &AMainPlayerState::RetryLevelRequirement, 0.5f, true);
44 }
45}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF(Type)
Definition CK_UE.h:30
FTimerHandle LevelRequirementRetryTimerHandle
Definition MainPlayerState.h:69
void RetryLevelRequirement()
Definition MainPlayerState.cpp:66
bool ApplyLevelRequirement()
Definition MainPlayerState.cpp:75
Definition PlayerAttributeSet.h:13
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAbilitySystemComponent()

class UAbilitySystemComponent * AMainPlayerState::GetAbilitySystemComponent ( ) const
overridevirtual
21{
22 return ASC;
23}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetCurrentExp()

float AMainPlayerState::GetCurrentExp ( ) const
55{
56 return AttributeSet ? AttributeSet->GetExperience() : 0.0f;
57}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetPlayerAttributeSet()

FORCEINLINE UPlayerAttributeSet * AMainPlayerState::GetPlayerAttributeSet ( ) const
inline
30{ return AttributeSet; }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetPlayerLevel()

int32 AMainPlayerState::GetPlayerLevel ( ) const
49{
50 return AttributeSet ? FMath::RoundToInt(AttributeSet->GetLevel()) : 1;
51}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetRequiredExp()

float AMainPlayerState::GetRequiredExp ( ) const
61{
62 return AttributeSet ? AttributeSet->GetMaxExperience() : 0.0f;
63}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HandleExperienceThresholdReached()

void AMainPlayerState::HandleExperienceThresholdReached ( )
protected
116{
117 if (AttributeSet == nullptr)
118 {
119 return;
120 }
121
122 // 한 번에 여러 레벨이 오를 수 있으므로 요구치를 못 넘길 때까지 반복한다.
123 // 요구치가 0 이하인 레벨은 최종 레벨이라 여기서 자연히 멈춘다.
124 while (true)
125 {
126 const float RequiredExp = AttributeSet->GetMaxExperience();
127
128 if (RequiredExp <= 0.0f || AttributeSet->GetExperience() < RequiredExp)
129 {
130 break;
131 }
132
133 AttributeSet->SetExperience(AttributeSet->GetExperience() - RequiredExp);
134 AttributeSet->SetLevel(AttributeSet->GetLevel() + 1.0f);
135
136 const int32 NewLevel = GetPlayerLevel();
137
138 LOG_INFO(LogCKPlayer, "레벨 업: %d", NewLevel);
139
140 // 다음 레벨 요구치를 먼저 채운 뒤 알려야 UI 가 올바른 분모를 본다.
142
143 OnLevelUp.Broadcast(NewLevel);
144 }
145
146 OnExpChanged.Broadcast(AttributeSet->GetExperience(), AttributeSet->GetMaxExperience());
147}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
FOnLevelUp OnLevelUp
Definition MainPlayerState.h:46
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RetryLevelRequirement()

void AMainPlayerState::RetryLevelRequirement ( )
protected
67{
69 {
70 GetWorldTimerManager().ClearTimer(LevelRequirementRetryTimerHandle);
71 }
72}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ ASC

TObjectPtr<UAbilitySystemComponent> AMainPlayerState::ASC
protected

◆ AttributeSet

TObjectPtr<UPlayerAttributeSet> AMainPlayerState::AttributeSet
protected

◆ LevelRequirementRetryTimerHandle

FTimerHandle AMainPlayerState::LevelRequirementRetryTimerHandle
private

◆ OnExpChanged

FOnExpChanged AMainPlayerState::OnExpChanged

◆ OnLevelUp

FOnLevelUp AMainPlayerState::OnLevelUp

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