/* (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. */ #ifndef GAME_CLIENT_COMPONENTS_CONSOLE_H #define GAME_CLIENT_COMPONENTS_CONSOLE_H #include #include #include class CGameConsole : public CComponent { class CInstance { public: struct CBacklogEntry { float m_YOffset; char m_aText[1]; }; TStaticRingBuffer m_Backlog; TStaticRingBuffer m_History; char *m_pHistoryEntry; CLineInput m_Input; int m_Type; int m_CompletionEnumerationCount; int m_BacklogActPage; public: CGameConsole *m_pGameConsole; char m_aCompletionBuffer[128]; int m_CompletionChosen; int m_CompletionFlagmask; float m_CompletionRenderOffset; IConsole::CCommandInfo *m_pCommand; CInstance(int t); void Init(CGameConsole *pGameConsole); void ClearBacklog(); void ClearHistory(); void ExecuteLine(const char *pLine); void OnInput(IInput::CEvent Event); void PrintLine(const char *pLine); const char *GetString() const { return m_Input.GetString(); } static void PossibleCommandsCompleteCallback(const char *pStr, void *pUser); }; class IConsole *m_pConsole; CInstance m_LocalConsole; CInstance m_RemoteConsole; CInstance *CurrentConsole(); float TimeNow(); int m_ConsoleType; int m_ConsoleState; float m_StateChangeEnd; float m_StateChangeDuration; void Toggle(int Type); void Dump(int Type); static void PossibleCommandsRenderCallback(const char *pStr, void *pUser); static void ClientConsolePrintCallback(const char *pStr, void *pUserData); static void ConToggleLocalConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); static void ConToggleRemoteConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); static void ConClearLocalConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); static void ConClearRemoteConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); static void ConDumpLocalConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); static void ConDumpRemoteConsole(IConsole::IResult *pResult, void *pUserData, int ClientID); public: enum { CONSOLETYPE_LOCAL=0, CONSOLETYPE_REMOTE, }; CGameConsole(); void PrintLine(int Type, const char *pLine); virtual void OnStateChange(int NewState, int OldState); virtual void OnConsoleInit(); virtual void OnReset(); virtual void OnRender(); virtual void OnMessage(int MsgType, void *pRawMsg); virtual bool OnInput(IInput::CEvent Events); }; #endif