From 497ce2366a20a34946f23aa86043fd535ae3047c Mon Sep 17 00:00:00 2001 From: rh-github-2015 Date: Thu, 19 Mar 2020 08:43:05 +0100 Subject: [PATCH] Clean up redundant stuff found in save files (#2192) --- .../com/unciv/logic/city/CityConstructions.kt | 18 ++++++++++++++++++ .../com/unciv/models/ruleset/unit/BaseUnit.kt | 2 ++ 2 files changed, 20 insertions(+) diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index a158d1b9ae..8537e823d3 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -6,6 +6,7 @@ import com.unciv.logic.automation.ConstructionAutomation import com.unciv.logic.civilization.AlertType import com.unciv.logic.civilization.PopupAlert import com.unciv.models.ruleset.Building +import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.stats.Stats import com.unciv.models.translations.tr import com.unciv.ui.cityscreen.ConstructionInfoTable @@ -262,6 +263,23 @@ class CityConstructions { if (getConstruction(construction).isBuildable(this)) constructionQueue.add(construction) } + // remove obsolete stuff from in progress constructions - happens often and leaves clutter in memory and save files + // should have NO visible consequences - any accumulated points that may be reused later should stay (nukes when manhattan project city lost, nat wonder when conquered an empty city...) + val inProgressSnapshot = inProgressConstructions.keys.filter { it != currentConstruction } + for (constructionName in inProgressSnapshot) { + val rejectionReason:String = + when (val construction = getConstruction(constructionName)) { + is Building -> construction.getRejectionReason(this) + is BaseUnit -> construction.getRejectionReason(this) + else -> "" + } + if (!( rejectionReason.endsWith("lready built") + || rejectionReason.startsWith("Cannot be built with") + || rejectionReason.startsWith("Don't need to build any more") + || rejectionReason.startsWith("Obsolete") + )) continue + inProgressConstructions.remove(constructionName) + } } private fun constructionComplete(construction: IConstruction) { diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index b405767a36..88c0356a5f 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -152,6 +152,8 @@ class BaseUnit : INamed, IConstruction { val unit = construction.cityInfo.civInfo.placeUnitNearTile(construction.cityInfo.location, name) if(unit==null) return false // couldn't place the unit, so there's actually no unit =( + if(this.unitType.isCivilian()) return true // tiny optimization makes save files a few bytes smaller + var XP = construction.getBuiltBuildings().sumBy { it.xpForNewUnits } if(construction.cityInfo.civInfo.policies.isAdopted("Total War")) XP += 15 unit.promotions.XP = XP