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

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;
}