Files
2026-06-01 12:46:52 +02:00

585 lines
14 KiB
C++

#include "stdafx.h"
/// 2011.07.07 - prodongi
#include "SGameManager.h"
//#include "SGameMessageUI.h"
#include "SStringDB.h"
#include "SUIBadgeWnd.h"
/// 2011.07.05 - prodongi
static int itemCodeCreatureBadge = 1900001; /// 크리처 배지
static int itemCodeVulcanus01Badge = 1000407; /// 볼카누스 퀘스트 배지 상편
static int itemCodeVulcanus02Badge = 1000408; /// 볼카누스 퀘스트 배지 중편
static int itemCodeVulcanus03Badge = 1000409; /// 볼카누스 퀘스트 배지 하편
static int itemCodeVulcanus04Badge = 1000410; /// 볼카누스 퀘스트 배지 완성본
static int itemCodeVulcanusNoticeBadge = 1000424; /// 볼카누스 퀘스트 배지 공고문
SUIBadgeWnd::SUIBadgeWnd( SGameManager* pGameManager ) : SUIWnd( pGameManager )
{
m_nPostProc = 0;
}
SUIBadgeWnd::~SUIBadgeWnd()
{
m_stringId.clear();
m_removeWndList.clear();
m_itemCodeList.clear();
}
SUIWnd* SUIBadgeWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID )
{
SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID );
return this;
}
bool SUIBadgeWnd::InitControls( KPoint pos )
{
SetCustomMovingRect( KRect( 0, 0, 447, 545 ) ); // 타이틀 바 선택 영역, 이동위해 클릭 Area
return SUIWnd::InitControls( pos );
}
bool SUIBadgeWnd::InitData( bool reload )
{
m_curItemCode = -1;
m_maxPage = -1;
m_curPage = -1;
m_itemWnd = NULL;
m_isSetItemString = false;
initItemCodeList();
return SUIWnd::InitData( reload );
}
void SUIBadgeWnd::initItemCodeList()
{
m_itemCodeList.clear();
m_itemCodeList.insert(std::make_pair(itemCodeCreatureBadge, 0));
m_itemCodeList.insert(std::make_pair(itemCodeVulcanus01Badge, 0));
m_itemCodeList.insert(std::make_pair(itemCodeVulcanus02Badge, 0));
m_itemCodeList.insert(std::make_pair(itemCodeVulcanus03Badge, 0));
m_itemCodeList.insert(std::make_pair(itemCodeVulcanus04Badge, 0));
m_itemCodeList.insert(std::make_pair(itemCodeVulcanusNoticeBadge, 0));
}
void SUIBadgeWnd::PumpUpMessage( LPCTSTR controlID, DWORD msg, DWORD lparam, DWORD wparam )
{
switch( msg )
{
case KUI_MESSAGE::KBUTTON_CLICK: buttonClick(controlID, lparam, wparam);
break;
}
SUIWnd::PumpUpMessage( controlID, msg, lparam, wparam );
}
void SUIBadgeWnd::buttonClick(LPCTSTR controlID, DWORD lParam, DWORD wparam)
{
if (0 == stricmp(controlID, "pagebutton1"))
{
//reserve to Process
m_nPostProc = 1;
//prevPage();
}
else if (0 == stricmp(controlID, "pagebutton2"))
{
//reserve to Process
m_nPostProc = 2;
//nextPage();
}
else if (0 == stricmp(controlID, "close"))
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_BADGE, false) );
}
}
void SUIBadgeWnd::Process(DWORD dwTime)
{
//gmpbigsun( 20130228 ) : m_nPostProc > 0 이라면 처리해야 할일이 뒤로 미뤄진것임.
//이유는 iterating도중 호출되는 prevPage(), nextPage()이 요소를 지우면서 반복자가 무효화 된다 지미!
if( m_nPostProc > 0 ) //예약된 작업이 있다면
{
if( m_nPostProc == 1 )
prevPage();
else if( m_nPostProc == 2 )
nextPage();
else
{
assert( 0 );
}
m_nPostProc = 0;
}
//endsun-----------------------------------
procRemoveWndList();
updateItemString();
}
void SUIBadgeWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
{
SUIWnd::OnNotifyUIWindowOpen(bOpen, bLimitWnd);
}
void SUIBadgeWnd::ProcMsgAtStatic( SGameMessage* pMsg )
{
switch (pMsg->nType)
{
case IMSG_UI_OPEN_BADGE:
{
SIMSG_UI_OPEN_BADGE* msg = dynamicCast<SIMSG_UI_OPEN_BADGE*>(pMsg);
openItemWnd(msg->itemCode);
}
break;
}
}
bool SUIBadgeWnd::isValidItemCode(int itemCode)
{
std::map<int, int>::iterator it = m_itemCodeList.find(itemCode);
return it != m_itemCodeList.end();
}
void SUIBadgeWnd::findNuiNameFormat(int itemCode)
{
if (itemCodeCreatureBadge == itemCode)
{
m_nuiNameFormat = "window_quest_creature_taming%02d.nui";
}
else if (itemCodeVulcanus01Badge == itemCode)
{
m_nuiNameFormat = "window_quest_vulcanus_01_%02d.nui";
}
else if (itemCodeVulcanus02Badge == itemCode)
{
m_nuiNameFormat = "window_quest_vulcanus_02_%02d.nui";
}
else if (itemCodeVulcanus03Badge == itemCode)
{
m_nuiNameFormat = "window_quest_vulcanus_03_%02d.nui";
}
else if (itemCodeVulcanus04Badge == itemCode)
{
m_nuiNameFormat = "window_quest_vulcanus_04_%02d.nui";
}
else if (itemCodeVulcanusNoticeBadge == itemCode)
{
m_nuiNameFormat = "window_quest_vulcanus_notice.nui";
}
}
void SUIBadgeWnd::addStringId(std::string const& key, int id)
{
m_stringId.insert(std::make_pair(key, id));
}
void SUIBadgeWnd::findStringId(int itemCode, int page)
{
m_stringId.clear();
if (itemCodeCreatureBadge == itemCode)
{
if (0 == page)
{
addStringId("1page_textbox01", 5001);
addStringId("1page_textbox02", 5002);
addStringId("1page_textbox03", 5003);
addStringId("1page_textbox04", 5004);
addStringId("1page_textbox05", 5005);
}
else if (1 == page)
{
addStringId("2page_textbox01", 5006);
addStringId("2page_textbox02", 5007);
addStringId("2page_textbox03", 5008);
}
else if (2 == page)
{
addStringId("3page_textbox01", 5009);
addStringId("3page_textbox02", 5010);
addStringId("3page_textbox03", 5011);
addStringId("3page_textbox04", 5012);
addStringId("3page_textbox05", 5013);
addStringId("3page_textbox06", 5014);
addStringId("3page_textbox07", 5015);
addStringId("3page_textbox08", 5016);
addStringId("3page_textbox09", 5017);
addStringId("3page_textbox10", 5018);
addStringId("3page_textbox11", 5019);
addStringId("3page_textbox12", 5020);
addStringId("3page_textbox13", 5021);
addStringId("3page_textbox14", 5022);
}
else if (3 == page)
{
addStringId("4page_textbox01", 5024);
addStringId("4page_textbox02", 5025);
addStringId("4page_textbox03", 5026);
addStringId("4page_textbox04", 5027);
}
else if (4 == page)
{
addStringId("5page_textbox01", 5028);
addStringId("5page_textbox02", 5029);
addStringId("5page_textbox03", 5030);
addStringId("5page_textbox04", 5031);
addStringId("5page_textbox05", 5032);
addStringId("5page_textbox06", 5033);
addStringId("5page_textbox07", 5034);
}
}
else if (itemCodeVulcanus01Badge == itemCode)
{
if (0 == page)
{
addStringId("1_1page_textbox02", 5076);
addStringId("1_1page_textbox03", 5077);
addStringId("1_1page_textbox04", 5078);
addStringId("1_1page_textbox05", 5079);
}
else if (1 == page)
{
addStringId("1_2page_textbox02", 5080);
addStringId("1_2page_textbox03", 5081);
addStringId("1_2page_textbox04", 5082);
addStringId("1_2page_textbox05", 5083);
}
}
else if (itemCodeVulcanus02Badge == itemCode)
{
if (0 == page)
{
addStringId("2_1page_textbox02", 5085);
addStringId("2_1page_textbox03", 5086);
addStringId("2_1page_textbox04", 5087);
addStringId("2_1page_textbox05", 5088);
}
else if (1 == page)
{
addStringId("2_2page_textbox02", 5089);
addStringId("2_2page_textbox03", 5090);
addStringId("2_2page_textbox04", 5091);
}
}
else if (itemCodeVulcanus03Badge == itemCode)
{
if (0 == page)
{
addStringId("3_1page_textbox02", 5093);
addStringId("3_1page_textbox03", 5094);
addStringId("3_1page_textbox04", 5095);
addStringId("3_1page_textbox05", 5096);
addStringId("3_1page_textbox06", 5097);
}
else if (1 == page)
{
addStringId("3_2page_textbox02", 5098);
addStringId("3_2page_textbox03", 5099);
addStringId("3_2page_textbox04", 5100);
}
else if (2 == page)
{
addStringId("3_3page_textbox02", 5101);
addStringId("3_3page_textbox03", 5102);
}
}
else if (itemCodeVulcanus04Badge == itemCode)
{
if (0 == page)
{
addStringId("4_1page_textbox01", 5070);
addStringId("4_1page_textbox02", 5071);
addStringId("4_1page_textbox03", 5072);
addStringId("4_1page_textbox04", 5073);
addStringId("4_1page_textbox05", 5074);
}
else if (1 == page)
{
addStringId("1_1page_textbox02", 5076);
addStringId("1_1page_textbox03", 5077);
addStringId("1_1page_textbox04", 5078);
addStringId("1_1page_textbox05", 5079);
}
else if (2 == page)
{
addStringId("1_2page_textbox02", 5080);
addStringId("1_2page_textbox03", 5081);
addStringId("1_2page_textbox04", 5082);
addStringId("1_2page_textbox05", 5083);
}
else if (3 == page)
{
addStringId("2_1page_textbox02", 5085);
addStringId("2_1page_textbox03", 5086);
addStringId("2_1page_textbox04", 5087);
addStringId("2_1page_textbox05", 5088);
}
else if (4 == page)
{
addStringId("2_2page_textbox02", 5089);
addStringId("2_2page_textbox03", 5090);
addStringId("2_2page_textbox04", 5091);
}
else if (5 == page)
{
addStringId("3_1page_textbox02", 5093);
addStringId("3_1page_textbox03", 5094);
addStringId("3_1page_textbox04", 5095);
addStringId("3_1page_textbox05", 5096);
addStringId("3_1page_textbox06", 5097);
}
else if (6 == page)
{
addStringId("3_2page_textbox02", 5098);
addStringId("3_2page_textbox03", 5099);
addStringId("3_2page_textbox04", 5100);
}
else if (7 == page)
{
addStringId("3_3page_textbox02", 5101);
addStringId("3_3page_textbox03", 5102);
}
else if (8 == page)
{
addStringId("4_2page_textbox02", 5104);
addStringId("4_2page_textbox03", 5105);
addStringId("4_2page_textbox04", 5106);
addStringId("4_2page_textbox05", 5107);
}
else if (9 == page)
{
addStringId("4_3page_textbox02", 5108);
addStringId("4_3page_textbox03", 5109);
addStringId("4_3page_textbox04", 5110);
addStringId("4_3page_textbox05", 5111);
}
else if (10 == page)
{
addStringId("4_4page_textbox02", 5112);
addStringId("4_4page_textbox03", 5113);
addStringId("4_4page_textbox04", 5114);
addStringId("4_4page_textbox05", 5115);
addStringId("4_4page_textbox06", 5116);
}
else if (11 == page)
{
addStringId("4_5page_textbox02", 5117);
addStringId("4_5page_textbox03", 5118);
addStringId("4_5page_textbox04", 5119);
addStringId("4_5page_textbox05", 5120);
}
}
else if (itemCodeVulcanusNoticeBadge == itemCode)
{
if (0 == page)
{
addStringId("notice_page_textbox01", 5121);
addStringId("notice_page_textbox02", 5122);
}
}
}
void SUIBadgeWnd::findMaxPage(int itemCode)
{
if (itemCodeCreatureBadge == itemCode)
{
m_maxPage = 5;
}
else if (itemCodeVulcanus01Badge == itemCode)
{
m_maxPage = 2;
}
else if (itemCodeVulcanus02Badge == itemCode)
{
m_maxPage = 2;
}
else if (itemCodeVulcanus03Badge == itemCode)
{
m_maxPage = 3;
}
else if (itemCodeVulcanus04Badge == itemCode)
{
//m_maxPage = 5;
m_maxPage = 12;
}
else if (itemCodeVulcanusNoticeBadge == itemCode)
{
m_maxPage = 1;
}
}
void SUIBadgeWnd::openItemWnd(int itemCode)
{
if (!isValidItemCode(itemCode))
return ;
if (itemCode == m_curItemCode)
{
if (IsShow())
return ;
}
else
{
createItemWnd(itemCode);
}
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_BADGE, true) );
}
void SUIBadgeWnd::createItemWnd(int itemCode)
{
m_curPage = -1;
m_curItemCode = itemCode;
findNuiNameFormat(itemCode);
findMaxPage(itemCode);
setCurPage(0);
}
void SUIBadgeWnd::nextPage()
{
setCurPage(m_curPage + 1);
}
void SUIBadgeWnd::prevPage()
{
setCurPage(m_curPage - 1);
}
std::string SUIBadgeWnd::GetNuiName( int nCurrItemCode, int nPage )
{
// 페이지와 아이템종류로 로드해야할 (.nui)파일네임을 뽑아준다.
// 최종4장의 1페이지가 합본의 1페이지가 된다.
const int nStartPage = 4;
int nExPage = nPage;
if( itemCodeVulcanus04Badge == nCurrItemCode ) //최종 합본이면...
{
if( nPage == 1 )
{
//4쪽중 1page가 전체 1page가된다.
nExPage = 1;
m_nuiNameFormat = "window_quest_vulcanus_04_%02d.nui";
}
else if( nExPage < nStartPage ) // 1~2page
{
nExPage -= 1;
m_nuiNameFormat = "window_quest_vulcanus_01_%02d.nui";
}
else if ( nExPage < nStartPage + 2 )
{
nExPage -= ( 2 + 1 );
m_nuiNameFormat = "window_quest_vulcanus_02_%02d.nui";
}
else if( nExPage < nStartPage + 2 + 3 )
{
nExPage -= ( 2 + 2 + 1);
m_nuiNameFormat = "window_quest_vulcanus_03_%02d.nui";
}
else if( nExPage < nStartPage + 2 + 3 + 4 )
{
nExPage -= ( 2 + 2 + 3 );
m_nuiNameFormat = "window_quest_vulcanus_04_%02d.nui";
}
}
return CStringUtil::StringFormat(m_nuiNameFormat.c_str(), nExPage);
}
void SUIBadgeWnd::setCurPage(int page)
{
if (m_maxPage <= page)
page = m_maxPage - 1;
if (0 > page)
page = 0;
if (m_curPage == page)
return ;
//
addRemoveWndList(m_itemWnd);
m_itemWnd = NULL;
//
findStringId(m_curItemCode, page);
//
m_curPage = page;
// std::string nuiName = CStringUtil::StringFormat(m_nuiNameFormat.c_str(), m_curPage + 1);
std::string nuiName = GetNuiName( m_curItemCode, m_curPage + 1 ); //gmpbigsun(20130228, #26466 ) : 최종본을 합본으로 만들기위해 대체되었다.
assert(!m_itemWnd);
m_itemWnd = new SUIWnd(m_pGameManager);
m_itemWnd->CreateWnd(nuiName.c_str(), m_pManager, KPoint(GetRect().left, GetRect().top));
m_itemWnd->SetParent(this);
m_itemWnd->SetShow(true);
AddChild(m_itemWnd);
SetChildAsTop("pagebutton1");
SetChildAsTop("pagebutton2");
SetChildAsTop("close");
/// 2011.09.30 - prodongi
m_isSetItemString = true;
//setItemString();
}
void SUIBadgeWnd::updateItemString()
{
if (!m_isSetItemString)
return ;
m_isSetItemString = false;
assert(!m_itemWnd);
std::list<KUIWnd*> childList = m_itemWnd->GetChildList();
std::list<KUIWnd*>::iterator it = childList.begin();
for (; it != childList.end(); ++it)
{
int stringId = getStringId((*it)->GetID());
if (stringId)
{
(*it)->SetCaption(S(stringId));
}
}
}
int SUIBadgeWnd::getStringId(std::string const& controlId)
{
std::map<std::string, int>::iterator it = m_stringId.find(controlId);
if (it == m_stringId.end())
return 0;
return it->second;
}
void SUIBadgeWnd::addRemoveWndList(SUIWnd* wnd)
{
if (!wnd)
return ;
wnd->SetShow(false);
m_removeWndList.push_back(wnd);
}
void SUIBadgeWnd::procRemoveWndList()
{
if (m_removeWndList.empty())
return ;
OffToolTipWnd();
std::vector<SUIWnd*>::iterator it = m_removeWndList.begin();
for (; it != m_removeWndList.end(); ++it)
{
/// 2011.03.15 ReleaseCapture()를 호출 하면 안된다, 왜냐면 현재 캡춰된 넘은 *it의 자식 컨트롤이기 때문에 ReleaseCapture를 쓰면 초기화가 안된다 - prodongi
m_pManager->SetCapture(NULL);
RemoveChild(*it);
}
m_removeWndList.clear();
}