From 7416f15def2f9b407ad686b96ab8737780d25057 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 4 Apr 2024 00:08:19 +0900 Subject: [PATCH] more haptic for sliders --- src/net/torvald/terrarum/ui/UIItem.kt | 4 +++- .../torvald/terrarum/ui/UIItemHorzSlider.kt | 11 ++++++++++- .../torvald/terrarum/ui/UIItemVertSlider.kt | 18 +++++++++++++----- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index e221b1173..154016336 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -284,7 +284,9 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I } object UIItemAccessibilityUtil { - // TODO have multiple bop instances (num of copies equal to guiTracks), then play the track with its index according to getFreeGuiTrack() + fun playHapticNudge() { + App.playGUIsound(CommonResourcePool.getAs("sound:haptic_bup"), 0.25) + } fun playHapticCursorHovered() { App.playGUIsound(CommonResourcePool.getAs("sound:haptic_bap"), 0.25) } diff --git a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt index 9e3645fb2..f7e0f76e5 100644 --- a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.* import net.torvald.terrarum.ui.UIItemAccessibilityUtil.playHapticCursorHovered +import net.torvald.terrarum.ui.UIItemAccessibilityUtil.playHapticNudge import net.torvald.terrarum.ui.UIItemAccessibilityUtil.playHapticPushedDown import kotlin.math.absoluteValue import kotlin.math.roundToInt @@ -47,6 +48,8 @@ class UIItemHorzSlider( private var mouseLatched = false // trust me this one needs its own binary latch + private var oldValue = initialValue + override fun update(delta: Float) { super.update(delta) @@ -54,16 +57,22 @@ class UIItemHorzSlider( // update handle position and value if (mouseUp && Terrarum.mouseDown || mouseLatched) { - if (!mouseLatched) playHapticPushedDown() mouseLatched = true handlePos = (itemRelativeMouseX - handleWidth/2.0).coerceIn(0.0, handleTravelDist.toDouble()) value = interpolateLinear(handlePos / handleTravelDist, min, max) selectionChangeListener(value) + if (oldValue != value && (value == min || value == max)) { + playHapticNudge() + } } if (!Terrarum.mouseDown) { mouseLatched = false } + + suppressHaptic = mouseLatched + + oldValue = value } val troughBorderCol: Color; get() = if (mouseUp || mouseLatched) Toolkit.Theme.COL_MOUSE_UP else Toolkit.Theme.COL_INACTIVE diff --git a/src/net/torvald/terrarum/ui/UIItemVertSlider.kt b/src/net/torvald/terrarum/ui/UIItemVertSlider.kt index df8c41661..c2d556738 100644 --- a/src/net/torvald/terrarum/ui/UIItemVertSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemVertSlider.kt @@ -4,8 +4,12 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.blendNormalStraightAlpha +import net.torvald.terrarum.interpolateLinear +import net.torvald.terrarum.tryDispose +import net.torvald.terrarum.ui.UIItemAccessibilityUtil.playHapticNudge import net.torvald.terrarum.ui.UIItemAccessibilityUtil.playHapticPushedDown import kotlin.math.roundToInt @@ -41,9 +45,7 @@ class UIItemVertSlider( private var mouseLatched = false // trust me this one needs its own binary latch - init { - printdbg(this, "slider max=$max") - } + private var oldValue = initialValue override fun update(delta: Float) { super.update(delta) @@ -52,16 +54,22 @@ class UIItemVertSlider( // update handle position and value if (mouseUp && Terrarum.mouseDown || mouseLatched) { - if (!mouseLatched) playHapticPushedDown() mouseLatched = true handlePos = (itemRelativeMouseY - handleHeight/2.0).coerceIn(0.0, handleTravelDist.toDouble()) value = interpolateLinear(handlePos / handleTravelDist, min, max) selectionChangeListener(value) + if (oldValue != value && (value == min || value == max)) { + playHapticNudge() + } } if (!Terrarum.mouseDown) { mouseLatched = false } + + suppressHaptic = mouseLatched + + oldValue = value } val troughBorderCol: Color; get() = if (mouseUp || mouseLatched) Toolkit.Theme.COL_MOUSE_UP else Toolkit.Theme.COL_INACTIVE