DDNet documentation
Loading...
Searching...
No Matches
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
6#include <base/str.h>
7
8#include <engine/console.h>
12
13#include <generated/protocol7.h>
14
17#include <game/client/render.h>
18
19#include <vector>
20
21constexpr auto SAVES_FILE = "ddnet-saves.txt";
22
23class CChat : public CComponent
24{
25 static constexpr float CHAT_HEIGHT_FULL = 200.0f;
26 static constexpr float CHAT_HEIGHT_MIN = 50.0f;
27 static constexpr float CHAT_FONTSIZE_WIDTH_RATIO = 2.5f;
28
29 enum
30 {
32 };
33
35 class CLine
36 {
37 public:
38 CLine();
39 void Reset(CChat &This);
40
42 int64_t m_Time;
43 float m_aYOffset[2];
46 bool m_Team;
49 char m_aName[64];
53 std::optional<ColorRGBA> m_CustomColor;
54
57
58 std::shared_ptr<CManagedTeeRenderInfo> m_pManagedTeeRenderInfo;
59
61
63 };
64
67
70
71 enum
72 {
73 // client IDs for special messages
76 };
77
78 enum
79 {
83 };
84
85 enum
86 {
91 };
92
93 int m_Mode;
94 bool m_Show;
102 {
103 public:
106 };
109
110 struct CCommand
111 {
115
116 CCommand() = default;
117 CCommand(const char *pName, const char *pParams, const char *pHelpText)
118 {
119 str_copy(m_aName, pName);
120 str_copy(m_aParams, pParams);
121 str_copy(m_aHelpText, pHelpText);
122 }
123
124 bool operator<(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) < 0; }
125 bool operator<=(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) <= 0; }
126 bool operator==(const CCommand &Other) const { return str_comp(m_aName, Other.m_aName) == 0; }
127 };
128
129 std::vector<CCommand> m_vServerCommands;
131
133 {
135 char m_aText[1];
136 };
145
147
148 static void ConSay(IConsole::IResult *pResult, void *pUserData);
149 static void ConSayTeam(IConsole::IResult *pResult, void *pUserData);
150 static void ConChat(IConsole::IResult *pResult, void *pUserData);
151 static void ConShowChat(IConsole::IResult *pResult, void *pUserData);
152 static void ConEcho(IConsole::IResult *pResult, void *pUserData);
153 static void ConClearChat(IConsole::IResult *pResult, void *pUserData);
154
155 static void ConchainChatOld(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
156 static void ConchainChatFontSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
157 static void ConchainChatWidth(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
158
159 bool LineShouldHighlight(const char *pLine, const char *pName);
160 void StoreSave(const char *pText);
161
162public:
163 CChat();
164 int Sizeof() const override { return sizeof(*this); }
165
166 static constexpr float MESSAGE_TEE_PADDING_RIGHT = 0.5f;
167
168 bool IsActive() const { return m_Mode != MODE_NONE; }
169 void AddLine(int ClientId, int Team, const char *pLine);
170 void EnableMode(int Team);
171 void DisableMode();
172 void RegisterCommand(const char *pName, const char *pParams, const char *pHelpText);
173 void UnregisterCommand(const char *pName);
174 void Echo(const char *pString);
175
176 void OnWindowResize() override;
177 void OnConsoleInit() override;
178 void OnStateChange(int NewState, int OldState) override;
179 void OnRender() override;
180 void OnPrepareLines(float y);
181 void Reset();
182 void OnRelease() override;
183 void OnMessage(int MsgType, void *pRawMsg) override;
184 bool OnInput(const IInput::CEvent &Event) override;
185 void OnInit() override;
186
187 void RebuildChat();
188 void ClearLines();
189
190 void EnsureCoherentFontSize() const;
191 void EnsureCoherentWidth() const;
192
193 float FontSize() const { return g_Config.m_ClChatFontSize / 10.0f; }
194 float MessagePaddingX() const { return FontSize() * (5 / 6.f); }
195 float MessagePaddingY() const { return FontSize() * (1 / 6.f); }
196 float MessageTeeSize() const { return FontSize() * (7 / 6.f); }
197 float MessageRounding() const { return FontSize() * (1 / 2.f); }
198
199 // ----- send functions -----
200
201 // Sends a chat message to the server.
202 //
203 // @param Team MODE_ALL=0 MODE_TEAM=1
204 // @param pLine the chat message
205 void SendChat(int Team, const char *pLine);
206
207 // Sends a chat message to the server.
208 //
209 // It uses a queue with a maximum of 3 entries
210 // that ensures there is a minimum delay of one second
211 // between sent messages.
212 //
213 // It uses team or public chat depending on m_Mode.
214 void SendChatQueued(const char *pLine);
215};
216#endif
constexpr auto SAVES_FILE
Definition chat.h:21
Definition chat.h:36
bool m_Friend
Definition chat.h:51
int64_t m_Time
Definition chat.h:42
bool m_Team
Definition chat.h:46
int m_TeamNumber
Definition chat.h:45
int m_TimesRepeated
Definition chat.h:62
float m_aYOffset[2]
Definition chat.h:43
int m_ClientId
Definition chat.h:44
int m_QuadContainerIndex
Definition chat.h:56
bool m_Whisper
Definition chat.h:47
char m_aName[64]
Definition chat.h:49
std::shared_ptr< CManagedTeeRenderInfo > m_pManagedTeeRenderInfo
Definition chat.h:58
std::optional< ColorRGBA > m_CustomColor
Definition chat.h:53
bool m_Initialized
Definition chat.h:41
char m_aText[MAX_CHAT_LENGTH]
Definition chat.h:50
CLine()
Definition chat.cpp:32
bool m_Highlighted
Definition chat.h:52
int m_NameColor
Definition chat.h:48
float m_TextYOffset
Definition chat.h:60
STextContainerIndex m_TextContainerIndex
Definition chat.h:55
void Reset(CChat &This)
Definition chat.cpp:38
Definition chat.h:102
int m_Score
Definition chat.h:105
int m_ClientId
Definition chat.h:104
void OnRender() override
Definition chat.cpp:1153
void AddLine(int ClientId, int Team, const char *pLine)
Definition chat.cpp:659
void Echo(const char *pString)
Definition chat.cpp:229
int m_PlaceholderOffset
Definition chat.h:98
void RegisterCommand(const char *pName, const char *pParams, const char *pHelpText)
Definition chat.cpp:88
CStaticRingBuffer< CHistoryEntry, 64 *1024, CRingBufferBase::FLAG_RECYCLE > m_History
Definition chat.h:138
static char ms_aDisplayText[MAX_CHAT_LENGTH]
Definition chat.h:100
int m_CurrentLine
Definition chat.h:69
char m_aCompletionBuffer[MAX_CHAT_LENGTH]
Definition chat.h:97
int64_t m_LastChatSend
Definition chat.h:140
CChat()
Definition chat.cpp:51
@ SERVER_MSG
Definition chat.h:75
@ CLIENT_MSG
Definition chat.h:74
float MessageTeeSize() const
Definition chat.h:196
char m_aCurrentInputText[MAX_CHAT_LENGTH]
Definition chat.h:143
bool m_PrevShowChat
Definition chat.h:66
float MessagePaddingX() const
Definition chat.h:194
static void ConchainChatWidth(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition chat.cpp:221
void EnableMode(int Team)
Definition chat.cpp:520
void OnPrepareLines(float y)
Definition chat.cpp:922
CRateablePlayer m_aPlayerCompletionList[MAX_CLIENTS]
Definition chat.h:107
void SendChat(int Team, const char *pLine)
Definition chat.cpp:1346
bool m_EditingNewLine
Definition chat.h:144
CLine m_aLines[MAX_LINES]
Definition chat.h:68
void OnWindowResize() override
Definition chat.cpp:126
bool m_PrevScoreBoardShowed
Definition chat.h:65
static constexpr float CHAT_HEIGHT_FULL
Definition chat.h:25
int m_Mode
Definition chat.h:93
static void ConchainChatOld(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition chat.cpp:207
float MessagePaddingY() const
Definition chat.h:195
int m_CompletionChosen
Definition chat.h:96
float FontSize() const
Definition chat.h:193
bool m_ServerSupportsCommandInfo
Definition chat.h:146
void Reset()
Definition chat.cpp:131
int m_PlaceholderLength
Definition chat.h:99
void RebuildChat()
Definition chat.cpp:104
int Sizeof() const override
Definition chat.h:164
void UnregisterCommand(const char *pName)
Definition chat.cpp:99
bool m_Show
Definition chat.h:94
static constexpr float CHAT_FONTSIZE_WIDTH_RATIO
Definition chat.h:27
bool OnInput(const IInput::CEvent &Event) override
Definition chat.cpp:252
static void ConSayTeam(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:173
static void ConSay(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:168
@ MODE_TEAM
Definition chat.h:82
@ MODE_NONE
Definition chat.h:80
@ MODE_ALL
Definition chat.h:81
CLineInputBuffered< MAX_CHAT_LENGTH > m_Input
Definition chat.h:34
void OnMessage(int MsgType, void *pRawMsg) override
Definition chat.cpp:547
bool LineShouldHighlight(const char *pLine, const char *pName)
Definition chat.cpp:593
void EnsureCoherentFontSize() const
Definition chat.cpp:1324
void OnStateChange(int NewState, int OldState) override
Definition chat.cpp:162
static void ConShowChat(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:192
bool m_ServerCommandsNeedSorting
Definition chat.h:130
static void ConClearChat(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:202
int64_t m_aLastSoundPlayed[CHAT_NUM]
Definition chat.h:141
void SendChatQueued(const char *pLine)
Definition chat.cpp:1371
static void ConchainChatFontSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition chat.cpp:213
void EnsureCoherentWidth() const
Definition chat.cpp:1334
std::vector< CCommand > m_vServerCommands
Definition chat.h:129
bool m_IsInputCensored
Definition chat.h:142
@ MAX_LINES
Definition chat.h:31
void OnRelease() override
Definition chat.cpp:157
int m_PlayerCompletionListLength
Definition chat.h:108
CHistoryEntry * m_pHistoryEntry
Definition chat.h:137
bool m_CompletionUsed
Definition chat.h:95
void StoreSave(const char *pText)
Definition chat.cpp:619
bool IsActive() const
Definition chat.h:168
void DisableMode()
Definition chat.cpp:538
void OnInit() override
Definition chat.cpp:244
float MessageRounding() const
Definition chat.h:197
static void ConChat(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:178
static constexpr float MESSAGE_TEE_PADDING_RIGHT
Definition chat.h:166
static void ConEcho(IConsole::IResult *pResult, void *pUserData)
Definition chat.cpp:197
int m_PendingChatCounter
Definition chat.h:139
static constexpr float CHAT_HEIGHT_MIN
Definition chat.h:26
void ClearLines()
Definition chat.cpp:118
void OnConsoleInit() override
Definition chat.cpp:234
@ CHAT_CLIENT
Definition chat.h:89
@ CHAT_HIGHLIGHT
Definition chat.h:88
@ CHAT_NUM
Definition chat.h:90
@ CHAT_SERVER
Definition chat.h:87
Definition component.h:165
int m_ClChatFontSize
Definition config.h:746
Definition lineinput.h:202
Definition ringbuffer.h:81
Definition console.h:66
@ TEMPCMD_HELP_LENGTH
Definition console.h:36
@ TEMPCMD_PARAMS_LENGTH
Definition console.h:37
@ TEMPCMD_NAME_LENGTH
Definition console.h:35
void(*) FCommandCallback(IResult *pResult, void *pUserData)
Definition console.h:107
Definition input.h:22
CConfig g_Config
Definition config.cpp:16
int str_comp(const char *a, const char *b)
Definition str.cpp:373
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:18
@ MAX_CLIENTS
Definition protocol.h:89
@ MAX_CHAT_LENGTH
Definition protocol.h:112
char m_aParams[IConsole::TEMPCMD_PARAMS_LENGTH]
Definition chat.h:113
CCommand(const char *pName, const char *pParams, const char *pHelpText)
Definition chat.h:117
bool operator==(const CCommand &Other) const
Definition chat.h:126
CCommand()=default
bool operator<=(const CCommand &Other) const
Definition chat.h:125
char m_aHelpText[IConsole::TEMPCMD_HELP_LENGTH]
Definition chat.h:114
char m_aName[IConsole::TEMPCMD_NAME_LENGTH]
Definition chat.h:112
bool operator<(const CCommand &Other) const
Definition chat.h:124
Definition chat.h:133
char m_aText[1]
Definition chat.h:135
int m_Team
Definition chat.h:134
Definition textrender.h:175