Skip to content

Commit

Permalink
perf(rendering): Don't try to find edge tiles unless we know other im…
Browse files Browse the repository at this point in the history
…ages have changes as well

Ths is a trade off - on the one hand it means edge images will be drawn *above* improvements, on the other hand - profiling shows this is 11% of tile update time, which affects evey single user click!

Possible good solution: saving the edge images on the tile itself, and refreshing this and neighboring tiles every time terrains are changed
  • Loading branch information
yairm210 committed Nov 13, 2024
1 parent 086573b commit 1c17a20
Showing 1 changed file with 6 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,19 +76,14 @@ class TileLayerTerrain(tileGroup: TileGroup, size: Float) : TileLayer(tileGroup,
val terrainImages = if (tile.naturalWonder != null)
sequenceOf(tile.baseTerrain, tile.naturalWonder!!)
else sequenceOf(tile.baseTerrain) + tile.terrainFeatures.asSequence()
val edgeImages = getEdgeTileLocations()
val allTogether = (terrainImages + resourceAndImprovementSequence).joinToString("+")
val allTogetherLocation = strings().getTile(allTogether)

// If the tilesetconfig *explicitly* lists the terrains+improvements etc, we can't know where in that list to place the edges
// So we default to placing them over everything else.
// If there is no explicit list, then we can know to place them between the terrain and the improvement
return when {
strings().tileSetConfig.ruleVariants[allTogether] != null -> baseHexagon +
strings().tileSetConfig.ruleVariants[allTogether]!!.map { strings().getTile(it) } + edgeImages
ImageGetter.imageExists(allTogetherLocation) -> baseHexagon + allTogetherLocation + edgeImages
tile.naturalWonder != null -> getNaturalWonderBackupImage(baseHexagon) + edgeImages
else -> baseHexagon + getTerrainImageLocations(terrainImages) + edgeImages + getImprovementAndResourceImages(resourceAndImprovementSequence)
strings().tileSetConfig.ruleVariants[allTogether] != null -> baseHexagon + strings().tileSetConfig.ruleVariants[allTogether]!!.map { strings().getTile(it) }
ImageGetter.imageExists(allTogetherLocation) -> baseHexagon + allTogetherLocation
tile.naturalWonder != null -> getNaturalWonderBackupImage(baseHexagon)
else -> baseHexagon + getTerrainImageLocations(terrainImages) + getImprovementAndResourceImages(resourceAndImprovementSequence)
}
}

Expand All @@ -114,7 +109,8 @@ class TileLayerTerrain(tileGroup: TileGroup, size: Float) : TileLayer(tileGroup,
}

private fun updateTileImage(viewingCiv: Civilization?) {
val tileBaseImageLocations = getTileBaseImageLocations(viewingCiv)
val tileBaseImageLocations = getTileBaseImageLocations(viewingCiv) +
getEdgeTileLocations()

if (tileBaseImageLocations.size == tileImageIdentifiers.size) {
if (tileBaseImageLocations.withIndex().all { (i, imageLocation) -> tileImageIdentifiers[i] == imageLocation })
Expand Down

0 comments on commit 1c17a20

Please sign in to comment.