#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(pMsg); openItemWnd(msg->itemCode); } break; } } bool SUIBadgeWnd::isValidItemCode(int itemCode) { std::map::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 childList = m_itemWnd->GetChildList(); std::list::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::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::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(); }