Many notification conversions

This commit is contained in:
Yair Morgenstern 2021-03-20 23:49:33 +02:00
parent 36131cb7c1
commit d4b19a7bb3
10 changed files with 31 additions and 29 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

View File

@ -65,9 +65,9 @@ object NextTurnAutomation {
civInfo.tradeRequests.remove(tradeRequest) civInfo.tradeRequests.remove(tradeRequest)
if (TradeEvaluation().isTradeAcceptable(tradeLogic.currentTrade, civInfo, otherCiv)) { if (TradeEvaluation().isTradeAcceptable(tradeLogic.currentTrade, civInfo, otherCiv)) {
tradeLogic.acceptTrade() tradeLogic.acceptTrade()
otherCiv.addNotification("[${civInfo.civName}] has accepted your trade request", Color.GOLD) otherCiv.addNotification("[${civInfo.civName}] has accepted your trade request", NotificationIcon.Trade, civInfo.civName)
} else { } else {
otherCiv.addNotification("[${civInfo.civName}] has denied your trade request", Color.GOLD) otherCiv.addNotification("[${civInfo.civName}] has denied your trade request", NotificationIcon.Trade, civInfo.civName)
} }
} }
civInfo.tradeRequests.clear() civInfo.tradeRequests.clear()
@ -88,8 +88,8 @@ object NextTurnAutomation {
if (diploManager.relationshipLevel() > RelationshipLevel.Neutral if (diploManager.relationshipLevel() > RelationshipLevel.Neutral
&& !diploManager.otherCivDiplomacy().hasFlag(DiplomacyFlags.Denunceation)) { && !diploManager.otherCivDiplomacy().hasFlag(DiplomacyFlags.Denunceation)) {
diploManager.signDeclarationOfFriendship() diploManager.signDeclarationOfFriendship()
requestingCiv.addNotification("We have signed a Declaration of Friendship with [${civInfo.civName}]!", Color.GOLD) requestingCiv.addNotification("We have signed a Declaration of Friendship with [${civInfo.civName}]!", NotificationIcon.Diplomacy, civInfo.civName)
} else requestingCiv.addNotification("[${civInfo.civName}] has denied our Declaration of Friendship!", Color.GOLD) } else requestingCiv.addNotification("[${civInfo.civName}] has denied our Declaration of Friendship!", NotificationIcon.Diplomacy, civInfo.civName)
} }
} }

View File

@ -52,7 +52,7 @@ class PopulationManager {
fun nextTurn(food: Int) { fun nextTurn(food: Int) {
foodStored += food foodStored += food
if (food < 0) if (food < 0)
cityInfo.civInfo.addNotification("[${cityInfo.name}] is starving!", cityInfo.location, NotificationIcon.Growth, "OtherIcons/DisbandUnit") cityInfo.civInfo.addNotification("[${cityInfo.name}] is starving!", cityInfo.location, NotificationIcon.Growth, NotificationIcon.Death)
if (foodStored < 0) { // starvation! if (foodStored < 0) { // starvation!
if (population > 1) population-- if (population > 1) population--
foodStored = 0 foodStored = 0

View File

@ -40,8 +40,8 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) {
val metCiv = entry.key val metCiv = entry.key
if (metCiv == civInfo || metCiv.isBarbarian() || civInfo.diplomacy.containsKey(metCiv.civName)) continue if (metCiv == civInfo || metCiv.isBarbarian() || civInfo.diplomacy.containsKey(metCiv.civName)) continue
civInfo.meetCivilization(metCiv) civInfo.meetCivilization(metCiv)
civInfo.addNotification("We have encountered [" + metCiv.civName + "]!", entry.value.position, Color.GOLD) civInfo.addNotification("We have encountered [" + metCiv.civName + "]!", entry.value.position, metCiv.civName, NotificationIcon.Diplomacy)
metCiv.addNotification("We have encountered [" + civInfo.civName + "]!", entry.value.position, Color.GOLD) metCiv.addNotification("We have encountered [" + civInfo.civName + "]!", entry.value.position, civInfo.civName, NotificationIcon.Diplomacy)
} }
discoverNaturalWonders() discoverNaturalWonders()
@ -91,7 +91,7 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) {
if (civInfo.naturalWonders.contains(tile.naturalWonder)) if (civInfo.naturalWonders.contains(tile.naturalWonder))
continue continue
civInfo.discoverNaturalWonder(tile.naturalWonder!!) civInfo.discoverNaturalWonder(tile.naturalWonder!!)
civInfo.addNotification("We have discovered [" + tile.naturalWonder + "]!", tile.position, Color.GOLD) civInfo.addNotification("We have discovered [" + tile.naturalWonder + "]!", tile.position, "StatIcons/Happiness")
var goldGained = 0 var goldGained = 0
val discoveredNaturalWonders = civInfo.gameInfo.civilizations.filter { it != civInfo && it.isMajorCiv() } val discoveredNaturalWonders = civInfo.gameInfo.civilizations.filter { it != civInfo && it.isMajorCiv() }
@ -109,7 +109,7 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) {
if (goldGained > 0) { if (goldGained > 0) {
civInfo.gold += goldGained civInfo.gold += goldGained
civInfo.addNotification("We have received [" + goldGained + "] Gold for discovering [" + tile.naturalWonder + "]", null, Color.GOLD) civInfo.addNotification("We have received [" + goldGained + "] Gold for discovering [" + tile.naturalWonder + "]", NotificationIcon.Gold)
} }
} }

View File

@ -344,7 +344,7 @@ class CivilizationInfo {
val maxEraOfTech = tech.researchedTechnologies val maxEraOfTech = tech.researchedTechnologies
.asSequence() .asSequence()
.map { it.column!! } .map { it.column!! }
.maxBy { it.columnNumber }!! .maxByOrNull { it.columnNumber }!!
.era .era
return maxEraOfTech return maxEraOfTech
} }
@ -484,7 +484,7 @@ class CivilizationInfo {
if (offeringCiv.isDefeated() || !TradeEvaluation().isTradeValid(tradeRequest.trade, this, offeringCiv)) { if (offeringCiv.isDefeated() || !TradeEvaluation().isTradeValid(tradeRequest.trade, this, offeringCiv)) {
tradeRequests.remove(tradeRequest) tradeRequests.remove(tradeRequest)
// Yes, this is the right direction. I checked. // Yes, this is the right direction. I checked.
offeringCiv.addNotification("Our proposed trade is no longer relevant!", Color.GOLD) offeringCiv.addNotification("Our proposed trade is no longer relevant!", NotificationIcon.Trade)
} }
} }
updateDetailedCivResources() // If you offered a trade last turn, this turn it will have been accepted/declined updateDetailedCivResources() // If you offered a trade last turn, this turn it will have been accepted/declined
@ -509,7 +509,7 @@ class CivilizationInfo {
unitToDisband.disband() unitToDisband.disband()
civMilitaryUnits -= unitToDisband civMilitaryUnits -= unitToDisband
val unitName = unitToDisband.displayName() val unitName = unitToDisband.displayName()
addNotification("Cannot provide unit upkeep for [$unitName] - unit has been disbanded!", null, Color.RED) addNotification("Cannot provide unit upkeep for [$unitName] - unit has been disbanded!", unitName, NotificationIcon.Death)
} }
} }
} }
@ -550,19 +550,14 @@ class CivilizationInfo {
fun addNotification(text: String, location: Vector2?, color: Color) { fun addNotification(text: String, location: Vector2?, color: Color) {
val locations = if (location != null) listOf(location) else emptyList() val locations = if (location != null) listOf(location) else emptyList()
addNotification(text, color, LocationAction(locations)) if (playerType == PlayerType.AI) return // no point in lengthening the saved game info if no one will read it
notifications.add(Notification(text, color, LocationAction(locations)))
} }
fun addNotification(text: String, location: Vector2, vararg notificationIcons: String) { fun addNotification(text: String, location: Vector2, vararg notificationIcons: String) {
addNotification(text, LocationAction(listOf(location)), *notificationIcons) addNotification(text, LocationAction(listOf(location)), *notificationIcons)
} }
fun addNotification(text: String, color: Color, action: NotificationAction? = null) {
if (playerType == PlayerType.AI) return // no point in lengthening the saved game info if no one will read it
notifications.add(Notification(text, color, action))
}
fun addNotification(text: String, vararg notificationIcons: String) = addNotification(text, null, *notificationIcons) fun addNotification(text: String, vararg notificationIcons: String) = addNotification(text, null, *notificationIcons)
fun addNotification(text: String, action:NotificationAction?, vararg notificationIcons: String) { fun addNotification(text: String, action:NotificationAction?, vararg notificationIcons: String) {
@ -649,7 +644,7 @@ class CivilizationInfo {
if (!isCityState()) return if (!isCityState()) return
val maxInfluence = diplomacy val maxInfluence = diplomacy
.filter { !it.value.otherCiv().isCityState() && !it.value.otherCiv().isDefeated() } .filter { !it.value.otherCiv().isCityState() && !it.value.otherCiv().isDefeated() }
.maxBy { it.value.influence } .maxByOrNull { it.value.influence }
if (maxInfluence != null && maxInfluence.value.influence >= 60) { if (maxInfluence != null && maxInfluence.value.influence >= 60) {
newAllyName = maxInfluence.key newAllyName = maxInfluence.key
} }

View File

@ -14,6 +14,9 @@ object NotificationIcon {
val War = "OtherIcons/Pillage" val War = "OtherIcons/Pillage"
val Trade = "StatIcons/Acquire" val Trade = "StatIcons/Acquire"
val Science = "StatIcons/Science" val Science = "StatIcons/Science"
val Gold = "StatIcons/Gold"
val Death = "OtherIcons/DisbandUnit"
val Diplomacy = "OtherIcons/Diplomacy"
} }
/** /**

View File

@ -274,7 +274,8 @@ class QuestManager {
newQuest.gameInfo = civInfo.gameInfo newQuest.gameInfo = civInfo.gameInfo
assignedQuests.add(newQuest) assignedQuests.add(newQuest)
assignee.addNotification("[${civInfo.civName}] assigned you a new quest: [${quest.name}].", Color.GOLD, DiplomacyAction(civInfo.civName)) assignee.addNotification("[${civInfo.civName}] assigned you a new quest: [${quest.name}].",
DiplomacyAction(civInfo.civName), civInfo.civName, "OtherIcons/Quest")
if (quest.isIndividual()) if (quest.isIndividual())
individualQuestCountdown[assignee.civName] = UNSET individualQuestCountdown[assignee.civName] = UNSET
@ -345,7 +346,8 @@ class QuestManager {
civInfo.getDiplomacyManager(assignedQuest.assignee).influence += rewardInfluence civInfo.getDiplomacyManager(assignedQuest.assignee).influence += rewardInfluence
if (rewardInfluence > 0) if (rewardInfluence > 0)
assignee.addNotification("[${civInfo.civName}] rewarded you with [${rewardInfluence.toInt()}] influence for completing the [${assignedQuest.questName}] quest.", civInfo.getCapital().location, Color.GOLD) assignee.addNotification("[${civInfo.civName}] rewarded you with [${rewardInfluence.toInt()}] influence for completing the [${assignedQuest.questName}] quest.",
civInfo.getCapital().location, civInfo.civName, "OtherIcons/Quest")
} }
/** Returns the score for the [assignedQuest] */ /** Returns the score for the [assignedQuest] */

View File

@ -647,11 +647,11 @@ class DiplomacyManager() {
setFlag(DiplomacyFlags.Denunceation, 30) setFlag(DiplomacyFlags.Denunceation, 30)
otherCivDiplomacy().setFlag(DiplomacyFlags.Denunceation, 30) otherCivDiplomacy().setFlag(DiplomacyFlags.Denunceation, 30)
otherCiv().addNotification("[${civInfo.civName}] has denounced us!", Color.RED) otherCiv().addNotification("[${civInfo.civName}] has denounced us!", NotificationIcon.Diplomacy, civInfo.civName)
// We, A, are denouncing B. What do other major civs (C,D, etc) think of this? // We, A, are denouncing B. What do other major civs (C,D, etc) think of this?
getCommonKnownCivs().filter { it.isMajorCiv() }.forEach { thirdCiv -> getCommonKnownCivs().filter { it.isMajorCiv() }.forEach { thirdCiv ->
thirdCiv.addNotification("[${civInfo.civName}] has denounced [${otherCiv().civName}]!", null, Color.RED) thirdCiv.addNotification("[${civInfo.civName}] has denounced [$otherCivName]!", civInfo.civName, NotificationIcon.Diplomacy, otherCivName)
val thirdCivRelationshipWithOtherCiv = thirdCiv.getDiplomacyManager(otherCiv()).relationshipLevel() val thirdCivRelationshipWithOtherCiv = thirdCiv.getDiplomacyManager(otherCiv()).relationshipLevel()
when (thirdCivRelationshipWithOtherCiv) { when (thirdCivRelationshipWithOtherCiv) {
RelationshipLevel.Unforgivable -> addModifier(DiplomaticModifiers.DenouncedOurEnemies, 15f) RelationshipLevel.Unforgivable -> addModifier(DiplomaticModifiers.DenouncedOurEnemies, 15f)
@ -665,14 +665,14 @@ class DiplomacyManager() {
fun agreeNotToSettleNear() { fun agreeNotToSettleNear() {
otherCivDiplomacy().setFlag(DiplomacyFlags.AgreedToNotSettleNearUs, 100) otherCivDiplomacy().setFlag(DiplomacyFlags.AgreedToNotSettleNearUs, 100)
addModifier(DiplomaticModifiers.UnacceptableDemands, -10f) addModifier(DiplomaticModifiers.UnacceptableDemands, -10f)
otherCiv().addNotification("[${civInfo.civName}] agreed to stop settling cities near us!", Color.MAROON) otherCiv().addNotification("[${civInfo.civName}] agreed to stop settling cities near us!", NotificationIcon.Diplomacy, civInfo.civName)
} }
fun refuseDemandNotToSettleNear() { fun refuseDemandNotToSettleNear() {
addModifier(DiplomaticModifiers.UnacceptableDemands, -20f) addModifier(DiplomaticModifiers.UnacceptableDemands, -20f)
otherCivDiplomacy().setFlag(DiplomacyFlags.IgnoreThemSettlingNearUs, 100) otherCivDiplomacy().setFlag(DiplomacyFlags.IgnoreThemSettlingNearUs, 100)
otherCivDiplomacy().addModifier(DiplomaticModifiers.RefusedToNotSettleCitiesNearUs, -15f) otherCivDiplomacy().addModifier(DiplomaticModifiers.RefusedToNotSettleCitiesNearUs, -15f)
otherCiv().addNotification("[${civInfo.civName}] refused to stop settling cities near us!", Color.MAROON) otherCiv().addNotification("[${civInfo.civName}] refused to stop settling cities near us!", NotificationIcon.Diplomacy, civInfo.civName)
} }

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.NotificationIcon
import com.unciv.logic.civilization.PlayerType import com.unciv.logic.civilization.PlayerType
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
@ -99,7 +100,7 @@ class EditMultiplayerGameInfoScreen(game: GameInfo?, gameName: String, backScree
//Add notification so everyone knows what happened //Add notification so everyone knows what happened
//call for every civ cause AI players are skipped anyway //call for every civ cause AI players are skipped anyway
for (civ in gameInfo.civilizations) { for (civ in gameInfo.civilizations) {
civ.addNotification("[${playerCiv.civName}] resigned and is now controlled by AI", Color.RED) civ.addNotification("[${playerCiv.civName}] resigned and is now controlled by AI", playerCiv.civName)
} }
//save game so multiplayer list stays up to date //save game so multiplayer list stays up to date

View File

@ -4,6 +4,7 @@ import com.unciv.ui.utils.AutoScrollPane as ScrollPane
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.Constants import com.unciv.Constants
import com.unciv.logic.civilization.NotificationIcon
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.trade.TradeEvaluation import com.unciv.logic.trade.TradeEvaluation
import com.unciv.logic.trade.TradeLogic import com.unciv.logic.trade.TradeLogic
@ -75,7 +76,7 @@ class TradePopup(worldScreen: WorldScreen): Popup(worldScreen){
} }
open() open()
} }
requestingCiv.addNotification("[${viewingCiv.civName}] has accepted your trade request", Color.GOLD) requestingCiv.addNotification("[${viewingCiv.civName}] has accepted your trade request", viewingCiv.civName, NotificationIcon.Trade)
} }
// In the meantime this became invalid, perhaps because we accepted previous trades // In the meantime this became invalid, perhaps because we accepted previous trades
@ -93,7 +94,7 @@ class TradePopup(worldScreen: WorldScreen): Popup(worldScreen){
diplomacyManager.setFlag(DiplomacyFlags.DeclinedPeace,5) diplomacyManager.setFlag(DiplomacyFlags.DeclinedPeace,5)
close() close()
requestingCiv.addNotification("[${viewingCiv.civName}] has denied your trade request", Color.GOLD) requestingCiv.addNotification("[${viewingCiv.civName}] has denied your trade request", viewingCiv.civName, NotificationIcon.Trade)
worldScreen.shouldUpdate=true worldScreen.shouldUpdate=true
} }