From 397fe3dc4185ca85bb7e5042336881ac5ceedad7 Mon Sep 17 00:00:00 2001 From: Titus Tscharntke Date: Tue, 23 Mar 2010 01:38:19 +0000 Subject: [PATCH] Network Playernames ( and some more changes in the options menu ) --- mk/linux/glest.ini | 1 + source/glest_game/game/chat_manager.cpp | 11 +- source/glest_game/menu/menu_state_options.cpp | 165 ++++++++++++------ source/glest_game/menu/menu_state_options.h | 70 ++++++++ .../glest_game/network/client_interface.cpp | 2 +- .../glest_game/network/server_interface.cpp | 4 +- 6 files changed, 197 insertions(+), 56 deletions(-) create mode 100644 source/glest_game/menu/menu_state_options.h diff --git a/mk/linux/glest.ini b/mk/linux/glest.ini index 1e9aec5d..8b653d8d 100644 --- a/mk/linux/glest.ini +++ b/mk/linux/glest.ini @@ -30,6 +30,7 @@ FontDisplay=-*-*-*-*-*-*-12-*-*-*-*-*-*-* FontMenu=-*-*-*-*-*-*-12-*-*-*-*-*-*-* Lang=english MaxLights=1 +NetPlayerName=unknown NetworkConsistencyChecks=true PhotoMode=false RefreshFrequency=75 diff --git a/source/glest_game/game/chat_manager.cpp b/source/glest_game/game/chat_manager.cpp index f21ab814..7a3494db 100644 --- a/source/glest_game/game/chat_manager.cpp +++ b/source/glest_game/game/chat_manager.cpp @@ -1,7 +1,7 @@ // ============================================================== // This file is part of Glest (www.glest.org) // -// Copyright (C) 2001-2008 Martiño Figueroa +// 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 @@ -13,6 +13,7 @@ #include "window.h" #include "console.h" +#include "config.h" #include "network_manager.h" #include "lang.h" #include "util.h" @@ -63,8 +64,9 @@ void ChatManager::keyDown(char key){ editEnabled= false; if(!text.empty()){ - console->addLine(gameNetworkInterface->getHostName() + ": " + text); - gameNetworkInterface->sendTextMessage(text, teamMode? thisTeamIndex: -1); + console->addLine(Config::getInstance().getString("NetPlayerName") + ": " + text); + gameNetworkInterface->sendTextMessage(Config::getInstance().getString("NetPlayerName")+": "+ + text, teamMode? thisTeamIndex: -1); } } else{ @@ -93,6 +95,7 @@ void ChatManager::updateNetwork() GameNetworkInterface *gameNetworkInterface= NetworkManager::getInstance().getGameNetworkInterface(); string text; string sender; + Config &config= Config::getInstance(); if(!gameNetworkInterface->getChatText().empty()) { @@ -101,7 +104,7 @@ void ChatManager::updateNetwork() SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] got nmtText [%s] for team = %d\n",__FILE__,__FUNCTION__,gameNetworkInterface->getChatText().c_str(),teamIndex); if(teamIndex==-1 || teamIndex==thisTeamIndex){ - console->addLine(gameNetworkInterface->getChatSender()+": "+gameNetworkInterface->getChatText(), true); + console->addLine(gameNetworkInterface->getChatText(), true); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Added text to console\n",__FILE__,__FUNCTION__); } diff --git a/source/glest_game/menu/menu_state_options.cpp b/source/glest_game/menu/menu_state_options.cpp index 7101a94c..9155257c 100644 --- a/source/glest_game/menu/menu_state_options.cpp +++ b/source/glest_game/menu/menu_state_options.cpp @@ -33,10 +33,12 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): { Lang &lang= Lang::getInstance(); Config &config= Config::getInstance(); + activeInputLabel=NULL; //create - buttonReturn.init(200, 150, 125); - buttonAutoConfig.init(375, 150, 125); + buttonOk.init(200, 150, 100); + buttonAbort.init(310, 150, 100); + buttonAutoConfig.init(450, 150, 125); //labels labelVolumeFx.init(200, 530); @@ -44,6 +46,8 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): labelVolumeMusic.init(200, 470); labelLang.init(200, 400); + labelPlayerNameLabel.init(200,370); + labelPlayerName.init(350,370); labelFilter.init(200, 340); labelShadows.init(200, 310); @@ -66,9 +70,11 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): listBoxUnitParticles.init(350,220,80); //set text - buttonReturn.setText(lang.get("Return")); + buttonOk.setText(lang.get("Ok")); + buttonAbort.setText(lang.get("Abort")); buttonAutoConfig.setText(lang.get("AutoConfig")); labelLang.setText(lang.get("Language")); + labelPlayerNameLabel.setText(lang.get("Playername")); labelShadows.setText(lang.get("Shadows")); labelFilter.setText(lang.get("Filter")); labelTextures3D.setText(lang.get("Textures3D")); @@ -89,6 +95,9 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): listBoxLang.setItems(langResults); listBoxLang.setSelectedItem(config.getString("Lang")); + //playerName + labelPlayerName.setText(config.getString("NetPlayerName")); + //shadows for(int i= 0; i(i)))); @@ -127,16 +136,21 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): listBoxVolumeFx.setSelectedItem(intToStr(config.getInt("SoundVolumeFx")/5*5)); listBoxVolumeAmbient.setSelectedItem(intToStr(config.getInt("SoundVolumeAmbient")/5*5)); listBoxVolumeMusic.setSelectedItem(intToStr(config.getInt("SoundVolumeMusic")/5*5)); + } void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ Config &config= Config::getInstance(); - Lang &lang= Lang::getInstance(); CoreData &coreData= CoreData::getInstance(); SoundRenderer &soundRenderer= SoundRenderer::getInstance(); - if(buttonReturn.mouseClick(x, y)){ + if(buttonOk.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + saveConfig(); + mainMenu->setState(new MenuStateRoot(program, mainMenu)); + } + else if(buttonAbort.mouseClick(x, y)){ soundRenderer.playFx(coreData.getClickSoundA()); mainMenu->setState(new MenuStateRoot(program, mainMenu)); } @@ -145,54 +159,27 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ Renderer::getInstance().autoConfig(); saveConfig(); mainMenu->setState(new MenuStateOptions(program, mainMenu)); + } + else if(labelPlayerName.mouseClick(x, y) && ( activeInputLabel != &labelPlayerName )){ + setActiveInputLable(&labelPlayerName); } - else if(listBoxLang.mouseClick(x, y)){ - config.setString("Lang", listBoxLang.getSelectedItem()); - lang.loadStrings(config.getString("Lang")); - saveConfig(); - mainMenu->setState(new MenuStateOptions(program, mainMenu)); - + else + { + listBoxLang.mouseClick(x, y); + listBoxShadows.mouseClick(x, y); + listBoxFilter.mouseClick(x, y); + listBoxTextures3D.mouseClick(x, y); + listBoxUnitParticles.mouseClick(x, y); + listBoxLights.mouseClick(x, y); + listBoxVolumeFx.mouseClick(x, y); + listBoxVolumeAmbient.mouseClick(x, y); + listBoxVolumeMusic.mouseClick(x, y); } - else if(listBoxShadows.mouseClick(x, y)){ - int index= listBoxShadows.getSelectedItemIndex(); - config.setString("Shadows", Renderer::shadowsToStr(static_cast(index))); - saveConfig(); - } - else if(listBoxFilter.mouseClick(x, y)){ - config.setString("Filter", listBoxFilter.getSelectedItem()); - saveConfig(); - } - else if(listBoxTextures3D.mouseClick(x, y)){ - config.setInt("Textures3D", listBoxTextures3D.getSelectedItemIndex()); - saveConfig(); - } - else if(listBoxUnitParticles.mouseClick(x, y)){ - config.setBool("UnitParticles", listBoxUnitParticles.getSelectedItemIndex()); - saveConfig(); - } - else if(listBoxLights.mouseClick(x, y)){ - config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1); - saveConfig(); - } - else if(listBoxVolumeFx.mouseClick(x, y)){ - config.setString("SoundVolumeFx", listBoxVolumeFx.getSelectedItem()); - saveConfig(); - } - else if(listBoxVolumeAmbient.mouseClick(x, y)){ - config.setString("SoundVolumeAmbient", listBoxVolumeAmbient.getSelectedItem()); - saveConfig(); - } - else if(listBoxVolumeMusic.mouseClick(x, y)){ - CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f); - config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem()); - saveConfig(); - } - - } void MenuStateOptions::mouseMove(int x, int y, const MouseState *ms){ - buttonReturn.mouseMove(x, y); + buttonOk.mouseMove(x, y); + buttonAbort.mouseMove(x, y); buttonAutoConfig.mouseMove(x, y); listBoxLang.mouseMove(x, y); listBoxVolumeFx.mouseMove(x, y); @@ -206,10 +193,41 @@ void MenuStateOptions::mouseMove(int x, int y, const MouseState *ms){ listBoxLights.mouseMove(x, y); } +void MenuStateOptions::keyDown(char key){ + if(activeInputLabel!=NULL) + { + if(key==vkBack){ + string text= activeInputLabel->getText(); + if(text.size()>1){ + text.erase(text.end()-2); + } + activeInputLabel->setText(text); + } + } +} + +void MenuStateOptions::keyPress(char c){ + if(activeInputLabel!=NULL) + { + int maxTextSize= 16; + if(&labelPlayerName==activeInputLabel){ + if((c>='0' && c<='9')||(c>='a' && c<='z')||(c>='A' && c<='Z')|| + (c=='-')||(c=='(')||(c==')')){ + if(activeInputLabel->getText().size()getText(); + text.insert(text.end()-1, c); + activeInputLabel->setText(text); + } + } + } + } +} + void MenuStateOptions::render(){ Renderer &renderer= Renderer::getInstance(); - renderer.renderButton(&buttonReturn); + renderer.renderButton(&buttonOk); + renderer.renderButton(&buttonAbort); renderer.renderButton(&buttonAutoConfig); renderer.renderListBox(&listBoxLang); renderer.renderListBox(&listBoxShadows); @@ -221,6 +239,8 @@ void MenuStateOptions::render(){ renderer.renderListBox(&listBoxVolumeAmbient); renderer.renderListBox(&listBoxVolumeMusic); renderer.renderLabel(&labelLang); + renderer.renderLabel(&labelPlayerNameLabel); + renderer.renderLabel(&labelPlayerName); renderer.renderLabel(&labelShadows); renderer.renderLabel(&labelTextures3D); renderer.renderLabel(&labelUnitParticles); @@ -233,10 +253,57 @@ void MenuStateOptions::render(){ void MenuStateOptions::saveConfig(){ Config &config= Config::getInstance(); + Lang &lang= Lang::getInstance(); + setActiveInputLable(NULL); + + if(labelPlayerName.getText().length()>0) + { + config.setString("NetPlayerName", labelPlayerName.getText()); + } + //Copy values + config.setString("Lang", listBoxLang.getSelectedItem()); + lang.loadStrings(config.getString("Lang")); + + int index= listBoxShadows.getSelectedItemIndex(); + config.setString("Shadows", Renderer::shadowsToStr(static_cast(index))); + + config.setString("Filter", listBoxFilter.getSelectedItem()); + config.setInt("Textures3D", listBoxTextures3D.getSelectedItemIndex()); + config.setBool("UnitParticles", listBoxUnitParticles.getSelectedItemIndex()); + config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1); + config.setString("SoundVolumeFx", listBoxVolumeFx.getSelectedItem()); + config.setString("SoundVolumeAmbient", listBoxVolumeAmbient.getSelectedItem()); + CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f); + config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem()); config.save(); Renderer::getInstance().loadConfig(); SoundRenderer::getInstance().loadConfig(); } +void MenuStateOptions::setActiveInputLable(GraphicLabel *newLable) +{ + if(newLable!=NULL){ + string text= newLable->getText(); + size_t found; + found=text.find_last_of("_"); + if (found==string::npos) + { + text=text+"_"; + } + newLable->setText(text); + } + if(activeInputLabel!=NULL && !activeInputLabel->getText().empty()){ + string text= activeInputLabel->getText(); + size_t found; + found=text.find_last_of("_"); + if (found!=string::npos) + { + text=text.substr(0,found); + } + activeInputLabel->setText(text); + } + activeInputLabel=newLable; +} + }}//end namespace diff --git a/source/glest_game/menu/menu_state_options.h b/source/glest_game/menu/menu_state_options.h new file mode 100644 index 00000000..fe0bc7ab --- /dev/null +++ b/source/glest_game/menu/menu_state_options.h @@ -0,0 +1,70 @@ +// ============================================================== +// This file is part of Glest (www.glest.org) +// +// Copyright (C) 2001-2005 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_MENUSTATEOPTIONS_H_ +#define _GLEST_GAME_MENUSTATEOPTIONS_H_ + +#include "main_menu.h" + +namespace Glest{ namespace Game{ + +// =============================== +// class MenuStateOptions +// =============================== + +class MenuStateOptions: public MenuState{ +private: + GraphicButton buttonOk; + GraphicButton buttonAbort; + GraphicButton buttonAutoConfig; + + GraphicLabel labelLang; + GraphicLabel labelShadows; + GraphicLabel labelFilter; + GraphicLabel labelTextures3D; + GraphicLabel labelLights; + GraphicLabel labelUnitParticles; + GraphicLabel labelVolumeFx; + GraphicLabel labelVolumeAmbient; + GraphicLabel labelVolumeMusic; + GraphicListBox listBoxLang; + GraphicListBox listBoxShadows; + GraphicListBox listBoxFilter; + GraphicListBox listBoxTextures3D; + GraphicListBox listBoxLights; + GraphicListBox listBoxUnitParticles; + GraphicListBox listBoxVolumeFx; + GraphicListBox listBoxVolumeAmbient; + GraphicListBox listBoxVolumeMusic; + GraphicListBox listBoxMusicSelect; + GraphicLabel labelPlayerName; + GraphicLabel labelPlayerNameLabel; + GraphicLabel *activeInputLabel; + + +public: + MenuStateOptions(Program *program, MainMenu *mainMenu); + + void mouseClick(int x, int y, MouseButton mouseButton); + void mouseMove(int x, int y, const MouseState *mouseState); + void render(); + virtual void keyDown(char key); + virtual void keyPress(char c); + + +private: + void saveConfig(); + void setActiveInputLable(GraphicLabel* newLable); +}; + +}}//end namespace + +#endif diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index 3bf62701..53d8659a 100755 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -160,7 +160,7 @@ void ClientInterface::updateLobby() //send intro message - NetworkMessageIntro sendNetworkMessageIntro(getNetworkVersionString(), getHostName(), -1); + NetworkMessageIntro sendNetworkMessageIntro(getNetworkVersionString(), Config::getInstance().getString("NetPlayerName"), -1); playerIndex= networkMessageIntro.getPlayerIndex(); serverName= networkMessageIntro.getName(); diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index 41657aa5..e8af2240 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -1,7 +1,7 @@ // ============================================================== // This file is part of Glest (www.glest.org) // -// Copyright (C) 2001-2008 Martiño Figueroa +// 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 @@ -349,7 +349,7 @@ void ServerInterface::waitUntilReady(Checksum* checksum){ } void ServerInterface::sendTextMessage(const string &text, int teamIndex){ - NetworkMessageText networkMessageText(text, getHostName(), teamIndex); + NetworkMessageText networkMessageText(text, Config::getInstance().getString("NetPlayerName"), teamIndex); broadcastMessage(&networkMessageText); }