diff --git a/source/glest_game/menu/main_menu.h b/source/glest_game/menu/main_menu.h index ccaf3f1a..626c8369 100644 --- a/source/glest_game/menu/main_menu.h +++ b/source/glest_game/menu/main_menu.h @@ -45,6 +45,7 @@ struct ScenarioInfo ControlType factionControls[GameConstants::maxPlayers]; int teams[GameConstants::maxPlayers]; string factionTypeNames[GameConstants::maxPlayers]; + float resourceMultipliers[GameConstants::maxPlayers]; string mapName; string tilesetName; diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index a7234f4e..75bf9f65 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -495,6 +495,8 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, b } SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); + updateAllResourceMultiplier(); + // write hint to console: Config &configKeys = Config::getInstance(std::pair(cfgMainKeys,cfgUserKeys)); @@ -852,6 +854,7 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){ needToSetChangedGameSettings = true; lastSetChangedGameSettings = time(NULL); } + updateResourceMultiplier(i); } else if(listBoxFactions[i].mouseClick(x, y)) { @@ -896,6 +899,43 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){ SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); } +void MenuStateCustomGame::updateAllResourceMultiplier() { + for(int j=0; j(listBoxControls[index].getSelectedItemIndex()); + if(ct == ctHuman || ct == ctNetwork || ct == ctClosed) { + listBoxRMultiplier[index].setSelectedItemIndex(10*(1.0f-rMultiplierOffset)); + listBoxRMultiplier[index].setEnabled(false); + } + else if(ct == ctCpuEasy || ct == ctNetworkCpuEasy) + { + listBoxRMultiplier[index].setSelectedItemIndex(3); + listBoxRMultiplier[index].setEnabled(true); + } + else if(ct == ctCpu || ct == ctNetworkCpu) { + listBoxRMultiplier[index].setSelectedItemIndex(10*(1.0f-rMultiplierOffset)); + listBoxRMultiplier[index].setEnabled(true); + } + else if(ct == ctCpuUltra || ct == ctNetworkCpuUltra) + { + listBoxRMultiplier[index].setSelectedItemIndex(10*(1.0f-rMultiplierOffset)+10); + listBoxRMultiplier[index].setEnabled(true); + } + else if(ct == ctCpuMega || ct == ctNetworkCpuMega) + { + listBoxRMultiplier[index].setSelectedItemIndex(10*(1.0f-rMultiplierOffset)+30); + listBoxRMultiplier[index].setEnabled(true); + } + listBoxRMultiplier[index].setEditable(listBoxRMultiplier[index].getEnabled()); +} + + + + void MenuStateCustomGame::SetActivePlayerNameEditor() { for(int i = 0; i < mapInfo.players; ++i) { ControlType ct= static_cast(listBoxControls[i].getSelectedItemIndex()); @@ -914,7 +954,7 @@ void MenuStateCustomGame::RestoreLastGameSettings() { loadGameSettings(&gameSettings); } - + ServerInterface* serverInterface= NetworkManager::getInstance().getServerInterface(); serverInterface->setGameSettings(&gameSettings,false); @@ -1210,7 +1250,9 @@ void MenuStateCustomGame::render() { renderer.renderListBox(&listBoxControls[i]); if(listBoxControls[i].getSelectedItemIndex()!=ctClosed){ - renderer.renderListBox(&listBoxRMultiplier[i]); + if(listBoxRMultiplier[i].getEnabled() && (listBoxAdvanced.getSelectedItemIndex() == 1)){ + renderer.renderListBox(&listBoxRMultiplier[i]); + } renderer.renderListBox(&listBoxFactions[i]); renderer.renderListBox(&listBoxTeams[i]); renderer.renderLabel(&labelNetStatus[i]); @@ -2053,6 +2095,7 @@ void MenuStateCustomGame::saveGameSettingsToFile(std::string fileName) { saveGameFile << "DefaultResources=" << gameSettings.getDefaultResources() << std::endl; saveGameFile << "DefaultVictoryConditions=" << gameSettings.getDefaultVictoryConditions() << std::endl; saveGameFile << "FogOfWar=" << gameSettings.getFogOfWar() << std::endl; + saveGameFile << "AdvancedIndex=" << listBoxAdvanced.getSelectedItemIndex() << std::endl; saveGameFile << "AllowObservers=" << gameSettings.getAllowObservers() << std::endl; @@ -2110,7 +2153,8 @@ GameSettings MenuStateCustomGame::loadGameSettingsFromFile(std::string fileName) gameSettings.setDefaultResources(properties.getBool("DefaultResources")); gameSettings.setDefaultVictoryConditions(properties.getBool("DefaultVictoryConditions")); gameSettings.setFogOfWar(properties.getBool("FogOfWar")); - + listBoxAdvanced.setSelectedItemIndex(properties.getInt("AdvancedIndex","0")); + gameSettings.setAllowObservers(properties.getBool("AllowObservers","false")); gameSettings.setEnableObserverModeAtEndGame(properties.getBool("EnableObserverModeAtEndGame")); @@ -2194,6 +2238,7 @@ GameSettings MenuStateCustomGame::loadGameSettingsFromFile(std::string fileName) //for(int i = 0; i < gameSettings.getFactionCount(); ++i) { for(int i = 0; i < GameConstants::maxPlayers; ++i) { listBoxControls[i].setSelectedItemIndex(gameSettings.getFactionControl(i)); + updateResourceMultiplier(i); listBoxRMultiplier[i].setSelectedItemIndex((gameSettings.getResourceMultiplier(i)-rMultiplierOffset)*10); listBoxTeams[i].setSelectedItemIndex(gameSettings.getTeam(i)); lastSelectedTeamIndex[i] = listBoxTeams[i].getSelectedItemIndex(); diff --git a/source/glest_game/menu/menu_state_custom_game.h b/source/glest_game/menu/menu_state_custom_game.h index 4859cafc..e8e1978c 100644 --- a/source/glest_game/menu/menu_state_custom_game.h +++ b/source/glest_game/menu/menu_state_custom_game.h @@ -176,6 +176,8 @@ private: void saveGameSettingsToFile(std::string fileName); void switchToNextMapGroup(const int direction); + void updateAllResourceMultiplier(); + void updateResourceMultiplier(const int index); string getCurrentMapFile(); GameSettings loadGameSettingsFromFile(std::string fileName); void setActiveInputLabel(GraphicLabel *newLable); diff --git a/source/glest_game/menu/menu_state_scenario.cpp b/source/glest_game/menu/menu_state_scenario.cpp index ac4a58d0..33a400c5 100644 --- a/source/glest_game/menu/menu_state_scenario.cpp +++ b/source/glest_game/menu/menu_state_scenario.cpp @@ -208,6 +208,28 @@ void MenuStateScenario::loadScenarioInfo(string file, ScenarioInfo *scenarioInfo if(playersNode->hasChildAtIndex("player",i)){ playerNode = playersNode->getChild("player", i); factionControl = strToControllerType( playerNode->getAttribute("control")->getValue() ); + + if(playerNode->getAttribute("resource_multiplier",false)!=NULL) + {// if a multiplier exists use it + scenarioInfo->resourceMultipliers[i]=playerNode->getAttribute("resource_multiplier")->getFloatValue(); + } + else + {// if no multiplier exists use defaults + scenarioInfo->resourceMultipliers[i]=1.0f; + if(factionControl==ctCpuEasy) + { + scenarioInfo->resourceMultipliers[i]=0.8f; + } + if(factionControl==ctCpuUltra) + { + scenarioInfo->resourceMultipliers[i]=2.0f; + } + else if(factionControl==ctCpuMega) + { + scenarioInfo->resourceMultipliers[i]=4.0f; + } + } + } else{ factionControl=ctClosed; @@ -284,6 +306,7 @@ void MenuStateScenario::loadGameSettings(const ScenarioInfo *scenarioInfo, GameS gameSettings->setThisFactionIndex(factionCount); } gameSettings->setFactionControl(factionCount, ct); + gameSettings->setResourceMultiplier(factionCount, scenarioInfo->resourceMultipliers[i]); gameSettings->setTeam(factionCount, scenarioInfo->teams[i]-1); gameSettings->setStartLocationIndex(factionCount, i); gameSettings->setFactionTypeName(factionCount, scenarioInfo->factionTypeNames[i]); diff --git a/source/glest_game/world/unit_updater.cpp b/source/glest_game/world/unit_updater.cpp index c8fb2106..a47daddf 100644 --- a/source/glest_game/world/unit_updater.cpp +++ b/source/glest_game/world/unit_updater.cpp @@ -740,7 +740,10 @@ void UnitUpdater::updateHarvest(Unit *unit) { // if(unit->getFaction()->getCpuMegaControl()){ // resourceAmount*= megaResourceFactor; // } - resourceAmount*=game->getGameSettings()->getResourceMultiplier(unit->getFaction()->getIndex()); + if(unit->getFaction()->getCpuControl()) + { + resourceAmount*=game->getGameSettings()->getResourceMultiplier(unit->getFaction()->getIndex()); + } unit->getFaction()->incResourceAmount(unit->getLoadType(), resourceAmount); world->getStats()->harvest(unit->getFactionIndex(), resourceAmount); scriptManager->onResourceHarvested();