annoyance
This commit is contained in:
parent
2b821d8204
commit
b807e46978
4 changed files with 36 additions and 19 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue