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
This commit is contained in:
Yair Morgenstern 2019-05-12 22:24:11 +03:00
parent 42a0e2e771
commit a9a1962cec
4 changed files with 27 additions and 16 deletions

View File

@ -86,6 +86,9 @@
Portuguese:"turnos"
Japanese:"回る"
}
"Next unit":{}
"Pick a policy":{}
/////// Unit

View File

@ -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)

View File

@ -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()

View File

@ -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<String, Stats> {
@ -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<TileInfo>()
newViewableTiles.addAll(cities.flatMap { it.getTiles() }.flatMap { it.neighbors }) // tiles adjacent to city tiles