KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UDialogWidget.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
7#include "UDialogWidget.h"
8#include "UDelayTaskManager.h"
9#include "Components/Border.h"
10#include "Components/TextBlock.h"
11
13{
14 Super::NativeConstruct();
15
16 if (DialogBorder)
17 {
18 DialogBorder->SetVisibility(ESlateVisibility::Hidden);
19 }
20}
21
23{
24 if (UWorld* World = GetWorld())
25 {
26 if (HideTimerHandle.IsValid())
27 {
28 World->GetTimerManager().ClearTimer(HideTimerHandle);
29 }
30 }
31
32 Super::NativeDestruct();
33}
34
35void UDialogWidget::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
36{
37 Super::NativeTick(MyGeometry, InDeltaTime);
38
39 if (bIsOpenAnim)
40 {
41 UpdateAnimation(InDeltaTime);
42 }
43}
44
46{
47 if (!DialogBorder || !DialogText)
48 return;
49
50 HideTimerHandle.Invalidate();
51
52 DialogText->SetText(FText::GetEmpty());
53 DialogBorder->SetBrushColor(DeactivateColor);
54 DialogBorder->SetVisibility(ESlateVisibility::Hidden);
55}
56
58{
59 // 블루프린트에서 정의한 애니메이션이 있으면 해당 애니메이션 재생
61 {
62 PlayAnimation(BlueprintOpenAnimation);
63 return;
64 }
65
66 // 블루프린트 애니메이션이 없으면 기본 스크립트 애니메이션 사용
67 SetRenderTransformPivot(OpenPivot);
68 SetRenderScale(FVector2D(OpenStartScale, OpenStartScale));
69
70 bIsOpenAnim = OpenDuration > KINDA_SMALL_NUMBER;
71 OpenElapsedTime = 0.0f;
72
73 if (!bIsOpenAnim)
74 {
75 SetRenderScale(FVector2D(OpenTargetScale, OpenTargetScale));
76 }
77}
78
79void UDialogWidget::UpdateAnimation(float InDeltaTime)
80{
81 if (!bIsOpenAnim)
82 {
83 return;
84 }
85
86 OpenElapsedTime += InDeltaTime;
87
88 const float Alpha = FMath::Clamp(OpenElapsedTime / OpenDuration, 0.0f, 1.0f);
89 const float EasedAlpha = FEaseHelper::Ease(Alpha, OpenEaseType);
90 const float NewScale = FMath::Lerp(OpenStartScale, OpenTargetScale, EasedAlpha);
91
92 SetRenderScale(FVector2D(NewScale, NewScale));
93
94 if (Alpha >= 1.0f)
95 {
96 bIsOpenAnim = false;
97 }
98}
99
100void UDialogWidget::ShowDialog(FString InString)
101{
102 if (!DialogBorder || !DialogText)
103 return;
104
105 // 이전 타이머가 있으면 취소
106 if (UWorld* World = GetWorld())
107 {
108 if (HideTimerHandle.IsValid())
109 World->GetTimerManager().ClearTimer(HideTimerHandle);
110 }
111
112 DialogBorder->SetVisibility(ESlateVisibility::Visible);
113 DialogBorder->SetBrushColor(ActivateColor);
114 DialogText->SetText(FText::FromString(InString));
115
116 // 오픈 애니메이션 재생
118
119 // 5초 후 숨기는 타이머 설정 (약한 참조 사용)
120 if (UWorld* World = GetWorld())
121 {
122 TWeakObjectPtr<UDialogWidget> WeakThis(this);
123
124 World->GetTimerManager().SetTimer(
126 FTimerDelegate::CreateLambda([WeakThis]()
127 {
128 if (WeakThis.IsValid())
129 {
130 WeakThis->HandleHideTimerExpired();
131 }
132 }),
133 5.0f,
134 false
135 );
136 }
137}
138
140{
141 if (!DialogBorder || !DialogText)
142 return;
143
144 if (UWorld* World = GetWorld())
145 {
146 if (HideTimerHandle.IsValid())
147 World->GetTimerManager().ClearTimer(HideTimerHandle);
148 }
149
151}
UDelayTaskManager 클래스를 선언합니다.
텍스트 출력하는 다이얼로그 위젯을 선언합니다.
TObjectPtr< class UBorder > DialogBorder
FTimerHandle HideTimerHandle
Delay 태스크 핸들 (이전 태스크 취소용)
UWidgetAnimation * BlueprintOpenAnimation
블루프린트에서 정의한 오픈 애니메이션
FVector2D OpenPivot
애니메이션 중심점 (0~1 범위)
float OpenElapsedTime
경과 시간
TObjectPtr< class UTextBlock > DialogText
EEaseType OpenEaseType
Easing 타입
void ShowDialog(FString InString)
대화 텍스트를 표시하고 강조 색상을 적용합니다.
void HandleHideTimerExpired()
virtual void NativeTick(const FGeometry &MyGeometry, float InDeltaTime) override
FLinearColor ActivateColor
virtual void NativeDestruct() override
void UpdateAnimation(float InDeltaTime)
스크립트 오픈 애니메이션 업데이트
float OpenStartScale
시작 스케일
virtual void NativeConstruct() override
위젯 초기화 및 기본 색상을 설정합니다.
FLinearColor DeactivateColor
void HideDialogImmediately()
bool bIsOpenAnim
애니메이션 재생 중 여부
float OpenTargetScale
목표 스케일
void OpenAnimation()
다이얼로그 오픈 애니메이션을 재생합니다
float OpenDuration
애니메이션 지속 시간
static float Ease(float Alpha, EEaseType Type)
Definition FEaseHelper.h:45