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