KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPopup_HowToPlay.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 "UPopup_HowToPlay.h"
4#include "UPageScrollView.h"
5#include "UPageScrollItem.h"
7#include "UPopupManager.h"
8#include "UTextureButton.h"
9#include "UGameDataManager.h"
10
11void UPopup_HowToPlay::InitPopup(const TArray<EHowToPlayPageType>& InPageTypes )
12{
13 // 버튼 이벤트 바인딩
14 if (Btn_Close)
15 {
16 Btn_Close->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_HowToPlay::OnClickClose);
17 Btn_Close->OnButtonClickedEvent.AddDynamic(this, &UPopup_HowToPlay::OnClickClose);
18 }
19
20 if (Btn_Prev)
21 {
22 Btn_Prev->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_HowToPlay::OnClickPrev);
23 Btn_Prev->OnButtonClickedEvent.AddDynamic(this, &UPopup_HowToPlay::OnClickPrev);
24 }
25
26 if (Btn_Next)
27 {
28 Btn_Next->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_HowToPlay::OnClickNext);
29 Btn_Next->OnButtonClickedEvent.AddDynamic(this, &UPopup_HowToPlay::OnClickNext);
30 }
31
32 PageTypes = InPageTypes;
33
35
37}
38
40{
41 if (!PageScrollView)
42 return;
43
44 // 5개 페이지 생성
45 PageScrollView->SetNumberOfPages(PageTypes.Num());
46
47 // 페이지 변경 이벤트 바인딩
48 PageScrollView->OnPageChanged.RemoveDynamic(this, &UPopup_HowToPlay::OnPageChanged);
49 PageScrollView->OnPageChanged.AddDynamic(this, &UPopup_HowToPlay::OnPageChanged);
50
51 // 각 페이지에 데이터 설정
52 TArray<FHowToPlayPageData> PageDataArray = GetPageDataArray();
53 for (int32 i = 0; i < PageDataArray.Num() && i < PageScrollView->GetTotalPages(); ++i)
54 {
55 if (auto Page = Cast<UPopup_HowToPlayItem>(PageScrollView->GetPageAt(i)))
56 {
57 Page->InitPageData(PageDataArray[i]);
58 }
59 }
60}
61
63{
64 if (!PageScrollView)
65 return;
66
67 Btn_Prev->SetVisibility( PageTypes.Num() > 1 ? ESlateVisibility::Visible : ESlateVisibility::Hidden );
68 Btn_Next->SetVisibility( PageTypes.Num() > 1 ? ESlateVisibility::Visible : ESlateVisibility::Hidden );
69
70 int32 CurPage = PageScrollView->GetCurrentPage();
71 int32 TotalPages = PageScrollView->GetTotalPages();
72
73 // 이전 버튼 활성화/비활성화
74 Btn_Prev->SetIsEnabled(CurPage > 0);
75
76 // 다음 버튼 활성화/비활성화
77 Btn_Next->SetIsEnabled(CurPage < TotalPages - 1);
78}
79
81{
82 // PopupManager를 통해 팝업 닫기
83 if (UPopupManager* PopupMgr = UPopupManager::Get(GetWorld()))
84 {
85 PopupMgr->HideCurrentPopup();
86 }
87
88 // 델리게이트 호출
89 if (OnClosedDelegate.IsBound())
90 {
91 OnClosedDelegate.Execute();
92 OnClosedDelegate = nullptr;
93 }
94}
95
97{
98 PageScrollView->PrevPage();
99}
100
102{
103 PageScrollView->NextPage();
104}
105
106void UPopup_HowToPlay::OnPageChanged(int32 PrevPage, int32 CurrentPage)
107{
108 // 네비게이션 버튼 상태 업데이트
110}
111
112TArray<FHowToPlayPageData> UPopup_HowToPlay::GetPageDataArray() const
113{
114 TArray<FHowToPlayPageData> RetData;
115
116 if ( auto DM = UGameDataManager::Get(GetWorld()) )
117 {
118 for (const EHowToPlayPageType& pageType : PageTypes)
119 {
120 FHowToPlayPageData pageData;
121 if (DM->GetHowToPlayPageData(pageType, pageData))
122 RetData.Add(pageData);
123 }
124 }
125
126 return RetData;
127}
EHowToPlayPageType
HowToPlay 페이지 타입
UGameDataManager 클래스를 선언합니다.
팝업 관리자
TArray< EHowToPlayPageType > PageTypes
void InitPopup(const TArray< EHowToPlayPageType > &InPageTypes)
팝업을 초기화합니다.
void OnClickPrev()
이전 페이지 버튼 클릭 이벤트
void OnClickNext()
다음 페이지 버튼 클릭 이벤트
void UpdateNavigationButtons()
페이지 네비게이션 버튼 상태를 업데이트합니다.
TObjectPtr< class UTextureButton > Btn_Close
닫기 버튼 (우측 상단)
TObjectPtr< class UPageScrollView > PageScrollView
페이지 스크롤 뷰
void OnPageChanged(int32 PrevPage, int32 CurrentPage)
페이지 변경 이벤트
TObjectPtr< class UTextureButton > Btn_Next
다음 페이지 버튼 (선택적)
FOnHowToPlayClosedDelegate OnClosedDelegate
팝업 닫힘 시 호출될 델리게이트
TObjectPtr< class UTextureButton > Btn_Prev
이전 페이지 버튼 (선택적)
TArray< FHowToPlayPageData > GetPageDataArray() const
페이지 데이터 배열을 가져옵니다.
void OnClickClose()
닫기 버튼 클릭 이벤트
HowToPlay 페이지 데이터