234 lines
5.1 KiB
C++
234 lines
5.1 KiB
C++
#pragma once
|
|
|
|
#include "Packet.h"
|
|
#include "AbstractChat.h"
|
|
|
|
class CWhisper
|
|
{
|
|
public:
|
|
typedef struct SChatLine
|
|
{
|
|
CGraphicTextInstance Instance;
|
|
|
|
SChatLine()
|
|
{
|
|
}
|
|
~SChatLine()
|
|
{
|
|
Instance.Destroy();
|
|
}
|
|
|
|
static void DestroySystem();
|
|
|
|
static SChatLine* New();
|
|
static void Delete(SChatLine* pkChatLine);
|
|
|
|
static CDynamicPool<SChatLine> ms_kPool;
|
|
} TChatLine;
|
|
|
|
typedef std::deque<TChatLine*> TChatLineDeque;
|
|
typedef std::list<TChatLine*> TChatLineList;
|
|
|
|
public:
|
|
CWhisper();
|
|
~CWhisper();
|
|
|
|
void Destroy();
|
|
|
|
void SetPosition(float fPosition);
|
|
void SetBoxSize(float fWidth, float fHeight);
|
|
void AppendChat(int iType, const char* c_szChat);
|
|
void Render(float fx, float fy);
|
|
|
|
protected:
|
|
void __Initialize();
|
|
void __ArrangeChat();
|
|
|
|
protected:
|
|
float m_fLineStep;
|
|
float m_fWidth;
|
|
float m_fHeight;
|
|
float m_fcurPosition;
|
|
|
|
TChatLineDeque m_ChatLineDeque;
|
|
TChatLineList m_ShowingChatLineList;
|
|
|
|
public:
|
|
static void DestroySystem();
|
|
|
|
static CWhisper* New();
|
|
static void Delete(CWhisper* pkWhisper);
|
|
|
|
static CDynamicPool<CWhisper> ms_kPool;
|
|
};
|
|
|
|
class CPythonChat : public CSingleton<CPythonChat>, public IAbstractChat
|
|
{
|
|
public:
|
|
enum EWhisperType
|
|
{
|
|
WHISPER_TYPE_CHAT = 0,
|
|
WHISPER_TYPE_NOT_EXIST = 1,
|
|
WHISPER_TYPE_TARGET_BLOCKED = 2,
|
|
WHISPER_TYPE_SENDER_BLOCKED = 3,
|
|
WHISPER_TYPE_ERROR = 4,
|
|
WHISPER_TYPE_GM = 5,
|
|
WHISPER_TYPE_SYSTEM = 0xFF
|
|
};
|
|
|
|
enum EBoardState
|
|
{
|
|
BOARD_STATE_VIEW,
|
|
BOARD_STATE_EDIT,
|
|
BOARD_STATE_LOG,
|
|
};
|
|
|
|
enum
|
|
{
|
|
CHAT_LINE_MAX_NUM = 300,
|
|
CHAT_LINE_COLOR_ARRAY_MAX_NUM = 3,
|
|
};
|
|
|
|
typedef struct SChatLine
|
|
{
|
|
int iType;
|
|
float fAppendedTime;
|
|
D3DXCOLOR aColor[CHAT_LINE_COLOR_ARRAY_MAX_NUM];
|
|
CGraphicTextInstance Instance;
|
|
|
|
SChatLine();
|
|
virtual ~SChatLine();
|
|
|
|
void SetColor(DWORD dwID, DWORD dwColor);
|
|
void SetColorAll(DWORD dwColor);
|
|
D3DXCOLOR & GetColorRef(DWORD dwID);
|
|
static void DestroySystem();
|
|
|
|
static SChatLine* New();
|
|
static void Delete(SChatLine* pkChatLine);
|
|
|
|
static CDynamicPool<SChatLine> ms_kPool;
|
|
} TChatLine;
|
|
|
|
typedef struct SWaitChat
|
|
{
|
|
int iType;
|
|
std::string strChat;
|
|
|
|
DWORD dwAppendingTime;
|
|
} TWaitChat;
|
|
|
|
typedef std::deque<TChatLine*> TChatLineDeque;
|
|
typedef std::list<TChatLine*> TChatLineList;
|
|
|
|
typedef std::map<std::string, CWhisper*> TWhisperMap;
|
|
typedef std::set<std::string> TIgnoreCharacterSet;
|
|
typedef std::list<TWaitChat> TWaitChatList;
|
|
|
|
typedef struct SChatSet
|
|
{
|
|
int m_ix;
|
|
int m_iy;
|
|
int m_iHeight;
|
|
int m_iStep;
|
|
float m_fEndPos;
|
|
|
|
int m_iBoardState;
|
|
std::vector<int> m_iMode;
|
|
|
|
TChatLineList m_ShowingChatLineList;
|
|
|
|
bool CheckMode(DWORD dwType)
|
|
{
|
|
if (dwType >= m_iMode.size())
|
|
return false;
|
|
|
|
return m_iMode[dwType] ? true : false;
|
|
}
|
|
|
|
SChatSet()
|
|
{
|
|
m_iBoardState = BOARD_STATE_VIEW;
|
|
|
|
m_ix = 0;
|
|
m_iy = 0;
|
|
m_fEndPos = 1.0f;
|
|
m_iHeight = 0;
|
|
m_iStep = 15;
|
|
|
|
m_iMode.clear();
|
|
m_iMode.resize(ms_iChatModeSize, 1);
|
|
}
|
|
|
|
static int ms_iChatModeSize;
|
|
} TChatSet;
|
|
|
|
typedef std::map<int, TChatSet> TChatSetMap;
|
|
|
|
public:
|
|
CPythonChat();
|
|
virtual ~CPythonChat();
|
|
|
|
void SetChatColor(UINT eType, UINT r, UINT g, UINT b);
|
|
|
|
void Destroy();
|
|
void Close();
|
|
|
|
int CreateChatSet(DWORD dwID);
|
|
void Update(DWORD dwID);
|
|
void Render(DWORD dwID);
|
|
void RenderWhisper(const char * c_szName, float fx, float fy);
|
|
|
|
void SetBoardState(DWORD dwID, int iState);
|
|
void SetPosition(DWORD dwID, int ix, int iy);
|
|
void SetHeight(DWORD dwID, int iHeight);
|
|
void SetStep(DWORD dwID, int iStep);
|
|
void ToggleChatMode(DWORD dwID, int iMode);
|
|
void EnableChatMode(DWORD dwID, int iMode);
|
|
void DisableChatMode(DWORD dwID, int iMode);
|
|
void SetEndPos(DWORD dwID, float fPos);
|
|
|
|
int GetVisibleLineCount(DWORD dwID);
|
|
int GetEditableLineCount(DWORD dwID);
|
|
int GetLineCount(DWORD dwID);
|
|
int GetLineStep(DWORD dwID);
|
|
|
|
// Chat
|
|
void AppendChat(int iType, const char * c_szChat);
|
|
void AppendChatWithDelay(int iType, const char * c_szChat, int iDelay);
|
|
void ArrangeShowingChat(DWORD dwID);
|
|
|
|
// Ignore
|
|
void IgnoreCharacter(const char * c_szName);
|
|
BOOL IsIgnoreCharacter(const char * c_szName);
|
|
|
|
// Whisper
|
|
CWhisper * CreateWhisper(const char * c_szName);
|
|
void AppendWhisper(int iType, const char * c_szName, const char * c_szChat);
|
|
void ClearWhisper(const char * c_szName);
|
|
BOOL GetWhisper(const char * c_szName, CWhisper ** ppWhisper);
|
|
void InitWhisper(PyObject * ppyObject);
|
|
|
|
protected:
|
|
void __Initialize();
|
|
void __DestroyWhisperMap();
|
|
|
|
TChatLineList * GetChatLineListPtr(DWORD dwID);
|
|
TChatSet * GetChatSetPtr(DWORD dwID);
|
|
|
|
void UpdateViewMode(DWORD dwID);
|
|
void UpdateEditMode(DWORD dwID);
|
|
void UpdateLogMode(DWORD dwID);
|
|
|
|
DWORD GetChatColor(int iType);
|
|
|
|
protected:
|
|
TChatLineDeque m_ChatLineDeque;
|
|
TChatLineList m_ShowingChatLineList;
|
|
TChatSetMap m_ChatSetMap;
|
|
TWhisperMap m_WhisperMap;
|
|
TIgnoreCharacterSet m_IgnoreCharacterSet;
|
|
TWaitChatList m_WaitChatList;
|
|
|
|
D3DXCOLOR m_akD3DXClrChat[CHAT_TYPE_MAX_NUM];
|
|
}; |