// ============================================================== // This file is part of Glest (www.glest.org) // // Copyright (C) 2001-2008 MartiƱo Figueroa // // You can redistribute this code 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 // ============================================================== #ifndef _GLEST_GAME_CONSOLE_H_ #define _GLEST_GAME_CONSOLE_H_ #ifdef WIN32 #include #include #endif #include #include #include #include #include "font.h" #include "leak_dumper.h" #include "vec.h" using std::string; using std::vector; using std::pair; using namespace std; namespace Glest { namespace Game { using Shared::Graphics::Font; using Shared::Graphics::Font2D; using Shared::Graphics::Font3D; using Shared::Graphics::FontChangedCallbackInterface; using Shared::Graphics::Vec3f; // ===================================================== // class Console // // In-game console that shows various types of messages // ===================================================== class ConsoleLineInfo { public: string text; float timeStamp; int PlayerIndex; string originalPlayerName; Vec3f color; bool teamMode; }; class Console: public FontChangedCallbackInterface { private: static const int consoleLines= 5; public: typedef vector Lines; typedef Lines::const_iterator LineIterator; private: float timeElapsed; Lines lines; Lines storedLines; string stringToHighlight; //config int maxLines; int maxStoredLines; float timeout; int xPos; int yPos; int lineHeight; Font2D *font; Font3D *font3D; string font2DUniqueId; string font3DUniqueId; bool onlyChatMessagesInStoredLines; string instanceName; string fontCallbackName; string getNewUUD(); public: Console(); virtual ~Console(); void registerGraphicComponent(const std::string &containerName, const std::string &objName); string getInstanceName() const { return instanceName; } void setInstanceName(const string &value) { instanceName = value; } string getFontCallbackName() const { return fontCallbackName; } int getStoredLineCount() const {return (int)storedLines.size();} int getLineCount() const {return (int)lines.size();} bool getOnlyChatMessagesInStoredLines() const { return onlyChatMessagesInStoredLines ;} void setOnlyChatMessagesInStoredLines(bool value) {this->onlyChatMessagesInStoredLines= value;} int getXPos() const {return xPos;} void setXPos(int xPos) {this->xPos= xPos;} int getYPos() const {return yPos;} void setYPos(int yPos) {this->yPos= yPos;} int getLineHeight() const {return lineHeight;} void setLineHeight(int lineHeight) {this->lineHeight= lineHeight;} Font2D *getFont() const {return font;} Font3D *getFont3D() const {return font3D;} void setFont(Font2D *font); void setFont3D(Font3D *font); string getStringToHighlight() const { return stringToHighlight;} void setStringToHighlight(const string &stringToHighlight) { this->stringToHighlight = stringToHighlight;} void resetFonts(); //string getLine(int i) const; //string getStoredLine(int i) const; ConsoleLineInfo getLineItem(int i) const; ConsoleLineInfo getStoredLineItem(int i) const; void clearStoredLines(); void addStdMessage(const string &s, bool clearOtherLines=false); void addStdMessage(const string &s, const string &failText, bool clearOtherLines=false); void addStdScenarioMessage(const string &s,bool clearOtherLines=false); void addLineOnly(const string &line); void addLine(const string &line, bool playSound= false,int playerIndex=-1,Vec3f textColor=Vec3f(1.f, 1.f, 1.f),bool teamMode=false,bool clearOtherLines=false); void addLine(const string &line, bool playSound, const string &playerName, Vec3f textColor=Vec3f(1.f, 1.f, 1.f),bool teamMode=false); void addLine(const string &line, bool playSound, Vec3f textColor) { addLine(line,playSound,"",textColor,false); } void update(); bool isEmpty(); virtual void FontChangedCallback(std::string fontUniqueId, Font *font); }; }}//end namespace #endif