- added player color coding in lobbies as well as chat console
This commit is contained in:
parent
b869552cad
commit
8ab3366c66
|
@ -32,7 +32,7 @@ namespace Glest{ namespace Game{
|
|||
|
||||
const int ChatManager::maxTextLenght= 64;
|
||||
|
||||
ChatManager::ChatManager(){
|
||||
ChatManager::ChatManager() {
|
||||
console= NULL;
|
||||
editEnabled= false;
|
||||
teamMode= false;
|
||||
|
@ -40,21 +40,21 @@ ChatManager::ChatManager(){
|
|||
disableTeamMode = false;
|
||||
}
|
||||
|
||||
void ChatManager::init(Console* console, int thisTeamIndex, const bool inMenu){
|
||||
void ChatManager::init(Console* console, int thisTeamIndex, const bool inMenu) {
|
||||
this->console= console;
|
||||
this->thisTeamIndex= thisTeamIndex;
|
||||
this->disableTeamMode= false;
|
||||
this->inMenu=inMenu;
|
||||
}
|
||||
|
||||
void ChatManager::keyUp(char key){
|
||||
void ChatManager::keyUp(char key) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
try {
|
||||
if(editEnabled){
|
||||
if(editEnabled) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key);
|
||||
|
||||
if(key==vkEscape)
|
||||
if(key == vkEscape)
|
||||
{
|
||||
text.clear();
|
||||
editEnabled= false;
|
||||
|
@ -78,7 +78,7 @@ void ChatManager::setDisableTeamMode(bool value) {
|
|||
}
|
||||
}
|
||||
|
||||
void ChatManager::keyDown(char key){
|
||||
void ChatManager::keyDown(char key) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key);
|
||||
|
||||
try {
|
||||
|
@ -112,19 +112,21 @@ void ChatManager::keyDown(char key){
|
|||
{
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key);
|
||||
|
||||
if(editEnabled){
|
||||
if(editEnabled == true) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key);
|
||||
|
||||
GameNetworkInterface *gameNetworkInterface= NetworkManager::getInstance().getGameNetworkInterface();
|
||||
if(!text.empty()) {
|
||||
string playerName = gameNetworkInterface->getHumanPlayerName();
|
||||
if(text.empty() == false) {
|
||||
string playerName = gameNetworkInterface->getHumanPlayerName();
|
||||
int playerIndex = gameNetworkInterface->getHumanPlayerIndex();
|
||||
console->addLine(playerName + ": " + text,false,playerIndex);
|
||||
|
||||
console->addLine(playerName + ": " + text);
|
||||
gameNetworkInterface->sendTextMessage(text, teamMode? thisTeamIndex: -1);
|
||||
if(!inMenu) editEnabled= false;
|
||||
if(inMenu == false) {
|
||||
editEnabled= false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
editEnabled= false;
|
||||
}
|
||||
text.clear();
|
||||
|
@ -184,9 +186,8 @@ void ChatManager::updateNetwork() {
|
|||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] got nmtText [%s] for team = %d\n",__FILE__,__FUNCTION__,msg.chatText.c_str(),teamIndex);
|
||||
|
||||
if(teamIndex==-1 || teamIndex==thisTeamIndex){
|
||||
//console->addLine(msg.chatText, true);
|
||||
console->addLine(msg.chatSender + ": " + msg.chatText, true);
|
||||
if(teamIndex == -1 || teamIndex == thisTeamIndex) {
|
||||
console->addLine(msg.chatSender + ": " + msg.chatText, true, msg.chatPlayerIndex);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Added text to console\n",__FILE__,__FUNCTION__);
|
||||
}
|
||||
|
|
|
@ -28,31 +28,29 @@ namespace Glest{ namespace Game{
|
|||
// class Console
|
||||
// =====================================================
|
||||
|
||||
Console::Console(){
|
||||
Console::Console() {
|
||||
//config
|
||||
maxLines= Config::getInstance().getInt("ConsoleMaxLines");
|
||||
maxStoredLines= Config::getInstance().getInt("ConsoleMaxLinesStored");
|
||||
timeout= Config::getInstance().getInt("ConsoleTimeout");
|
||||
|
||||
timeElapsed= 0.0f;
|
||||
maxLines = Config::getInstance().getInt("ConsoleMaxLines");
|
||||
maxStoredLines = Config::getInstance().getInt("ConsoleMaxLinesStored");
|
||||
timeout = Config::getInstance().getInt("ConsoleTimeout");
|
||||
timeElapsed = 0.0f;
|
||||
}
|
||||
|
||||
void Console::addStdMessage(const string &s){
|
||||
void Console::addStdMessage(const string &s) {
|
||||
addLine(Lang::getInstance().get(s));
|
||||
}
|
||||
|
||||
void Console::addLine(string line, bool playSound){
|
||||
try
|
||||
{
|
||||
if(playSound){
|
||||
void Console::addLine(string line, bool playSound, int playerIndex) {
|
||||
try {
|
||||
if(playSound == true) {
|
||||
SoundRenderer::getInstance().playFx(CoreData::getInstance().getClickSoundA());
|
||||
}
|
||||
lines.insert(lines.begin(), StringTimePair(line, timeElapsed));
|
||||
if(lines.size()>maxLines){
|
||||
lines.insert(lines.begin(), StringTimePair(line, StringTimePairData(timeElapsed,playerIndex)));
|
||||
if(lines.size() > maxLines) {
|
||||
lines.pop_back();
|
||||
}
|
||||
storedLines.insert(storedLines.begin(), StringTimePair(line, timeElapsed));
|
||||
if(storedLines.size()>maxStoredLines){
|
||||
storedLines.insert(storedLines.begin(), StringTimePair(line, StringTimePairData(timeElapsed,playerIndex)));
|
||||
if(storedLines.size() > maxStoredLines) {
|
||||
storedLines.pop_back();
|
||||
}
|
||||
}
|
||||
|
@ -64,23 +62,23 @@ void Console::addLine(string line, bool playSound){
|
|||
}
|
||||
}
|
||||
|
||||
void Console::clearStoredLines(){
|
||||
while(!storedLines.empty()){
|
||||
void Console::clearStoredLines() {
|
||||
while(storedLines.empty() == false) {
|
||||
storedLines.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
void Console::update(){
|
||||
timeElapsed+= 1.f/GameConstants::updateFps;
|
||||
void Console::update() {
|
||||
timeElapsed += 1.f / GameConstants::updateFps;
|
||||
|
||||
if(!lines.empty()){
|
||||
if(lines.back().second<timeElapsed-timeout){
|
||||
if(lines.empty() == false) {
|
||||
if(lines.back().second.first < (timeElapsed - timeout)) {
|
||||
lines.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Console::isEmpty(){
|
||||
bool Console::isEmpty() {
|
||||
return lines.empty();
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,9 @@ private:
|
|||
static const int consoleLines= 5;
|
||||
|
||||
public:
|
||||
typedef pair<string, float> StringTimePair;
|
||||
// The float is elapsed time, the int is playerindex (-1 is no player)
|
||||
typedef pair<float, int> StringTimePairData;
|
||||
typedef pair<string, StringTimePairData > StringTimePair;
|
||||
typedef vector<StringTimePair> Lines;
|
||||
typedef Lines::const_iterator LineIterator;
|
||||
|
||||
|
@ -45,9 +47,6 @@ private:
|
|||
Lines lines;
|
||||
Lines storedLines;
|
||||
|
||||
//this should be deleted from here someday
|
||||
bool won, lost;
|
||||
|
||||
//config
|
||||
int maxLines;
|
||||
int maxStoredLines;
|
||||
|
@ -57,13 +56,16 @@ public:
|
|||
Console();
|
||||
|
||||
int getStoredLineCount() const {return storedLines.size();}
|
||||
int getLineCount() const {return lines.size();}
|
||||
string getLine(int i) const { if(i < 0 || i >= lines.size()) throw runtime_error("i >= Lines.size()"); return lines[i].first;}
|
||||
string getStoredLine(int i) const { if(i < 0 || i >= storedLines.size()) throw runtime_error("i >= storedLines.size()"); return storedLines[i].first;}
|
||||
int getLineCount() const {return lines.size();}
|
||||
string getLine(int i) const { if(i < 0 || i >= lines.size()) throw runtime_error("i >= Lines.size()"); return lines[i].first;}
|
||||
string getStoredLine(int i) const { if(i < 0 || i >= storedLines.size()) throw runtime_error("i >= storedLines.size()"); return storedLines[i].first;}
|
||||
|
||||
int getLinePlayerIndex(int i) const { if(i < 0 || i >= lines.size()) throw runtime_error("i >= Lines.size()"); return lines[i].second.second;}
|
||||
int getStoredLinePlayerIndex(int i) const { if(i < 0 || i >= storedLines.size()) throw runtime_error("i >= storedLines.size()"); return storedLines[i].second.second;}
|
||||
|
||||
void clearStoredLines();
|
||||
void addStdMessage(const string &s);
|
||||
void addLine(string line, bool playSound= false);
|
||||
void addLine(string line, bool playSound= false,int playerIndex=-1);
|
||||
void update();
|
||||
bool isEmpty();
|
||||
};
|
||||
|
|
|
@ -92,6 +92,8 @@ public:
|
|||
|
||||
static const char *OBSERVER_SLOTNAME;
|
||||
static const char *RANDOMFACTION_SLOTNAME;
|
||||
|
||||
static const char *playerTextureCacheLookupKey;
|
||||
};
|
||||
|
||||
enum PathType {
|
||||
|
|
|
@ -45,6 +45,8 @@ const char *GameConstants::folder_path_screenshots = "screens/";
|
|||
const char *GameConstants::OBSERVER_SLOTNAME = "*Observer*";
|
||||
const char *GameConstants::RANDOMFACTION_SLOTNAME = "*Random*";
|
||||
|
||||
const char *GameConstants::playerTextureCacheLookupKey = "playerTextureCache";
|
||||
|
||||
// =====================================================
|
||||
// class Config
|
||||
// =====================================================
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "factory_repository.h"
|
||||
#include <cstdlib>
|
||||
#include <algorithm>
|
||||
|
||||
#include "cache_manager.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace Shared::Graphics;
|
||||
|
@ -762,7 +762,7 @@ void Renderer::renderBackground(const Texture2D *texture) {
|
|||
assertGl();
|
||||
}
|
||||
|
||||
void Renderer::renderTextureQuad(int x, int y, int w, int h, const Texture2D *texture, float alpha){
|
||||
void Renderer::renderTextureQuad(int x, int y, int w, int h, const Texture2D *texture, float alpha,const Vec3f *color){
|
||||
assertGl();
|
||||
|
||||
glPushAttrib(GL_ENABLE_BIT);
|
||||
|
@ -771,7 +771,14 @@ void Renderer::renderTextureQuad(int x, int y, int w, int h, const Texture2D *te
|
|||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
glColor4f(1.f, 1.f, 1.f, alpha);
|
||||
if(color != NULL) {
|
||||
Vec4f newColor(*color);
|
||||
newColor.w = alpha;
|
||||
glColor4fv(newColor.ptr());
|
||||
}
|
||||
else {
|
||||
glColor4f(1.f, 1.f, 1.f, alpha);
|
||||
}
|
||||
renderQuad(x, y, w, h, texture);
|
||||
|
||||
glPopAttrib();
|
||||
|
@ -789,15 +796,31 @@ void Renderer::renderConsole(const Console *console,const bool showFullConsole,c
|
|||
glEnable(GL_BLEND);
|
||||
Vec4f fontColor;
|
||||
|
||||
if(game!=NULL){
|
||||
fontColor=game->getGui()->getDisplay()->getColor();
|
||||
if(game != NULL) {
|
||||
fontColor = game->getGui()->getDisplay()->getColor();
|
||||
}
|
||||
else {
|
||||
// white shadowed is default ( in the menu for example )
|
||||
fontColor=Vec4f(1.f, 1.f, 1.f, 0.0f);
|
||||
}
|
||||
if(showFullConsole){
|
||||
for(int i=0; i<console->getStoredLineCount(); ++i){
|
||||
|
||||
Vec4f defaultFontColor = fontColor;
|
||||
|
||||
if(showFullConsole) {
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
|
||||
for(int i = 0; i < console->getStoredLineCount(); ++i) {
|
||||
int playerIndex = console->getStoredLinePlayerIndex(i);
|
||||
if(playerIndex >= 0) {
|
||||
Vec3f playerColor = crcPlayerTextureCache[playerIndex]->getPixmap()->getPixel3f(0, 0);
|
||||
fontColor.x = playerColor.x;
|
||||
fontColor.y = playerColor.y;
|
||||
fontColor.z = playerColor.z;
|
||||
}
|
||||
else {
|
||||
fontColor = defaultFontColor;
|
||||
}
|
||||
|
||||
renderTextShadow(
|
||||
console->getStoredLine(i),
|
||||
CoreData::getInstance().getConsoleFont(),
|
||||
|
@ -806,7 +829,20 @@ void Renderer::renderConsole(const Console *console,const bool showFullConsole,c
|
|||
}
|
||||
}
|
||||
else if(showMenuConsole) {
|
||||
for(int i=0; i<console->getStoredLineCount() && i<maxConsoleLines; ++i){
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
|
||||
for(int i = 0; i < console->getStoredLineCount() && i < maxConsoleLines; ++i) {
|
||||
int playerIndex = console->getStoredLinePlayerIndex(i);
|
||||
if(playerIndex >= 0) {
|
||||
Vec3f playerColor = crcPlayerTextureCache[playerIndex]->getPixmap()->getPixel3f(0, 0);
|
||||
fontColor.x = playerColor.x;
|
||||
fontColor.y = playerColor.y;
|
||||
fontColor.z = playerColor.z;
|
||||
}
|
||||
else {
|
||||
fontColor = defaultFontColor;
|
||||
}
|
||||
|
||||
renderTextShadow(
|
||||
console->getStoredLine(i),
|
||||
CoreData::getInstance().getConsoleFont(),
|
||||
|
@ -815,7 +851,20 @@ void Renderer::renderConsole(const Console *console,const bool showFullConsole,c
|
|||
}
|
||||
}
|
||||
else {
|
||||
for(int i=0; i<console->getLineCount(); ++i) {
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
|
||||
for(int i = 0; i < console->getLineCount(); ++i) {
|
||||
int playerIndex = console->getLinePlayerIndex(i);
|
||||
if(playerIndex >= 0) {
|
||||
Vec3f playerColor = crcPlayerTextureCache[playerIndex]->getPixmap()->getPixel3f(0, 0);
|
||||
fontColor.x = playerColor.x;
|
||||
fontColor.y = playerColor.y;
|
||||
fontColor.z = playerColor.z;
|
||||
}
|
||||
else {
|
||||
fontColor = defaultFontColor;
|
||||
}
|
||||
|
||||
renderTextShadow(
|
||||
console->getLine(i),
|
||||
CoreData::getInstance().getConsoleFont(),
|
||||
|
@ -826,24 +875,23 @@ void Renderer::renderConsole(const Console *console,const bool showFullConsole,c
|
|||
glPopAttrib();
|
||||
}
|
||||
|
||||
void Renderer::renderChatManager(const ChatManager *chatManager){
|
||||
void Renderer::renderChatManager(const ChatManager *chatManager) {
|
||||
Vec4f fontColor;
|
||||
Lang &lang= Lang::getInstance();
|
||||
|
||||
if(chatManager->getEditEnabled()){
|
||||
string text;
|
||||
if(chatManager->getEditEnabled()) {
|
||||
string text="";
|
||||
|
||||
if(chatManager->getTeamMode()){
|
||||
text+= lang.get("Team");
|
||||
if(chatManager->getTeamMode()) {
|
||||
text += lang.get("Team");
|
||||
}
|
||||
else
|
||||
{
|
||||
text+= lang.get("All");
|
||||
else {
|
||||
text += lang.get("All");
|
||||
}
|
||||
text+= ": " + chatManager->getText() + "_";
|
||||
text += ": " + chatManager->getText() + "_";
|
||||
|
||||
if(game!=NULL){
|
||||
fontColor=game->getGui()->getDisplay()->getColor();
|
||||
if(game != NULL) {
|
||||
fontColor = game->getGui()->getDisplay()->getColor();
|
||||
}
|
||||
else {
|
||||
// white shadowed is default ( in the menu for example )
|
||||
|
@ -1032,6 +1080,23 @@ void Renderer::renderTextShadow(const string &text, const Font2D *font,const Vec
|
|||
// ============= COMPONENTS =============================
|
||||
|
||||
void Renderer::renderLabel(const GraphicLabel *label) {
|
||||
Vec4f *colorWithAlpha = NULL;
|
||||
renderLabel(label,colorWithAlpha);
|
||||
}
|
||||
|
||||
void Renderer::renderLabel(const GraphicLabel *label,const Vec3f *color) {
|
||||
if(color != NULL) {
|
||||
Vec4f colorWithAlpha = Vec4f(*color);
|
||||
colorWithAlpha.w = GraphicComponent::getFade();
|
||||
renderLabel(label,&colorWithAlpha);
|
||||
}
|
||||
else {
|
||||
Vec4f *colorWithAlpha = NULL;
|
||||
renderLabel(label,colorWithAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer::renderLabel(const GraphicLabel *label,const Vec4f *color) {
|
||||
if(label->getVisible() == false) {
|
||||
return;
|
||||
}
|
||||
|
@ -1051,7 +1116,12 @@ void Renderer::renderLabel(const GraphicLabel *label) {
|
|||
textPos= Vec2i(x, y+h/4);
|
||||
}
|
||||
|
||||
renderText(label->getText(), label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
if(color != NULL) {
|
||||
renderText(label->getText(), label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
}
|
||||
else {
|
||||
renderText(label->getText(), label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
}
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
|
|
|
@ -304,7 +304,7 @@ public:
|
|||
void renderMouse2d(int mouseX, int mouseY, int anim, float fade= 0.f);
|
||||
void renderMouse3d();
|
||||
void renderBackground(const Texture2D *texture);
|
||||
void renderTextureQuad(int x, int y, int w, int h, const Texture2D *texture, float alpha=1.f);
|
||||
void renderTextureQuad(int x, int y, int w, int h, const Texture2D *texture, float alpha=1.f,const Vec3f *color=NULL);
|
||||
void renderConsole(const Console *console, const bool showAll=false, const bool showMenuConsole=false);
|
||||
void renderChatManager(const ChatManager *chatManager);
|
||||
void renderResourceStatus();
|
||||
|
@ -316,6 +316,8 @@ public:
|
|||
|
||||
//components
|
||||
void renderLabel(const GraphicLabel *label);
|
||||
void renderLabel(const GraphicLabel *label,const Vec3f *color);
|
||||
void renderLabel(const GraphicLabel *label,const Vec4f *color);
|
||||
void renderButton(const GraphicButton *button);
|
||||
void renderListBox(const GraphicListBox *listBox);
|
||||
void renderMessageBox(const GraphicMessageBox *listBox);
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <algorithm>
|
||||
#include "sound_renderer.h"
|
||||
#include "font_gl.h"
|
||||
#include "cache_manager.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
#ifndef WIN32
|
||||
|
@ -934,6 +935,21 @@ int glestMain(int argc, char** argv){
|
|||
//printf("In [%s::%s Line: %d] screenShotsPath [%s]\n",__FILE__,__FUNCTION__,__LINE__,screenShotsPath.c_str());
|
||||
}
|
||||
|
||||
// Cache Player textures - START
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
for(int index = 0; index < GameConstants::maxPlayers; ++index) {
|
||||
string playerTexture = "data/core/faction_textures/faction" + intToStr(index) + ".tga";
|
||||
if(fileExists(playerTexture) == true) {
|
||||
Texture2D *texture = Renderer::getInstance().newTexture2D(rsGlobal);
|
||||
texture->load(playerTexture);
|
||||
crcPlayerTextureCache[index] = texture;
|
||||
}
|
||||
else {
|
||||
crcPlayerTextureCache[index] = NULL;
|
||||
}
|
||||
}
|
||||
// Cache Player textures - END
|
||||
|
||||
if(config.getBool("AllowGameDataSynchCheck","false") == true) {
|
||||
vector<string> techDataPaths = config.getPathListForType(ptTechs);
|
||||
preCacheThread.reset(new FileCRCPreCacheThread());
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "game.h"
|
||||
#include <algorithm>
|
||||
#include <time.h>
|
||||
|
||||
#include "cache_manager.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
|
||||
|
@ -532,15 +532,31 @@ void MenuStateConnectedGame::render() {
|
|||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
int i;
|
||||
|
||||
renderer.renderButton(&buttonDisconnect);
|
||||
//renderer.renderButton(&buttonPlayNow);
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
for(i=0; i<GameConstants::maxPlayers; ++i){
|
||||
renderer.renderLabel(&labelPlayers[i]);
|
||||
// Get a reference to the player texture cache
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
|
||||
for(int i = 0; i < GameConstants::maxPlayers; ++i) {
|
||||
if(crcPlayerTextureCache[i] != NULL) {
|
||||
// Render the player # label the player's color
|
||||
Vec3f playerColor = crcPlayerTextureCache[i]->getPixmap()->getPixel3f(0, 0);
|
||||
renderer.renderLabel(&labelPlayers[i],&playerColor);
|
||||
|
||||
// Blend the color with white so make it more readable
|
||||
Vec4f newColor(1.f, 1.f, 1.f, 0.57);
|
||||
renderer.renderLabel(&labelPlayers[i],&newColor);
|
||||
|
||||
//int quadWidth = labelPlayerNames[i].getX() - labelPlayers[i].getX() - 5;
|
||||
//renderer.renderTextureQuad(labelPlayers[i].getX(), labelPlayers[i].getY(), quadWidth, labelPlayers[i].getH(), crcPlayerTextureCache[i],1.0f,&playerColor);
|
||||
}
|
||||
else {
|
||||
renderer.renderLabel(&labelPlayers[i]);
|
||||
}
|
||||
|
||||
renderer.renderListBox(&listBoxControls[i]);
|
||||
if(listBoxControls[i].getSelectedItemIndex()!=ctClosed){
|
||||
renderer.renderListBox(&listBoxFactions[i]);
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include <algorithm>
|
||||
#include <time.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include "cache_manager.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
|
||||
|
@ -1038,13 +1038,30 @@ void MenuStateCustomGame::render() {
|
|||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
renderer.renderButton(&buttonReturn);
|
||||
renderer.renderButton(&buttonPlayNow);
|
||||
renderer.renderButton(&buttonRestoreLastSettings);
|
||||
|
||||
for(i=0; i<GameConstants::maxPlayers; ++i){
|
||||
renderer.renderLabel(&labelPlayers[i]);
|
||||
|
||||
// Get a reference to the player texture cache
|
||||
std::map<int,Texture2D *> &crcPlayerTextureCache = CacheManager::getCachedItem< std::map<int,Texture2D *> >(GameConstants::playerTextureCacheLookupKey);
|
||||
|
||||
for(int i = 0; i < GameConstants::maxPlayers; ++i) {
|
||||
if(crcPlayerTextureCache[i] != NULL) {
|
||||
// Render the player # label the player's color
|
||||
Vec3f playerColor = crcPlayerTextureCache[i]->getPixmap()->getPixel3f(0, 0);
|
||||
renderer.renderLabel(&labelPlayers[i],&playerColor);
|
||||
|
||||
// Blend the color with white so make it more readable
|
||||
Vec4f newColor(1.f, 1.f, 1.f, 0.57);
|
||||
renderer.renderLabel(&labelPlayers[i],&newColor);
|
||||
|
||||
//int quadWidth = labelPlayerNames[i].getX() - labelPlayers[i].getX() - 5;
|
||||
//renderer.renderTextureQuad(labelPlayers[i].getX(), labelPlayers[i].getY(), quadWidth, labelPlayers[i].getH(), crcPlayerTextureCache[i],1.0f,&playerColor);
|
||||
}
|
||||
else {
|
||||
renderer.renderLabel(&labelPlayers[i]);
|
||||
}
|
||||
|
||||
renderer.renderLabel(&labelPlayerNames[i]);
|
||||
|
||||
renderer.renderListBox(&listBoxControls[i]);
|
||||
|
|
|
@ -435,7 +435,7 @@ void ClientInterface::updateLobby() {
|
|||
{
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtText\n",__FILE__,__FUNCTION__);
|
||||
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex(),networkMessageText.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
}
|
||||
}
|
||||
|
@ -622,7 +622,7 @@ void ClientInterface::updateKeyframe(int frameCount)
|
|||
sleep(0);
|
||||
}
|
||||
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex(),networkMessageText.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
}
|
||||
break;
|
||||
|
@ -793,16 +793,16 @@ void ClientInterface::waitUntilReady(Checksum* checksum) {
|
|||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] END\n",__FILE__,__FUNCTION__);
|
||||
}
|
||||
|
||||
void ClientInterface::sendTextMessage(const string &text, int teamIndex, bool echoLocal){
|
||||
void ClientInterface::sendTextMessage(const string &text, int teamIndex, bool echoLocal) {
|
||||
|
||||
string humanPlayerName = getHumanPlayerName();
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] humanPlayerName = [%s] playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,humanPlayerName.c_str(),playerIndex);
|
||||
|
||||
NetworkMessageText networkMessageText(text, humanPlayerName, teamIndex);
|
||||
NetworkMessageText networkMessageText(text, humanPlayerName, teamIndex,playerIndex);
|
||||
sendMessage(&networkMessageText);
|
||||
|
||||
if(echoLocal == true) {
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex(),networkMessageText.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
}
|
||||
|
||||
|
@ -960,7 +960,7 @@ bool ClientInterface::shouldDiscardNetworkMessage(NetworkMessageType networkMess
|
|||
NetworkMessageText netMsg = NetworkMessageText();
|
||||
this->receiveMessage(&netMsg);
|
||||
|
||||
ChatMsgInfo msg(netMsg.getText().c_str(),netMsg.getSender().c_str(),netMsg.getTeamIndex());
|
||||
ChatMsgInfo msg(netMsg.getText().c_str(),netMsg.getSender().c_str(),netMsg.getTeamIndex(),netMsg.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -103,6 +103,7 @@ public:
|
|||
|
||||
const string &getVersionString() const {return versionString;}
|
||||
virtual string getHumanPlayerName(int index=-1);
|
||||
virtual int getHumanPlayerIndex() const {return playerIndex;}
|
||||
|
||||
protected:
|
||||
|
||||
|
|
|
@ -311,7 +311,7 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||
if(gotIntro == true) {
|
||||
NetworkMessageText networkMessageText;
|
||||
if(receiveMessage(&networkMessageText)) {
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex(),networkMessageText.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
gotTextMsg = true;
|
||||
|
||||
|
|
|
@ -162,6 +162,7 @@ public:
|
|||
|
||||
void validateConnection();
|
||||
virtual string getHumanPlayerName(int index=-1);
|
||||
virtual int getHumanPlayerIndex() const {return playerIndex;}
|
||||
|
||||
protected:
|
||||
|
||||
|
|
|
@ -45,21 +45,24 @@ class ChatMsgInfo {
|
|||
protected:
|
||||
|
||||
void copyAll(const ChatMsgInfo &obj) {
|
||||
this->chatText = obj.chatText.c_str();
|
||||
this->chatSender = obj.chatSender.c_str();
|
||||
this->chatTeamIndex = obj.chatTeamIndex;
|
||||
this->chatText = obj.chatText.c_str();
|
||||
this->chatSender = obj.chatSender.c_str();
|
||||
this->chatTeamIndex = obj.chatTeamIndex;
|
||||
this->chatPlayerIndex = obj.chatPlayerIndex;
|
||||
}
|
||||
public:
|
||||
|
||||
ChatMsgInfo() {
|
||||
this->chatText = "";
|
||||
this->chatSender = "";
|
||||
this->chatTeamIndex = -1;
|
||||
this->chatText = "";
|
||||
this->chatSender = "";
|
||||
this->chatTeamIndex = -1;
|
||||
this->chatPlayerIndex = -1;
|
||||
}
|
||||
ChatMsgInfo(string chatText, string chatSender,int chatTeamIndex) {
|
||||
ChatMsgInfo(string chatText, string chatSender,int chatTeamIndex, int chatPlayerIndex) {
|
||||
this->chatText = chatText;
|
||||
this->chatSender = chatSender;
|
||||
this->chatTeamIndex = chatTeamIndex;
|
||||
this->chatPlayerIndex = chatPlayerIndex;
|
||||
}
|
||||
ChatMsgInfo(const ChatMsgInfo& obj) {
|
||||
copyAll(obj);
|
||||
|
@ -72,6 +75,7 @@ public:
|
|||
string chatText;
|
||||
string chatSender;
|
||||
int chatTeamIndex;
|
||||
int chatPlayerIndex;
|
||||
|
||||
};
|
||||
|
||||
|
@ -107,6 +111,7 @@ public:
|
|||
virtual const Socket* getSocket() const= 0;
|
||||
virtual void close()= 0;
|
||||
virtual string getHumanPlayerName(int index=-1) = 0;
|
||||
virtual int getHumanPlayerIndex() const = 0;
|
||||
|
||||
static void setDisplayMessageFunction(DisplayMessageFunction pDisplayMessage) { pCB_DisplayMessage = pDisplayMessage; }
|
||||
static DisplayMessageFunction getDisplayMessageFunction() { return pCB_DisplayMessage; }
|
||||
|
|
|
@ -393,7 +393,7 @@ void NetworkMessageCommandList::send(Socket* socket) const{
|
|||
// class NetworkMessageText
|
||||
// =====================================================
|
||||
|
||||
NetworkMessageText::NetworkMessageText(const string &text, const string &sender, int teamIndex){
|
||||
NetworkMessageText::NetworkMessageText(const string &text, const string &sender, int teamIndex, int playerIndex) {
|
||||
|
||||
if(text.length() >= maxTextStringSize) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] WARNING / ERROR - text [%s] length = %d, max = %d\n",__FILE__,__FUNCTION__,__LINE__,text.c_str(),text.length(),maxTextStringSize);
|
||||
|
@ -404,10 +404,11 @@ NetworkMessageText::NetworkMessageText(const string &text, const string &sender,
|
|||
//throw runtime_error("NetworkMessageText - sender.length() >= maxSenderStringSize");
|
||||
}
|
||||
|
||||
data.messageType= nmtText;
|
||||
data.text= text;
|
||||
data.sender= sender;
|
||||
data.teamIndex= teamIndex;
|
||||
data.messageType = nmtText;
|
||||
data.text = text;
|
||||
data.sender = sender;
|
||||
data.teamIndex = teamIndex;
|
||||
data.playerIndex = playerIndex;
|
||||
}
|
||||
|
||||
bool NetworkMessageText::receive(Socket* socket){
|
||||
|
|
|
@ -282,7 +282,7 @@ public:
|
|||
// =====================================================
|
||||
|
||||
#pragma pack(push, 1)
|
||||
class NetworkMessageText: public NetworkMessage{
|
||||
class NetworkMessageText: public NetworkMessage {
|
||||
private:
|
||||
static const int maxTextStringSize= 340;
|
||||
static const int maxSenderStringSize= 60;
|
||||
|
@ -293,6 +293,7 @@ private:
|
|||
NetworkString<maxTextStringSize> text;
|
||||
NetworkString<maxSenderStringSize> sender;
|
||||
int8 teamIndex;
|
||||
int8 playerIndex;
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -300,11 +301,12 @@ private:
|
|||
|
||||
public:
|
||||
NetworkMessageText(){}
|
||||
NetworkMessageText(const string &text, const string &sender, int teamIndex);
|
||||
NetworkMessageText(const string &text, const string &sender, int teamIndex, int playerIndex);
|
||||
|
||||
string getText() const {return data.text.getString();}
|
||||
string getSender() const {return data.sender.getString();}
|
||||
int getTeamIndex() const {return data.teamIndex;}
|
||||
int getPlayerIndex() const {return data.playerIndex;}
|
||||
|
||||
virtual bool receive(Socket* socket);
|
||||
virtual void send(Socket* socket) const;
|
||||
|
|
|
@ -679,10 +679,11 @@ void ServerInterface::update() {
|
|||
string newChatText = msg.chatText.c_str();
|
||||
string newChatSender = msg.chatSender.c_str();
|
||||
int newChatTeamIndex = msg.chatTeamIndex;
|
||||
int newChatPlayerIndex = msg.chatPlayerIndex;
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 about to broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 about to broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d, newChatPlayerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex,newChatPlayerIndex);
|
||||
|
||||
NetworkMessageText networkMessageText(newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
NetworkMessageText networkMessageText(newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex,newChatPlayerIndex);
|
||||
broadcastMessage(&networkMessageText, connectionSlot->getPlayerIndex());
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] after broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
|
@ -805,16 +806,17 @@ bool ServerInterface::shouldDiscardNetworkMessage(NetworkMessageType networkMess
|
|||
NetworkMessageText netMsg = NetworkMessageText();
|
||||
connectionSlot->receiveMessage(&netMsg);
|
||||
|
||||
ChatMsgInfo msg(netMsg.getText().c_str(),netMsg.getSender().c_str(),netMsg.getTeamIndex());
|
||||
ChatMsgInfo msg(netMsg.getText().c_str(),netMsg.getSender().c_str(),netMsg.getTeamIndex(),netMsg.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
|
||||
string newChatText = msg.chatText.c_str();
|
||||
string newChatSender = msg.chatSender.c_str();
|
||||
int newChatTeamIndex = msg.chatTeamIndex;
|
||||
int newChatPlayerIndex = msg.chatPlayerIndex;
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 about to broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 about to broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d, newChatPlayerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex,newChatPlayerIndex);
|
||||
|
||||
NetworkMessageText networkMessageText(newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
NetworkMessageText networkMessageText(newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex,newChatPlayerIndex);
|
||||
broadcastMessage(&networkMessageText, connectionSlot->getPlayerIndex());
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] after broadcast nmtText chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,newChatText.c_str(),newChatSender.c_str(),newChatTeamIndex);
|
||||
|
@ -972,13 +974,13 @@ void ServerInterface::waitUntilReady(Checksum* checksum){
|
|||
void ServerInterface::sendTextMessage(const string &text, int teamIndex, bool echoLocal) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] text [%s] teamIndex = %d, echoLocal = %d\n",__FILE__,__FUNCTION__,__LINE__,text.c_str(),teamIndex,echoLocal);
|
||||
|
||||
NetworkMessageText networkMessageText(text, getHumanPlayerName().c_str(), teamIndex);
|
||||
NetworkMessageText networkMessageText(text, getHumanPlayerName().c_str(), teamIndex, gameSettings.getThisFactionIndex());
|
||||
broadcastMessage(&networkMessageText);
|
||||
|
||||
if(echoLocal == true) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
ChatMsgInfo msg(text.c_str(),networkMessageText.getSender().c_str(),teamIndex);
|
||||
ChatMsgInfo msg(text.c_str(),networkMessageText.getSender().c_str(),teamIndex,networkMessageText.getPlayerIndex());
|
||||
this->addChatInfo(msg);
|
||||
}
|
||||
|
||||
|
@ -1370,4 +1372,8 @@ string ServerInterface::getHumanPlayerName(int index) {
|
|||
return result;
|
||||
}
|
||||
|
||||
int ServerInterface::getHumanPlayerIndex() const {
|
||||
return gameSettings.getThisFactionIndex();
|
||||
}
|
||||
|
||||
}}//end namespace
|
||||
|
|
|
@ -97,6 +97,7 @@ public:
|
|||
}
|
||||
|
||||
virtual string getHumanPlayerName(int index=-1);
|
||||
virtual int getHumanPlayerIndex() const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
Loading…
Reference in New Issue