KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPopup_History.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_History.h"
4#include "UHistoryItem.h"
5#include "UPopupManager.h"
7#include "ULingoGameHelper.h"
8#include "GameLogging.h"
9#include "FChatHistoryItem.h"
10#include "UTextureButton.h"
11#include "Components/ScrollBox.h"
12#include "Components/VerticalBox.h"
13#include "Components/Spacer.h"
14#include "APlayerControl.h"
15#include "Components/Border.h"
16
18{
19 Super::NativeConstruct();
20
21 // 버튼 바인딩
22 if (Btn_Close)
23 {
24 Btn_Close->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_History::OnClickClose);
25 Btn_Close->OnButtonClickedEvent.AddDynamic(this, &UPopup_History::OnClickClose);
26 }
27}
28
33
35{
36 // 기존 항목 제거
37 VerticalBox->ClearChildren();
38
39 // ChatHistorySystem에서 히스토리 로드
41 if (!PC || !PC->GetChatHistorySystem())
42 {
43 Border_NoData->SetVisibility(ESlateVisibility::Visible);
44 if (ScrollBox)
45 {
46 ScrollBox->SetVisibility(ESlateVisibility::Hidden);
47 }
48 return;
49 }
50
51 TArray<FChatHistoryItem> HistoryList;
52 const int32 Count = PC->GetChatHistorySystem()->LoadAllChatHistory(HistoryList);
53
54 if (Count == 0)
55 {
56 Border_NoData->SetVisibility(ESlateVisibility::Visible);
57 if (ScrollBox)
58 {
59 ScrollBox->SetVisibility(ESlateVisibility::Hidden);
60 }
61 return;
62 }
63
64 // 히스토리 아이템 생성 (Index 순서대로 = 상단이 구 데이터, 하단이 신 데이터)
65 Border_NoData->SetVisibility(ESlateVisibility::Hidden);
66 if (ScrollBox)
67 ScrollBox->SetVisibility(ESlateVisibility::Visible);
68
69 for (int32 i = 0; i < HistoryList.Num(); ++i)
70 {
72 {
73 continue;
74 }
75
76 UHistoryItem* ItemWidget = CreateWidget<UHistoryItem>(this, HistoryItemClass);
77 if (!ItemWidget)
78 {
79 continue;
80 }
81
82 ItemWidget->InitItem(HistoryList[i]);
83 VerticalBox->AddChildToVerticalBox(ItemWidget);
84
85 // Spacer 추가 (마지막 항목 제외)
86 // if (i < HistoryList.Num() - 1)
87 {
88 USpacer* Spacer = NewObject<USpacer>(VerticalBox);
89 Spacer->SetSize(FVector2D(1.0f, ItemSpacing));
90 VerticalBox->AddChildToVerticalBox(Spacer);
91 }
92 }
93
94 PRINTLOG(TEXT("[Popup_History] Refreshed %d items"), Count);
95}
96
98{
99 if (UPopupManager* PopupManager = UPopupManager::Get(GetWorld()))
100 {
101 PopupManager->HideCurrentPopup();
102 }
103}
APlayerControl 선언에 대한 Doxygen 주석을 제공합니다.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
Chat 대화 기록을 GConfig를 이용하여 관리하는 컴포넌트입니다.
개별 Chat History 항목을 표시하는 위젯입니다.
Chat History를 표시하는 팝업 위젯입니다.
class UChatHistorySystem * GetChatHistorySystem() const
Chat History System에 접근합니다.
Chat History 개별 아이템 위젯
void InitItem(const FChatHistoryItem &Data)
히스토리 항목 초기화
static class APlayerControl * GetPlayerControl(const UObject *WorldContextObject)
팝업 관리자
float ItemSpacing
히스토리 항목 간 간격 (Spacer Height)
TSubclassOf< class UHistoryItem > HistoryItemClass
히스토리 항목 위젯 클래스
virtual void NativeConstruct() override
TObjectPtr< class UTextureButton > Btn_Close
닫기 버튼
void RefreshHistoryList()
히스토리 아이템을 생성하여 VerticalBox에 추가합니다.
void InitPopup()
팝업 초기화
TObjectPtr< class UScrollBox > ScrollBox
스크롤 가능한 히스토리 패널
TObjectPtr< class UBorder > Border_NoData
데이터가 없을 때 표시할 텍스트
TObjectPtr< class UVerticalBox > VerticalBox
히스토리 항목들이 추가될 VerticalBox