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 <m.rittweger@mvolution.de>
This commit is contained in:
sulai 2024-10-24 19:35:33 +02:00 committed by GitHub
parent e348b7c388
commit 32247fe437
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -536,7 +536,7 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
return true 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 maxDistance from next City, default removes distance limitation.
* @param filter optional tile filter predicate, e.g. to exclude foreign territory. * @param filter optional tile filter predicate, e.g. to exclude foreign territory.
* @return `null` if no resources were found, otherwise a Notification instance. * @return `null` if no resources were found, otherwise a Notification instance.
@ -548,6 +548,12 @@ class GameInfo : IsPartOfGameInfoSerialization, HasGameInfoSerializationVersion
maxDistance: Int = Int.MAX_VALUE, maxDistance: Int = Int.MAX_VALUE,
filter: (Tile) -> Boolean = { true } filter: (Tile) -> Boolean = { true }
): Notification? { ): 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) 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 // Include your city-state allies' cities with your own for the purpose of showing the closest city

View File

@ -17,6 +17,7 @@ import com.unciv.logic.map.tile.RoadStatus
import com.unciv.models.ruleset.INonPerpetualConstruction import com.unciv.models.ruleset.INonPerpetualConstruction
import com.unciv.models.ruleset.tech.Era import com.unciv.models.ruleset.tech.Era
import com.unciv.models.ruleset.tech.Technology 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.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueMap
import com.unciv.models.ruleset.unique.UniqueTriggerActivation 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) } 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 isObsolete(unit: BaseUnit): Boolean = unit.techsThatObsoleteThis().any{ obsoleteTech -> isResearched(obsoleteTech) }
fun isUnresearchable(tech: Technology): Boolean { fun isUnresearchable(tech: Technology): Boolean {