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