annoyance

This commit is contained in:
Alexey 2025-11-07 17:29:18 +03:00
commit b807e46978
4 changed files with 36 additions and 19 deletions

View file

@ -2,11 +2,7 @@ package com.mirenkov.ktheightmap
class Config {
companion object {
private var INSTANCE: Config = Config()
fun getInstance(): Config {
synchronized(this) {
return INSTANCE
}
}
const val MAP_START_OFFSET_X = -646.65625F
const val MAP_START_OFFSET_Y = -1157.2814F
}
}

View file

@ -6,6 +6,7 @@ import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@ -17,6 +18,7 @@ import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.ParagraphStyle
@ -27,9 +29,12 @@ 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 com.mirenkov.ktheightmap.Config.Companion.MAP_START_OFFSET_X
import com.mirenkov.ktheightmap.Config.Companion.MAP_START_OFFSET_Y
import com.mirenkov.ktheightmap.parser.KhmParser
import kotlin.math.absoluteValue
import kotlin.math.floor
import kotlin.math.min
import kotlin.math.pow
import kotlin.math.sqrt
@ -43,15 +48,20 @@ fun MapCanvas(
modifier: Modifier = Modifier
) {
val ctx = LocalContext.current
var offsetX by rememberSaveable { viewModel.mapOffsetX }
var offsetY by rememberSaveable { viewModel.mapOffsetY }
val scale by rememberSaveable { viewModel.scale }
var offsetX by remember { viewModel.mapOffsetX }
var offsetY by remember { viewModel.mapOffsetY }
val scale by remember { viewModel.scale }
val textMeasurer = rememberTextMeasurer()
val debug by rememberSaveable { viewModel.debug }
var pointRequested by rememberSaveable { viewModel.pointRequested }
var pointLat by rememberSaveable { viewModel.rememberedPointLat }
var pointLon by rememberSaveable { viewModel.rememberedPointLon }
var pointHeight by rememberSaveable { viewModel.rememberedPointHeight }
val debug by remember { viewModel.debug }
var pointRequested by remember { viewModel.pointRequested }
var pointLat by remember { viewModel.rememberedPointLat }
var pointLon by remember { viewModel.rememberedPointLon }
var pointHeight by remember { viewModel.rememberedPointHeight }
var lastOrientation by rememberSaveable { viewModel.lastOrientation }
val orientationChanged = LocalConfiguration.current.orientation != lastOrientation
if (orientationChanged) {
lastOrientation = LocalConfiguration.current.orientation
}
Canvas(
modifier = modifier.fillMaxSize()
.pointerInput(Unit) {
@ -61,9 +71,15 @@ fun MapCanvas(
}
}
) {
if (viewModel.halvedOffsetX == null) {
if (viewModel.halvedOffsetX == null || orientationChanged) {
viewModel.halvedOffsetX = size.width / 2
viewModel.halvedOffsetY = size.height / 2
if (orientationChanged) {
offsetX -= viewModel.halvedOffsetY!!
offsetX += viewModel.halvedOffsetX!!
offsetY -= viewModel.halvedOffsetX!!
offsetY += viewModel.halvedOffsetY!!
}
}
val halvedX = viewModel.halvedOffsetX!!
val halvedY = viewModel.halvedOffsetY!!
@ -241,7 +257,7 @@ fun DrawScope.drawPointInfo(
val latDiff = lat - pointLat
val lonDiff = lon - pointLon
val distance = sqrt((latDiff).pow(2) + (lonDiff).pow(2))
val valuesCount = floor(distance / valueDistance).toInt()
val valuesCount = min(floor(distance / valueDistance).toInt(),1000)
val array: Array<Pair<Float, Float>> = Array(valuesCount) { step ->
val interCoef = 1F - step.toFloat() / valuesCount
Pair(lon - lonDiff * interCoef, lat - latDiff * interCoef)

View file

@ -11,7 +11,7 @@ class TileContainer(private val vm: TileViewModel, private val coroutineScope: C
private var endX = 0
private var endY = 0
private var level = 1
private var level = 2
fun getLevel(): Int = level

View file

@ -1,11 +1,14 @@
package com.mirenkov.ktheightmap
import android.app.Application
import android.content.res.Configuration
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.ViewModel
import com.mirenkov.ktheightmap.Config.Companion.MAP_START_OFFSET_X
import com.mirenkov.ktheightmap.Config.Companion.MAP_START_OFFSET_Y
class TileViewModel(application: Application): ViewModel() {
val repository: TileRepository
@ -16,8 +19,8 @@ class TileViewModel(application: Application): ViewModel() {
var latitudeText = mutableStateOf(TextFieldValue(""))
var longitudeText = mutableStateOf(TextFieldValue(""))
val mapOffsetX = mutableFloatStateOf(-646.65625F)
val mapOffsetY = mutableFloatStateOf(-1157.2814F)
val mapOffsetX = mutableFloatStateOf(MAP_START_OFFSET_X)
val mapOffsetY = mutableFloatStateOf(MAP_START_OFFSET_Y)
val scale = mutableFloatStateOf(2F)
var maxLevel = mutableIntStateOf(2)
@ -28,6 +31,8 @@ class TileViewModel(application: Application): ViewModel() {
var rememberedPointLat = mutableFloatStateOf(0F)
var rememberedPointHeight = mutableIntStateOf(0)
var lastOrientation = mutableIntStateOf(Configuration.ORIENTATION_PORTRAIT)
init {
val tileDb = TileDB.getInstance(application)
val tileDao = tileDb.tileDao()