diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index de71baa..b268ef3 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,14 +4,6 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b7c9285..fd10a14 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,13 +12,13 @@ android:supportsRtl="true" android:theme="@style/Theme.KtHeightMap" tools:targetApi="31"> - diff --git a/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt index 9e73d6d..593f33f 100644 --- a/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt +++ b/app/src/main/java/com/mirenkov/ktheightmap/MapCanvas.kt @@ -21,7 +21,6 @@ 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( @@ -31,8 +30,8 @@ fun MapCanvas( tileContainer: TileContainer, modifier: Modifier = Modifier ) { - val offsetX = rememberSaveable { mutableFloatStateOf(-TILE_SIZE) } - val offsetY = rememberSaveable { mutableFloatStateOf(-TILE_SIZE) } + val offsetX = rememberSaveable { mutableFloatStateOf(0F) } + val offsetY = rememberSaveable { mutableFloatStateOf(0F) } val textMeasurer = rememberTextMeasurer() Canvas( modifier = modifier.fillMaxSize() @@ -47,31 +46,15 @@ fun MapCanvas( color = backColor, size = size ) - val oldLevel = tileContainer.getLevel() - val level = scale.floatValue.toInt() - val levelDiff = level - oldLevel - 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() val strippedOffsetX = offsetX.floatValue % TILE_SIZE val strippedOffsetY = offsetY.floatValue % TILE_SIZE + val level = scale.floatValue.toInt() + val offset = Offset(strippedOffsetX, strippedOffsetY) val grid = size / TILE_SIZE @@ -79,7 +62,7 @@ fun MapCanvas( val gridWidth = grid.width.toInt() val gridHeight = grid.height.toInt() - val tiles = tileContainer.getTiles(tileOffsetX, tileOffsetY, tileOffsetX + gridWidth + 2, tileOffsetY + gridHeight + 2, level) + val tiles = tileContainer.getTiles(tileOffsetX, tileOffsetY, tileOffsetX + gridWidth, tileOffsetY + gridHeight, level) for (cellX in 0 .. gridWidth + 2) { val tileX = tileOffsetX + cellX @@ -88,7 +71,7 @@ fun MapCanvas( val tileY = tileOffsetY + cellY val localOffsetY = TILE_SIZE * (cellY - 1) - val bitmap = tiles.find { it.x == tileX && it.y == tileY && it.level == level }?.toBitmap() + val bitmap = tiles.find { it.x == tileX && it.y == tileY && it.level == level }?.getBitmap() bitmap?.let { val imageBitmap = bitmap.asImageBitmap() @@ -97,7 +80,7 @@ fun MapCanvas( topLeft = Offset(localOffsetX, localOffsetY) - offset ) } - /* + drawRect( color = gridColor, size = Size(TILE_SIZE, TILE_SIZE), @@ -117,7 +100,6 @@ fun MapCanvas( topLeft = Offset(localOffsetX, localOffsetY) - offset, size = Size(TILE_SIZE, TILE_SIZE) ) - */ } } } diff --git a/app/src/main/java/com/mirenkov/ktheightmap/Tile.kt b/app/src/main/java/com/mirenkov/ktheightmap/Tile.kt index fefd2f9..4420051 100644 --- a/app/src/main/java/com/mirenkov/ktheightmap/Tile.kt +++ b/app/src/main/java/com/mirenkov/ktheightmap/Tile.kt @@ -4,7 +4,6 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import androidx.room.ColumnInfo import androidx.room.Entity -import androidx.room.Ignore import java.util.Base64 @Entity(tableName = "tiles", primaryKeys = [ "x", "y", "level" ]) @@ -21,9 +20,6 @@ class Tile { @ColumnInfo(name = "data") var base64: String? = null - @Ignore - var bitmap: Bitmap? = null - constructor() constructor(x: Int, y: Int, level: Int) { @@ -39,11 +35,11 @@ class Tile { this.base64 = base64 } - fun toBitmap(): Bitmap? { - if (bitmap != null || base64 == null) - return bitmap + fun getBitmap(): Bitmap? { + if (this.base64 == null) + return null val ba = Base64.getDecoder().decode(this.base64) - bitmap = BitmapFactory.decodeByteArray(ba, 0, ba.size) - return bitmap + val bmp = BitmapFactory.decodeByteArray(ba, 0, ba.size) + return bmp } } \ No newline at end of file diff --git a/app/src/main/java/com/mirenkov/ktheightmap/TileContainer.kt b/app/src/main/java/com/mirenkov/ktheightmap/TileContainer.kt index 02095ec..8e257d9 100644 --- a/app/src/main/java/com/mirenkov/ktheightmap/TileContainer.kt +++ b/app/src/main/java/com/mirenkov/ktheightmap/TileContainer.kt @@ -13,8 +13,6 @@ class TileContainer(private val vm: TileViewModel, private val coroutineScope: C private var level = 1 - fun getLevel(): Int = level - fun getTiles(_startX: Int, _startY: Int, _endX: Int, _endY: Int, _level: Int): List { val newParams = arrayOf( _startX, _startY, _endX, _endY, _level ) val oldParams = arrayOf( startX, startY, endX, endY, level )