diff --git a/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt index fe951bf..9e73d6d 100644 --- a/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt +++ b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.text.drawText import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle +import kotlin.math.absoluteValue @Composable fun MapCanvas( @@ -48,17 +49,22 @@ fun MapCanvas( ) val oldLevel = tileContainer.getLevel() val level = scale.floatValue.toInt() + val levelDiff = level - oldLevel - if (oldLevel > level) { - offsetX.floatValue -= size.width / 2F + TILE_SIZE - offsetY.floatValue -= size.height / 2F + TILE_SIZE - offsetX.floatValue /= 2F - offsetY.floatValue /= 2F - } else if (oldLevel < level) { - offsetX.floatValue *= 2F - offsetY.floatValue *= 2F - offsetX.floatValue += size.width / 2F + TILE_SIZE - offsetY.floatValue += size.height / 2F + TILE_SIZE + if (levelDiff < 0) { + repeat (levelDiff.absoluteValue) { + offsetX.floatValue -= size.width / 2F + TILE_SIZE + offsetY.floatValue -= size.height / 2F + TILE_SIZE + offsetX.floatValue /= 2F + offsetY.floatValue /= 2F + } + } else if (levelDiff > 0) { + repeat (levelDiff) { + offsetX.floatValue *= 2F + offsetY.floatValue *= 2F + offsetX.floatValue += size.width / 2F + TILE_SIZE + offsetY.floatValue += size.height / 2F + TILE_SIZE + } } val tileOffsetX = (offsetX.floatValue / TILE_SIZE).toInt() val tileOffsetY = (offsetY.floatValue / TILE_SIZE).toInt()