mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 11:24:56 -04:00
fix key bindings toggle when inputHandler is set
This commit is contained in:
parent
ce0ad2eedf
commit
b7a8e570a2
@ -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
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user