Files
Sun1602/Client/GameClient/Interface/uiAreaConquestDialog/uiAreaConquestDialog.h
T
2022-10-26 12:25:11 +08:00

416 lines
13 KiB
C++

#pragma once
#include "uiBase.h"
#include "Achievement.h"
#include "AreaConquestInfo.h"
#include "FTextRender.h"
#include "DropdownControl.h"
// class AchievementPart;
// class AchievementInfo;
#ifdef _NA_006541_RENEWER_ACDIALOG
#include "TreeController.h"
#endif
struct Object_Info
{
CODETYPE object_code;
bool is_complete;
WORD achievement; //달성 목표 값 (이 값 이상이면 달성)
WORD value; //수행한 현재 값
};
class uiAreaConquestDialog : public uiBase
{
enum UIControlPos
{
kControl_Button_Close = 0,
#ifdef _NA_006541_RENEWER_ACDIALOG
#else
kControl_Button_BT00, // 지역명선택버튼
kControl_Button_BT01, // 상태선택버튼
#endif
#ifdef _NA_002884_AC_DIALOG_RENEWAL
kControl_Picture_BackGround,// 배경 이미지
kControl_Button_Object_01, // AC항목버튼#1
kControl_Button_Object_02,
kControl_Button_Object_03,
kControl_Button_Object_04,
kControl_Button_Object_05,
kControl_Button_Object_06,
kControl_Button_Object_07,
kControl_Button_Object_08,
kControl_Button_Object_09,
kControl_Button_Object_10,
kControl_Button_Object_11,
kControl_Button_Object_12,
kControl_Button_Object_13,
kControl_Button_Object_14,
kControl_Button_Object_15,
kControl_Button_Object_16,
kControl_Button_Object_17,
kControl_Button_Object_18,
kControl_Button_Object_19,
kControl_Button_Object_20, // AC항목버튼#20
kControl_Button_Image_01, // AC항목아이콘#1
kControl_Button_Image_02,
kControl_Button_Image_03,
kControl_Button_Image_04,
kControl_Button_Image_05,
kControl_Button_Image_06,
kControl_Button_Image_07,
kControl_Button_Image_08,
kControl_Button_Image_09,
kControl_Button_Image_10,
kControl_Button_Image_11,
kControl_Button_Image_12,
kControl_Button_Image_13,
kControl_Button_Image_14,
kControl_Button_Image_15,
kControl_Button_Image_16,
kControl_Button_Image_17,
kControl_Button_Image_18,
kControl_Button_Image_19,
kControl_Button_Image_20, // AC항목아이콘#20
kControl_Button_Reward_01, // AC항목보상버튼#1
kControl_Button_Reward_02,
kControl_Button_Reward_03,
kControl_Button_Reward_04,
kControl_Button_Reward_05,
kControl_Button_Reward_06,
kControl_Button_Reward_07,
kControl_Button_Reward_08,
kControl_Button_Reward_09,
kControl_Button_Reward_10,
kControl_Button_Reward_11,
kControl_Button_Reward_12,
kControl_Button_Reward_13,
kControl_Button_Reward_14,
kControl_Button_Reward_15,
kControl_Button_Reward_16,
kControl_Button_Reward_17,
kControl_Button_Reward_18,
kControl_Button_Reward_19,
kControl_Button_Reward_20, // AC항목보상버튼#20
#else
kControl_Button_Object_01, // AC항목버튼#1
kControl_Button_Object_02,
kControl_Button_Object_03,
kControl_Button_Object_04,
kControl_Button_Object_05,
kControl_Button_Object_06,
kControl_Button_Object_07,
kControl_Button_Object_08,
kControl_Button_Object_09,
kControl_Button_Object_10, // AC항목버튼#10
kControl_Button_Image_01, // AC항목아이콘#1
kControl_Button_Image_02,
kControl_Button_Image_03,
kControl_Button_Image_04,
kControl_Button_Image_05,
kControl_Button_Image_06,
kControl_Button_Image_07,
kControl_Button_Image_08,
kControl_Button_Image_09,
kControl_Button_Image_10, // AC항목아이콘#10
kControl_Button_Reward_01, // AC항목보상버튼#1
kControl_Button_Reward_02,
kControl_Button_Reward_03,
kControl_Button_Reward_04,
kControl_Button_Reward_05,
kControl_Button_Reward_06,
kControl_Button_Reward_07,
kControl_Button_Reward_08,
kControl_Button_Reward_09,
kControl_Button_Reward_10, // AC항목보상버튼#10
#endif //_NA_002884_AC_DIALOG_RENEWAL
kControl_Button_Object_Detail, // 상세정보출력
kControl_Button_Detail_Reward, // 상세정보보상버튼
#ifdef _NA_006541_RENEWER_ACDIALOG
kControl_Button_Picture_01, // AC항목보상버튼#1
kControl_Button_Picture_02,
kControl_Button_Picture_03,
kControl_Button_Picture_04,
kControl_Button_Picture_05,
kControl_Button_Picture_06,
kControl_Button_Picture_07,
kControl_Button_Picture_08,
kControl_Button_Picture_09,
kControl_Button_Picture_10,
kControl_Button_Picture_11,
kControl_Button_Picture_12,
kControl_Button_Picture_13,
kControl_Button_Picture_14,
kControl_Button_Picture_15,
kControl_Button_Picture_16,
kControl_Button_Picture_17,
kControl_Button_Picture_18,
kControl_Button_Picture_19,
kControl_Button_Picture_20, // AC항목보상버튼#20
#endif
#ifdef _NA_006541_RENEWER_ACDIALOG
kControl_List_L000,
kControl_VScroll, // AC항목스크롤
#else
#ifdef _SCJ_111202_UI_RENEWAL
kControl_Button_B005, // 선택지역명 버튼
kControl_Button_B006, // 선택상태명 버튼
#else
kControl_Text_T201, // 선택지역명
kControl_Text_ST01, // 선택상태명
#endif //_SCJ_111202_UI_RENEWAL
kControl_Text_ST02, // 완료카운트
kControl_Text_S000, // 달성률
kControl_Picture_P000, // 달성률게이지
kControl_List_LS00, // 지역선택리스트
kControl_List_LS01, // 상태선택리스트
kControl_VScroll, // AC항목스크롤
kControl_Edit_E000, // Edit박스컨트롤
#endif
kControl_Size,
};
enum
{
kDisplay_AC_Info_Num = kControl_Button_Image_01 - kControl_Button_Object_01,
};
public:
enum
{
kComplete_Text_Color = 0,
kInComplete_Text_Color,
kEnable_Text_Color,
kDisable_Text_Color,
KMax_Text_Color,
};
public:
uiAreaConquestDialog(InterfaceManager* ui_manager);
virtual ~uiAreaConquestDialog(void);
virtual void Init(CDrawBase* draw_base);
virtual void Release();
virtual void OnUpdateSolarDialog();
virtual void OnShowWindow(BOOL is_show);
virtual void MessageProc(SI_MESSAGE* message);
void RegisterControl();
void InitACDialog();
void OnSelectArea(WORD area_code);
void OnSelectACInfoState(WORD select_State);
void OnSelectAcinfoIndex(WORD info_index);
void OnUpdateACInfo();
WORD GetCurrentAreaCode();
WORD GetPendingRewardACIndex();
DropdownControl& dropdown_select_area() { return dropdown_select_area_; }
DropdownControl& dropdown_select_stats() { return dropdown_select_stats_; }
void UpdateValue();
void AllClearACDialog(int selected_item = -1);
private:
bool OnLButtonClick(SI_MESSAGE* message);
bool OnUpScroll(SI_MESSAGE* message);
bool OnDownScroll(SI_MESSAGE* message);
bool OnThumbScroll(SI_MESSAGE* message);
void OnMouseWheelScroll(BYTE mouse_wheel_state);
void OnClickACButton(SI_MESSAGE* message);
void OnClickACInfo(DWORD list_index);
void OnClickACInfoDetail();
void OnClickACReward(DWORD list_index);
void OnClickACIcon(DWORD list_index);
#ifdef _NA_006541_RENEWER_ACDIALOG
void MakeCompoisiteTreeitem(HTREEITEM perentItem,void* Item,bool percent);
#else
void SetAreaProgressData(DWORD ac_ratio, DWORD total_count, DWORD complete_count, bool is_show_ratio);
#endif
void SetACData(int index_display, int index_info);
bool SetACDetailData(int index_display);
void SetRectACControl(int index_display, bool enable_reward);
void SetACDataString(int index_display, AchievementInfo* ac_info);
void GetACObjectText(AchievementInfo* ac_info, TCHAR* ac_object_string);
void GetACRewardText(AchievementInfo* ac_info, TCHAR* ac_reward_string);
bool GetACObjectDetailText(WORD object_type, CODETYPE object_code, TCHAR* object_detail_string,
WORD achievement, WORD value);
void ClearAcInfoToDisplay(int index_display);
void RefreshACInfo();
void RefreshScroll(WORD ac_index_index);
bool IsShowControl(POSTYPE control_pos);
void ShowControl(POSTYPE control_pos, bool is_show);
void ToggleShowControl(POSTYPE control_pos);
void HideACInfoDetail();
void RenderACInfoDetailControl();
#ifdef _NA_006541_RENEWER_ACDIALOG
void ReflushForceMove(int Cell,RECT size);
void ReflushList();
void InitControlReflush();
bool isInRecttoRect(const RECT& from,const RECT& to);
bool CheckNationTree(const HTREEITEM item,HTREEITEM* Outdata,int selected_item);
#endif
static void CallBackRenderACDetailInfo(CControlWZ* control_ptr, void* parameter);
AreaConquestInfo* area_conquest_info() { return &area_conquest_info_; }
#ifdef _NA_002884_AC_DIALOG_RENEWAL
#else
void RenderACInfoText(DWORD index_display);
static void CallBackRenderACInfo(CControlWZ* control_ptr, void* parameter);
#endif //_NA_002884_AC_DIALOG_RENEWAL
private:
uiAreaConquestMan* ui_ac_manager_;
#ifdef _NA_002884_AC_DIALOG_RENEWAL
STLX_VECTOR<int> ac_info_control_width_;
#else
std::vector<FTextRender> ac_info_text_render_;
HANDLE info_control_texture_;
#endif //_NA_002884_AC_DIALOG_RENEWAL
FTextRender info_detail_text_;
WORD selected_area_code_;
WORD selected_info_state_;
int current_scroll_position_;
POSTYPE ac_detail_display_index_;
WORD pending_reward_ac_index_;
float ac_gauge_control_size_;
float ac_gauge_texture_size_;
AreaConquestInfo area_conquest_info_;
AchievementInfo* selected_achievement_info_;
DropdownControl dropdown_select_area_;
DropdownControl dropdown_select_stats_;
#ifdef _NA_006541_RENEWER_ACDIALOG
TreeController* tree_control_ptr_;
int control_size_;
LONG height_item_;
int scroller_index_;
int expend_item_;
int check_expend_item_;
int post_extend_item_scroll_;
int string_height_;
//보상버튼은 특별함으로 레알 숨겨진 버튼만 처리함.
std::vector<int> hide_control_reward;
#endif
};
inline WORD uiAreaConquestDialog::GetCurrentAreaCode()
{
WORD area_code = 0;
if (selected_achievement_info_ != NULL)
{
area_code = selected_achievement_info_->GetLocationCode();
}
return area_code;
}
inline WORD uiAreaConquestDialog::GetPendingRewardACIndex()
{
WORD info_index = 0;
if (selected_achievement_info_ != NULL)
{
info_index = selected_achievement_info_->GetIndex();
}
return info_index;
}
inline void uiAreaConquestDialog::ShowControl(POSTYPE control_pos, bool is_show)
{
CControlWZ* control = GetControlWZ(GetControlID_byPosition(control_pos));
if (control != NULL)
{
control->ShowWindowWZ((is_show == true) ? WZ_SHOW : WZ_HIDE);
}
}
inline void uiAreaConquestDialog::ToggleShowControl(POSTYPE control_pos)
{
CControlWZ* control = GetControlWZ(GetControlID_byPosition(control_pos));
if (control != NULL)
{
ENUM_STATEWZ control_state = control->GetState();
control->ShowWindowWZ((control_state == WZ_HIDE) ? WZ_SHOW : WZ_HIDE);
}
}
inline void uiAreaConquestDialog::HideACInfoDetail()
{
ShowControl(kControl_Button_Object_Detail, false);
ShowControl(kControl_Button_Detail_Reward, false);
#ifdef _NA_006541_RENEWER_ACDIALOG
ac_detail_display_index_ = INVALID_SLOT_POS;
selected_achievement_info_ = NULL;
CCtrlVScrollWZ* scroll_control =
static_cast<CCtrlVScrollWZ*>(GetControlWZ(GetControlID_byPosition(kControl_VScroll)));
if (scroll_control == NULL)
{
return;
}
int scroll_min = 0;
int scroll_max = 0;
int info_list_num = area_conquest_info()->GeAchievementInfoSize();
int current_scroll_pos = scroll_control->GetScrollPosWZ();
scroll_control->GetScrollRangeWZ(&scroll_min, &scroll_max);
scroll_max = max(0, (info_list_num - kDisplay_AC_Info_Num));
scroll_control->SetScrollRangeWZ(scroll_min, scroll_max);
//스크롤의 위치 수정
//현재위 위치가 아래임.
//스크롤을 위로 강제로 올림.
int pos = 0;
if( pos = (current_scroll_pos - post_extend_item_scroll_)> 0)
{
for (int i = 0 ; i < pos ; ++i)
{
OnUpScroll(NULL);
}
}
//확장 스크롤이 아래임
else if( pos = (post_extend_item_scroll_ - current_scroll_pos) > 0)
{
for (int i = 0 ; i < pos ; ++i)
{
OnDownScroll(NULL);
}
}
expend_item_ = 0;
#endif
}