fix key bindings toggle when inputHandler is set

This commit is contained in:
Bixilon 2022-01-26 08:42:17 +01:00
parent ce0ad2eedf
commit b7a8e570a2
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 26 additions and 15 deletions

View File

@ -18,6 +18,7 @@ import de.bixilon.minosoft.config.key.KeyBinding
data class KeyBindingCallbackPair( data class KeyBindingCallbackPair(
var keyBinding: KeyBinding, var keyBinding: KeyBinding,
val default: KeyBinding, val default: KeyBinding,
val defaultPressed: Boolean = false,
val callback: MutableSet<(keyDown: Boolean) -> Unit> = mutableSetOf(), val callback: MutableSet<(keyDown: Boolean) -> Unit> = mutableSetOf(),
) { ) {
var lastChange = 0L var lastChange = 0L

View File

@ -56,19 +56,7 @@ class RenderWindowInputHandler(
set(value) { set(value) {
field = value field = value
keysDown.clear() deactivateAll()
val toRemove: MutableSet<ResourceLocation> = mutableSetOf()
for (name in keyBindingsDown) {
val pair = keyBindingCallbacks[name] ?: continue
if (pair.keyBinding.action[KeyAction.STICKY] != null) {
continue
}
for (callback in pair.callback) {
callback(false)
}
toRemove += name
}
keyBindingsDown -= toRemove
renderWindow.window.cursorMode = if (value == null) { renderWindow.window.cursorMode = if (value == null) {
CursorModes.DISABLED CursorModes.DISABLED
@ -132,6 +120,29 @@ class RenderWindowInputHandler(
cameraInput.init() cameraInput.init()
} }
private fun deactivateAll() {
keysDown.clear()
keysLastDownTime.clear()
val toRemove: MutableSet<ResourceLocation> = mutableSetOf()
for ((name, pair) in keyBindingCallbacks) {
val down = keyBindingsDown.contains(name)
if (!down || pair.defaultPressed) {
continue
}
// ToDo
if (pair.keyBinding.action[KeyAction.DOUBLE_PRESS] != null) {
continue
}
for (callback in pair.callback) {
callback(false)
}
toRemove += name
}
keyBindingsDown -= toRemove
}
private fun keyInput(keyCode: KeyCodes, keyChangeType: KeyChangeTypes) { private fun keyInput(keyCode: KeyCodes, keyChangeType: KeyChangeTypes) {
val inputHandler = inputHandler val inputHandler = inputHandler
@ -236,7 +247,6 @@ class RenderWindowInputHandler(
continue continue
} }
// Log.debug("Changing $resourceLocation because of $keyCode -> $thisKeyBindingDown")
pair.lastChange = TimeUtil.time pair.lastChange = TimeUtil.time
for (callback in pair.callback) { for (callback in pair.callback) {
callback(thisKeyBindingDown) callback(thisKeyBindingDown)
@ -275,7 +285,7 @@ class RenderWindowInputHandler(
fun registerKeyCallback(resourceLocation: ResourceLocation, defaultKeyBinding: KeyBinding, defaultPressed: Boolean = false, callback: ((keyDown: Boolean) -> Unit)) { fun registerKeyCallback(resourceLocation: ResourceLocation, defaultKeyBinding: KeyBinding, defaultPressed: Boolean = false, callback: ((keyDown: Boolean) -> Unit)) {
val keyBinding = profile.keyBindings.getOrPut(resourceLocation) { defaultKeyBinding } val keyBinding = profile.keyBindings.getOrPut(resourceLocation) { defaultKeyBinding }
val callbackPair = keyBindingCallbacks.getOrPut(resourceLocation) { KeyBindingCallbackPair(keyBinding, defaultKeyBinding) } val callbackPair = keyBindingCallbacks.getOrPut(resourceLocation) { KeyBindingCallbackPair(keyBinding, defaultKeyBinding, defaultPressed) }
callbackPair.callback += callback callbackPair.callback += callback
if (keyBinding.action.containsKey(KeyAction.STICKY) && defaultPressed) { if (keyBinding.action.containsKey(KeyAction.STICKY) && defaultPressed) {