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

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

View File

@ -210,9 +210,12 @@ class CityConstructions {
fun addCultureBuilding() { fun addCultureBuilding() {
val basicCultureBuildings = listOf("Monument", "Temple", "Opera House", "Museum") val basicCultureBuildings = listOf("Monument", "Temple", "Opera House", "Museum")
val buildableCultureBuildings = GameBasics.Buildings.values .map { cityInfo.civInfo.getEquivalentBuilding(it) }
.filter { it.isBuildable(this)
&& (basicCultureBuildings.contains(it.name) || basicCultureBuildings.contains(it.replaces))} val buildableCultureBuildings = basicCultureBuildings
.map { GameBasics.Buildings[it]!! }
.filter { it.isBuildable(this)}
if (buildableCultureBuildings.isEmpty()) return if (buildableCultureBuildings.isEmpty()) return
val cultureBuildingToBuild = buildableCultureBuildings.minBy { it.cost }!!.name val cultureBuildingToBuild = buildableCultureBuildings.minBy { it.cost }!!.name
addBuilding(cultureBuildingToBuild) addBuilding(cultureBuildingToBuild)

View File

@ -2,11 +2,11 @@ package com.unciv.logic.city
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.math.Vector2 import com.badlogic.gdx.math.Vector2
import com.unciv.Constants
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.RoadStatus
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.TileMap import com.unciv.logic.map.TileMap
import com.unciv.Constants
import com.unciv.models.Counter import com.unciv.models.Counter
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.ResourceType
@ -261,17 +261,12 @@ class CityInfo {
isBeingRazed=false isBeingRazed=false
// Transfer unique buildings // Transfer unique buildings
val builtBuildings = cityConstructions.getBuiltBuildings().map{ it.name } for(building in cityConstructions.getBuiltBuildings()) {
for(building in GameBasics.Buildings.values val civEquivalentBuilding = newCivInfo.getEquivalentBuilding(building.name)
.filter{ it.uniqueTo == newCivInfo.civName && builtBuildings.contains(it.replaces) }) { if(building.name != civEquivalentBuilding) {
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.removeBuilding(building.name)
cityConstructions.addBuilding(building.replaces!!) cityConstructions.addBuilding(civEquivalentBuilding)
}
} }
tryUpdateRoadStatus() tryUpdateRoadStatus()

View File

@ -129,7 +129,6 @@ class CivilizationInfo {
fun getDiplomacyManager(civInfo: CivilizationInfo) = diplomacy[civInfo.civName]!! fun getDiplomacyManager(civInfo: CivilizationInfo) = diplomacy[civInfo.civName]!!
fun getKnownCivs() = diplomacy.values.map { it.otherCiv() } fun getKnownCivs() = diplomacy.values.map { it.otherCiv() }
fun knows(otherCiv: CivilizationInfo) = knows(otherCiv.civName)
fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName) fun knows(otherCivName: String) = diplomacy.containsKey(otherCivName)
fun getCapital()=cities.first { it.isCapital() } fun getCapital()=cities.first { it.isCapital() }
@ -139,6 +138,8 @@ class CivilizationInfo {
fun isCityState(): Boolean = getNation().isCityState() fun isCityState(): Boolean = getNation().isCityState()
fun getCityStateType(): CityStateType = getNation().cityStateType!! fun getCityStateType(): CityStateType = getNation().cityStateType!!
fun isMajorCiv() = !isBarbarianCivilization() && !isCityState() fun isMajorCiv() = !isBarbarianCivilization() && !isCityState()
fun getStatsForNextTurn():Stats = getStatMapForNextTurn().values.toList().reduce{a,b->a+b} fun getStatsForNextTurn():Stats = getStatMapForNextTurn().values.toList().reduce{a,b->a+b}
fun getStatMapForNextTurn(): HashMap<String, Stats> { fun getStatMapForNextTurn(): HashMap<String, Stats> {
@ -319,6 +320,15 @@ class CivilizationInfo {
return null 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() { fun updateViewableTiles() {
val newViewableTiles = HashSet<TileInfo>() val newViewableTiles = HashSet<TileInfo>()
newViewableTiles.addAll(cities.flatMap { it.getTiles() }.flatMap { it.neighbors }) // tiles adjacent to city tiles newViewableTiles.addAll(cities.flatMap { it.getTiles() }.flatMap { it.neighbors }) // tiles adjacent to city tiles