fix: reopening crafting would reset the visible mult to 1 but internally wouldn't

This commit is contained in:
minjaesong
2023-09-11 00:18:27 +09:00
parent bca47840fa
commit 75213f2ae5
2 changed files with 31 additions and 25 deletions

View File

@@ -391,8 +391,7 @@ class UICrafting(val full: UIInventoryFull) : UICanvas(), HasInventory {
}
private fun resetSpinner(value: Long = 1L) {
spinnerCraftCount.value = value
spinnerCraftCount.fboUpdateLatch = true
spinnerCraftCount.resetToSmallest()
itemListIngredients.numberMultiplier = value
itemListCraftable.numberMultiplier = value
}
@@ -541,7 +540,7 @@ class UICrafting(val full: UIInventoryFull) : UICanvas(), HasInventory {
* For each ingredient of the recipe, returns list of (ingredient, how many the player has the ingredient, how many the recipe wants)
*/
fun recipeToIngredientRecord(inventory: FixtureInventory, recipe: CraftingCodex.CraftingRecipe, nearbyCraftingStations: List<String>): List<RecipeIngredientRecord> {
val hasStation = if (recipe.workbench.isEmpty()) true else nearbyCraftingStations.contains(recipe.workbench)
val hasStation = if (recipe.workbench.isBlank()) true else nearbyCraftingStations.contains(recipe.workbench)
return recipe.ingredients.map { ingredient ->
val selectedItem = if (ingredient.keyMode == CraftingCodex.CraftingItemKeyMode.TAG) {
// If the player has the required item, use it; otherwise, will take an item from the ItemCodex

View File

@@ -1,7 +1,5 @@
package net.torvald.terrarum.ui
import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.App
@@ -9,7 +7,6 @@ import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.ceilToInt
import kotlin.math.absoluteValue
import kotlin.math.roundToInt
/**
* Internal properties, namely initialValue, min, max, step; have the type of [Double] regardless of their input type.
@@ -38,6 +35,29 @@ class UIItemSpinner(
init {
// println("valueType=${valueType.canonicalName} for UI ${parentUI.javaClass.canonicalName}")
resetToInitial()
}
private val valueType = initialValue.javaClass // should be java.lang.Double or java.lang.Integer
private val labels = CommonResourcePool.getAsTextureRegionPack("inventory_category")
override val height = 24
private val buttonW = 30
private val fboWidth = width - 2*buttonW - 6
private val fboHeight = height - 4
// private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, false)
var value = initialValue.toDouble().coerceIn(min.toDouble(), max.toDouble()) as Number; private set
var fboUpdateLatch = true
private var mouseOnButton = 0 // 0: nothing, 1: left, 2: right
var selectionChangeListener: (Number) -> Unit = {}
private var currentIndex = values.indexOfFirst { it == initialValue.toDouble() }
fun resetToInitial() {
// if the initial value cannot be derived from the settings, round to nearest
if (values.indexOfFirst { it == initialValue.toDouble() } < 0) {
// throw IllegalArgumentException("Initial value $initialValue cannot be derived from given ($min..$max step $step) settings")
@@ -54,27 +74,14 @@ class UIItemSpinner(
else -> intermediate
}
}
fboUpdateLatch = true
}
private val valueType = initialValue.javaClass // should be java.lang.Double or java.lang.Integer
private val labels = CommonResourcePool.getAsTextureRegionPack("inventory_category")
override val height = 24
private val buttonW = 30
private val fboWidth = width - 2*buttonW - 6
private val fboHeight = height - 4
// private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 2*buttonW - 6, height - 4, false)
var value = initialValue.toDouble().coerceIn(min.toDouble(), max.toDouble()) as Number
var fboUpdateLatch = true
private var mouseOnButton = 0 // 0: nothing, 1: left, 2: right
var selectionChangeListener: (Number) -> Unit = {}
private var currentIndex = values.indexOfFirst { it == initialValue.toDouble() }
fun resetToSmallest() {
currentIndex = 0
value = values[currentIndex]
fboUpdateLatch = true
}
private fun changeValueBy(diff: Int) {
currentIndex = (currentIndex + diff).coerceIn(values.indices)