diff --git a/core/src/com/unciv/ui/overviewscreen/StatsOverviewTable.kt b/core/src/com/unciv/ui/overviewscreen/StatsOverviewTable.kt index 22ac2b9e05..50c5d288eb 100644 --- a/core/src/com/unciv/ui/overviewscreen/StatsOverviewTable.kt +++ b/core/src/com/unciv/ui/overviewscreen/StatsOverviewTable.kt @@ -1,9 +1,9 @@ package com.unciv.ui.overviewscreen import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.scenes.scene2d.ui.Slider import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.Constants +import com.unciv.UncivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.ruleset.ModOptionsConstants import com.unciv.ui.utils.* @@ -60,15 +60,18 @@ class StatsOverviewTable ( goldTable.addSeparator() val sliderTable = Table() sliderTable.add("Convert gold to science".toLabel()).row() - val slider = Slider(0f, 1f, 0.1f, false, BaseScreen.skin) - slider.value = viewingPlayer.tech.goldPercentConvertedToScience - slider.onChange { - viewingPlayer.tech.goldPercentConvertedToScience = slider.value - viewingPlayer.cities.forEach { it.cityStats.update() } + val slider = UncivSlider(0f, 1f, 0.1f, + initial = viewingPlayer.tech.goldPercentConvertedToScience, + getTipText = UncivSlider::formatPercent + ) { + viewingPlayer.tech.goldPercentConvertedToScience = it + for (city in viewingPlayer.cities) { city.cityStats.update() } overviewScreen.setCategoryActions["Stats"]!!() // ? will probably steal focus and so prevent dragging the slider } - sliderTable.add(slider) + slider.isDisabled = !UncivGame.Current.worldScreen.canChangeState + + sliderTable.add(slider).padTop(15f) goldTable.add(sliderTable).colspan(2) } diff --git a/core/src/com/unciv/ui/utils/UncivSlider.kt b/core/src/com/unciv/ui/utils/UncivSlider.kt index 8c4ac1414e..3bdb10f978 100644 --- a/core/src/com/unciv/ui/utils/UncivSlider.kt +++ b/core/src/com/unciv/ui/utils/UncivSlider.kt @@ -1,5 +1,7 @@ package com.unciv.ui.utils +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.math.Interpolation import com.badlogic.gdx.math.Vector2 @@ -11,6 +13,8 @@ import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Timer import com.unciv.Constants import com.unciv.models.UncivSound +import kotlin.math.abs +import kotlin.math.sign /** * Modified Gdx [Slider] @@ -40,8 +44,12 @@ class UncivSlider ( private val getTipText: ((Float) -> String)? = null, onChange: ((Float) -> Unit)? = null ): Table(BaseScreen.skin) { - // constants for geometry tuning companion object { + /** Can be passed directly to the [getTipText] constructor parameter */ + fun formatPercent(value: Float): String { + return (value * 100f + 0.5f).toInt().toString() + "%" + } + // constants for geometry tuning const val plusMinusFontSize = Constants.defaultFontSize const val plusMinusCircleSize = 20f const val padding = 5f // padding around the Slider, doubled between it and +/- buttons @@ -57,9 +65,14 @@ class UncivSlider ( private val tipContainer: Container