diff --git a/src/main/java/de/bixilon/minosoft/gui/input/key/KeyBindingCallbackPair.kt b/src/main/java/de/bixilon/minosoft/gui/input/key/KeyBindingCallbackPair.kt index 498d13d37..e324191c2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/input/key/KeyBindingCallbackPair.kt +++ b/src/main/java/de/bixilon/minosoft/gui/input/key/KeyBindingCallbackPair.kt @@ -19,5 +19,5 @@ data class KeyBindingCallbackPair( val keyBinding: KeyBinding, val callback: MutableSet<(keyDown: Boolean) -> Unit> = mutableSetOf(), ) { - var lastChangeDown = false + var lastChange = 0L } diff --git a/src/main/java/de/bixilon/minosoft/gui/input/key/RenderWindowInputHandler.kt b/src/main/java/de/bixilon/minosoft/gui/input/key/RenderWindowInputHandler.kt index 1a63b05b1..fb4bbb5a6 100644 --- a/src/main/java/de/bixilon/minosoft/gui/input/key/RenderWindowInputHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/input/key/RenderWindowInputHandler.kt @@ -160,18 +160,27 @@ class RenderWindowInputHandler( } pair.keyBinding.action[KeyAction.DOUBLE_PRESS]?.let { + checksRun++ + if (!keyDown) { + thisIsChange = false + return@let + } if (!it.contains(keyCode)) { thisIsChange = false - return + return@let } val lastDownTime = keysLastDownTime[keyCode] if (lastDownTime == null) { thisIsChange = false - return + return@let } - if (currentTime - lastDownTime > RenderConstants.DOUBLE_PRESS_KEY_MAX_DELAY) { + if (currentTime - lastDownTime > RenderConstants.DOUBLE_PRESS_KEY_PRESS_MAX_DELAY) { thisIsChange = false - return + return@let + } + if (currentTime - pair.lastChange <= RenderConstants.DOUBLE_PRESS_DELAY_BETWEEN_PRESSED) { + thisIsChange = false + return@let } thisKeyBindingDown = !isKeyBindingDown(resourceLocation) } @@ -181,6 +190,7 @@ class RenderWindowInputHandler( } // Log.debug("Changing $resourceLocation because of $keyCode -> $thisKeyBindingDown") + pair.lastChange = System.currentTimeMillis() for (callback in pair.callback) { callback.invoke(thisKeyBindingDown) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderConstants.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderConstants.kt index 8eadc3cb9..547461070 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderConstants.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderConstants.kt @@ -71,5 +71,6 @@ object RenderConstants { const val CAMPFIRE_ITEMS = 4 - const val DOUBLE_PRESS_KEY_MAX_DELAY = 200 + const val DOUBLE_PRESS_KEY_PRESS_MAX_DELAY = 200 + const val DOUBLE_PRESS_DELAY_BETWEEN_PRESSED = 500 }