585 lines
14 KiB
C++
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();
|
|
}
|
|
|
|
|