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 {
|
class Config {
|
||||||
companion object {
|
companion object {
|
||||||
private var INSTANCE: Config = Config()
|
const val MAP_START_OFFSET_X = -646.65625F
|
||||||
fun getInstance(): Config {
|
const val MAP_START_OFFSET_Y = -1157.2814F
|
||||||
synchronized(this) {
|
|
||||||
return INSTANCE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,6 +6,7 @@ import androidx.compose.foundation.gestures.detectDragGestures
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
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.DrawScope
|
||||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
|
import androidx.compose.ui.platform.LocalConfiguration
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.text.AnnotatedString
|
import androidx.compose.ui.text.AnnotatedString
|
||||||
import androidx.compose.ui.text.ParagraphStyle
|
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.rememberTextMeasurer
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.withStyle
|
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 com.mirenkov.ktheightmap.parser.KhmParser
|
||||||
import kotlin.math.absoluteValue
|
import kotlin.math.absoluteValue
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
|
import kotlin.math.min
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
|
@ -43,15 +48,20 @@ fun MapCanvas(
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
val ctx = LocalContext.current
|
val ctx = LocalContext.current
|
||||||
var offsetX by rememberSaveable { viewModel.mapOffsetX }
|
var offsetX by remember { viewModel.mapOffsetX }
|
||||||
var offsetY by rememberSaveable { viewModel.mapOffsetY }
|
var offsetY by remember { viewModel.mapOffsetY }
|
||||||
val scale by rememberSaveable { viewModel.scale }
|
val scale by remember { viewModel.scale }
|
||||||
val textMeasurer = rememberTextMeasurer()
|
val textMeasurer = rememberTextMeasurer()
|
||||||
val debug by rememberSaveable { viewModel.debug }
|
val debug by remember { viewModel.debug }
|
||||||
var pointRequested by rememberSaveable { viewModel.pointRequested }
|
var pointRequested by remember { viewModel.pointRequested }
|
||||||
var pointLat by rememberSaveable { viewModel.rememberedPointLat }
|
var pointLat by remember { viewModel.rememberedPointLat }
|
||||||
var pointLon by rememberSaveable { viewModel.rememberedPointLon }
|
var pointLon by remember { viewModel.rememberedPointLon }
|
||||||
var pointHeight by rememberSaveable { viewModel.rememberedPointHeight }
|
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(
|
Canvas(
|
||||||
modifier = modifier.fillMaxSize()
|
modifier = modifier.fillMaxSize()
|
||||||
.pointerInput(Unit) {
|
.pointerInput(Unit) {
|
||||||
|
|
@ -61,9 +71,15 @@ fun MapCanvas(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
if (viewModel.halvedOffsetX == null) {
|
if (viewModel.halvedOffsetX == null || orientationChanged) {
|
||||||
viewModel.halvedOffsetX = size.width / 2
|
viewModel.halvedOffsetX = size.width / 2
|
||||||
viewModel.halvedOffsetY = size.height / 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 halvedX = viewModel.halvedOffsetX!!
|
||||||
val halvedY = viewModel.halvedOffsetY!!
|
val halvedY = viewModel.halvedOffsetY!!
|
||||||
|
|
@ -241,7 +257,7 @@ fun DrawScope.drawPointInfo(
|
||||||
val latDiff = lat - pointLat
|
val latDiff = lat - pointLat
|
||||||
val lonDiff = lon - pointLon
|
val lonDiff = lon - pointLon
|
||||||
val distance = sqrt((latDiff).pow(2) + (lonDiff).pow(2))
|
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 array: Array<Pair<Float, Float>> = Array(valuesCount) { step ->
|
||||||
val interCoef = 1F - step.toFloat() / valuesCount
|
val interCoef = 1F - step.toFloat() / valuesCount
|
||||||
Pair(lon - lonDiff * interCoef, lat - latDiff * interCoef)
|
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 endX = 0
|
||||||
private var endY = 0
|
private var endY = 0
|
||||||
|
|
||||||
private var level = 1
|
private var level = 2
|
||||||
|
|
||||||
fun getLevel(): Int = level
|
fun getLevel(): Int = level
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,14 @@
|
||||||
package com.mirenkov.ktheightmap
|
package com.mirenkov.ktheightmap
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import android.content.res.Configuration
|
||||||
import androidx.compose.runtime.mutableFloatStateOf
|
import androidx.compose.runtime.mutableFloatStateOf
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import androidx.lifecycle.ViewModel
|
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() {
|
class TileViewModel(application: Application): ViewModel() {
|
||||||
val repository: TileRepository
|
val repository: TileRepository
|
||||||
|
|
@ -16,8 +19,8 @@ class TileViewModel(application: Application): ViewModel() {
|
||||||
var latitudeText = mutableStateOf(TextFieldValue(""))
|
var latitudeText = mutableStateOf(TextFieldValue(""))
|
||||||
var longitudeText = mutableStateOf(TextFieldValue(""))
|
var longitudeText = mutableStateOf(TextFieldValue(""))
|
||||||
|
|
||||||
val mapOffsetX = mutableFloatStateOf(-646.65625F)
|
val mapOffsetX = mutableFloatStateOf(MAP_START_OFFSET_X)
|
||||||
val mapOffsetY = mutableFloatStateOf(-1157.2814F)
|
val mapOffsetY = mutableFloatStateOf(MAP_START_OFFSET_Y)
|
||||||
val scale = mutableFloatStateOf(2F)
|
val scale = mutableFloatStateOf(2F)
|
||||||
var maxLevel = mutableIntStateOf(2)
|
var maxLevel = mutableIntStateOf(2)
|
||||||
|
|
||||||
|
|
@ -28,6 +31,8 @@ class TileViewModel(application: Application): ViewModel() {
|
||||||
var rememberedPointLat = mutableFloatStateOf(0F)
|
var rememberedPointLat = mutableFloatStateOf(0F)
|
||||||
var rememberedPointHeight = mutableIntStateOf(0)
|
var rememberedPointHeight = mutableIntStateOf(0)
|
||||||
|
|
||||||
|
var lastOrientation = mutableIntStateOf(Configuration.ORIENTATION_PORTRAIT)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val tileDb = TileDB.getInstance(application)
|
val tileDb = TileDB.getInstance(application)
|
||||||
val tileDao = tileDb.tileDao()
|
val tileDao = tileDb.tileDao()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue