//--------------------------------------------------------------------------- // StyleContainer // // (C) 2005 y2jinc //--------------------------------------------------------------------------- #include "SunClientPrecompiledHeader.h" #include "stylecontainer.h" #include "ItemUnitRenderer.h" #include "MouseHandler.h" #include "QuickSlot.h" #include "ItemManager.h" #include "InventoryDialog.h" #include "Hero.h" #include "HeroEquipmentContainer.h" #include "HeroActionInput.h" #include "mouse.h" #include "interfaceManager.h" #include "StyleSlotContainer.h" #include "StyleContainer.h" #include "StyleSlot.h" #include "QuickContainer.h" #include "CursorChangeTransact.h" #include "uiToolTipMan/uiToolTipMan.h" //---------------------------------------------------------------------------- /** */ WzID StyleContainer::m_wzId[STYLE_QUICK_MAX] = { StrToWzID("B001"), StrToWzID("B002"), StrToWzID("B003"), StrToWzID("B004"), }; //---------------------------------------------------------------------------- /** */ StyleContainer::StyleContainer() : m_TabNum(0), m_pItemUnitRenderer(NULL) { } //---------------------------------------------------------------------------- /** */ StyleContainer::~StyleContainer() { assert( NULL == m_pItemUnitRenderer ); } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::Release() { SAFE_RELEASENDELETE( m_pItemUnitRenderer ); } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::OnUpdateSolarDialog() { if (m_pItemUnitRenderer) m_pItemUnitRenderer->Update(); } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::NetworkProc( MSG_BASE * pMsg ) { } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::OnShowWindow(BOOL val) { if (val) { } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::OnRenderSolarDialog() { if (m_pItemUnitRenderer) m_pItemUnitRenderer->Render(); if ( this->m_MouseOverObject.eMouseOverType != eMOUSE_OVER_MAX) { if ( eMOUSE_OVER_SLOT == m_MouseOverObject.eMouseOverType ) { uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if(pUIMan) { pUIMan->RegisterSlotInfoTooltip(m_MouseOverObject.pSlot); pUIMan->SetTooltipDialogID(GetDialogKey()); } CursorChangeTransact::Instance()->ChangeTranaction( MouseCursor::eMouseCursor_Cursor_Cancle ); } } int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); // ½ºÅµÃ³¸® // ÀÎÅÍÆäÀ̽º¿¡¼­ Dialog ¹ÙÅÁ¿¡¼­´Â Mouse Over°¡ ¿ÀÁö ¾Ê´Â´Ù. BOOL bMouseOver = FALSE; for (POSTYPE a = STYLE_QUICK_BT00; a < STYLE_QUICK_MAX; a++) { CControlWZ * pControl = getControl(a); if(pControl) { RECT rc = pControl->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { bMouseOver = TRUE; } } } } if ( !bMouseOver ) { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } // render select style CControlWZ * pCurSelectStyle = NULL; for (a = STYLE_QUICK_BT00; a < STYLE_QUICK_MAX; a++) { if ( IsEmpty((POSTYPE)a) ) { continue; } if ( MouseHandler::Instance()->GetMouseItem()->m_pFromSlot && g_pHero->GetCurrentAttackStyle() == MouseHandler::Instance()->GetMouseItem()->m_pFromSlot->GetCode() ) { continue; } StyleSlot & rSlot = (StyleSlot &)GetSlot( (POSTYPE)a ); if (g_pHero && g_pHero->GetCurrentAttackStyle() == rSlot.GetOrgCode()) { pCurSelectStyle = getControl((POSTYPE)a); if(pCurSelectStyle) { m_rcSelectCurStyle = pCurSelectStyle->GetSizeRect(); g_InterfaceManager.RenderActivateMark( m_rcSelectCurStyle.left - 13, m_rcSelectCurStyle.top - 13); } } } } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::Init( CDrawBase * pDrawBase ) { // â À§Ä¡ Á¶Á¤ RECT rcDialog; QuickContainer * pQuickDlg = (QuickContainer *)g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_QUICK); if (pQuickDlg) { pQuickDlg->GetDialogWZ()->GetDlgSize(&rcDialog); MoveWindowWZ( (float)rcDialog.left + rcDialog.right+2, (float)717.f); } StyleSlotContainer::Init(MAX_STYLE_SLOT_NUM); } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::InitItemRender() { if (m_pItemUnitRenderer) { SAFE_RELEASENDELETE( m_pItemUnitRenderer ); } m_pItemUnitRenderer = new ItemUnitRenderer; m_pItemUnitRenderer->Init( g_pSunRenderer, GetMaxSlotNum() ); m_pItemUnitRenderer->ShowCooldown(TRUE); } //---------------------------------------------------------------------------- /** */ BOOL StyleContainer::IsExistSameSerialItem(DBSERIAL Serial) { for (int i = 0; i < GetMaxSlotNum(); ++i) { QuickSlot & rQuickSlot = (QuickSlot &)GetSlot(i); if ( rQuickSlot.GetSerial() == Serial ) { return TRUE; } } return FALSE; } //---------------------------------------------------------------------------- /** */ BOOL StyleContainer::IsExistSameCodeItem( CODETYPE ItemCode ) { for (int i = 0; i < GetMaxSlotNum(); ++i) { StyleSlot & rStyleSlot = (StyleSlot &) GetSlot(i); if (rStyleSlot.GetOrgCode()) { // ¸µÅ©°¡ µÇ¾îÀÖ´Ù¸é if ( rStyleSlot.GetOrgCode() == ItemCode ) { return TRUE; } } } return FALSE; } /** !! StyleSlot ¸¸ InsertÇÑ´Ù. */ RC::eSLOT_INSERT_RESULT StyleContainer::InsertSlot( POSTYPE AtPos, SCSlot & rSlot ) { RC::eSLOT_INSERT_RESULT eInsertSlotResult = StyleSlotContainer::InsertSlot( AtPos, rSlot ); StyleSlot & rStyleSlot = (StyleSlot &)(GetSlot(AtPos)); CControlWZ * pCtrl = getControl( AtPos ); if(!pCtrl) return RC::RC_INSERT_SLOT_FAILED; RECT rect = pCtrl->GetSizeRect(); assert( ST_STYLE_QUICK == rSlot.GetSlotType() ); StyleSlot & rFromStyleSlot = (StyleSlot &)rSlot; // Äü½½·ÔÀº ²®µ¥±â¸¸ Àִ³ðµéÀ̶ó ½ÇÁ¦ ½½·ÔÀ» ¹¯ÇôÁØ´Ù. assert(rStyleSlot.GetOrgSlot()); rStyleSlot.SetOrgSlot( rFromStyleSlot.GetOrgSlot() ); if(m_pItemUnitRenderer) { m_pItemUnitRenderer->AddItemUnit( rStyleSlot.GetOrgCode(), // ½ºÅ¸ÀÏÀº ÄÚµå·Î ½Ã¸®¾óÀ» ´ë½ÅÇÑ´Ù. rStyleSlot.GetOrgCode(), &rect, rStyleSlot.GetOrgSlot() ,pCtrl); } else { assert(m_pItemUnitRenderer); } return eInsertSlotResult; } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::getControlPos( POSTYPE AtPos, RECT & rectOut ) { CControlWZ * pCtrl = getControl( AtPos ); rectOut = pCtrl->GetSizeRect(); } //---------------------------------------------------------------------------- /** */ BOOL StyleContainer::DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut ) { // ¼Ò½º Äü Æ÷Áö¼Ç ÃʱâÈ­ StyleSlot & rSlot = (StyleSlot &)GetSlot(AtPos); if (!IsEmpty(AtPos)) { if(m_pItemUnitRenderer) { m_pItemUnitRenderer->RemoveItemUnit( rSlot.GetOrgCode() ); } else { assert(m_pItemUnitRenderer); } } return StyleSlotContainer::DeleteSlot( AtPos, pSlotOut ); } //---------------------------------------------------------------------------- /** */ CControlWZ * StyleContainer::getControl( POSTYPE AtPos ) { assert( AtPos < STYLE_QUICK_MAX ); return GetControlWZ( m_wzId[ AtPos] ); } //---------------------------------------------------------------------------- /** */ POSTYPE StyleContainer::getCtrlIDToPos( WzID wzId ) { for( POSTYPE i = 0 ; i < STYLE_QUICK_MAX ; ++i ) { if( m_wzId[i] == wzId ) { return i; } } return STYLE_QUICK_MAX; } //---------------------------------------------------------------------------- /** */ ItemUnitRenderer * StyleContainer::GetItemUnitRender() const { return m_pItemUnitRenderer; } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::MessageProc( SI_MESSAGE * pMessage ) { switch( pMessage->eResultMsg ) { case RT_MSG_LBUTTONCLICK: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if( pos >= STYLE_QUICK_BT00 && pos < STYLE_QUICK_MAX ) { CControlWZ * pControl = getControl(pos); assert(pControl); if(pControl) { RECT rcSlot = pControl->GetSizeRect(); MouseHandler::Instance()->ItemTransaction(SI_STYLE, pos, &rcSlot); } } } break; case RT_MSG_RBUTTONCLICK: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if( pos >= STYLE_QUICK_MAX ) return; CControlWZ * pControl = getControl(pos); assert(pControl); if(pControl) { MouseHandler::Instance()->ItemUseTransaction(SI_STYLE, pos); } } break; default: { SolarDialog::MessageProc( pMessage ); } break; } } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::MouseOver_MsgProc( SI_MESSAGE * pMessage ) { switch( pMessage->eResultMsg ) { case RT_MSG_MOUSEOVER: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if (pos >= STYLE_QUICK_BT00 && pos < STYLE_QUICK_MAX) { if (!IsEmpty( pos )) { SCSlot & rSlot = GetSlot( pos ); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT; m_MouseOverObject.pSlot = &rSlot; } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } break; } } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::FlushUnitDraw() { if (!m_pItemUnitRenderer) { return; } m_pItemUnitRenderer->FlushUnitDraw(); QuickSlot FromSlot; for (int i = 0; i < GetMaxSlotNum(); i++) { if( !IsEmpty(i) ) DeleteSlot(i, NULL); } } //---------------------------------------------------------------------------- /** */ VOID StyleContainer::ReFreshRenderSlot() { ItemUnitRenderer::RenderUnit * pRender = NULL; RECT rcSlot; CControlWZ * pCtrl = NULL; for (int i = 0; i < GetMaxSlotNum(); i++) { SCSlot & rSlot = SCSlotContainer::GetSlot(i); StyleSlot & rQuickSlot = (StyleSlot &)rSlot; if (!IsEmpty(i)) { if ( i >= STYLE_START_SLOT && i < STYLE_MAX_SLOT ) { if(!m_pItemUnitRenderer) continue; // º¸¿©Áà¾ßÇÒ ¸ñ·Ï pRender = m_pItemUnitRenderer->GetItemUnit( rQuickSlot.GetOrgCode() ); if (!pRender ) { pCtrl = getControl( i ); if(pCtrl) { rcSlot = pCtrl->GetSizeRect(); m_pItemUnitRenderer->AddItemUnit( rQuickSlot.GetSerial(), rQuickSlot.GetOrgCode(), &rcSlot, rQuickSlot.GetOrgSlot() ,pCtrl); } } if (pRender) pRender->SetShow(TRUE); } else { if(!m_pItemUnitRenderer) continue; // º¸¿©ÁöÁö ¸»¾Æ¾ß ÇÒ ¸ñ·Ï pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() ); if (!pRender ) { pCtrl = getControl( i ); if(pCtrl) { rcSlot = pCtrl->GetSizeRect(); m_pItemUnitRenderer->AddItemUnit( rQuickSlot.GetSerial(), rQuickSlot.GetOrgCode(), &rcSlot, rQuickSlot.GetOrgSlot() ,pCtrl); } } if (pRender) pRender->SetShow(FALSE); } } } }