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
|
#ifndef INFOCONSOLE_H
#define INFOCONSOLE_H
// InfoConsole.h: interface for the CInfoConsole class.
//
//////////////////////////////////////////////////////////////////////
#include <deque>
#include <vector>
#include <string>
#include <list>
#include <boost/thread/recursive_mutex.hpp>
#include "float3.h"
#include "InputReceiver.h"
#include "LogOutput.h"
class CInfoConsole: public CInputReceiver, public ILogSubscriber
{
public:
CInfoConsole();
virtual ~CInfoConsole();
void Update();
void Draw();
// ILogSubscriber interface implementation
void NotifyLogMsg(const CLogSubsystem& subsystem, const std::string& txt);
void SetLastMsgPos(const float3& pos);
const float3& GetMsgPos();
int GetMsgPosCount() const{
return lastMsgPositions.size();
}
int lifetime;
float xpos;
float ypos;
float width;
float height;
float fontScale;
float fontSize;
bool disabled;
public:
static const size_t maxLastMsgPos;
static const size_t maxRawLines;
struct RawLine {
RawLine(const std::string& text, const CLogSubsystem* subsystem, int id)
: text(text), subsystem(subsystem), id(id), time(0) {}
std::string text;
const CLogSubsystem* subsystem;
int id;
boost::uint32_t time;
};
int GetRawLines(std::deque<RawLine>& copy);
void GetNewRawLines(std::vector<RawLine>& copy);
private:
std::list<float3> lastMsgPositions;
std::list<float3>::iterator lastMsgIter;
std::deque<RawLine> rawData;
size_t newLines;
int rawId;
struct InfoLine {
std::string text;
int time;
};
int lastTime;
std::deque<InfoLine> data;
mutable boost::recursive_mutex infoConsoleMutex;
};
#endif /* INFOCONSOLE_H */
|