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 75 76 77 78 79 80 81 82 83 84 85 86 87
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef INFO_CONSOLE_H
#define INFO_CONSOLE_H
#include "InputReceiver.h"
#include "System/float3.h"
#include "System/EventClient.h"
#include "System/Log/LogSinkHandler.h"
#include "System/Misc/SpringTime.h"
#include <deque>
#include <string>
#include <list>
#include <boost/thread/recursive_mutex.hpp>
class CInfoConsole: public CInputReceiver, public CEventClient, public ILogSink
{
public:
CInfoConsole();
virtual ~CInfoConsole();
void Update();
void Draw();
void PushNewLinesToEventHandler();
void RecordLogMessage(const std::string& section, int level,
const std::string& text);
bool WantsEvent(const std::string& eventName) {
return (eventName == "LastMessagePosition");
}
void LastMessagePosition(const float3& pos);
const float3& GetMsgPos(const float3& defaultPos = ZeroVector);
unsigned int GetMsgPosCount() const { return lastMsgPositions.size(); }
bool enabled;
public:
static const size_t maxLastMsgPos;
static const size_t maxRawLines;
struct RawLine {
RawLine(const std::string& text, const std::string& section, int level,
int id)
: text(text)
, section(section)
, level(level)
, id(id)
{}
std::string text;
std::string section;
int level;
int id;
};
int GetRawLines(std::deque<RawLine>& copy);
private:
struct InfoLine {
std::string text;
spring_time timeout;
};
std::list<float3> lastMsgPositions;
std::list<float3>::iterator lastMsgIter;
std::deque<RawLine> rawData;
std::deque<InfoLine> data;
size_t newLines;
int rawId;
mutable boost::recursive_mutex infoConsoleMutex;
int lifetime;
float xpos;
float ypos;
float width;
float height;
float fontScale;
float fontSize;
size_t maxLines;
};
#endif /* INFO_CONSOLE_H */
|