From a9a1962cec4898a8dcd7b01f75e91a69c305bc49 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 12 May 2019 22:24:11 +0300 Subject: [PATCH] Continuation of #738 - readability, and solves case where 2 civs have unique buildings to the same base building (say Royal Library and Paper Maker) #729 - AddCultureBuilding now adds civ-specific building (e.g. Burial Tomb), not just checks to see if it's built --- android/assets/jsons/Translations/Other.json | 3 +++ .../com/unciv/logic/city/CityConstructions.kt | 9 ++++++--- core/src/com/unciv/logic/city/CityInfo.kt | 19 +++++++------------ .../logic/civilization/CivilizationInfo.kt | 12 +++++++++++- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/android/assets/jsons/Translations/Other.json b/android/assets/jsons/Translations/Other.json index b2043b74bd..4257883623 100644 --- a/android/assets/jsons/Translations/Other.json +++ b/android/assets/jsons/Translations/Other.json @@ -86,6 +86,9 @@ Portuguese:"turnos" Japanese:"回る" } + + "Next unit":{} + "Pick a policy":{} /////// Unit diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index 8260d8d021..7545b9d7cf 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -210,9 +210,12 @@ class CityConstructions { fun addCultureBuilding() { val basicCultureBuildings = listOf("Monument", "Temple", "Opera House", "Museum") - val buildableCultureBuildings = GameBasics.Buildings.values - .filter { it.isBuildable(this) - && (basicCultureBuildings.contains(it.name) || basicCultureBuildings.contains(it.replaces))} + .map { cityInfo.civInfo.getEquivalentBuilding(it) } + + val buildableCultureBuildings = basicCultureBuildings + .map { GameBasics.Buildings[it]!! } + .filter { it.isBuildable(this)} + if (buildableCultureBuildings.isEmpty()) return val cultureBuildingToBuild = buildableCultureBuildings.minBy { it.cost }!!.name addBuilding(cultureBuildingToBuild) diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index a73a9ccdd7..73cd341e6c 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -2,11 +2,11 @@ package com.unciv.logic.city import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.math.Vector2 +import com.unciv.Constants import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileMap -import com.unciv.Constants import com.unciv.models.Counter import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.ResourceType @@ -261,17 +261,12 @@ class CityInfo { isBeingRazed=false // Transfer unique buildings - val builtBuildings = cityConstructions.getBuiltBuildings().map{ it.name } - for(building in GameBasics.Buildings.values - .filter{ it.uniqueTo == newCivInfo.civName && builtBuildings.contains(it.replaces) }) { - cityConstructions.removeBuilding(building.replaces!!) - cityConstructions.addBuilding(building.name) - } - - for(building in cityConstructions.getBuiltBuildings() - .filter{ it.uniqueTo != newCivInfo.civName && it.replaces != null}) { - cityConstructions.removeBuilding(building.name) - cityConstructions.addBuilding(building.replaces!!) + for(building in cityConstructions.getBuiltBuildings()) { + val civEquivalentBuilding = newCivInfo.getEquivalentBuilding(building.name) + if(building.name != civEquivalentBuilding) { + cityConstructions.removeBuilding(building.name) + cityConstructions.addBuilding(civEquivalentBuilding) + } } tryUpdateRoadStatus() diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 8e7e29ac7b..d75a684b6c 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -129,7 +129,6 @@ class CivilizationInfo { fun getDiplomacyManager(civInfo: CivilizationInfo) = diplomacy[civInfo.civName]!! fun getKnownCivs() = diplomacy.values.map { it.otherCiv() } - fun knows(otherCiv: CivilizationInfo) = knows(otherCiv.civName) fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName) fun getCapital()=cities.first { it.isCapital() } @@ -139,6 +138,8 @@ class CivilizationInfo { fun isCityState(): Boolean = getNation().isCityState() fun getCityStateType(): CityStateType = getNation().cityStateType!! fun isMajorCiv() = !isBarbarianCivilization() && !isCityState() + + fun getStatsForNextTurn():Stats = getStatMapForNextTurn().values.toList().reduce{a,b->a+b} fun getStatMapForNextTurn(): HashMap { @@ -319,6 +320,15 @@ class CivilizationInfo { return null } + fun getEquivalentBuilding(buildingName:String): String { + val building = GameBasics.Buildings[buildingName]!! + val baseBuildingName = if(building.replaces==null) buildingName else building.replaces!! + for(blding in GameBasics.Buildings.values) + if(blding.replaces==buildingName && blding.uniqueTo==civName) + return blding.name + return baseBuildingName + } + fun updateViewableTiles() { val newViewableTiles = HashSet() newViewableTiles.addAll(cities.flatMap { it.getTiles() }.flatMap { it.neighbors }) // tiles adjacent to city tiles