From 158195a825584ba415bdbc1bee2c9833cf95d754 Mon Sep 17 00:00:00 2001 From: Titus Tscharntke Date: Sun, 16 Sep 2012 23:42:56 +0000 Subject: [PATCH] multiplier for CPUs replacing disconnected network player ( not finished yet! , only menu for now ) --- source/glest_game/game/game_settings.h | 7 ++- source/glest_game/global/core_data.cpp | 2 + .../menu/menu_state_connected_game.cpp | 34 +++++++++++++-- .../menu/menu_state_connected_game.h | 3 ++ .../menu/menu_state_custom_game.cpp | 43 ++++++++++++++++--- .../glest_game/menu/menu_state_custom_game.h | 2 + source/glest_game/network/network_message.cpp | 5 ++- source/glest_game/network/network_message.h | 1 + 8 files changed, 86 insertions(+), 11 deletions(-) diff --git a/source/glest_game/game/game_settings.h b/source/glest_game/game/game_settings.h index 44b83303..8d04fdae 100644 --- a/source/glest_game/game/game_settings.h +++ b/source/glest_game/game/game_settings.h @@ -59,13 +59,14 @@ private: ControlType factionControls[GameConstants::maxPlayers]; int resourceMultiplierIndex[GameConstants::maxPlayers]; + int thisFactionIndex; int factionCount; int teams[GameConstants::maxPlayers]; int startLocationIndex[GameConstants::maxPlayers]; int mapFilterIndex; - + int fallbackCpuMultiplier; bool defaultUnits; bool defaultResources; bool defaultVictoryConditions; @@ -131,6 +132,7 @@ public: aiAcceptSwitchTeamPercentChance = 30; masterserver_admin = -1; masterserver_admin_factionIndex = -1; + fallbackCpuMultiplier = 1.0f; } // default copy constructor will do fine, and will maintain itself ;) @@ -264,6 +266,9 @@ public: int getAiAcceptSwitchTeamPercentChance() const { return aiAcceptSwitchTeamPercentChance;} void setAiAcceptSwitchTeamPercentChance(int value) { aiAcceptSwitchTeamPercentChance = value; } + int getFallbackCpuMultiplier() const { return fallbackCpuMultiplier;} + void setFallbackCpuMultiplier(int value) { fallbackCpuMultiplier = value; } + int getMasterserver_admin() const { return masterserver_admin;} void setMasterserver_admin(int value) { masterserver_admin = value; } diff --git a/source/glest_game/global/core_data.cpp b/source/glest_game/global/core_data.cpp index a57d3e07..f02039f5 100644 --- a/source/glest_game/global/core_data.cpp +++ b/source/glest_game/global/core_data.cpp @@ -836,6 +836,7 @@ void CoreData::saveGameSettingsToFile(std::string fileName, GameSettings *gameSe saveGameFile << "FlagTypes1=" << gameSettings->getFlagTypes1() << std::endl; saveGameFile << "EnableObserverModeAtEndGame=" << gameSettings->getEnableObserverModeAtEndGame() << std::endl; saveGameFile << "AiAcceptSwitchTeamPercentChance=" << gameSettings->getAiAcceptSwitchTeamPercentChance() << std::endl; + saveGameFile << "FallbackCpuMultiplier=" << gameSettings->getFallbackCpuMultiplier() << std::endl; saveGameFile << "PathFinderType=" << gameSettings->getPathFinderType() << std::endl; saveGameFile << "EnableServerControlledAI=" << gameSettings->getEnableServerControlledAI() << std::endl; saveGameFile << "NetworkFramePeriod=" << gameSettings->getNetworkFramePeriod() << std::endl; @@ -904,6 +905,7 @@ bool CoreData::loadGameSettingsFromFile(std::string fileName, GameSettings *game gameSettings->setFlagTypes1(properties.getInt("FlagTypes1","0")); gameSettings->setEnableObserverModeAtEndGame(properties.getBool("EnableObserverModeAtEndGame")); gameSettings->setAiAcceptSwitchTeamPercentChance(properties.getInt("AiAcceptSwitchTeamPercentChance","30")); + gameSettings->setFallbackCpuMultiplier(properties.getInt("FallbackCpuMultiplier","1")); gameSettings->setPathFinderType(static_cast(properties.getInt("PathFinderType",intToStr(pfBasic).c_str()))); gameSettings->setEnableServerControlledAI(properties.getBool("EnableServerControlledAI","true")); diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index bf913777..deb1a856 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -188,6 +188,20 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM listBoxAllowObservers.setSelectedItemIndex(0); listBoxAllowObservers.setEditable(false); + for(int i=0; i<45; ++i){ + rMultiplier.push_back(floatToStr(0.5f+0.1f*i,1)); + } + + labelFallbackCpuMultiplier.registerGraphicComponent(containerName,"labelFallbackCpuMultiplier"); + labelFallbackCpuMultiplier.init(xoffset+460, aHeadPos, 80); + labelFallbackCpuMultiplier.setText(lang.get("FallbackCpuMultiplier")); + + listBoxFallbackCpuMultiplier.registerGraphicComponent(containerName,"listBoxFallbackCpuMultiplier"); + listBoxFallbackCpuMultiplier.init(xoffset+460, aPos, 80); + listBoxFallbackCpuMultiplier.setItems(rMultiplier); + listBoxFallbackCpuMultiplier.setSelectedItemIndex(0); + + // Allow Switch Team Mode labelEnableSwitchTeamMode.registerGraphicComponent(containerName,"labelEnableSwitchTeamMode"); labelEnableSwitchTeamMode.init(xoffset+310, aHeadPos+45, 80); @@ -349,9 +363,6 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM controlItems.push_back(lang.get("NetworkUnassigned")); controlItems.push_back(lang.get("Human")); - for(int i=0; i<45; ++i){ - rMultiplier.push_back(floatToStr(0.5f+0.1f*i,1)); - } if(config.getBool("EnableNetworkCpu","false") == true) { controlItems.push_back(lang.get("NetworkCpuEasy")); @@ -555,6 +566,7 @@ void MenuStateConnectedGame::reloadUI() { listBoxFogOfWar.setItems(fowItems); labelAllowObservers.setText(lang.get("AllowObservers")); + labelFallbackCpuMultiplier.setText(lang.get("FallbackCpuMultiplier")); vector observerItems; observerItems.push_back(lang.get("No")); @@ -576,6 +588,12 @@ void MenuStateConnectedGame::reloadUI() { } listBoxAISwitchTeamAcceptPercent.setItems(aiswitchteamModeItems); + vector rMultiplier; + for(int i=0; i<45; ++i){ + rMultiplier.push_back(floatToStr(0.5f+0.1f*i,1)); + } + listBoxFallbackCpuMultiplier.setItems(rMultiplier); + labelPathFinderType.setText(lang.get("PathFinderType")); vector pathfinderItems; @@ -1161,6 +1179,11 @@ void MenuStateConnectedGame::mouseClickAdmin(int x, int y, MouseButton mouseButt needToBroadcastServerSettings=true; broadcastServerSettingsDelayTimer=time(NULL); } + else if(listBoxFallbackCpuMultiplier.getEnabled() && listBoxFallbackCpuMultiplier.mouseClick(x, y)) { + if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); + needToBroadcastServerSettings=true; + broadcastServerSettingsDelayTimer=time(NULL); + } else if(listBoxTileset.mouseClick(x, y)) { if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); needToBroadcastServerSettings=true; @@ -1470,6 +1493,7 @@ void MenuStateConnectedGame::loadGameSettings(GameSettings *gameSettings) { gameSettings->setFlagTypes1(valueFlags1); } gameSettings->setAiAcceptSwitchTeamPercentChance(strToInt(listBoxAISwitchTeamAcceptPercent.getSelectedItem())); + gameSettings->setFallbackCpuMultiplier(listBoxFallbackCpuMultiplier.getSelectedItemIndex()); // First save Used slots //for(int i=0; igetAiAcceptSwitchTeamPercentChance())); + listBoxFallbackCpuMultiplier.setSelectedItemIndex(gameSettings->getFallbackCpuMultiplier()); // if(gameSettings->getEnableObserverModeAtEndGame()) { // listBoxEnableObserverMode.setSelectedItemIndex(0); diff --git a/source/glest_game/menu/menu_state_connected_game.h b/source/glest_game/menu/menu_state_connected_game.h index e451fc84..16d48e6f 100644 --- a/source/glest_game/menu/menu_state_connected_game.h +++ b/source/glest_game/menu/menu_state_connected_game.h @@ -179,6 +179,9 @@ private: GraphicListBox listBoxEnableSwitchTeamMode; GraphicLabel labelAISwitchTeamAcceptPercent; GraphicListBox listBoxAISwitchTeamAcceptPercent; + GraphicLabel labelFallbackCpuMultiplier; + GraphicListBox listBoxFallbackCpuMultiplier; + GraphicButton buttonPlayNow; diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 65384e54..975bbb34 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -289,6 +289,19 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, listBoxAllowObservers.pushBackItem(lang.get("Yes")); listBoxAllowObservers.setSelectedItemIndex(0); + for(int i=0; i<45; ++i){ + rMultiplier.push_back(floatToStr(0.5f+0.1f*i,1)); + } + + labelFallbackCpuMultiplier.registerGraphicComponent(containerName,"labelFallbackCpuMultiplier"); + labelFallbackCpuMultiplier.init(xoffset+460, aHeadPos, 80); + labelFallbackCpuMultiplier.setText(lang.get("FallbackCpuMultiplier")); + + listBoxFallbackCpuMultiplier.registerGraphicComponent(containerName,"listBoxFallbackCpuMultiplier"); + listBoxFallbackCpuMultiplier.init(xoffset+460, aPos, 80); + listBoxFallbackCpuMultiplier.setItems(rMultiplier); + listBoxFallbackCpuMultiplier.setSelectedItemIndex(5); + // View Map At End Of Game //labelEnableObserverMode.registerGraphicComponent(containerName,"labelEnableObserverMode"); //labelEnableObserverMode.init(xoffset+460, aHeadPos, 80); @@ -551,10 +564,6 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, labelNetStatus[i].setText(""); } - - //labelEnableObserverMode.setText(lang.get("EnableObserverMode")); - - loadMapInfo(Map::getMapPath(getCurrentMapFile()), &mapInfo, true); labelMapInfo.setText(mapInfo.desc); @@ -848,7 +857,7 @@ void MenuStateCustomGame::reloadUI() { listBoxControls[i].setItems(controlItems); } - //labelEnableObserverMode.setText(lang.get("EnableObserverMode")); + labelFallbackCpuMultiplier.setText(lang.get("FallbackCpuMultiplier")); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); @@ -1119,6 +1128,19 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton) { lastSetChangedGameSettings = time(NULL); } } + else if (listBoxAdvanced.getSelectedItemIndex() == 1 && listBoxFallbackCpuMultiplier.getEditable() == true && listBoxFallbackCpuMultiplier.mouseClick(x, y)) { + MutexSafeWrapper safeMutex((publishToMasterserverThread != NULL ? publishToMasterserverThread->getMutexThreadObjectAccessor() : NULL),string(__FILE__) + "_" + intToStr(__LINE__)); + + if(listBoxPublishServer.getSelectedItemIndex() == 0) { + needToRepublishToMasterserver = true; + } + + if(hasNetworkGameSettings() == true) + { + needToSetChangedGameSettings = true; + lastSetChangedGameSettings = time(NULL); + } + } else if (listBoxAdvanced.getSelectedItemIndex() == 1 && listBoxPathFinderType.mouseClick(x, y)) { MutexSafeWrapper safeMutex((publishToMasterserverThread != NULL ? publishToMasterserverThread->getMutexThreadObjectAccessor() : NULL),string(__FILE__) + "_" + intToStr(__LINE__)); @@ -1764,6 +1786,7 @@ void MenuStateCustomGame::mouseMove(int x, int y, const MouseState *ms) { listBoxEnableSwitchTeamMode.mouseMove(x, y); listBoxAISwitchTeamAcceptPercent.mouseMove(x, y); + listBoxFallbackCpuMultiplier.mouseMove(x, y); labelNetworkPauseGameForLaggedClients.mouseMove(x, y); listBoxNetworkPauseGameForLaggedClients.mouseMove(x, y); @@ -1933,7 +1956,7 @@ void MenuStateCustomGame::render() { if(listBoxAdvanced.getSelectedItemIndex() == 1) { renderer.renderLabel(&labelFogOfWar); renderer.renderLabel(&labelAllowObservers); - //renderer.renderLabel(&labelEnableObserverMode); + renderer.renderLabel(&labelFallbackCpuMultiplier); renderer.renderLabel(&labelPathFinderType); renderer.renderLabel(&labelEnableSwitchTeamMode); @@ -1946,6 +1969,7 @@ void MenuStateCustomGame::render() { renderer.renderListBox(&listBoxEnableSwitchTeamMode); renderer.renderListBox(&listBoxAISwitchTeamAcceptPercent); + renderer.renderListBox(&listBoxFallbackCpuMultiplier); } renderer.renderLabel(&labelTileset); renderer.renderLabel(&labelMapFilter); @@ -2480,6 +2504,7 @@ void MenuStateCustomGame::update() { if(this->headlessServerMode == true) { listBoxPublishServer.setSelectedItemIndex(0); } + listBoxFallbackCpuMultiplier.setEditable(true); listBoxPublishServer.setEditable(true); //listBoxEnableServerControlledAI.setEditable(true); @@ -2509,6 +2534,8 @@ void MenuStateCustomGame::update() { else { listBoxPublishServer.setSelectedItemIndex(1); listBoxPublishServer.setEditable(false); + listBoxFallbackCpuMultiplier.setEditable(false); + listBoxFallbackCpuMultiplier.setSelectedItemIndex(5); ServerInterface* serverInterface= NetworkManager::getInstance().getServerInterface(); serverInterface->setPublishEnabled(listBoxPublishServer.getSelectedItemIndex() == 0); @@ -3082,6 +3109,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force gameSettings->setFlagTypes1(valueFlags1); } gameSettings->setAiAcceptSwitchTeamPercentChance(strToInt(listBoxAISwitchTeamAcceptPercent.getSelectedItem())); + gameSettings->setFallbackCpuMultiplier(listBoxFallbackCpuMultiplier.getSelectedItemIndex()); // First save Used slots //for(int i=0; igetFallbackCpuMultiplier(); data.aiAcceptSwitchTeamPercentChance = gameSettings->getAiAcceptSwitchTeamPercentChance(); data.masterserver_admin = gameSettings->getMasterserver_admin(); data.masterserver_admin_factionIndex = gameSettings->getMasterserver_admin_faction_index(); @@ -298,6 +299,8 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const { } gameSettings->setAiAcceptSwitchTeamPercentChance(data.aiAcceptSwitchTeamPercentChance); + gameSettings->setFallbackCpuMultiplier(data.cpuReplacementMultiplier); + gameSettings->setMasterserver_admin(data.masterserver_admin); gameSettings->setMasterserver_admin_faction_index(data.masterserver_admin_factionIndex); diff --git a/source/glest_game/network/network_message.h b/source/glest_game/network/network_message.h index 70d72435..fb7cd58f 100644 --- a/source/glest_game/network/network_message.h +++ b/source/glest_game/network/network_message.h @@ -237,6 +237,7 @@ private: uint32 flagTypes1; int8 aiAcceptSwitchTeamPercentChance; + int8 cpuReplacementMultiplier; int32 masterserver_admin; int32 masterserver_admin_factionIndex;