📄 quickmanager.cpp
字号:
#include "StdAfx.h"
#include ".\quickmanager.h"
#include ".\SlotManager.h"
#include ".\SCQuickSlot.h"
#include ".\SCQuickSlotContainer.h"
QuickManager::QuickManager(void)
{
}
QuickManager::~QuickManager(void)
{
}
VOID QuickManager::Release()
{
}
VOID QuickManager::Init( SlotManager * pMGR )
{
m_pPlayer = pMGR->m_pPlayer;
m_ppSlotContainer = pMGR->m_pSlotContainer;
m_pSlotMGR = pMGR;
}
BOOL QuickManager::IsEmpty( POSTYPE pos )
{
return m_pSlotMGR->IsEmpty( SI_QUICK, pos );
}
SCQuickSlotContainer * QuickManager::GetQuickSlotContainer()
{
return (SCQuickSlotContainer *)m_pSlotMGR->GetSlotContainer(SI_QUICK);
}
BOOL QuickManager::ValidPos( SLOTIDX atIndex, POSTYPE atPos, BOOL bEmptyCheck )
{
return m_pSlotMGR->ValidPos(atIndex, atPos, bEmptyCheck);
}
BOOL QuickManager::ValidState()
{
return m_pSlotMGR->ValidState();
}
VOID QuickManager::SerializeQuickStream( POSTYPE pos, QUICKSTREAM * IN pStream, eSERIALIZE eType )
{
if( eType == SERIALIZE_LOAD )
{
SCQuickSlot & rSlot = static_cast<SCQuickSlot &>(GetQuickSlotContainer()->GetSlot(pos));
rSlot.CopyOut(*pStream);
}
else if( eType == SERIALIZE_STORE )
((SCQuickSlotContainer*)GetQuickSlotContainer())->InsertSlot( pos, *pStream );
}
VOID QuickManager::UpdateOriginalItems()
{
return;
SCQuickSlotContainer * pQuickContainer = GetQuickSlotContainer();
SCSlotContainer * pInvenContainer = m_pSlotMGR->GetSlotContainer(SI_INVENTORY);
for( POSTYPE pos = 0 ; pos < pQuickContainer->GetMaxSlotNum() ; ++pos )
{
if( !pQuickContainer->IsEmpty(pos) )
{
SCQuickSlot & rQuickSlot = (SCQuickSlot &)pQuickContainer->GetSlot(pos);
if( rQuickSlot.GetOrgSlotIndex() == SI_INVENTORY && rQuickSlot.GetOrgPos() != 255 )
{
SCItemSlot & rItemSlot = (SCItemSlot &)pInvenContainer->GetSlot( rQuickSlot.GetOrgPos() );
if( rItemSlot.GetCode() != rQuickSlot.GetOrgCode() )
{
_IteratingOriginalItem( pInvenContainer, rQuickSlot, rQuickSlot.GetOrgCode() );
}
}
}
}
}
VOID QuickManager::_IteratingOriginalItem( SCSlotContainer * pContainer, SCQuickSlot & rQuickSlot, SLOTCODE ItemCode )
{
for( POSTYPE pos = 0 ; pos < pContainer->GetMaxSlotNum() ; ++pos )
{
if( !pContainer->IsEmpty(pos) )
{
SCItemSlot & rSlot = (SCItemSlot &)pContainer->GetSlot(pos);
if( rSlot.GetCode() == ItemCode )
{
SCQuickSlotContainer * pQuickContainer = GetQuickSlotContainer();
pQuickContainer->UpdateQuickSlot( rQuickSlot.GetOrgSlotIndex(), rQuickSlot.GetOrgPos(), rQuickSlot.GetOrgCode(),
rQuickSlot.GetOrgSlotIndex(), pos, rQuickSlot.GetOrgCode() );
break;
}
}
}
}
RC::eQUICK_RESULT QuickManager::LinkSkill( SLOTCODE code, POSTYPE toPos )
{
if( !ValidState() )
return RC::RC_QUICK_INVALIDSTATE;
if( !ValidPos( SI_QUICK, toPos, FALSE ) )
return RC::RC_QUICK_INVALIDPOS;
SCSlotContainer * pContainer = GetQuickSlotContainer();
if( !pContainer->IsEmpty(toPos) )
{
// 丹绢静扁
pContainer->DeleteSlot( toPos, NULL );
}
// 绢恫 巴阑 棵副 荐 乐绰瘤俊 措茄 眉农 鞘夸!
SCQuickSlot slot;
slot.SetOrgCode(code);
slot.SetOrgSlotIndex(SI_SKILL);
pContainer->InsertSlot(toPos, slot);
return RC::RC_QUICK_SUCCESS;
}
RC::eQUICK_RESULT QuickManager::LinkItem( POSTYPE orgPos, POSTYPE toPos )
{
if( !ValidState() )
return RC::RC_QUICK_INVALIDSTATE;
if( !ValidPos( SI_INVENTORY, orgPos ) )
return RC::RC_QUICK_INVALIDPOS;
if( !ValidPos( SI_QUICK, toPos, FALSE ) )
return RC::RC_QUICK_INVALIDPOS;
SCSlotContainer * pContainer = GetQuickSlotContainer();
if( !pContainer->IsEmpty(toPos) )
{
// 丹绢静扁
pContainer->DeleteSlot( toPos, NULL );
}
// 绢恫 巴阑 棵副 荐 乐绰瘤俊 措茄 眉农 鞘夸!
SCSlotContainer * pOrgContainer = m_pSlotMGR->GetSlotContainer(SI_INVENTORY);
SCSlot & rOrgSlot = (SCSlot & )pOrgContainer->GetSlot(orgPos);
SCQuickSlot slot;
slot.SetOrgPos(orgPos);
slot.SetOrgCode(rOrgSlot.GetCode());
slot.SetOrgSlotIndex(SI_INVENTORY);
BOOL rt = pContainer->InsertSlot(toPos, slot);
ASSERT( rt );
return RC::RC_QUICK_SUCCESS;
}
RC::eQUICK_RESULT QuickManager::Unlink( POSTYPE atPos )
{
if( !ValidState() )
return RC::RC_QUICK_INVALIDSTATE;
if( !ValidPos( SI_QUICK, atPos ) )
return RC::RC_QUICK_INVALIDPOS;
SCSlotContainer * pContainer = GetQuickSlotContainer();
pContainer->DeleteSlot( atPos, NULL );
return RC::RC_QUICK_SUCCESS;
}
RC::eQUICK_RESULT QuickManager::Move( POSTYPE fromPos, POSTYPE toPos )
{
if( !ValidState() )
return RC::RC_QUICK_INVALIDSTATE;
if( !ValidPos( SI_QUICK, fromPos ) )
return RC::RC_QUICK_INVALIDPOS;
if( !ValidPos( SI_QUICK, toPos, FALSE ) )
return RC::RC_QUICK_INVALIDPOS;
SCSlotContainer * pContainer = GetQuickSlotContainer();
SCQuickSlot FromSlot;
pContainer->DeleteSlot( fromPos, &FromSlot );
if( TRUE == pContainer->IsEmpty( toPos ) )
{
// 茄 规氢 捞悼
if( !pContainer->InsertSlot( toPos, FromSlot ) )
{
pContainer->InsertSlot( fromPos, FromSlot );
return RC::RC_QUICK_UNKNOWNERROR;
}
}
else
{
// 背券
SCQuickSlot ToSlot;
pContainer->DeleteSlot( toPos, &ToSlot );
if( !pContainer->InsertSlot( fromPos, ToSlot ) )
{
//rollback
pContainer->InsertSlot( fromPos, FromSlot );
pContainer->InsertSlot( toPos, ToSlot );
return RC::RC_QUICK_UNKNOWNERROR;
}
if( !pContainer->InsertSlot( toPos, FromSlot ) )
{
//rollback
pContainer->DeleteSlot( fromPos, NULL );
pContainer->InsertSlot( fromPos, FromSlot );
pContainer->InsertSlot( toPos, ToSlot );
return RC::RC_QUICK_UNKNOWNERROR;
}
}
return RC::RC_QUICK_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -