From ce5a723e5ae392629dc08a65b5ce19d599c2f5a6 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Mon, 30 Sep 2024 15:30:13 +0300 Subject: [PATCH] Simplified brush code - no matter what, always visually update all updated tiles and their neighbors - could have edge images that are now relevant --- .../mapeditorscreen/tabs/MapEditorEditTab.kt | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditTab.kt b/core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditTab.kt index 7596e1b966..29b04abe44 100644 --- a/core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditTab.kt +++ b/core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditTab.kt @@ -107,10 +107,10 @@ class MapEditorEditTab( minimumWidth = subTabsWidth, maximumWidth = subTabsWidth, headerPadding = 5f, - capacity = AllEditSubTabs.values().size + capacity = AllEditSubTabs.entries.size ) - for (page in AllEditSubTabs.values()) { + for (page in AllEditSubTabs.entries) { // Empty tabs with placeholders, filled when activated() subTabs.addPage(page.caption, Group(), ImageGetter.getImage(page.icon), 20f, shortcutKey = KeyCharAndCode(page.key), disabled = true) @@ -184,7 +184,7 @@ class MapEditorEditTab( // ruleset has changed ruleset = editorScreen.ruleset ImageGetter.setNewRuleset(ruleset) - for (page in AllEditSubTabs.values()) { + for (page in AllEditSubTabs.entries) { val tab = page.instantiate(this, ruleset) subTabs.replacePage(page.caption, tab) subTabs.setPageDisabled(page.caption, (tab as IMapEditorEditSubTabs).isDisabled()) @@ -255,44 +255,31 @@ class MapEditorEditTab( if (brushSize == -1) { val bfs = BFS(tile) { it.isSimilarEnough(tile) } bfs.stepToEnd() - bfs.getReachedTiles().asSequence() + bfs.getReachedTiles().toSet() } else { - tile.getTilesInDistance(brushSize - 1) + tile.getTilesInDistance(brushSize - 1).toSet() } + for (tileToPaint in tiles) { when (brushHandlerType) { BrushHandlerType.Direct -> directPaintTile(tileToPaint) BrushHandlerType.Tile -> paintTile(tileToPaint) - BrushHandlerType.Road -> roadPaintTile(tileToPaint) - BrushHandlerType.River -> riverPaintTile(tileToPaint) + BrushHandlerType.Road -> paintTile(tileToPaint) + BrushHandlerType.River -> directPaintTile(tileToPaint) else -> {} // other cases can't reach here } } + + // Adjacent tiles could have images changed as well, due to rivers/edge tiles/roads + val tilesToUpdate = tiles.flatMap { it.neighbors + it }.toSet() + for (tileToUpdate in tilesToUpdate) editorScreen.updateTile(tileToUpdate) } /** Used for starting locations - no temp tile as brushAction needs to access tile.tileMap */ private fun directPaintTile(tile: Tile) { brushAction(tile) editorScreen.isDirty = true - editorScreen.updateAndHighlight(tile) - } - - /** Used for rivers - same as [directPaintTile] but may need to update 10,12 and 2 o'clock neighbor tiles too - * - * Note: Unlike [paintRiverFromTo] this does **not** call [MapGenerator.convertTerrains] to allow more freedom. - */ - private fun riverPaintTile(tile: Tile) { - directPaintTile(tile) - for (neighbor in tile.neighbors) { - if (neighbor.position.x > tile.position.x || neighbor.position.y > tile.position.y) - editorScreen.updateTile(neighbor) - } - } - - // Used for roads - same as paintTile but all neighbors need TileGroup.update too - private fun roadPaintTile(tile: Tile) { - if (!paintTile(tile)) return - for (neighbor in tile.neighbors) editorScreen.updateTile(neighbor) + editorScreen.highlightTile(tile) } /** apply brush to a single tile */ @@ -322,7 +309,7 @@ class MapEditorEditTab( if (tile.naturalWonder != savedTile.naturalWonder) editorScreen.naturalWondersNeedRefresh = true editorScreen.isDirty = true - editorScreen.updateAndHighlight(tile) + editorScreen.highlightTile(tile) return true }