From b8da12426348ea522d58dd7bf800cdbc3b64084a Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 28 Nov 2022 11:12:53 +0200 Subject: [PATCH] Added hasExplored and explore() functions to civinfo to mask exploredTiles --- .../unciv/logic/civilization/CivInfoTransientUpdater.kt | 4 ++-- .../src/com/unciv/logic/civilization/CivilizationInfo.kt | 9 ++++++++- .../models/ruleset/unique/UniqueTriggerActivation.kt | 8 ++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/CivInfoTransientUpdater.kt b/core/src/com/unciv/logic/civilization/CivInfoTransientUpdater.kt index 71c886fd5e..7ae4b0efd5 100644 --- a/core/src/com/unciv/logic/civilization/CivInfoTransientUpdater.kt +++ b/core/src/com/unciv/logic/civilization/CivInfoTransientUpdater.kt @@ -23,7 +23,7 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) { // and we never actually iterate on the explored tiles (only check contains()), // so there's no fear of concurrency problems. val newlyExploredTiles = civInfo.viewableTiles.asSequence().map { it.position } - civInfo.exploredTiles.addAll(newlyExploredTiles) + civInfo.addExploredTiles(newlyExploredTiles) val viewedCivs = HashMap() @@ -70,7 +70,7 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) { if (civInfo.isSpectator() || UncivGame.Current.viewEntireMapForDebug) { val allTiles = civInfo.gameInfo.tileMap.values.toSet() civInfo.viewableTiles = allTiles - civInfo.exploredTiles = allTiles.map { it.position }.toHashSet() + civInfo.addExploredTiles(allTiles.map { it.position }.toHashSet() civInfo.viewableInvisibleUnitsTiles = allTiles return } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 0a70813f62..72ccca04e0 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -113,6 +113,10 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { @Transient var enemyMovementPenaltyUniques: Sequence? = null + /** Same as above variable */ + @Transient + var isEntireMapRevealed: Sequence? = null + @Transient var statsForNextTurn = Stats() @@ -199,6 +203,10 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { fun hasExplored(position: Vector2) = exploredTiles.contains(position) fun hasExplored(tileInfo: TileInfo) = hasExplored(tileInfo.position) + fun addExploredTiles(tiles:Sequence){ + exploredTiles.addAll(tiles) + } + var lastSeenImprovement = HashMapVector2() // To correctly determine "game over" condition as clarified in #4707 @@ -1289,7 +1297,6 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { fun addCity(location: Vector2) { val newCity = CityInfo(this, location) newCity.cityConstructions.chooseNextConstruction() - } fun destroy() { diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index f140c1d27b..a58bee59ad 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -298,8 +298,8 @@ object UniqueTriggerActivation { if (notification != null) { civInfo.addNotification(notification, LocationAction(tile?.position), NotificationIcon.Scout) } - return civInfo.exploredTiles.addAll( - civInfo.gameInfo.tileMap.values.asSequence().map { it.position }) + civInfo.addExploredTiles(civInfo.gameInfo.tileMap.values.asSequence().map { it.position }) + return true } UnitsGainPromotion -> { @@ -462,8 +462,8 @@ object UniqueTriggerActivation { // Implements [UniqueParameterType.CombatantFilter] - At the moment the only use if (unique.params[0] != "All") this.take(unique.params[0].toInt()) } + civInfo.addExploredTiles(revealedTiles) for (position in revealedTiles) { - civInfo.exploredTiles.add(position) val revealedTileInfo = civInfo.gameInfo.tileMap[position] if (revealedTileInfo.improvement == null) civInfo.lastSeenImprovement.remove(position) @@ -493,7 +493,7 @@ object UniqueTriggerActivation { .getTilesInDistance(unique.params[1].toInt()) .map { it.position } .filter { tileBasedRandom.nextFloat() < unique.params[2].toFloat() / 100f } - civInfo.exploredTiles.addAll(tilesToReveal) + civInfo.addExploredTiles(tilesToReveal) civInfo.updateViewableTiles() if (notification != null) civInfo.addNotification(