mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-02 04:14:15 +07:00
Improvement uniqueTo can apply to civ *filters*
This commit is contained in:
parent
8ddc8a3e8b
commit
b587bfa591
@ -321,7 +321,7 @@ class WorkerAutomation(
|
||||
if (tile.improvementInProgress != null) return ruleSet.tileImprovements[tile.improvementInProgress!!]
|
||||
|
||||
val potentialTileImprovements = ruleSet.tileImprovements.filter {
|
||||
(it.value.uniqueTo == null || it.value.uniqueTo == unit.civ.civName)
|
||||
(it.value.uniqueTo == null || unit.civ.matchesFilter(it.value.uniqueTo!!))
|
||||
&& unit.canBuildImprovement(it.value, tile)
|
||||
&& tile.improvementFunctions.canBuildImprovement(it.value, civInfo)
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
||||
}
|
||||
|
||||
for (improvement in ruleset.tileImprovements.values)
|
||||
if (improvement.uniqueTo == civInfo.civName)
|
||||
if (improvement.uniqueTo != null && civInfo.matchesFilter(improvement.uniqueTo!!))
|
||||
uniqueImprovements.add(improvement)
|
||||
|
||||
for (unit in ruleset.units.values) {
|
||||
|
@ -44,7 +44,7 @@ class TileImprovementFunctions(val tile: Tile) {
|
||||
fun getImprovementBuildingProblems(improvement: TileImprovement, civInfo: Civilization): Sequence<ImprovementBuildingProblem> = sequence {
|
||||
val stateForConditionals = StateForConditionals(civInfo, tile = tile)
|
||||
|
||||
if (improvement.uniqueTo != null && improvement.uniqueTo != civInfo.civName)
|
||||
if (improvement.uniqueTo != null && !civInfo.matchesFilter(improvement.uniqueTo!!))
|
||||
yield(ImprovementBuildingProblem.WrongCiv)
|
||||
if (civInfo.cache.uniqueImprovements.any { it.replaces == improvement.name })
|
||||
yield(ImprovementBuildingProblem.Replaced)
|
||||
|
@ -42,7 +42,7 @@ object TechnologyDescriptions {
|
||||
|
||||
lineList.addAll(
|
||||
getAffectedImprovements(name, ruleset)
|
||||
.filter { it.improvement.uniqueTo == null || it.improvement.uniqueTo == viewingCiv.civName }
|
||||
.filter { it.improvement.uniqueTo == null || viewingCiv.matchesFilter(it.improvement.uniqueTo!!) }
|
||||
.map { it.getText() }
|
||||
)
|
||||
|
||||
@ -79,7 +79,7 @@ object TechnologyDescriptions {
|
||||
|
||||
val tileImprovements = ruleset.tileImprovements.values.asSequence()
|
||||
.filter { it.techRequired == name }
|
||||
.filter { it.uniqueTo == null || it.uniqueTo == viewingCiv.civName }
|
||||
.filter { it.uniqueTo == null || viewingCiv.matchesFilter(it.uniqueTo!!) }
|
||||
.toList()
|
||||
if (tileImprovements.isNotEmpty())
|
||||
lineList += "{Tile improvements enabled}: " + tileImprovements.joinToString { it.name.tr() }
|
||||
@ -93,7 +93,6 @@ object TechnologyDescriptions {
|
||||
fun getTechEnabledIcons(tech: Technology, viewingCiv: Civilization, techIconSize: Float) = sequence {
|
||||
val ruleset = viewingCiv.gameInfo.ruleset
|
||||
val techName = tech.name
|
||||
val civName = viewingCiv.civName
|
||||
|
||||
for (unit in getEnabledUnits(techName, ruleset, viewingCiv)) {
|
||||
yield(ImageGetter.getConstructionPortrait(unit.name, techIconSize))
|
||||
@ -131,14 +130,14 @@ object TechnologyDescriptions {
|
||||
|
||||
for (improvement in ruleset.tileImprovements.values.asSequence()
|
||||
.filter { it.techRequired == techName }
|
||||
.filter { it.uniqueTo == null || it.uniqueTo == civName }
|
||||
.filter { it.uniqueTo == null || viewingCiv.matchesFilter(it.uniqueTo!!) }
|
||||
) {
|
||||
yield(ImageGetter.getImprovementPortrait(improvement.name, techIconSize))
|
||||
}
|
||||
|
||||
for (improvement in ruleset.tileImprovements.values.asSequence()
|
||||
.filter { it.uniqueObjects.any { u -> u.allParams.contains(techName) } }
|
||||
.filter { it.uniqueTo == null || it.uniqueTo == civName }
|
||||
.filter { it.uniqueTo == null || viewingCiv.matchesFilter(it.uniqueTo!!) }
|
||||
) {
|
||||
yield(ImageGetter.getUniquePortrait(improvement.name, techIconSize))
|
||||
}
|
||||
@ -284,7 +283,7 @@ object TechnologyDescriptions {
|
||||
getFilteredBuildings(ruleset, civInfo) { true }
|
||||
+ ruleset.tileResources.values.asSequence()
|
||||
+ ruleset.tileImprovements.values.filter {
|
||||
it.uniqueTo == null || it.uniqueTo == civInfo?.civName
|
||||
it.uniqueTo == null || civInfo?.matchesFilter(it.uniqueTo!!) == true
|
||||
}
|
||||
).filter { obj: RulesetStatsObject ->
|
||||
obj.getMatchingUniques(UniqueType.ObsoleteWith).any { it.params[0] == techName }
|
||||
|
@ -56,7 +56,10 @@ class TileImprovementConstructionTests {
|
||||
tile.setTransients()
|
||||
|
||||
if (improvement.uniqueTo != null) {
|
||||
civInfo.setNameForUnitTests(improvement.uniqueTo!!)
|
||||
civInfo = testGame.addCiv(improvement.uniqueTo!!)
|
||||
for (tech in testGame.ruleset.technologies.values)
|
||||
civInfo.tech.addTechnology(tech.name)
|
||||
city.civ = civInfo
|
||||
}
|
||||
|
||||
val canBeBuilt = tile.improvementFunctions.canBuildImprovement(improvement, civInfo)
|
||||
@ -92,7 +95,12 @@ class TileImprovementConstructionTests {
|
||||
|
||||
for (improvement in testGame.ruleset.tileImprovements.values) {
|
||||
if (!improvement.uniques.contains("Can only be built on [Coastal] tiles")) continue
|
||||
civInfo.setNameForUnitTests(improvement.uniqueTo ?: "OtherCiv")
|
||||
if (improvement.uniqueTo != null) {
|
||||
civInfo = testGame.addCiv(improvement.uniqueTo!!)
|
||||
for (tech in testGame.ruleset.technologies.values)
|
||||
civInfo.tech.addTechnology(tech.name)
|
||||
city.civ = civInfo
|
||||
}
|
||||
val canBeBuilt = coastalTile.improvementFunctions.canBuildImprovement(improvement, civInfo)
|
||||
Assert.assertTrue(improvement.name, canBeBuilt)
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ class TestGame {
|
||||
// Add 1 tech to the player so the era is computed correctly
|
||||
civInfo.tech.addTechnology(ruleset.technologies.values.minBy { it.era() }.name)
|
||||
if (cityStateType != null) {
|
||||
civInfo.cityStateFunctions.initCityState(ruleset, "Ancient era", emptyList())
|
||||
civInfo.cityStateFunctions.initCityState(ruleset, "Ancient era", emptySequence())
|
||||
}
|
||||
return civInfo
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user