258 lines
6.4 KiB
C++
258 lines
6.4 KiB
C++
|
|
#include "stdafx.h"
|
|
#include <toolkit/XStringUtil.h>
|
|
#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;
|
|
}
|
|
}
|
|
} |