From 32247fe4371715e8c77099b3a0fc5f12e8d198e9 Mon Sep 17 00:00:00 2001 From: sulai <6741822+sulai@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:35:33 +0200 Subject: [PATCH] fix: user only receives yellow resource notification if it is researched (#12337) * When resource is not researched, don't allow the user to scan the map for it * inline ruleset.getResource() in getExploredResourcesNotification (resolved review comment) * changed TechManager.isRevealed (review feedback) --------- Co-authored-by: M. Rittweger --- core/src/com/unciv/logic/GameInfo.kt | 8 +++++++- .../com/unciv/logic/civilization/managers/TechManager.kt | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index 1f9104c851..d019b4b156 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -536,7 +536,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion return true } - /** Generate a notification pointing out resources. + /** Generate a notification pointing out resources. Only researched Resources are considered. * @param maxDistance from next City, default removes distance limitation. * @param filter optional tile filter predicate, e.g. to exclude foreign territory. * @return `null` if no resources were found, otherwise a Notification instance. @@ -548,6 +548,12 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion maxDistance: Int = Int.MAX_VALUE, filter: (Tile) -> Boolean = { true } ): Notification? { + + val resource = ruleset.tileResources[resourceName] ?: return null + if (!civ.tech.isRevealed(resource)) { + return null + } + data class CityTileAndDistance(val city: City, val tile: Tile, val distance: Int) // Include your city-state allies' cities with your own for the purpose of showing the closest city diff --git a/core/src/com/unciv/logic/civilization/managers/TechManager.kt b/core/src/com/unciv/logic/civilization/managers/TechManager.kt index 153a80935e..792b949d5e 100644 --- a/core/src/com/unciv/logic/civilization/managers/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/TechManager.kt @@ -17,6 +17,7 @@ import com.unciv.logic.map.tile.RoadStatus import com.unciv.models.ruleset.INonPerpetualConstruction import com.unciv.models.ruleset.tech.Era import com.unciv.models.ruleset.tech.Technology +import com.unciv.models.ruleset.tile.TileResource import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueTriggerActivation @@ -155,6 +156,12 @@ class TechManager : IsPartOfGameInfoSerialization { fun isResearched(construction: INonPerpetualConstruction): Boolean = construction.requiredTechs().all{ requiredTech -> isResearched(requiredTech) } + /** resources which need no research count as researched */ + fun isRevealed(resource: TileResource): Boolean { + val revealedBy = resource.revealedBy ?: return true + return isResearched(revealedBy) + } + fun isObsolete(unit: BaseUnit): Boolean = unit.techsThatObsoleteThis().any{ obsoleteTech -> isResearched(obsoleteTech) } fun isUnresearchable(tech: Technology): Boolean {