KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPageScrollDot.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#include "UPageScrollDot.h"
4#include "Components/HorizontalBox.h"
5#include "Components/Image.h"
6#include "Blueprint/WidgetTree.h"
7
9{
11 return;
12
13 // 기존 도트 제거
14 dotList.Empty();
15 DotContainer->ClearChildren();
16
17 // 새 도트 생성
18 for (int32 i = 0; i < PageCount; ++i)
19 {
20 UUserWidget* newDot = CreateWidget<UUserWidget>(GetWorld(), DotWidgetClass);
21 if (!newDot)
22 continue;
23
24 // DotContainer에 추가
25 DotContainer->AddChild(newDot);
26
27 // 초기 색상/스케일 설정 (비선택 상태)
29
30 dotList.Add(newDot);
31 }
32
33 // 첫 번째 도트를 선택 상태로 설정
35}
36
37void UPageScrollDot::SetCurrentPage(int32 PageIndex)
38{
39 if (!dotList.IsValidIndex(PageIndex))
40 return;
41
42 currentPageIndex = PageIndex;
43
44 // 모든 도트 업데이트
45 for (int32 i = 0; i < dotList.Num(); ++i)
46 {
47 UUserWidget* dot = dotList[i];
48 if (!dot)
49 continue;
50
51 if (i == currentPageIndex)
52 {
53 // 선택된 도트
55 }
56 else
57 {
58 // 비선택된 도트
60 }
61 }
62}
63
64UImage* UPageScrollDot::GetDotImage(UUserWidget* DotWidget) const
65{
66 if (!DotWidget)
67 return nullptr;
68
69 // "Image_Dot" 이름으로 Image 컴포넌트 찾기
70 UImage* dotImage = Cast<UImage>(DotWidget->GetWidgetFromName(TEXT("Image_Dot")));
71
72 // 못 찾았다면 WidgetTree에서 첫 번째 Image 컴포넌트 사용
73 if (!dotImage && DotWidget->WidgetTree)
74 {
75 TArray<UWidget*> allWidgets;
76 DotWidget->WidgetTree->GetAllWidgets(allWidgets);
77
78 for (UWidget* widget : allWidgets)
79 {
80 if (UImage* image = Cast<UImage>(widget))
81 {
82 dotImage = image;
83 break;
84 }
85 }
86 }
87
88 return dotImage;
89}
90
91void UPageScrollDot::UpdateDotAppearance(UUserWidget* DotWidget, FLinearColor Color, float Scale)
92{
93 if (!DotWidget)
94 return;
95
96 // Image 컴포넌트 찾기
97 UImage* dotImage = GetDotImage(DotWidget);
98 if (dotImage)
99 {
100 // 색상 설정
101 dotImage->SetColorAndOpacity(Color);
102 }
103
104 // 스케일 설정
105 DotWidget->SetRenderScale(FVector2D(Scale, Scale));
106}
FLinearColor UnselectedColor
비선택된 도트의 색상
TSubclassOf< class UUserWidget > DotWidgetClass
개별 도트 위젯 클래스
float UnselectedScale
비선택된 도트의 스케일
void UpdateDotAppearance(UUserWidget *DotWidget, FLinearColor Color, float Scale)
도트의 색상과 스케일을 설정합니다.
FLinearColor SelectedColor
선택된 도트의 색상
float SelectedScale
선택된 도트의 스케일
TArray< TObjectPtr< UUserWidget > > dotList
생성된 도트 위젯 목록
void SetCurrentPage(int32 PageIndex)
현재 선택된 페이지를 설정합니다.
void SetNumberOfPages(int32 PageCount)
도트 개수를 설정합니다.
int32 currentPageIndex
현재 선택된 페이지 인덱스
class UImage * GetDotImage(UUserWidget *DotWidget) const
도트 위젯의 Image 컴포넌트를 찾습니다.
TObjectPtr< class UHorizontalBox > DotContainer
생성된 도트들을 담을 컨테이너