118 lines
No EOL
2.3 KiB
C++
118 lines
No EOL
2.3 KiB
C++
#include "StdAfx.h"
|
|
#include "DnObservable.h"
|
|
#include "DnObserverEventMessage.h"
|
|
|
|
// CDnObservable /////////////////////////////////////////////////////////
|
|
IDnObserverNotifyEvent* IDnObserverNotifyEvent::Create( int iType )
|
|
{
|
|
IDnObserverNotifyEvent* pResult = NULL;
|
|
switch( iType )
|
|
{
|
|
case EVENT_BUBBLE_ON_USE_SKILL:
|
|
{
|
|
pResult = new BubbleSystem::CDnUseSkillMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_BUBBLE_BLOCK_SUCCESS:
|
|
{
|
|
pResult = new BubbleSystem::CDnBlockSuccessMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_BUBBLE_COUNT_UPDATED:
|
|
{
|
|
pResult = new BubbleSystem::CDnBubbleCountUpdatedMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_BUBBLE_PARRING_SUCCESS:
|
|
{
|
|
pResult = new BubbleSystem::CDnParringSuccessMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_BUBBLE_COOLTIME_PARRING_SUCCESS:
|
|
{
|
|
pResult = new BubbleSystem::CDnCooltimeParringSuccessMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_ONCHANGEACTION:
|
|
{
|
|
pResult = new BubbleSystem::CDnOnChangeActionMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_PLAYER_KILL_TARGET:
|
|
{
|
|
pResult = new BubbleSystem::CDnPlayerKillTargetMessage;
|
|
}
|
|
break;
|
|
|
|
case EVENT_ONCRITICALHIT:
|
|
{
|
|
pResult = new BubbleSystem::CDnOnCriticalHitMessage;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return pResult;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// CDnObservable ////////////////////////////////////////////////////////////
|
|
CDnObservable::CDnObservable( void )
|
|
{
|
|
|
|
}
|
|
|
|
CDnObservable::~CDnObservable( void )
|
|
{
|
|
|
|
}
|
|
|
|
bool CDnObservable::RegisterObserver( CDnObserver* pObserver )
|
|
{
|
|
bool bSuccess = false;
|
|
if( pObserver )
|
|
{
|
|
m_vlpObservers.push_back( pObserver );
|
|
bSuccess = true;
|
|
}
|
|
|
|
return bSuccess;
|
|
}
|
|
|
|
bool CDnObservable::RemoveObserver( CDnObserver* pObserver )
|
|
{
|
|
bool bSuccess = false;
|
|
if( pObserver )
|
|
{
|
|
std::vector<CDnObserver*>::iterator iter = std::find( m_vlpObservers.begin(), m_vlpObservers.end(), pObserver );
|
|
if( m_vlpObservers.end() != iter )
|
|
{
|
|
m_vlpObservers.erase( iter );
|
|
bSuccess = true;
|
|
}
|
|
}
|
|
|
|
return bSuccess;
|
|
}
|
|
|
|
void CDnObservable::Notify( boost::shared_ptr<IDnObserverNotifyEvent>& pEvent )
|
|
{
|
|
if( pEvent )
|
|
{
|
|
for( int i = 0; i < (int)m_vlpObservers.size(); ++i )
|
|
{
|
|
CDnObserver* pObserver = m_vlpObservers.at( i );
|
|
pObserver->OnEvent( pEvent );
|
|
}
|
|
}
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|