rendering: fix some bugs with double pressing keys

This commit is contained in:
Bixilon 2021-04-23 20:28:05 +02:00
parent 590f3051bf
commit a96d283997
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 17 additions and 6 deletions

View File

@ -19,5 +19,5 @@ data class KeyBindingCallbackPair(
val keyBinding: KeyBinding, val keyBinding: KeyBinding,
val callback: MutableSet<(keyDown: Boolean) -> Unit> = mutableSetOf(), val callback: MutableSet<(keyDown: Boolean) -> Unit> = mutableSetOf(),
) { ) {
var lastChangeDown = false var lastChange = 0L
} }

View File

@ -160,18 +160,27 @@ class RenderWindowInputHandler(
} }
pair.keyBinding.action[KeyAction.DOUBLE_PRESS]?.let { pair.keyBinding.action[KeyAction.DOUBLE_PRESS]?.let {
checksRun++
if (!keyDown) {
thisIsChange = false
return@let
}
if (!it.contains(keyCode)) { if (!it.contains(keyCode)) {
thisIsChange = false thisIsChange = false
return return@let
} }
val lastDownTime = keysLastDownTime[keyCode] val lastDownTime = keysLastDownTime[keyCode]
if (lastDownTime == null) { if (lastDownTime == null) {
thisIsChange = false 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 thisIsChange = false
return return@let
}
if (currentTime - pair.lastChange <= RenderConstants.DOUBLE_PRESS_DELAY_BETWEEN_PRESSED) {
thisIsChange = false
return@let
} }
thisKeyBindingDown = !isKeyBindingDown(resourceLocation) thisKeyBindingDown = !isKeyBindingDown(resourceLocation)
} }
@ -181,6 +190,7 @@ class RenderWindowInputHandler(
} }
// Log.debug("Changing $resourceLocation because of $keyCode -> $thisKeyBindingDown") // Log.debug("Changing $resourceLocation because of $keyCode -> $thisKeyBindingDown")
pair.lastChange = System.currentTimeMillis()
for (callback in pair.callback) { for (callback in pair.callback) {
callback.invoke(thisKeyBindingDown) callback.invoke(thisKeyBindingDown)
} }

View File

@ -71,5 +71,6 @@ object RenderConstants {
const val CAMPFIRE_ITEMS = 4 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
} }