313 lines
8.2 KiB
C++
313 lines
8.2 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "KUIControlButton.h"
|
|
|
|
#include "SGameManager.h"
|
|
//#include "SGameMessageUI.h"
|
|
#include "SUISysMenuWnd.h"
|
|
|
|
#include "SGameOption.h"
|
|
|
|
namespace
|
|
{
|
|
enum{
|
|
TAB_CHARACTER = 0,
|
|
TAB_02,
|
|
TAB_SKILL,
|
|
TAB_MOTION,
|
|
TAB_QUEST,
|
|
TAB_SYSTEM,
|
|
};
|
|
};
|
|
|
|
bool SUISysMenuWnd::InitData( bool bReload )
|
|
{
|
|
KUIControlCheck* pButton = NULL;
|
|
|
|
pButton = dynamicCast<KUIControlCheck*>(GetChild( "sys_menu02" ));
|
|
if( pButton ) pButton->SetDisableCheck();
|
|
|
|
/*
|
|
pButton = ( KUIControlCheck* )GetChild( "sys_menu03" );
|
|
if( pButton ) pButton->SetDisableCheck();
|
|
*/
|
|
|
|
m_nTabType = -1;
|
|
|
|
return SUIWnd::InitData(bReload);
|
|
}
|
|
|
|
void SUISysMenuWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
|
|
{
|
|
if( bOpen )
|
|
{
|
|
m_pGameManager->StartSound( "ui_popup_window01.wav" );
|
|
|
|
MoveTabWindow( 1 ); // 왜 tab type 을 받는지는 모르겠지만 아무튼 -.-
|
|
}
|
|
else // 2011.05.17 - servantes
|
|
{
|
|
GetGameOption().SetSysMenuX( GetRect().left );
|
|
GetGameOption().SetSysMenuY( GetRect().top );
|
|
}
|
|
}
|
|
|
|
void SUISysMenuWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
|
|
{
|
|
switch(nMessage)
|
|
{
|
|
case KUI_MESSAGE::KCHECK_CHANGE:
|
|
{
|
|
if( ::_stricmp( lpszControlID, "sys_menu_character" ) == 0 )
|
|
{
|
|
SetButtonCheck(TAB_CHARACTER, true);
|
|
if( m_nTabType == TAB_CHARACTER ) break;
|
|
|
|
CloseToggleWindow(m_nTabType);
|
|
m_nTabType = TAB_CHARACTER;
|
|
OpenToggleWindow(m_nTabType);
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "sys_menu02" ) == 0 )
|
|
;
|
|
else if( ::_stricmp( lpszControlID, "sys_menu03" ) == 0 || ::_stricmp( lpszControlID, "sys_menu_quest" ) == 0 )
|
|
{
|
|
SetButtonCheck(TAB_QUEST, true);
|
|
if( m_nTabType == TAB_QUEST) break;
|
|
|
|
CloseToggleWindow(m_nTabType);
|
|
m_nTabType = TAB_QUEST;
|
|
OpenToggleWindow(m_nTabType);
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "sys_menu_skill" ) == 0 )
|
|
{
|
|
SetButtonCheck(TAB_SKILL, true);
|
|
if( m_nTabType == TAB_SKILL ) break;
|
|
|
|
CloseToggleWindow(m_nTabType);
|
|
m_nTabType = TAB_SKILL;
|
|
OpenToggleWindow(m_nTabType);
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "sys_menu_motion" ) == 0 )
|
|
{
|
|
SetButtonCheck(TAB_MOTION, true);
|
|
if( m_nTabType == TAB_MOTION ) break;
|
|
|
|
CloseToggleWindow(m_nTabType);
|
|
m_nTabType = TAB_MOTION;
|
|
OpenToggleWindow(m_nTabType);
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "sys_menu_system" ) == 0 )
|
|
{
|
|
SetButtonCheck(TAB_SYSTEM, true);
|
|
if( m_nTabType == TAB_SYSTEM ) break;
|
|
|
|
CloseToggleWindow(m_nTabType);
|
|
m_nTabType = TAB_SYSTEM;
|
|
OpenToggleWindow(m_nTabType);
|
|
}
|
|
}
|
|
break;
|
|
case KUI_MESSAGE::KFOCUS_ACTIVATED:
|
|
{
|
|
if( GetRect().IsInRect( static_cast<int>(lparam), static_cast<int>(wparam) ) )
|
|
{
|
|
SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE Type = ( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE )GetWindowType(m_nTabType);
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_FOCUS(Type) );
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
|
|
}
|
|
|
|
|
|
void SUISysMenuWnd::ProcMsgAtStatic( SGameMessage* pMsg )
|
|
{
|
|
switch(pMsg->nType)
|
|
{
|
|
case IMSG_UI_SYSMENU:
|
|
{
|
|
SIMSG_UI_SYSMENU* pSysMsg = ( SIMSG_UI_SYSMENU* )pMsg;
|
|
//m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSMENU, pSysMsg->m_bShow) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSMENU, false) );
|
|
|
|
if( pSysMsg->m_bShow )
|
|
{
|
|
int nTabType = GetTabType( pSysMsg->m_nType );
|
|
|
|
if( m_nTabType != nTabType )
|
|
{
|
|
// 이미 열려 있는 윈도우 닫고 새로 열어준다
|
|
CloseToggleWindow(m_nTabType);
|
|
OpenToggleWindow(nTabType);
|
|
}
|
|
m_nTabType = GetTabType( pSysMsg->m_nType );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSMENU, pSysMsg->m_bShow) );
|
|
}
|
|
else
|
|
{
|
|
CloseAllWindow();
|
|
}
|
|
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
case IMSG_UI_SYSMENU_HOTKEY:
|
|
{
|
|
if( ((SIMSG_UI_SYSMENU_HOTKEY*)pMsg)->m_nType == SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION )
|
|
{
|
|
bool bShow = true;
|
|
if( m_nTabType == TAB_MOTION ) bShow = false;
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SYSMENU( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION, bShow) );
|
|
}
|
|
if( ((SIMSG_UI_SYSMENU_HOTKEY*)pMsg)->m_nType == SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST )
|
|
{
|
|
bool bShow = true;
|
|
if( m_nTabType == TAB_QUEST ) bShow = false;
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SYSMENU( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST, bShow) );
|
|
}
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
case IMSG_UI_MOVE:
|
|
{
|
|
SIMSG_UI_MOVE* pMoveMsg = ( SIMSG_UI_MOVE* )pMsg;
|
|
|
|
KRect rt = GetRect();
|
|
MovePos( pMoveMsg->m_nX-(rt.GetWidth()), pMoveMsg->m_nY );
|
|
// 스스로 움직이고, 비 활성 탭 윈도우까지 모두 움직여 주어야 한다
|
|
MoveTabWindow(m_nTabType);
|
|
// 시스템 메뉴를 제일 위에 그리게 해서 다른 창과 겹칠때 다른창 위에 그려주게 한다
|
|
m_pManager->SetFocus(this);
|
|
|
|
// 2011.05.17 - servantes
|
|
// GetGameOption().SetSysMenuX( GetRect().left );
|
|
// GetGameOption().SetSysMenuY( GetRect().top );
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
case IMSG_UI_FOCUS:
|
|
{
|
|
m_pManager->SetFocus(this);
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
void SUISysMenuWnd::MoveTabWindow( int nTabType )
|
|
{
|
|
if( nTabType < 0 ) return;
|
|
|
|
// 스킬
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SKILL, GetRect().right, GetRect().top ) );
|
|
// 모션
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION, GetRect().right, GetRect().top ) );
|
|
// 시스템
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, GetRect().right, GetRect().top ) );
|
|
// 퀘스트
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST, GetRect().right, GetRect().top ) );
|
|
// 캐릭터
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO, GetRect().right, GetRect().top ) );
|
|
}
|
|
|
|
void SUISysMenuWnd::OpenToggleWindow( int nTabType )
|
|
{
|
|
if( nTabType < 0 ) return;
|
|
|
|
SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE Type = ( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE )GetWindowType(nTabType);
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( Type, true ) );
|
|
|
|
SetButtonCheck(nTabType, true);
|
|
}
|
|
void SUISysMenuWnd::CloseToggleWindow( int nTabType )
|
|
{
|
|
if( nTabType < 0 ) return;
|
|
|
|
SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE Type = ( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE )GetWindowType(nTabType);
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( Type, false ) );
|
|
|
|
SetButtonCheck(nTabType, false);
|
|
}
|
|
void SUISysMenuWnd::CloseAllWindow()
|
|
{
|
|
CloseToggleWindow(TAB_SKILL);
|
|
CloseToggleWindow(TAB_MOTION);
|
|
CloseToggleWindow(TAB_SYSTEM);
|
|
CloseToggleWindow(TAB_QUEST);
|
|
CloseToggleWindow(TAB_CHARACTER);
|
|
|
|
m_nTabType = -1;
|
|
}
|
|
void SUISysMenuWnd::SetButtonCheck( int nTabType, bool bShow )
|
|
{
|
|
char* pBuf = NULL;
|
|
switch(nTabType)
|
|
{
|
|
case TAB_SKILL:
|
|
pBuf = "sys_menu_skill";
|
|
break;
|
|
case TAB_MOTION:
|
|
pBuf = "sys_menu_motion";
|
|
break;
|
|
case TAB_QUEST:
|
|
pBuf = "sys_menu03";
|
|
break;
|
|
case TAB_SYSTEM:
|
|
pBuf = "sys_menu_system";
|
|
break;
|
|
case TAB_CHARACTER:
|
|
pBuf = "sys_menu_character";
|
|
break;
|
|
}
|
|
|
|
if( pBuf == NULL ) return;
|
|
|
|
KUIWnd* pWnd = GetChild(pBuf);
|
|
if( pWnd ) ((KUIControlCheck*)pWnd)->SetCheck(bShow);
|
|
}
|
|
UINT SUISysMenuWnd::GetWindowType( int nTabType )
|
|
{
|
|
switch(nTabType)
|
|
{
|
|
case TAB_SKILL:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SKILL;
|
|
case TAB_MOTION:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION;
|
|
case TAB_SYSTEM:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM;
|
|
case TAB_CHARACTER:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO;
|
|
case TAB_QUEST:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST;
|
|
default:
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM;
|
|
}
|
|
|
|
return SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM;
|
|
}
|
|
UINT SUISysMenuWnd::GetTabType( int nWindowID )
|
|
{
|
|
switch(nWindowID)
|
|
{
|
|
case SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SKILL:
|
|
return TAB_SKILL;
|
|
case SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION:
|
|
return TAB_MOTION;
|
|
case SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM:
|
|
return TAB_SYSTEM;
|
|
case SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST:
|
|
return TAB_QUEST;
|
|
case SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO:
|
|
return TAB_CHARACTER;
|
|
default:
|
|
return TAB_SYSTEM;
|
|
}
|
|
|
|
return TAB_SYSTEM;
|
|
} |