#include "stdafx.h" #include #include "SStringDB.h" #include "SGameMessage.h" #include "SGameManager.h" //#include "SGameMessageUI.h" #include "SInventoryMgr.h" #include "SPlayerInfoMgr.h" //#include "KUIControl.h" #include "KUIControlButton.h" #include "SUIRepairWnd.h" #include "SUIPopupEquip.h" SUIPopupEquip::SUIPopupEquip( SGameManager * pGameManager ) : SUIWnd( pGameManager ), m_pSelectedSlot( NULL ) { } SUIPopupEquip::~SUIPopupEquip() { Release(); } void SUIPopupEquip::Release() { } SUIWnd* SUIPopupEquip::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ) { SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID ); m_pSUIRepair = NULL; m_pCtrlRepair = dynamicCast< KUIControl * >( GetChild( "guild_sub_menu_list_01" ) ); m_pCtrlShow = dynamicCast< KUIControl * >( GetChild( "guild_sub_menu_list_02" ) ); CStringUtil::GetTextDecoration( m_pCtrlRepair->GetCaption(), m_strDecoTag ); // 텍스트 꾸미기 태그. if( m_pCtrlRepair && m_pCtrlShow ) { m_pCtrlRepair->SetEnableColor( "<#ffffff>" ); m_pCtrlShow->SetEnableColor( "<#ffffff>" ); } m_hItem = 0; // 장비창에서 전달받은 아이템의 핸들. m_nWearType = -1; // 장비창에서 전달받은 아이템의 장착타입. return this; } bool SUIPopupEquip::InitControls( KPoint kPos ) { return SUIWnd::InitControls( kPos ); } void SUIPopupEquip::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd) { if( bOpen ) { this->SetShow( true ); // 기존 포커스 제거. this->m_pManager->RemoveWnd( this ); // wnd 출력 리스트의 최하단에 추가. ( wnd 들중 가장 상위에 뜨게 된다. ) this->m_pManager->AddWnd( this ); // 가장위에 뜨도록 한다. this->m_pManager->SetFocus( this ); // 메뉴 텍스트 설정. if( m_pCtrlShow && !m_StrDecoration.empty() ) { m_pCtrlShow->SetCaption( ( m_strDecoTag + m_StrDecoration ).c_str() ); } } else { m_hItem = 0; // 장비창에서 전달받은 아이템의 핸들. m_nWearType = -1; // 장비창에서 전달받은 아이템의 장착타입. //m_pSelectedSlot = NULL; // 장비창에서 선택된 슬롯. //m_pStrDecoration = "보이기"; //m_pCtrlShow->SetCaption( m_pStrDecoration ); } } void SUIPopupEquip::ProcMsgAtStatic( SGameMessage* pMsg ) { switch( pMsg->nType ) { case IMSG_MOUSEMOVE: { pMsg->bUse = true; SIMSG_MOUSEMOVE * pData = dynamicCast< SIMSG_MOUSEMOVE * >( pMsg ); if( !( this->GetRect().IsInRect( LOWORD( pData->lParam ), HIWORD( pData->lParam ) ) ) ) { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_EQUIPMENT_POPUP, false ) ); // 닫기. } } break; case IMSG_UI_MOVE: { pMsg->bUse = true; SIMSG_UI_MOVE* pMoveMsg = ( SIMSG_UI_MOVE* )pMsg; MovePos( pMoveMsg->m_nX - 20, pMoveMsg->m_nY - 10 ); } break; case IMSG_EQUIPMENT_POPUP: { pMsg->bUse = true; SIMSG_UI_EQUIPMENT_POPUP_WNDMSG * pData = (SIMSG_UI_EQUIPMENT_POPUP_WNDMSG *)pMsg; // 장비창에서 선택한 아이템에 따른 메뉴설정. SetMenu( pData->handle, pData->nEquipmentType, pData->nEquipType ); } break; } } void SUIPopupEquip::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch( nMessage ) { case KUI_MESSAGE::KBUTTON_CLICK : { // 꾸미기 아이템 보임,숨김 처리. if( m_pSelectedSlot && !::_stricmp( lpszControlID, "guild_sub_menu_list_02" ) ) { m_pSelectedSlot->SetToggleShowDecoration(); //m_StrDecoration = m_pSelectedSlot->GetShowDecoration() ? S( 9753 ) : S( 9752 ); // stringdb 필요. m_StrDecoration = m_pSelectedSlot->GetShowDecoration() ? S( 9752 ) : S( 9753 ); // stringdb 필요. m_pCtrlShow->SetCaption( ( m_strDecoTag + m_StrDecoration ).c_str() ); // 꾸미기정보전달. SMSG_HIDE_EQUIP_INFO * pInfo = new SMSG_HIDE_EQUIP_INFO; pInfo->nType = MSG_HIDE_EQUIP_FLAG; pInfo->hPlayer = this->m_PlayerInfoMgr.GetPlayerHandle(); pInfo->nHideEquipFlag = m_nWearType; m_pGameManager->ProcMsgAtStatic( pInfo ); } // // 수리할 장비를 수리윈도우에 드롭한다. else if( !::_stricmp( lpszControlID, "guild_sub_menu_list_01" ) ) { if( m_pSUIRepair == NULL ) m_pSUIRepair = dynamicCast< SUIRepairWnd * >( this->m_pGameManager->GetSUI( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_REPAIR ) ); // 닫혀있으면 연다. if( !m_pSUIRepair->IsShow() ) { /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_REPAIR, true ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_REPAIR, true ) ); } // 아이템 전달. if( m_hItem != 0 ) m_pSUIRepair->ReceiveItem( m_hItem, std::string("slot_red_00"), false ); // 수리윈도우 메인슬롯ID. } } break; // 윈도우 이동 case KUI_MESSAGE::KGENWND_MOVE: LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한 break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } DWORD SUIPopupEquip::OnMouseMessage(DWORD dwMessage, int x, int y) { /*switch( dwMessage ) { case KLBUTTON_DOWN : break; }*/ return SUIWnd::OnMouseMessage(dwMessage, x, y); } // 장비창에서 선택한 아이템에 따른 메뉴설정. void SUIPopupEquip::SetMenu( AR_HANDLE handle, int nType, int wearType ) { m_hItem = handle; // 장비창에서 전달받은 아이템의 핸들. m_nWearType = wearType; // 장비창에서 전달받은 아이템의 장착타입. if( m_pCtrlRepair && m_pCtrlShow ) { switch( nType ) { case EQUIPMENT_INFO::EQUIPMENT_NONE: // 슬롯이 빈 경우. case EQUIPMENT_INFO::EQUIPMENT_NORMAL: // 일반템 또는 내구도가 손상되지 않음. m_pCtrlRepair->Disable(); m_pCtrlShow->Disable(); break; case EQUIPMENT_INFO::EQUIPMENT_UPPER: // 상급템. m_pCtrlRepair->Enable(); m_pCtrlShow->Disable(); break; case EQUIPMENT_INFO::EQUIPMENT_DECORATE: // 꾸미기템. m_pCtrlRepair->Disable(); // 보임,숨김 설정. SInventorySlot * pSlot = m_InventoryMgr.GetItemInfo( wearType ); if( pSlot ) { m_pCtrlShow->Enable(); m_StrDecoration = pSlot->GetShowDecoration() ? S( 9752 ) : S( 9753 ); // stringdb 필요. m_pSelectedSlot = pSlot; } else { m_pCtrlShow->Disable(); } break; } } }