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