From 45a791d186691e146fa5e8ec257e21a029fb33c6 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 4 Dec 2017 19:50:08 +0200 Subject: [PATCH] Added percent bonuses Fixed crash when we ran out of tiles to assign people to in cities --- core/src/com/unciv/civinfo/CityBuildings.java | 24 +++++++++++++------ core/src/com/unciv/civinfo/CityInfo.java | 13 +++++++++- core/src/com/unciv/game/CityScreen.java | 4 ++-- core/src/com/unciv/game/WorldTileGroup.java | 2 +- .../src/com/unciv/models/stats/FullStats.java | 1 + 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/core/src/com/unciv/civinfo/CityBuildings.java b/core/src/com/unciv/civinfo/CityBuildings.java index 8b0e49e54f..78a2603e29 100644 --- a/core/src/com/unciv/civinfo/CityBuildings.java +++ b/core/src/com/unciv/civinfo/CityBuildings.java @@ -133,13 +133,23 @@ public class CityBuildings public FullStats getStats() { FullStats stats = new FullStats(); - for (String building : builtBuildings) - { - Building gameBuilding = getGameBuilding(building); - stats.add(gameBuilding); - //if (gameBuilding.GetFlatBonusStats != null) stats.add(gameBuilding.GetFlatBonusStats(cityInfo)); - stats.gold -= gameBuilding.maintainance; - } + for( Building building : getBuiltBuildings()) stats.add(building); + return stats; + } + + public int getMaintainanceCosts(){ + int maintainanceTotal = 0; + for( Building building : getBuiltBuildings()) maintainanceTotal+=building.maintainance; + return maintainanceTotal; + } + + public FullStats getStatPercentBonuses(){ + + FullStats stats = new FullStats(); + for(Building building : getBuiltBuildings()) + if(building.percentStatBonus != null) + stats.add(building.percentStatBonus); + return stats; } diff --git a/core/src/com/unciv/civinfo/CityInfo.java b/core/src/com/unciv/civinfo/CityInfo.java index 8b461fb699..1a0eef5d7e 100644 --- a/core/src/com/unciv/civinfo/CityInfo.java +++ b/core/src/com/unciv/civinfo/CityInfo.java @@ -117,6 +117,15 @@ public class CityInfo { stats.add(cityBuildings.getStats()); + FullStats statPercentBonuses = cityBuildings.getStatPercentBonuses(); + stats.food*=1+statPercentBonuses.food/100; + stats.gold*=1+statPercentBonuses.gold/100; + stats.production*=1+statPercentBonuses.production/100; + stats.science*=1+statPercentBonuses.science/100; + stats.culture*=1+statPercentBonuses.culture/100; + + stats.gold-=cityBuildings.getMaintainanceCosts(); // this is AFTER the bonus calculation! + return stats; } @@ -192,7 +201,9 @@ public class CityInfo { toWork = tileInfo; } } - toWork.workingCity = name; + + if(toWork!=null) // This is when we've run out of tiles! + toWork.workingCity = name; } private double rankTile(TileInfo tile){ diff --git a/core/src/com/unciv/game/CityScreen.java b/core/src/com/unciv/game/CityScreen.java index 9f793de5ab..c4a8be2bab 100644 --- a/core/src/com/unciv/game/CityScreen.java +++ b/core/src/com/unciv/game/CityScreen.java @@ -200,12 +200,12 @@ public class CityScreen extends CameraStageBaseScreen { HashMap CityStatsValues = new LinkedHashMap(); CityStatsValues.put("production",Math.round(stats.production) +""); CityStatsValues.put("food",Math.round(stats.food) - +" ("+cityInfo.cityPopulation.FoodStored+"/"+cityInfo.cityPopulation.FoodToNextPopulation()+")"); + +" ("+cityInfo.foodStored+"/"+cityInfo.foodToNextPopulation()+")"); CityStatsValues.put("gold",Math.round(stats.gold) +""); CityStatsValues.put("science",Math.round(stats.science) +""); CityStatsValues.put("culture",Math.round(stats.culture) +" ("+cityInfo.cultureStored+"/"+cityInfo.getCultureToNextTile()+")"); - CityStatsValues.put("Population",cityInfo.getFreePopulation()+"/"+cityInfo.cityPopulation.Population); + CityStatsValues.put("Population",cityInfo.getFreePopulation()+"/"+cityInfo.population); for(String key : CityStatsValues.keySet()){ CityStatsTable.add(ImageGetter.getStatIcon(key)).align(Align.right); diff --git a/core/src/com/unciv/game/WorldTileGroup.java b/core/src/com/unciv/game/WorldTileGroup.java index dfc2328c41..e6e4ff1da7 100644 --- a/core/src/com/unciv/game/WorldTileGroup.java +++ b/core/src/com/unciv/game/WorldTileGroup.java @@ -60,7 +60,7 @@ public class WorldTileGroup extends TileGroup { setZIndex(getParent().getChildren().size); // so this tile is rendered over neighboing tiles } - String cityButtonText = city.name +" ("+city.cityPopulation.Population+")" + String cityButtonText = city.name +" ("+city.population+")" + "\r\n" + city.cityBuildings.currentBuilding + " in " + city.cityBuildings.turnsToBuilding(city.cityBuildings.currentBuilding); TextButton button = cityButton.getActor(); diff --git a/core/src/com/unciv/models/stats/FullStats.java b/core/src/com/unciv/models/stats/FullStats.java index a5d6e37ebd..89532c4a43 100644 --- a/core/src/com/unciv/models/stats/FullStats.java +++ b/core/src/com/unciv/models/stats/FullStats.java @@ -40,4 +40,5 @@ public class FullStats extends CivStats // also used for hex stats, since it's b return valuableParts.toString(); } + }