mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Implement Same-majority-religion-based diplomatic modifier (#11415)
* implement BelieveSameReligion/BelieveDifferentReligion DiplomaticModifiers * implemented feedbacks * remove unuseful val instanciation/assignment * add getMajorityReligion() in ReligionManager.kt * fixing code style
This commit is contained in:
parent
892b54f651
commit
c037776674
@ -102,6 +102,7 @@ enum class DiplomaticModifiers(val text: String) {
|
|||||||
GaveUsUnits("You gave us units!"),
|
GaveUsUnits("You gave us units!"),
|
||||||
GaveUsGifts("We appreciate your gifts"),
|
GaveUsGifts("We appreciate your gifts"),
|
||||||
ReturnedCapturedUnits("You returned captured units to us"),
|
ReturnedCapturedUnits("You returned captured units to us"),
|
||||||
|
BelieveSameReligion("We believe in the same religion"),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,6 +277,14 @@ class DiplomacyManager() : IsPartOfGameInfoSerialization {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun believesSameReligion(): Boolean {
|
||||||
|
// what is the majorityReligion of civInfo? If it is null, we immediately return false
|
||||||
|
val civMajorityReligion = civInfo.religionManager.getMajorityReligion() ?: return false
|
||||||
|
// if not yet returned false from previous line, return the Boolean isMajorityReligionForCiv
|
||||||
|
// true if majorityReligion of civInfo is also majorityReligion of otherCiv, false otherwise
|
||||||
|
return otherCiv().religionManager.isMajorityReligionForCiv(civMajorityReligion)
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the number of turns to degrade from Ally or from Friend */
|
/** Returns the number of turns to degrade from Ally or from Friend */
|
||||||
fun getTurnsToRelationshipChange(): Int {
|
fun getTurnsToRelationshipChange(): Int {
|
||||||
if (otherCiv().isCityState())
|
if (otherCiv().isCityState())
|
||||||
@ -587,6 +596,14 @@ class DiplomacyManager() : IsPartOfGameInfoSerialization {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun setReligionBasedModifier() {
|
||||||
|
if (civInfo.getDiplomacyManager(otherCiv()).believesSameReligion())
|
||||||
|
// they share same majority religion
|
||||||
|
setModifier(DiplomaticModifiers.BelieveSameReligion, 5f)
|
||||||
|
else
|
||||||
|
// their majority religions differ or one or both don't have a majority religion at all
|
||||||
|
removeModifier(DiplomaticModifiers.BelieveSameReligion)
|
||||||
|
}
|
||||||
|
|
||||||
fun denounce() {
|
fun denounce() {
|
||||||
setModifier(DiplomaticModifiers.Denunciation, -35f)
|
setModifier(DiplomaticModifiers.Denunciation, -35f)
|
||||||
|
@ -291,6 +291,8 @@ object DiplomacyTurnManager {
|
|||||||
|
|
||||||
setDefensivePactBasedModifier()
|
setDefensivePactBasedModifier()
|
||||||
|
|
||||||
|
setReligionBasedModifier()
|
||||||
|
|
||||||
if (!hasFlag(DiplomacyFlags.DeclarationOfFriendship))
|
if (!hasFlag(DiplomacyFlags.DeclarationOfFriendship))
|
||||||
revertToZero(DiplomaticModifiers.DeclarationOfFriendship, 1 / 2f) //decreases slowly and will revert to full if it is declared later
|
revertToZero(DiplomaticModifiers.DeclarationOfFriendship, 1 / 2f) //decreases slowly and will revert to full if it is declared later
|
||||||
|
|
||||||
|
@ -478,6 +478,26 @@ class ReligionManager : IsPartOfGameInfoSerialization {
|
|||||||
if (religion == null) return null
|
if (religion == null) return null
|
||||||
return civInfo.gameInfo.getCities().firstOrNull { it.isHolyCityOf(religion!!.name) }
|
return civInfo.gameInfo.getCities().firstOrNull { it.isHolyCityOf(religion!!.name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getMajorityReligion(): Religion? {
|
||||||
|
// let's count for each religion (among those actually presents in civ's cities)
|
||||||
|
val religionCounter = Counter<Religion>()
|
||||||
|
for (city in civInfo.cities) {
|
||||||
|
// if city's majority Religion is null, let's just continue to next loop iteration
|
||||||
|
val cityMajorityReligion = city.religion.getMajorityReligion() ?: continue
|
||||||
|
// if not yet continued to next iteration from previous line, let's add the Religion to religionCounter
|
||||||
|
religionCounter.add(cityMajorityReligion, 1)
|
||||||
|
}
|
||||||
|
// let's get the max-counted Religion if there is one, null otherwise; if null, return null
|
||||||
|
val maxReligionCounterEntry = religionCounter.maxByOrNull { it.value } ?: return null
|
||||||
|
// if not returned null from prev. line, check if the maxReligion is in most of the cities
|
||||||
|
return if (maxReligionCounterEntry.value > civInfo.cities.size / 2)
|
||||||
|
// if maxReligionCounterEntry > half-cities-count we return the Religion of maxReligionCounterEntry
|
||||||
|
maxReligionCounterEntry.key
|
||||||
|
else
|
||||||
|
// if maxReligionCounterEntry <= half-cities-count we just return null
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class ReligionState : IsPartOfGameInfoSerialization {
|
enum class ReligionState : IsPartOfGameInfoSerialization {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user