1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#ifndef CC_CHAT_H
#define CC_CHAT_H
#include "Core.h"
/* Manages sending, adding, logging and handling chat.
Copyright 2014-2023 ClassiCube | Licensed under BSD-3
*/
struct IGameComponent;
struct StringsBuffer;
extern struct IGameComponent Chat_Component;
enum MsgType {
MSG_TYPE_NORMAL = 0,
MSG_TYPE_STATUS_1 = 1,
MSG_TYPE_STATUS_2 = 2,
MSG_TYPE_STATUS_3 = 3,
MSG_TYPE_BOTTOMRIGHT_1 = 11,
MSG_TYPE_BOTTOMRIGHT_2 = 12,
MSG_TYPE_BOTTOMRIGHT_3 = 13,
MSG_TYPE_ANNOUNCEMENT = 100,
MSG_TYPE_BIGANNOUNCEMENT = 101,
MSG_TYPE_SMALLANNOUNCEMENT = 102,
MSG_TYPE_CLIENTSTATUS_1 = 256, /* Cuboid messages */
MSG_TYPE_CLIENTSTATUS_2 = 257, /* Tab list matching names */
MSG_TYPE_EXTRASTATUS_1 = 360,
MSG_TYPE_EXTRASTATUS_2 = 361
};
/* NOTE: this must be: (next power of next larger than GUI_MAX_CHATLINES) - 1 */
#define CHATLOG_TIME_MASK 31
/* Time most recent chat message were received at */
extern double Chat_RecentLogTimes[CHATLOG_TIME_MASK + 1];
#define Chat_GetLogTime(i) Chat_RecentLogTimes[(i) & CHATLOG_TIME_MASK]
/* Times at which last announcement messages were received */
extern double Chat_AnnouncementReceived;
extern double Chat_BigAnnouncementReceived;
extern double Chat_SmallAnnouncementReceived;
extern cc_string Chat_Status[5], Chat_BottomRight[3], Chat_ClientStatus[2];
extern cc_string Chat_Announcement, Chat_BigAnnouncement, Chat_SmallAnnouncement;
/* All chat messages received */
extern struct StringsBuffer Chat_Log;
/* All chat input entered by the user */
extern struct StringsBuffer Chat_InputLog;
/* Whether chat messages are logged to disc */
extern cc_bool Chat_Logging;
/* Sets the name of log file (no .txt, so e.g. just "singleplayer") */
/* NOTE: This can only be set once. */
void Chat_SetLogName(const cc_string* name);
/* Disables chat logging and closes currently open chat log file. */
void Chat_DisableLogging(void);
/* Sends a chat message, raising ChatEvents.ChatSending event. */
/* NOTE: If logUsage is true, can press 'up' in chat input menu later to retype this. */
/* NOTE: /client is always interpreted as client-side commands. */
/* In multiplayer this is sent to the server, in singleplayer just Chat_Add. */
CC_API void Chat_Send( const cc_string* text, cc_bool logUsage);
typedef void (*FP_Chat_Send)(const cc_string* text, cc_bool logUsage);
/* Shorthand for Chat_AddOf(str, MSG_TYPE_NORMAL) */
CC_API void Chat_Add( const cc_string* text);
typedef void (*FP_Chat_Add)(const cc_string* text);
/* Adds a chat message, raising ChatEvents.ChatReceived event. */
/* MSG_TYPE_NORMAL is usually used for player chat and command messages. */
/* Other message types are usually used for info/status messages. */
CC_API void Chat_AddOf( const cc_string* text, int msgType);
typedef void (*FP_Chat_AddOf)(const cc_string* text, int msgType);
/* Shorthand for Chat_AddOf(String_FromReadonly(raw), MSG_TYPE_NORMAL) */
void Chat_AddRaw(const char* raw);
CC_API void Chat_Add1(const char* format, const void* a1);
CC_API void Chat_Add2(const char* format, const void* a1, const void* a2);
CC_API void Chat_Add3(const char* format, const void* a1, const void* a2, const void* a3);
CC_API void Chat_Add4(const char* format, const void* a1, const void* a2, const void* a3, const void* a4);
#endif
|