167 lines
5.3 KiB
C
167 lines
5.3 KiB
C
|
|
#pragma once
|
|||
|
|
#include "DnObserver.h"
|
|||
|
|
#include "SmartPtrDef.h"
|
|||
|
|
#include "DNTableFile.h"
|
|||
|
|
|
|||
|
|
class CPacketCompressStream;
|
|||
|
|
|
|||
|
|
namespace BubbleSystem
|
|||
|
|
{
|
|||
|
|
class CDnBubble;
|
|||
|
|
class IDnConditionChecker;
|
|||
|
|
class IDnBubbleEventHandler;
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
<EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CDnPlayerActor <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȹ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD> ó<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ٸ<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD>.
|
|||
|
|
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>װ<EFBFBD> <EFBFBD>ȴٸ<EFBFBD> CDnMonsterActor <EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
*/
|
|||
|
|
//------------------------------------------------------------------------------
|
|||
|
|
class CDnBubbleSystem : public CDnObserver
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
struct S_CREATE_BUBBLE
|
|||
|
|
{
|
|||
|
|
int iBubbleTypeID;
|
|||
|
|
int iIconIndex;
|
|||
|
|
float fDurationTime;
|
|||
|
|
int iServerBubbleCount; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
S_CREATE_BUBBLE( void ) : iBubbleTypeID( 0 ), iIconIndex( 0 ), fDurationTime( 0.0f ), iServerBubbleCount( 0 ) {};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20>ܺο<DCBA><CEBF><EFBFBD> <20><>ȸ<EFBFBD><C8B8> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
struct S_BUBBLE_INFO
|
|||
|
|
{
|
|||
|
|
int iBubbleTypeID;
|
|||
|
|
int iCount;
|
|||
|
|
int iIconIndex;
|
|||
|
|
float fDurationTime;
|
|||
|
|
float fRemainTime;
|
|||
|
|
S_BUBBLE_INFO( void ) : iBubbleTypeID( 0 ), iCount( 0 ), iIconIndex( 0 ), fDurationTime( 0.0f ), fRemainTime( 0.0f ) {};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// <20><> <20><><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
DnActorHandle m_hActor;
|
|||
|
|
|
|||
|
|
// <20>켱 <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
|||
|
|
//vector<CDnBubble*> m_vlpBubbles;
|
|||
|
|
typedef map<int, deque<CDnBubble*> > BubblesByTypeID;
|
|||
|
|
typedef BubblesByTypeID::iterator BubblesByTypeID_iter;
|
|||
|
|
BubblesByTypeID m_mapBubblesByTypeID;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
|||
|
|
struct S_DEFINED_BUBBLE_EVENT
|
|||
|
|
{
|
|||
|
|
int iTableID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> ID
|
|||
|
|
vector<IDnConditionChecker*> vlpConditions;
|
|||
|
|
vector<IDnBubbleEventHandler*> vlpEventHandlers;
|
|||
|
|
|
|||
|
|
S_DEFINED_BUBBLE_EVENT( void ) : iTableID( 0 ) {};
|
|||
|
|
~S_DEFINED_BUBBLE_EVENT( void );
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>̺<EFBFBD> ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
//map<int, S_DEFINED_BUBBLE_EVENT*> m_mapDefinedBubbleEvent;
|
|||
|
|
vector<S_DEFINED_BUBBLE_EVENT*> m_vlpDefinedBubbleEvent;
|
|||
|
|
|
|||
|
|
// <20><> <20>̺<EFBFBD>Ʈ Ÿ<>Ժ<EFBFBD><D4BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD>ǵǴ<C7B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϹǷ<CFB9>
|
|||
|
|
// <20>̷<EFBFBD><CCB7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20>ڵ忡 <20>ھƳ<DABE><C6B3>´<EFBFBD>.
|
|||
|
|
typedef multimap<int, S_DEFINED_BUBBLE_EVENT*> DefinedByEventMMap;
|
|||
|
|
typedef DefinedByEventMMap::iterator DefinedByEventMMap_iter;
|
|||
|
|
DefinedByEventMMap m_mmapDefinedByEvent;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> Ÿ<>Ժ<EFBFBD><D4BA><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> ó<><C3B3><EFBFBD>Ǵ<EFBFBD> <20>̺<EFBFBD>Ʈ <20>ڵ鷯 <20><><EFBFBD><EFBFBD>.
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20>ڵ忡<DAB5><E5BFA1> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
//map<int, IDnBubbleEventHandler*> m_mapBubbleRemoveEventHandlers;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD>.
|
|||
|
|
map<int, vector<int> > m_mapBubbleStateBlowsByBubbleType;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> Ÿ<>Ժ<EFBFBD><D4BA><EFBFBD> <20>Ҹ<EFBFBD><D2B8>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
// Ÿ<>Ժ<EFBFBD><D4BA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> ȿ<><C8BF>.
|
|||
|
|
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
void _CreateBubble( const S_CREATE_BUBBLE& Info );
|
|||
|
|
|
|||
|
|
CDnBubble* _CreateNewBubble( const S_CREATE_BUBBLE &Info );
|
|||
|
|
|
|||
|
|
void _OnCreatedBubble( CDnBubble* pCreatedBubble );
|
|||
|
|
//void _OnRemoveBubble( CDnBubble* pBubbleToRemove );
|
|||
|
|
void _OnRemovedBubbles( int iBubbleTypeID, int iCount );
|
|||
|
|
|
|||
|
|
int _GetRelatedEventMessageType( int iConditionType );
|
|||
|
|
|
|||
|
|
void _OnCreateEventHandler( DNTableFileFormat* pBubbleTable, int iBubbleTableID, IDnBubbleEventHandler* pEventHandler, const char* pArgument );
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
CDnBubbleSystem( void );
|
|||
|
|
virtual ~CDnBubbleSystem( void );
|
|||
|
|
|
|||
|
|
// TODO: <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD> <20>´<DEB4>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮, <20><>ų <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>..
|
|||
|
|
void Initialize( DnActorHandle hActor );
|
|||
|
|
|
|||
|
|
// TODO: ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰų<CFB0> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ٽ<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>ؾ<EFBFBD> <20><>.
|
|||
|
|
void Clear( void );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> ID <20><> <20>ش<EFBFBD><D8B4>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
int GetBubbleCountByTypeID( int iBubbleTypeID );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǿ<EFBFBD><C7BE>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
void GetAllAppliedBubbles( /*OUT*/ vector<S_BUBBLE_INFO>& vlBubbleInfos );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
|||
|
|
void AddBubble( const S_CREATE_BUBBLE& Info );
|
|||
|
|
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
void AddBubbleAndCountRevision( const S_CREATE_BUBBLE& Info );
|
|||
|
|
|
|||
|
|
void RevisionBubbleCount( const S_CREATE_BUBBLE& Info );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> ID <20><> <20>ش<EFBFBD><D8B4>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD>.
|
|||
|
|
void RemoveBubbleByTypeID( int iBubbleTypeID, int iRemoveCount );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> ID <20><> <20>ش<EFBFBD><D8B4>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
void RemoveAllBubbleByTypeID( int iBubbleTypeID );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
void RemoveAllBubbles( bool bHandleRemoveEvent = true );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> Ÿ<>Կ<EFBFBD> <20>ش<EFBFBD><D8B4>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
CDnBubble* GetBubble( int iBubbleTypeID );
|
|||
|
|
|
|||
|
|
// Ư<><C6AF> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><><EFBFBD>ڷ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
void SetDurationTime( int iBubbleTypeID, float fDurationTime );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>~
|
|||
|
|
void Process( LOCAL_TIME LocalTime, float fDelta );
|
|||
|
|
|
|||
|
|
// from CDnObserver
|
|||
|
|
virtual void OnEvent( boost::shared_ptr<::IDnObserverNotifyEvent>& pEvent );
|
|||
|
|
|
|||
|
|
// <20><> <20><><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
DnActorHandle GetHasActor( void ) { return m_hActor; };
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
// CDnAddStateEffectHandler <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>.
|
|||
|
|
void AddBubbleStateBlow( int iBubbleTypeID, int iBlowID );
|
|||
|
|
|
|||
|
|
// CDnRemoveStateEffectHandler <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>.
|
|||
|
|
void RemoveBubbleStateBlow( int iBubbleTypeID );
|
|||
|
|
#else
|
|||
|
|
void CreateBubbleFromPacketStream( ::CPacketCompressStream* pStream );
|
|||
|
|
void RefreshBubbleDurationTimeFromPacketStream( ::CPacketCompressStream* pStream );
|
|||
|
|
#endif // #ifdef _GAMESERVER
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} // namespace BubbleSystem
|