From 7382d4f8e8b791b5895a98354d2da2fbc4e6076d Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 11 Aug 2020 22:44:41 +0300 Subject: [PATCH] The ImageGetter changes rulesets correctly when entering\exiting scenario editor --- core/src/com/unciv/MainMenuScreen.kt | 1 + .../logic/civilization/diplomacy/DiplomacyManager.kt | 2 +- .../src/com/unciv/ui/mapeditor/GameParametersScreen.kt | 8 +++++--- core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt | 6 +++--- core/src/com/unciv/ui/utils/ImageGetter.kt | 10 +++++++++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/core/src/com/unciv/MainMenuScreen.kt b/core/src/com/unciv/MainMenuScreen.kt index 72c1863767..22da43514c 100644 --- a/core/src/com/unciv/MainMenuScreen.kt +++ b/core/src/com/unciv/MainMenuScreen.kt @@ -50,6 +50,7 @@ class MainMenuScreen: CameraStageBaseScreen() { val newMap = MapGenerator(RulesetCache.getBaseRuleset()) .generateMap(MapParameters().apply { size = MapSize.Small; type = MapType.default }) Gdx.app.postRunnable { // for GL context + ImageGetter.setNewRuleset(RulesetCache.getBaseRuleset()) val mapHolder = EditorMapHolder(MapEditorScreen(), newMap) backgroundTable.addAction(Actions.sequence( Actions.fadeOut(0f), diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index b00a3ec719..3029c004e7 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -232,7 +232,7 @@ class DiplomacyManager() { * This includes friendly and allied city-states and the open border treaties. */ fun isConsideredFriendlyTerritory(): Boolean { - if(civInfo.isCityState() && relationshipLevel() >= RelationshipLevel.Friend) + if (civInfo.isCityState() && relationshipLevel() >= RelationshipLevel.Friend) return true return hasOpenBorders } diff --git a/core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt b/core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt index 98e28c1b9f..6c81bfa40a 100644 --- a/core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt +++ b/core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt @@ -40,9 +40,11 @@ class GameParametersScreen(var mapEditorScreen: MapEditorScreen): IPreviousScree mapEditorScreen.ruleset.add(ruleset) mapEditorScreen.tileEditorOptions.update() // Remove resources that are not applicable to this scenario - for(tile in mapEditorScreen.tileMap.values){ - if(tile.resource!=null && !ruleset.tileResources.containsKey(tile.resource!!)) - tile.resource=null + for(tile in mapEditorScreen.tileMap.values) { + if (tile.resource != null && !ruleset.tileResources.containsKey(tile.resource!!)) + tile.resource = null + if (tile.improvement != null && !ruleset.tileImprovements.containsKey(tile.improvement!!)) + tile.improvement = null } mapEditorScreen.mapHolder.updateTileGroups() diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt index 1c9b5a23f5..4d66c1efd0 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt @@ -12,6 +12,7 @@ import com.unciv.logic.MapSaver import com.unciv.logic.map.Scenario import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileMap +import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.RulesetCache import com.unciv.models.translations.tr import com.unciv.ui.newgamescreen.GameSetupInfo @@ -23,7 +24,7 @@ class MapEditorScreen(): CameraStageBaseScreen() { var tileMap = TileMap() var scenarioName = "" // when loading map: mapName is taken as default for scenarioName var scenario: Scenario? = null // main indicator whether scenario information is present - var ruleset = RulesetCache.getBaseRuleset() + var ruleset = Ruleset().apply { add(RulesetCache.getBaseRuleset()) } // Since we change this in scenarios, we can't take the base ruleset directly var gameSetupInfo = GameSetupInfo() lateinit var mapHolder: EditorMapHolder @@ -64,12 +65,11 @@ class MapEditorScreen(): CameraStageBaseScreen() { gameSetupInfo.gameParameters = scenario.gameParameters ruleset = RulesetCache.getComplexRuleset(scenario.gameParameters) - ImageGetter.ruleset = ruleset - ImageGetter.setTextureRegionDrawables() initialize() } fun initialize() { + ImageGetter.setNewRuleset(ruleset) tileMap.setTransients(ruleset,false) mapHolder = EditorMapHolder(this, tileMap) diff --git a/core/src/com/unciv/ui/utils/ImageGetter.kt b/core/src/com/unciv/ui/utils/ImageGetter.kt index 43c3b27f20..0ad252a46b 100644 --- a/core/src/com/unciv/ui/utils/ImageGetter.kt +++ b/core/src/com/unciv/ui/utils/ImageGetter.kt @@ -37,6 +37,12 @@ object ImageGetter { setTextureRegionDrawables() } + fun setNewRuleset(ruleset: Ruleset) { + if (this.ruleset == ruleset) return + this.ruleset = ruleset + setTextureRegionDrawables() + } + fun setTextureRegionDrawables(){ textureRegionDrawables.clear() @@ -134,7 +140,9 @@ object ImageGetter { val iconGroup = getImage("ImprovementIcons/$improvementName").surroundWithCircle(size) - val improvement = ruleset.tileImprovements[improvementName]!! + val improvement = ruleset.tileImprovements[improvementName] + if(improvement==null) + throw Exception("No improvement $improvementName found in ruleset!") when { improvement.food>0 -> iconGroup.circle.color= foodCircleColor improvement.production>0 -> iconGroup.circle.color= productionCircleColor