#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(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(lparam), static_cast(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; }