From fadd1684ac9f940e78a6f605d7bde20d4c859e04 Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Tue, 8 Jun 2021 05:40:17 +0200 Subject: [PATCH] Make CivilizationInfo.gold read-only (#4074) * Make CivilizationInfo.gold read-only * Make CivilizationInfo.gold read-only --- core/src/com/unciv/logic/city/CityConstructions.kt | 2 +- core/src/com/unciv/logic/civilization/CivilizationInfo.kt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index 6d406b4a3d..d48130ce8c 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -327,7 +327,7 @@ class CityConstructions { if (construction is Building) { // Production put into wonders gets refunded if (construction.isWonder && getWorkDone(constructionName) != 0) { - cityInfo.civInfo.gold += getWorkDone(constructionName) + cityInfo.civInfo.addGold( getWorkDone(constructionName) ) val buildingIcon = "BuildingIcons/${constructionName}" cityInfo.civInfo.addNotification("Excess production for [$constructionName] converted to [${getWorkDone(constructionName)}] gold", NotificationIcon.Gold, buildingIcon) } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index cf5e9216c5..40617a7024 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -70,7 +70,9 @@ class CivilizationInfo { /** Used in online multiplayer for human players */ var playerId = "" + /** The Civ's gold reserves. Public get, private set - please use [addGold] method to modify. */ var gold = 0 + private set var civName = "" var tech = TechManager() var policies = PolicyManager() @@ -543,7 +545,11 @@ class CivilizationInfo { updateHasActiveGreatWall() } + /** Modify gold by a given amount making sure it does neither overflow nor underflow. + * @param delta the amount to add (can be negative) + */ fun addGold(delta: Int) { + // not using Long.coerceIn - this stays in 32 bits gold = when { delta > 0 && gold > Int.MAX_VALUE - delta -> Int.MAX_VALUE delta < 0 && gold < Int.MIN_VALUE - delta -> Int.MIN_VALUE