KLingo Project Documentation
1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UCircularProgressBar.cpp
이 파일의 문서화 페이지로 가기
1
// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
3
4
#include "
UCircularProgressBar.h
"
5
6
#include "Components/Image.h"
7
8
void
UCircularProgressBar::NativePreConstruct
()
9
{
10
Super::NativePreConstruct();
11
ApplyStyle
();
12
}
13
14
void
UCircularProgressBar::NativeTick
(
const
FGeometry& MyGeometry,
float
InDeltaTime)
15
{
16
Super::NativeTick(MyGeometry, InDeltaTime);
17
18
// 애니메이션 업데이트
19
if
(
bIsAnimating
)
20
{
21
AnimElapsedTime
+= InDeltaTime;
22
23
// 진행률 계산 (0.0 ~ 1.0)
24
float
Progress = FMath::Clamp(
AnimElapsedTime
/
AnimDuration
, 0.0f, 1.0f);
25
26
// EaseOutSine 적용
27
float
EasedProgress =
easeOutSine
(Progress);
28
29
// Start에서 Target으로 Lerp
30
Percent
= FMath::Lerp(
AnimStartPercent
,
AnimTargetPercent
, EasedProgress);
31
32
// 스타일 적용
33
ApplyStyle
();
34
35
// 애니메이션 완료
36
if
(Progress >= 1.0f)
37
{
38
bIsAnimating
=
false
;
39
Percent
=
AnimTargetPercent
;
// 정확한 값으로 설정
40
ApplyStyle
();
41
}
42
}
43
}
44
45
void
UCircularProgressBar::SetPercent
(
const
float
InPercent)
46
{
47
// 애니메이션 중단
48
bIsAnimating
=
false
;
49
50
Percent
= FMath::Clamp(InPercent, 0.0f, 1.0f);
51
ApplyStyle
();
52
}
53
54
void
UCircularProgressBar::StartProgress
(
const
float
Start,
const
float
End,
const
float
Duration)
55
{
56
// 애니메이션 설정
57
AnimStartPercent
= FMath::Clamp(Start, 0.0f, 1.0f);
58
AnimTargetPercent
= FMath::Clamp(End, 0.0f, 1.0f);
59
AnimDuration
= FMath::Max(Duration, 0.01f);
// 최소 0.01초
60
AnimElapsedTime
= 0.0f;
61
62
// 시작 값으로 설정
63
Percent
=
AnimStartPercent
;
64
ApplyStyle
();
65
66
// 애니메이션 시작
67
bIsAnimating
=
true
;
68
}
69
70
void
UCircularProgressBar::StopProgress
()
71
{
72
bIsAnimating
=
false
;
73
}
74
75
void
UCircularProgressBar::ApplyStyle
()
76
{
77
if
(!
Img_CircularBar
)
78
return
;
79
80
auto
DynamicMaterial =
Img_CircularBar
->GetDynamicMaterial();
81
if
(DynamicMaterial)
82
{
83
// Percent 값 설정
84
DynamicMaterial->SetScalarParameterValue(TEXT(
"Percent"
),
Percent
);
85
86
// Percent에 따라 색상 Lerp
87
FLinearColor FilledColor;
88
if
(
Percent
<= 0.5f)
89
{
90
// 0% ~ 50%: LowColor → MidColor
91
float
Alpha =
Percent
* 2.0f;
// 0.0 ~ 1.0으로 정규화
92
FilledColor = FLinearColor::LerpUsingHSV(
LowColor
,
MidColor
, Alpha);
93
}
94
else
95
{
96
// 50% ~ 100%: MidColor → HighColor
97
float
Alpha = (
Percent
- 0.5f) * 2.0f;
// 0.0 ~ 1.0으로 정규화
98
FilledColor = FLinearColor::LerpUsingHSV(
MidColor
,
HighColor
, Alpha);
99
}
100
101
// FilledColor 파라미터 설정
102
DynamicMaterial->SetVectorParameterValue(TEXT(
"FilledColor"
), FilledColor);
103
}
104
}
UCircularProgressBar.h
UCircularProgressBar::Percent
float Percent
진행률 (0.0 ~ 1.0)
Definition
UCircularProgressBar.h:48
UCircularProgressBar::NativeTick
virtual void NativeTick(const FGeometry &MyGeometry, float InDeltaTime) override
Definition
UCircularProgressBar.cpp:14
UCircularProgressBar::MidColor
FLinearColor MidColor
중간 진행률 색상 (50%)
Definition
UCircularProgressBar.h:56
UCircularProgressBar::SetPercent
void SetPercent(const float InPercent)
Definition
UCircularProgressBar.cpp:45
UCircularProgressBar::HighColor
FLinearColor HighColor
높은 진행률 색상 (50% ~ 100%)
Definition
UCircularProgressBar.h:60
UCircularProgressBar::easeOutSine
FORCEINLINE double easeOutSine(const double Value)
Definition
UCircularProgressBar.h:37
UCircularProgressBar::AnimStartPercent
float AnimStartPercent
Definition
UCircularProgressBar.h:66
UCircularProgressBar::LowColor
FLinearColor LowColor
낮은 진행률 색상 (0% ~ 50%)
Definition
UCircularProgressBar.h:52
UCircularProgressBar::NativePreConstruct
virtual void NativePreConstruct() override
Definition
UCircularProgressBar.cpp:8
UCircularProgressBar::ApplyStyle
void ApplyStyle()
Definition
UCircularProgressBar.cpp:75
UCircularProgressBar::AnimTargetPercent
float AnimTargetPercent
Definition
UCircularProgressBar.h:67
UCircularProgressBar::AnimDuration
float AnimDuration
Definition
UCircularProgressBar.h:69
UCircularProgressBar::bIsAnimating
bool bIsAnimating
Definition
UCircularProgressBar.h:64
UCircularProgressBar::StartProgress
void StartProgress(const float Start, const float End, const float Duration=1.0f)
Start에서 End까지 부드럽게 애니메이션
Definition
UCircularProgressBar.cpp:54
UCircularProgressBar::Img_CircularBar
class UImage * Img_CircularBar
Definition
UCircularProgressBar.h:44
UCircularProgressBar::StopProgress
void StopProgress()
애니메이션 중단
Definition
UCircularProgressBar.cpp:70
UCircularProgressBar::AnimElapsedTime
float AnimElapsedTime
Definition
UCircularProgressBar.h:68
Source
Onepiece
WidgetComponents
Private
UCircularProgressBar.cpp
생성시간 : 금 1월 9 2026 00:25:57, 프로젝트명 : KLingo Project Documentation, 생성자 :
1.9.8