1
0
forked from 0ad/0ad
0ad/source/ps/CConsole.h
Ykkrosh 7dca91f26b # Various changes to the text rendering system.
Rewrite font builder tool to be much simpler and to support more text
effects.
Change GUI to use new set of fonts.
Switch font textures from TGA to PNG so they're easier for the font
builder to create.
Support RGBA font textures (for e.g. stroked text).
Greatly improve text rendering performance by using vertex arrays.
Fix rendering code leaving vertex buffers bound.
Add 'clip' property to GUI text objects, to disable clipping when
rendering.
Delete part of unused console function registration system.

This was SVN commit r7595.
2010-05-30 13:42:56 +00:00

135 lines
3.5 KiB
C++

/* Copyright (C) 2009 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Implements the in-game console with scripting support.
*/
#include <stdarg.h>
#include <string>
#include <deque>
#include <map>
#include "CStr.h"
#include "lib/input.h"
#include "lib/file/vfs/vfs_path.h"
#ifndef INCLUDED_CCONSOLE
#define INCLUDED_CCONSOLE
#define CONSOLE_BUFFER_SIZE 1024 // for text being typed into the console
#define CONSOLE_MESSAGE_SIZE 1024 // for messages being printed into the console
#define CONSOLE_FONT L"mono-10"
class CConsole
{
public:
CConsole();
~CConsole();
void SetSize(float X = 300, float Y = 0, float W = 800, float H = 600);
void UpdateScreenSize(int w, int h);
void ToggleVisible();
void SetVisible( bool visible );
void Update(float DeltaTime);
void Render();
void InsertMessage(const wchar_t* szMessage, ...) WPRINTF_ARGS(2);
void InsertChar(const int szChar, const wchar_t cooked);
void SendChatMessage(const wchar_t *szMessage);
void ReceivedChatMessage(const wchar_t *pSender, const wchar_t *szMessage);
void SetBuffer(const wchar_t* szMessage);
void UseHistoryFile( const VfsPath& filename, int historysize );
// Only returns a pointer to the buffer; copy out of here if you want to keep it.
const wchar_t* GetBuffer();
void FlushBuffer();
bool IsActive() { return m_bVisible; }
int m_iFontHeight;
int m_iFontWidth;
int m_iFontOffset; // distance to move up before drawing
size_t m_charsPerPage;
private:
float m_fX;
float m_fY;
float m_fHeight;
float m_fWidth;
// "position" in show/hide animation, how visible the console is (0..1).
// allows implementing other animations than sliding, e.g. fading in/out.
float m_fVisibleFrac;
CStrW m_helpText;
std::deque<std::wstring> m_deqMsgHistory;
std::deque<std::wstring> m_deqBufHistory;
int m_iMsgHistPos;
wchar_t* m_szBuffer;
int m_iBufferPos;
int m_iBufferLength;
VfsPath m_sHistoryFile;
int m_MaxHistoryLines;
bool m_bFocus;
bool m_bVisible; // console is to be drawn
bool m_bToggle; // show/hide animation is currently active
void ToLower(wchar_t* szMessage, size_t iSize = 0);
void Trim(wchar_t* szMessage, const wchar_t cChar = 32, size_t iSize = 0);
void DrawHistory(void);
void DrawWindow(void);
void DrawBuffer(void);
void DrawCursor(void);
bool IsEOB(void) {return (m_iBufferPos == m_iBufferLength);}; //Is end of Buffer?
bool IsBOB(void) {return (m_iBufferPos == 0);}; //Is beginning of Buffer?
bool IsFull(void) {return (m_iBufferLength == CONSOLE_BUFFER_SIZE);};
bool IsEmpty(void) {return (m_iBufferLength == 0);};
void InsertBuffer(void){InsertMessage(L"%ls", m_szBuffer);};
void ProcessBuffer(const wchar_t* szLine);
// Insert message without printf-style formatting, and without
// length limits
void InsertMessageRaw(const CStrW& message);
void LoadHistory();
void SaveHistory();
};
extern CConsole* g_Console;
extern InReaction conInputHandler(const SDL_Event_* ev);
#endif