DDraceNetwork Docs
chat.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_CLIENT_COMPONENTS_CHAT_H
4#define GAME_CLIENT_COMPONENTS_CHAT_H
5#include <vector>
6
7#include <engine/console.h>
11
14#include <game/client/render.h>
15#include <game/client/skin.h>
17
18constexpr auto SAVES_FILE = "ddnet-saves.txt";
19
20class CChat : public CComponent
21{
22 static constexpr float CHAT_HEIGHT_FULL = 200.0f;
23 static constexpr float CHAT_HEIGHT_MIN = 50.0f;
24 static constexpr float CHAT_FONTSIZE_WIDTH_RATIO = 2.5f;
25
26 enum
27 {
29 MAX_LINE_LENGTH = 256
30 };
31
33 struct CLine
34 {
35 int64_t m_Time;
36 float m_aYOffset[2];
39 bool m_Team;
42 char m_aName[64];
46 std::optional<ColorRGBA> m_CustomColor;
47
50
51 char m_aSkinName[std::size(g_Config.m_ClPlayerSkin)];
54
56
58 };
59
62
65
66 enum
67 {
68 // client IDs for special messages
71
75
80 };
81
82 int m_Mode;
83 bool m_Show;
91 {
93 int Score;
94 };
97
98 struct CCommand
99 {
103
104 CCommand() = default;
105 CCommand(const char *pName, const char *pParams, const char *pHelpText)
106 {
107 str_copy(m_aName, pName);
108 str_copy(m_aParams, pParams);
109 str_copy(m_aHelpText, pHelpText);
110 }
111
112 bool operator<(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) < 0; }
113 bool operator<=(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) <= 0; }
114 bool operator==(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) == 0; }
115 };
116
117 std::vector<CCommand> m_vCommands;
119
121 {
123 char m_aText[1];
124 };
133
135
136 static void ConSay(IConsole::IResult *pResult, void *pUserData);
137 static void ConSayTeam(IConsole::IResult *pResult, void *pUserData);
138 static void ConChat(IConsole::IResult *pResult, void *pUserData);
139 static void ConShowChat(IConsole::IResult *pResult, void *pUserData);
140 static void ConEcho(IConsole::IResult *pResult, void *pUserData);
141 static void ConClearChat(IConsole::IResult *pResult, void *pUserData);
142
143 static void ConchainChatOld(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
144 static void ConchainChatFontSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
145 static void ConchainChatWidth(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
146
147 bool LineShouldHighlight(const char *pLine, const char *pName);
148 void StoreSave(const char *pText);
149
150public:
151 CChat();
152 int Sizeof() const override { return sizeof(*this); }
153
154 static constexpr float MESSAGE_TEE_PADDING_RIGHT = 0.5f;
155
156 bool IsActive() const { return m_Mode != MODE_NONE; }
157 void AddLine(int ClientId, int Team, const char *pLine);
158 void EnableMode(int Team);
159 void DisableMode();
160 void RegisterCommand(const char *pName, const char *pParams, const char *pHelpText);
161 void UnregisterCommand(const char *pName);
162 void Echo(const char *pString);
163
164 void OnWindowResize() override;
165 void OnConsoleInit() override;
166 void OnStateChange(int NewState, int OldState) override;
167 void OnRefreshSkins() override;
168 void OnRender() override;
169 void OnPrepareLines(float y);
170 void Reset();
171 void OnRelease() override;
172 void OnMessage(int MsgType, void *pRawMsg) override;
173 bool OnInput(const IInput::CEvent &Event) override;
174 void OnInit() override;
175
176 void RebuildChat();
177 void ClearLines();
178
179 void EnsureCoherentFontSize() const;
180 void EnsureCoherentWidth() const;
181
182 float FontSize() const { return g_Config.m_ClChatFontSize / 10.0f; }
183 float MessagePaddingX() const { return FontSize() * (5 / 6.f); }
184 float MessagePaddingY() const { return FontSize() * (1 / 6.f); }
185 float MessageTeeSize() const { return FontSize() * (7 / 6.f); }
186 float MessageRounding() const { return FontSize() * (1 / 2.f); }
187
188 // ----- send functions -----
189
190 // Sends a chat message to the server.
191 //
192 // @param Team MODE_ALL=0 MODE_TEAM=1
193 // @param pLine the chat message
194 void SendChat(int Team, const char *pLine);
195
196 // Sends a chat message to the server.
197 //
198 // It uses a queue with a maximum of 3 entries
199 // that ensures there is a minimum delay of one second
200 // between sent messages.
201 //
202 // It uses team or public chat depending on m_Mode.
203 void SendChatQueued(const char *pLine);
204};
205#endif
constexpr auto SAVES_FILE
Definition: chat.h:18
Definition: chat.h:21
@ CHAT_CLIENT
Definition: chat.h:78
@ CHAT_HIGHLIGHT
Definition: chat.h:77
@ SERVER_MSG
Definition: chat.h:70
@ CHAT_NUM
Definition: chat.h:79
@ CHAT_SERVER
Definition: chat.h:76
@ CLIENT_MSG
Definition: chat.h:69
@ MODE_TEAM
Definition: chat.h:74
@ MODE_NONE
Definition: chat.h:72
@ MODE_ALL
Definition: chat.h:73
void OnRender() override
Definition: chat.cpp:1147
void AddLine(int ClientId, int Team, const char *pLine)
Definition: chat.cpp:638
void Echo(const char *pString)
Definition: chat.cpp:218
int m_PlaceholderOffset
Definition: chat.h:87
void RegisterCommand(const char *pName, const char *pParams, const char *pHelpText)
Definition: chat.cpp:70
CStaticRingBuffer< CHistoryEntry, 64 *1024, CRingBufferBase::FLAG_RECYCLE > m_History
Definition: chat.h:126
int m_CurrentLine
Definition: chat.h:64
int64_t m_LastChatSend
Definition: chat.h:128
CChat()
Definition: chat.cpp:25
float MessageTeeSize() const
Definition: chat.h:185
bool m_PrevShowChat
Definition: chat.h:61
CLineInputBuffered< MAX_LINE_LENGTH > m_Input
Definition: chat.h:32
float MessagePaddingX() const
Definition: chat.h:183
static void ConchainChatWidth(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: chat.cpp:210
void EnableMode(int Team)
Definition: chat.cpp:507
void OnPrepareLines(float y)
Definition: chat.cpp:916
CRateablePlayer m_aPlayerCompletionList[MAX_CLIENTS]
Definition: chat.h:95
void SendChat(int Team, const char *pLine)
Definition: chat.cpp:1336
bool m_EditingNewLine
Definition: chat.h:132
CLine m_aLines[MAX_LINES]
Definition: chat.h:63
void OnRefreshSkins() override
Definition: chat.cpp:901
void OnWindowResize() override
Definition: chat.cpp:115
bool m_PrevScoreBoardShowed
Definition: chat.h:60
static constexpr float CHAT_HEIGHT_FULL
Definition: chat.h:22
int m_Mode
Definition: chat.h:82
static void ConchainChatOld(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: chat.cpp:196
char m_aCurrentInputText[MAX_LINE_LENGTH]
Definition: chat.h:131
float MessagePaddingY() const
Definition: chat.h:184
int m_CompletionChosen
Definition: chat.h:85
float FontSize() const
Definition: chat.h:182
bool m_ServerSupportsCommandInfo
Definition: chat.h:134
void Reset()
Definition: chat.cpp:120
int m_PlaceholderLength
Definition: chat.h:88
static char ms_aDisplayText[MAX_LINE_LENGTH]
Definition: chat.h:89
void RebuildChat()
Definition: chat.cpp:86
int Sizeof() const override
Definition: chat.h:152
void UnregisterCommand(const char *pName)
Definition: chat.cpp:81
bool m_Show
Definition: chat.h:83
static constexpr float CHAT_FONTSIZE_WIDTH_RATIO
Definition: chat.h:24
bool OnInput(const IInput::CEvent &Event) override
Definition: chat.cpp:241
static void ConSayTeam(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:162
static void ConSay(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:157
std::vector< CCommand > m_vCommands
Definition: chat.h:117
void OnMessage(int MsgType, void *pRawMsg) override
Definition: chat.cpp:535
bool LineShouldHighlight(const char *pLine, const char *pName)
Definition: chat.cpp:562
void EnsureCoherentFontSize() const
Definition: chat.cpp:1314
char m_aCompletionBuffer[MAX_LINE_LENGTH]
Definition: chat.h:86
@ MAX_LINES
Definition: chat.h:28
@ MAX_LINE_LENGTH
Definition: chat.h:29
void OnStateChange(int NewState, int OldState) override
Definition: chat.cpp:151
static void ConShowChat(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:181
static void ConClearChat(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:191
bool m_CommandsNeedSorting
Definition: chat.h:118
int64_t m_aLastSoundPlayed[CHAT_NUM]
Definition: chat.h:129
void SendChatQueued(const char *pLine)
Definition: chat.cpp:1361
static void ConchainChatFontSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: chat.cpp:202
void EnsureCoherentWidth() const
Definition: chat.cpp:1324
bool m_IsInputCensored
Definition: chat.h:130
void OnRelease() override
Definition: chat.cpp:146
int m_PlayerCompletionListLength
Definition: chat.h:96
CHistoryEntry * m_pHistoryEntry
Definition: chat.h:125
bool m_CompletionUsed
Definition: chat.h:84
void StoreSave(const char *pText)
Definition: chat.cpp:586
bool IsActive() const
Definition: chat.h:156
void DisableMode()
Definition: chat.cpp:526
void OnInit() override
Definition: chat.cpp:233
float MessageRounding() const
Definition: chat.h:186
static void ConChat(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:167
static constexpr float MESSAGE_TEE_PADDING_RIGHT
Definition: chat.h:154
static void ConEcho(IConsole::IResult *pResult, void *pUserData)
Definition: chat.cpp:186
int m_PendingChatCounter
Definition: chat.h:127
static constexpr float CHAT_HEIGHT_MIN
Definition: chat.h:23
void ClearLines()
Definition: chat.cpp:98
void OnConsoleInit() override
Definition: chat.cpp:223
Definition: component.h:20
Definition: ringbuffer.h:82
Definition: render.h:34
Definition: console.h:47
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition: console.h:94
@ TEMPCMD_HELP_LENGTH
Definition: console.h:34
@ TEMPCMD_PARAMS_LENGTH
Definition: console.h:35
@ TEMPCMD_NAME_LENGTH
Definition: console.h:33
Definition: input.h:22
CConfig g_Config
Definition: config.cpp:12
@ MAX_CLIENTS
Definition: protocol.h:88
int str_comp(const char *a, const char *b)
Definition: system.cpp:2973
int str_copy(char *dst, const char *src, int dst_size)
Definition: system.cpp:2760
Definition: chat.h:99
char m_aParams[IConsole::TEMPCMD_PARAMS_LENGTH]
Definition: chat.h:101
CCommand(const char *pName, const char *pParams, const char *pHelpText)
Definition: chat.h:105
bool operator==(const CCommand &Other) const
Definition: chat.h:114
CCommand()=default
bool operator<=(const CCommand &Other) const
Definition: chat.h:113
char m_aHelpText[IConsole::TEMPCMD_HELP_LENGTH]
Definition: chat.h:102
char m_aName[IConsole::TEMPCMD_NAME_LENGTH]
Definition: chat.h:100
bool operator<(const CCommand &Other) const
Definition: chat.h:112
Definition: chat.h:121
char m_aText[1]
Definition: chat.h:123
int m_Team
Definition: chat.h:122
Definition: chat.h:34
bool m_Friend
Definition: chat.h:44
int64_t m_Time
Definition: chat.h:35
bool m_Team
Definition: chat.h:39
int m_TeamNumber
Definition: chat.h:38
int m_TimesRepeated
Definition: chat.h:57
float m_aYOffset[2]
Definition: chat.h:36
int m_ClientId
Definition: chat.h:37
int m_QuadContainerIndex
Definition: chat.h:49
bool m_Whisper
Definition: chat.h:40
char m_aName[64]
Definition: chat.h:42
std::optional< ColorRGBA > m_CustomColor
Definition: chat.h:46
bool m_Highlighted
Definition: chat.h:45
int m_NameColor
Definition: chat.h:41
char m_aSkinName[std::size(g_Config.m_ClPlayerSkin)]
Definition: chat.h:51
float m_TextYOffset
Definition: chat.h:55
STextContainerIndex m_TextContainerIndex
Definition: chat.h:48
bool m_HasRenderTee
Definition: chat.h:52
char m_aText[MAX_LINE_LENGTH]
Definition: chat.h:43
CTeeRenderInfo m_TeeRenderInfo
Definition: chat.h:53
Definition: chat.h:91
int ClientId
Definition: chat.h:92
int Score
Definition: chat.h:93
Definition: textrender.h:295