ddnet/src/game/client/components/console.h

136 lines
3.8 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
2010-05-29 07:25:38 +00:00
#ifndef GAME_CLIENT_COMPONENTS_CONSOLE_H
#define GAME_CLIENT_COMPONENTS_CONSOLE_H
#include <engine/shared/ringbuffer.h>
#include <game/client/component.h>
#include <game/client/lineinput.h>
2021-07-12 09:29:59 +00:00
#include <engine/console.h>
enum
{
CONSOLE_CLOSED,
CONSOLE_OPENING,
CONSOLE_OPEN,
CONSOLE_CLOSING,
};
2010-05-29 07:25:38 +00:00
class CGameConsole : public CComponent
{
class CInstance
{
public:
2010-10-16 08:32:56 +00:00
struct CBacklogEntry
{
float m_YOffset;
2021-03-08 00:08:38 +00:00
ColorRGBA m_PrintColor;
2010-10-16 08:32:56 +00:00
char m_aText[1];
};
2020-10-27 17:57:14 +00:00
CStaticRingBuffer<CBacklogEntry, 64 * 1024, CRingBufferBase::FLAG_RECYCLE> m_Backlog;
CStaticRingBuffer<char, 64 * 1024, CRingBufferBase::FLAG_RECYCLE> m_History;
2010-05-29 07:25:38 +00:00
char *m_pHistoryEntry;
CLineInput m_Input;
int m_Type;
int m_CompletionEnumerationCount;
int m_BacklogActPage;
2010-05-29 07:25:38 +00:00
public:
CGameConsole *m_pGameConsole;
2010-05-29 07:25:38 +00:00
char m_aCompletionBuffer[128];
bool m_CompletionUsed;
2010-05-29 07:25:38 +00:00
int m_CompletionChosen;
int m_CompletionFlagmask;
float m_CompletionRenderOffset;
2014-10-06 21:37:35 +00:00
bool m_ReverseTAB;
char m_aUser[32];
bool m_UserGot;
bool m_UsernameReq;
bool m_IsCommand;
char m_aCommandName[IConsole::TEMPCMD_NAME_LENGTH];
char m_aCommandHelp[IConsole::TEMPCMD_HELP_LENGTH];
char m_aCommandParams[IConsole::TEMPCMD_PARAMS_LENGTH];
2010-05-29 07:25:38 +00:00
CInstance(int t);
void Init(CGameConsole *pGameConsole);
2010-05-29 07:25:38 +00:00
void ClearBacklog();
void ClearHistory();
2010-05-29 07:25:38 +00:00
void ExecuteLine(const char *pLine);
2010-05-29 07:25:38 +00:00
void OnInput(IInput::CEvent Event);
2021-03-08 00:08:38 +00:00
void PrintLine(const char *pLine, ColorRGBA PrintColor = {1, 1, 1, 1});
2010-05-29 07:25:38 +00:00
const char *GetString() const { return m_Input.GetString(); }
static void PossibleCommandsCompleteCallback(const char *pStr, void *pUser);
};
2010-05-29 07:25:38 +00:00
class IConsole *m_pConsole;
2010-05-29 07:25:38 +00:00
CInstance m_LocalConsole;
CInstance m_RemoteConsole;
2010-05-29 07:25:38 +00:00
CInstance *CurrentConsole();
float TimeNow();
2011-07-30 11:40:01 +00:00
int m_PrintCBIndex;
2010-05-29 07:25:38 +00:00
int m_ConsoleType;
int m_ConsoleState;
float m_StateChangeEnd;
float m_StateChangeDuration;
2021-09-12 17:32:00 +00:00
bool m_MouseIsPress = false;
int m_MousePressX = 0;
int m_MousePressY = 0;
int m_MouseCurX = 0;
int m_MouseCurY = 0;
int m_CurSelStart = 0;
int m_CurSelEnd = 0;
bool m_HasSelection = false;
int m_NewLineCounter = 0;
int m_LastInputLineCount = 0;
2010-05-29 07:25:38 +00:00
void Toggle(int Type);
void Dump(int Type);
2010-05-29 07:25:38 +00:00
static void PossibleCommandsRenderCallback(const char *pStr, void *pUser);
2021-03-08 00:08:38 +00:00
static void ClientConsolePrintCallback(const char *pStr, void *pUserData, ColorRGBA PrintColor = {1, 1, 1, 1});
2010-05-29 07:25:38 +00:00
static void ConToggleLocalConsole(IConsole::IResult *pResult, void *pUserData);
static void ConToggleRemoteConsole(IConsole::IResult *pResult, void *pUserData);
static void ConClearLocalConsole(IConsole::IResult *pResult, void *pUserData);
static void ConClearRemoteConsole(IConsole::IResult *pResult, void *pUserData);
static void ConDumpLocalConsole(IConsole::IResult *pResult, void *pUserData);
static void ConDumpRemoteConsole(IConsole::IResult *pResult, void *pUserData);
static void ConConsolePageUp(IConsole::IResult *pResult, void *pUserData);
static void ConConsolePageDown(IConsole::IResult *pResult, void *pUserData);
2011-07-30 11:40:01 +00:00
static void ConchainConsoleOutputLevelUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
2010-05-29 07:25:38 +00:00
public:
enum
{
CONSOLETYPE_LOCAL = 0,
CONSOLETYPE_REMOTE,
};
2010-05-29 07:25:38 +00:00
CGameConsole();
void PrintLine(int Type, const char *pLine);
void RequireUsername(bool UsernameReq);
2010-05-29 07:25:38 +00:00
virtual void OnStateChange(int NewState, int OldState);
2010-05-29 07:25:38 +00:00
virtual void OnConsoleInit();
virtual void OnReset();
virtual void OnRender();
virtual void OnMessage(int MsgType, void *pRawMsg);
virtual bool OnInput(IInput::CEvent Events);
bool IsClosed() { return m_ConsoleState == CONSOLE_CLOSED; }
2010-05-29 07:25:38 +00:00
};
#endif