diff --git a/source/glest_game/game/game_settings.h b/source/glest_game/game/game_settings.h index 3efd3eac9..3b107466e 100644 --- a/source/glest_game/game/game_settings.h +++ b/source/glest_game/game/game_settings.h @@ -29,6 +29,7 @@ private: string scenario; string scenarioDir; string factionTypeNames[GameConstants::maxPlayers]; //faction names + string networkPlayerNames[GameConstants::maxPlayers]; ControlType factionControls[GameConstants::maxPlayers]; @@ -36,6 +37,7 @@ private: int factionCount; int teams[GameConstants::maxPlayers]; int startLocationIndex[GameConstants::maxPlayers]; + bool defaultUnits; bool defaultResources; @@ -60,6 +62,7 @@ public: const string &getScenario() const {return scenario;} const string &getScenarioDir() const {return scenarioDir;} const string &getFactionTypeName(int factionIndex) const {return factionTypeNames[factionIndex];} + const string &getNetworkPlayerName(int factionIndex) const {return networkPlayerNames[factionIndex];} ControlType getFactionControl(int factionIndex) const {return factionControls[factionIndex];} int getThisFactionIndex() const {return thisFactionIndex;} @@ -82,6 +85,7 @@ public: void setScenarioDir(const string& scenarioDir) {this->scenarioDir= scenarioDir;} void setFactionTypeName(int factionIndex, const string& factionTypeName) {this->factionTypeNames[factionIndex]= factionTypeName;} + void setNetworkPlayerName(int factionIndex,const string& playername) {this->networkPlayerNames[factionIndex]= playername;} void setFactionControl(int factionIndex, ControlType controller) {this->factionControls[factionIndex]= controller;} void setThisFactionIndex(int thisFactionIndex) {this->thisFactionIndex= thisFactionIndex;} void setFactionCount(int factionCount) {this->factionCount= factionCount;} diff --git a/source/glest_game/menu/main_menu.cpp b/source/glest_game/menu/main_menu.cpp index 2f64981e3..17b92a647 100644 --- a/source/glest_game/menu/main_menu.cpp +++ b/source/glest_game/menu/main_menu.cpp @@ -42,7 +42,7 @@ namespace Glest{ namespace Game{ // ===================================================== // ===================== PUBLIC ======================== -MenuState *oldstate=NULL; +MenuState * MainMenu::oldstate=NULL; MainMenu::MainMenu(Program *program): ProgramState(program) diff --git a/source/glest_game/menu/main_menu.h b/source/glest_game/menu/main_menu.h index dc426f7e3..a438ab942 100644 --- a/source/glest_game/menu/main_menu.h +++ b/source/glest_game/menu/main_menu.h @@ -57,7 +57,9 @@ class MenuState; // ===================================================== class MainMenu: public ProgramState{ + private: + static MenuState *oldstate; //up Program *program; diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index 72f0c547f..6c4da6cb2 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -40,8 +40,6 @@ struct FormatString { } }; -string currentFactionName=""; -string currentMap=""; // ===================================================== // class MenuStateConnectedGame // ===================================================== @@ -55,6 +53,12 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM needToSetChangedGameSettings = false; lastSetChangedGameSettings = time(NULL);; + + currentFactionName=""; + currentMap=""; + settingsReceivedFromServer=false; + + vector teamItems, controlItems, results; //state labelStatus.init(330, 700); @@ -142,7 +146,7 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM listBoxTeams[i].setItems(teamItems); listBoxTeams[i].setSelectedItemIndex(i); listBoxControls[i].setItems(controlItems); - labelNetStatus[i].setText(""); + labelNetStatus[i].setText("V"); } SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); labelMap.setText(lang.get("Map")); @@ -286,6 +290,7 @@ void MenuStateConnectedGame::mouseMove(int x, int y, const MouseState *ms){ void MenuStateConnectedGame::render(){ try { + if (!settingsReceivedFromServer) return; Renderer &renderer= Renderer::getInstance(); int i; @@ -299,7 +304,12 @@ void MenuStateConnectedGame::render(){ if(listBoxControls[i].getSelectedItemIndex()!=ctClosed){ renderer.renderListBox(&listBoxFactions[i]); renderer.renderListBox(&listBoxTeams[i]); - renderer.renderLabel(&labelNetStatus[i]); + //renderer.renderLabel(&labelNetStatus[i]); + + if((listBoxControls[i].getSelectedItemIndex()==ctNetwork) || + (listBoxControls[i].getSelectedItemIndex()==ctHuman)){ + renderer.renderLabel(&labelNetStatus[i]); + } } } renderer.renderLabel(&labelStatus); @@ -420,6 +430,7 @@ void MenuStateConnectedGame::update() clientInterface->close(); } mainMenu->setState(new MenuStateJoinGame(program, mainMenu)); + return; } //process network messages @@ -453,7 +464,6 @@ void MenuStateConnectedGame::update() currentMap=gameSettings->getMap(); } - // FogOfWar if(gameSettings->getFogOfWar()){ listBoxFogOfWar.setSelectedItemIndex(0); @@ -473,11 +483,17 @@ void MenuStateConnectedGame::update() listBoxControls[slot].setSelectedItemIndex(gameSettings->getFactionControl(i)); listBoxTeams[slot].setSelectedItemIndex(gameSettings->getTeam(i)); listBoxFactions[slot].setSelectedItem(formatString(gameSettings->getFactionTypeName(i))); - + + if(gameSettings->getFactionControl(i) == ctNetwork ){ + labelNetStatus[slot].setText(gameSettings->getNetworkPlayerName(i)); + } + if(gameSettings->getFactionControl(i) == ctNetwork && gameSettings->getThisFactionIndex() == i){ // set my current slot to ctHuman listBoxControls[slot].setSelectedItemIndex(ctHuman); } + + settingsReceivedFromServer=true; } } diff --git a/source/glest_game/menu/menu_state_connected_game.h b/source/glest_game/menu/menu_state_connected_game.h index 22678e767..f5bf4233e 100644 --- a/source/glest_game/menu/menu_state_connected_game.h +++ b/source/glest_game/menu/menu_state_connected_game.h @@ -56,6 +56,11 @@ private: Console console; ChatManager chatManager; + + string currentFactionName; + string currentMap; + bool settingsReceivedFromServer; + public: MenuStateConnectedGame(Program *program, MainMenu *mainMenu, bool openNetworkSlots= false); diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 2304c69f1..bdbb7c49a 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -554,6 +554,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__); int factionCount= 0; + ServerInterface* serverInterface= NetworkManager::getInstance().getServerInterface(); gameSettings->setDescription(formatString(mapFiles[listBoxMap.getSelectedItemIndex()])); gameSettings->setMap(mapFiles[listBoxMap.getSelectedItemIndex()]); @@ -577,6 +578,26 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) gameSettings->setTeam(factionCount, listBoxTeams[i].getSelectedItemIndex()); gameSettings->setStartLocationIndex(factionCount, i); gameSettings->setFactionTypeName(factionCount, factionFiles[listBoxFactions[i].getSelectedItemIndex()]); + if(listBoxControls[i].getSelectedItemIndex() == ctNetwork) + { + ConnectionSlot* connectionSlot= serverInterface->getSlot(i); + if((connectionSlot!=NULL) && (connectionSlot->isConnected())) + { + gameSettings->setNetworkPlayerName(factionCount, connectionSlot->getName()); + } + else + { + gameSettings->setNetworkPlayerName(factionCount, "???"); + } + } + else if (listBoxControls[i].getSelectedItemIndex() == ctHuman) + { + gameSettings->setNetworkPlayerName(factionCount, Config::getInstance().getString("NetPlayerName",Socket::getHostName().c_str())); + } + else + { + gameSettings->setNetworkPlayerName(factionCount, ""); + } factionCount++; } } diff --git a/source/glest_game/network/network_message.cpp b/source/glest_game/network/network_message.cpp index ebec5fce0..2cb1f2d17 100644 --- a/source/glest_game/network/network_message.cpp +++ b/source/glest_game/network/network_message.cpp @@ -183,6 +183,7 @@ NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8 for(int i= 0; igetFactionTypeName(i); + data.networkPlayerNames[i]= gameSettings->getNetworkPlayerName(i); data.factionControls[i]= gameSettings->getFactionControl(i); data.teams[i]= gameSettings->getTeam(i); data.startLocationIndex[i]= gameSettings->getStartLocationIndex(i); @@ -203,6 +204,7 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const{ for(int i= 0; isetFactionTypeName(i, data.factionTypeNames[i].getString()); + gameSettings->setNetworkPlayerName(i,data.networkPlayerNames[i].getString()); gameSettings->setFactionControl(i, static_cast(data.factionControls[i])); gameSettings->setTeam(i, data.teams[i]); gameSettings->setStartLocationIndex(i, data.startLocationIndex[i]); diff --git a/source/glest_game/network/network_message.h b/source/glest_game/network/network_message.h index cb6d2aeab..53b819edc 100644 --- a/source/glest_game/network/network_message.h +++ b/source/glest_game/network/network_message.h @@ -141,6 +141,7 @@ private: NetworkString tileset; NetworkString tech; NetworkString factionTypeNames[GameConstants::maxPlayers]; //faction names + NetworkString networkPlayerNames[GameConstants::maxPlayers]; //networkPlayerNames int8 factionControls[GameConstants::maxPlayers];