diff --git a/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingNames.kt b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingNames.kt
new file mode 100644
index 000000000..1629d9ccc
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingNames.kt
@@ -0,0 +1,201 @@
+/*
+ * Minosoft
+ * Copyright (C) 2021 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.config.config.game.controls
+
+import de.bixilon.minosoft.config.key.KeyAction
+import de.bixilon.minosoft.config.key.KeyBinding
+import de.bixilon.minosoft.config.key.KeyCodes
+import de.bixilon.minosoft.data.mappings.ResourceLocation
+
+
+object KeyBindingsNames {
+ val MOVE_FORWARD = ResourceLocation("minosoft:move_forward")
+ val MOVE_BACKWARDS = ResourceLocation("minosoft:move_backwards")
+ val MOVE_LEFT = ResourceLocation("minosoft:move_left")
+ val MOVE_RIGHT = ResourceLocation("minosoft:move_right")
+ val MOVE_SPRINT = ResourceLocation("minosoft:move_sprint")
+ val MOVE_FLY_UP = ResourceLocation("minosoft:move_fly_up")
+ val MOVE_FLY_DOWN = ResourceLocation("minosoft:move_fly_down")
+ val MOVE_JUMP = ResourceLocation("minosoft:move_jump")
+
+ val ZOOM = ResourceLocation("minosoft:zoom")
+
+ val QUIT_RENDERING = ResourceLocation("minosoft:quit_rendering")
+
+ val TOGGLE_DEBUG_SCREEN = ResourceLocation("minosoft:toggle_debug_screen")
+ val DEBUG_CLEAR_CHUNK_CACHE = ResourceLocation("minosoft:debug_clear_chunk_cache")
+ val DEBUG_POLYGON = ResourceLocation("minosoft:debug_polygon")
+ val DEBUG_MOUSE_CATCH = ResourceLocation("minosoft:debug_mouse_catch")
+
+ val TAKE_SCREENSHOT = ResourceLocation("minosoft:take_screenshot")
+
+ val TOGGLE_HUD = ResourceLocation("minosoft:toggle_hud")
+
+ val OPEN_CHAT = ResourceLocation("minosoft:open_chat")
+
+ val CLOSE_CHAT = ResourceLocation("minosoft:close_chat")
+
+
+ val SELECT_HOTBAR_SLOTS = arrayOf(ResourceLocation("minosoft:select_hotbar_slot_1"),
+ ResourceLocation("minosoft:select_hotbar_slot_2"),
+ ResourceLocation("minosoft:select_hotbar_slot_3"),
+ ResourceLocation("minosoft:select_hotbar_slot_4"),
+ ResourceLocation("minosoft:select_hotbar_slot_5"),
+ ResourceLocation("minosoft:select_hotbar_slot_6"),
+ ResourceLocation("minosoft:select_hotbar_slot_7"),
+ ResourceLocation("minosoft:select_hotbar_slot_8"),
+ ResourceLocation("minosoft:select_hotbar_slot_9")
+ )
+
+ val DEFAULT_KEY_BINDINGS: Map = mapOf(
+ MOVE_FORWARD to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_W)
+ ),
+ ),
+ MOVE_LEFT to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_A)
+ ),
+ ),
+ MOVE_BACKWARDS to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_S)
+ ),
+ ),
+ MOVE_RIGHT to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_D)
+ ),
+ ),
+ MOVE_SPRINT to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_CONTROL)
+ ),
+ ),
+ MOVE_FLY_UP to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE)
+ ),
+ ),
+ MOVE_JUMP to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE)
+ ),
+ ),
+ MOVE_FLY_DOWN to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT)
+ ),
+ ),
+ ZOOM to KeyBinding(
+ mutableMapOf(
+ KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C)
+ ),
+ ),
+ TOGGLE_DEBUG_SCREEN to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F3)
+ ),
+ ),
+ DEBUG_POLYGON to KeyBinding(
+ mutableMapOf(
+ KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4),
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_P)
+ ),
+ ),
+ DEBUG_MOUSE_CATCH to KeyBinding(
+ mutableMapOf(
+ KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4),
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_M)
+ ),
+ ),
+ QUIT_RENDERING to KeyBinding(
+ mutableMapOf(
+ KeyAction.RELEASE to mutableSetOf(KeyCodes.KEY_ESCAPE)
+ ),
+ ),
+ DEBUG_CLEAR_CHUNK_CACHE to KeyBinding(
+ mutableMapOf(
+ KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F3),
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_A)
+ ),
+ ),
+ TAKE_SCREENSHOT to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F2)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[0] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_1)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[1] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_2)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[2] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_3)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[3] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_4)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[4] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_5)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[5] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_6)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[6] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_7)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[7] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_8)
+ ),
+ ),
+ SELECT_HOTBAR_SLOTS[8] to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_9)
+ ),
+ ),
+ TOGGLE_HUD to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F1)
+ ),
+ ),
+ OPEN_CHAT to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_T)
+ ),
+ ),
+ CLOSE_CHAT to KeyBinding(
+ mutableMapOf(
+ KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_ESCAPE)
+ ),
+ ),
+ )
+}
diff --git a/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsGameConfig.kt b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsGameConfig.kt
index 09aa3ba0d..505090b38 100644
--- a/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsGameConfig.kt
+++ b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsGameConfig.kt
@@ -14,9 +14,7 @@
package de.bixilon.minosoft.config.config.game.controls
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames.DEFAULT_KEY_BINDINGS
-import de.bixilon.minosoft.config.key.KeyAction
import de.bixilon.minosoft.config.key.KeyBinding
-import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.data.mappings.ResourceLocation
data class KeyBindingsGameConfig(
@@ -31,215 +29,3 @@ data class KeyBindingsGameConfig(
}
}
}
-
-object KeyBindingsNames {
- val MOVE_FORWARD = ResourceLocation("minosoft:move_forward")
- val MOVE_BACKWARDS = ResourceLocation("minosoft:move_backwards")
- val MOVE_LEFT = ResourceLocation("minosoft:move_left")
- val MOVE_RIGHT = ResourceLocation("minosoft:move_right")
- val MOVE_SPRINT = ResourceLocation("minosoft:move_sprint")
- val MOVE_FLY_UP = ResourceLocation("minosoft:move_fly_up")
- val MOVE_FLY_DOWN = ResourceLocation("minosoft:move_fly_down")
- val MOVE_JUMP = ResourceLocation("minosoft:move_jump")
-
- val ZOOM = ResourceLocation("minosoft:zoom")
-
- val QUIT_RENDERING = ResourceLocation("minosoft:quit_rendering")
-
- val TOGGLE_DEBUG_SCREEN = ResourceLocation("minosoft:toggle_debug_screen")
- val DEBUG_CLEAR_CHUNK_CACHE = ResourceLocation("minosoft:debug_clear_chunk_cache")
- val DEBUG_POLYGON = ResourceLocation("minosoft:debug_polygon")
- val DEBUG_MOUSE_CATCH = ResourceLocation("minosoft:debug_mouse_catch")
-
- val WHEN_IN_GAME = ResourceLocation("minosoft:in_game")
- val WHEN_PLAYER_IS_FLYING = ResourceLocation("minosoft:is_flying")
- val WHEN_IN_CHAT = ResourceLocation("minosoft:in_chat")
-
- val TAKE_SCREENSHOT = ResourceLocation("minosoft:take_screenshot")
-
- val TOGGLE_HUD = ResourceLocation("minosoft:toggle_hud")
-
- val OPEN_CHAT = ResourceLocation("minosoft:open_chat")
-
- val CLOSE_CHAT = ResourceLocation("minosoft:close_chat")
-
-
- val SELECT_HOTBAR_SLOTS = arrayOf(ResourceLocation("minosoft:select_hotbar_slot_1"),
- ResourceLocation("minosoft:select_hotbar_slot_2"),
- ResourceLocation("minosoft:select_hotbar_slot_3"),
- ResourceLocation("minosoft:select_hotbar_slot_4"),
- ResourceLocation("minosoft:select_hotbar_slot_5"),
- ResourceLocation("minosoft:select_hotbar_slot_6"),
- ResourceLocation("minosoft:select_hotbar_slot_7"),
- ResourceLocation("minosoft:select_hotbar_slot_8"),
- ResourceLocation("minosoft:select_hotbar_slot_9")
- )
-
- val DEFAULT_KEY_BINDINGS: Map = mapOf(
- MOVE_FORWARD to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_W)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_LEFT to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_A)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_BACKWARDS to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_S)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_RIGHT to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_D)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_SPRINT to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_CONTROL)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_FLY_UP to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME, WHEN_PLAYER_IS_FLYING))
- ),
- MOVE_JUMP to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- MOVE_FLY_DOWN to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME, WHEN_PLAYER_IS_FLYING))
- ),
- ZOOM to KeyBinding(
- mutableMapOf(
- KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- TOGGLE_DEBUG_SCREEN to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F3)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- DEBUG_POLYGON to KeyBinding(
- mutableMapOf(
- KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4),
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_P)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- DEBUG_MOUSE_CATCH to KeyBinding(
- mutableMapOf(
- KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4),
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_M)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- QUIT_RENDERING to KeyBinding(
- mutableMapOf(
- KeyAction.RELEASE to mutableSetOf(KeyCodes.KEY_ESCAPE)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- DEBUG_CLEAR_CHUNK_CACHE to KeyBinding(
- mutableMapOf(
- KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F3),
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_A)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- TAKE_SCREENSHOT to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F2)
- ),
- mutableSetOf()
- ),
- SELECT_HOTBAR_SLOTS[0] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_1)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[1] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_2)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[2] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_3)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[3] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_4)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[4] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_5)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[5] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_6)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[6] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_7)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[7] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_8)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- SELECT_HOTBAR_SLOTS[8] to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_9)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- TOGGLE_HUD to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F1)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- OPEN_CHAT to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_T)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_GAME))
- ),
- CLOSE_CHAT to KeyBinding(
- mutableMapOf(
- KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_ESCAPE)
- ),
- mutableSetOf(mutableSetOf(WHEN_IN_CHAT))
- ),
- )
-}
diff --git a/src/main/java/de/bixilon/minosoft/config/key/KeyBinding.kt b/src/main/java/de/bixilon/minosoft/config/key/KeyBinding.kt
index 1d57177b7..c712a718b 100644
--- a/src/main/java/de/bixilon/minosoft/config/key/KeyBinding.kt
+++ b/src/main/java/de/bixilon/minosoft/config/key/KeyBinding.kt
@@ -13,11 +13,8 @@
package de.bixilon.minosoft.config.key
-import de.bixilon.minosoft.data.mappings.ResourceLocation
-
class KeyBinding(
val action: MutableMap>,
- val `when`: MutableSet>,
) {
- constructor(keyBinding: KeyBinding) : this(keyBinding.action.toMutableMap(), keyBinding.`when`.toMutableSet()) // ToDo: Deep copy
+ constructor(keyBinding: KeyBinding) : this(keyBinding.action.toMutableMap()) // ToDo: Deep copy
}
diff --git a/src/main/java/de/bixilon/minosoft/gui/input/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/input/camera/Camera.kt
index e1a6c6ffe..980733bd5 100644
--- a/src/main/java/de/bixilon/minosoft/gui/input/camera/Camera.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/input/camera/Camera.kt
@@ -99,7 +99,7 @@ class Camera(
var yOffset = yPos - this.lastMouseY
lastMouseX = xPos
lastMouseY = yPos
- if (!renderWindow.currentElement.contains(KeyBindingsNames.WHEN_IN_GAME)) {
+ if (renderWindow.currentKeyConsumer != null) {
return
}
xOffset *= mouseSensitivity
@@ -158,6 +158,9 @@ class Camera(
}
fun handleInput(deltaTime: Double) {
+ if (renderWindow.currentKeyConsumer != null) { // ToDo
+ return
+ }
var cameraSpeed = movementSpeed * deltaTime
val movementFront = Vec3(cameraFront)
if (!Minosoft.getConfig().config.game.camera.noCipMovement) {
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
index 9dbd2e95b..bf42a2d9f 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
@@ -88,9 +88,8 @@ class RenderWindow(
val renderQueue = ConcurrentLinkedQueue()
private var _currentInputConsumer: KeyConsumer? = null
- val currentElement: MutableList = mutableListOf(KeyBindingsNames.WHEN_IN_GAME, KeyBindingsNames.WHEN_PLAYER_IS_FLYING)
- private var skipNextChatPress = false
+ private var skipNextCharPress = false
lateinit var WHITE_TEXTURE: TextureLike
@@ -196,34 +195,15 @@ class RenderWindow(
if (keyAction == KeyAction.PRESS) {
// ToDo: Repeatable keys, long holding, etc
-
currentKeyConsumer?.keyInput(keyCode)
}
+ val previousKeyConsumer = currentKeyConsumer
for ((_, keyCallbackPair) in keyBindingCallbacks) {
run {
val keyBinding = keyCallbackPair.first
val keyCallbacks = keyCallbackPair.second
-
- var andWhenValid = keyBinding.`when`.isEmpty()
- for (or in keyBinding.`when`) {
- var andValid = true
- for (and in or) {
- if (!currentElement.contains(and)) {
- andValid = false
- break
- }
- }
- if (andValid) {
- andWhenValid = true
- break
- }
- }
- if (!andWhenValid) {
- return@run
- }
-
var anyCheckRun = false
keyBinding.action[KeyAction.MODIFIER]?.let {
@@ -270,15 +250,17 @@ class RenderWindow(
}
for (keyCallback in keyCallbacks) {
keyCallback.invoke(keyCode, keyAction)
- skipNextChatPress = true
+ if (previousKeyConsumer != currentKeyConsumer) {
+ skipNextCharPress = true
+ }
}
}
}
}
glfwSetCharCallback(windowId) { _: Long, char: Int ->
- if (skipNextChatPress) {
- skipNextChatPress = false
+ if (skipNextCharPress) {
+ skipNextCharPress = false
return@glfwSetCharCallback
}
currentKeyConsumer?.charInput(char.toChar())
@@ -421,7 +403,7 @@ class RenderWindow(
registerKeyCallback(KeyBindingsNames.QUIT_RENDERING) { _: KeyCodes, _: KeyAction ->
glfwSetWindowShouldClose(windowId, true)
}
- registerKeyCallback(KeyBindingsNames.TAKE_SCREENSHOT) { _: KeyCodes, _: KeyAction ->
+ registerKeyCallback(KeyBindingsNames.TAKE_SCREENSHOT, true) { _: KeyCodes, _: KeyAction ->
screenshotTaker.takeScreenshot()
}
}
@@ -514,14 +496,21 @@ class RenderWindow(
connection.fireEvent(RenderingStateChangeEvent(connection, previousState, renderingState))
}
- fun registerKeyCallback(resourceLocation: ResourceLocation, callback: ((keyCode: KeyCodes, keyEvent: KeyAction) -> Unit)) {
+ fun registerKeyCallback(resourceLocation: ResourceLocation, ignoreConsumer: Boolean = false, callback: ((keyCode: KeyCodes, keyEvent: KeyAction) -> Unit)) {
var resourceLocationCallbacks = keyBindingCallbacks[resourceLocation]?.second
if (resourceLocationCallbacks == null) {
resourceLocationCallbacks = mutableSetOf()
val keyBinding = Minosoft.getConfig().config.game.controls.keyBindings.entries[resourceLocation] ?: return
keyBindingCallbacks[resourceLocation] = Pair(keyBinding, resourceLocationCallbacks)
}
- resourceLocationCallbacks.add(callback)
+ resourceLocationCallbacks.add { keyCode, keyEvent ->
+ if (!ignoreConsumer) {
+ if (currentKeyConsumer != null) {
+ return@add
+ }
+ }
+ callback.invoke(keyCode, keyEvent)
+ }
}
fun registerRenderer(renderBuilder: RenderBuilder) {
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/chat/ChatBoxHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/chat/ChatBoxHUDElement.kt
index 65b1054d5..33a3f6147 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/chat/ChatBoxHUDElement.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/chat/ChatBoxHUDElement.kt
@@ -59,15 +59,11 @@ class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), Scr
fun openChat() {
layout.addChild(Vec2i(0, 0), inputFieldBackground)
hudRenderer.renderWindow.currentKeyConsumer = inputField
- hudRenderer.renderWindow.currentElement.remove(KeyBindingsNames.WHEN_IN_GAME)
- hudRenderer.renderWindow.currentElement.add(KeyBindingsNames.WHEN_IN_CHAT)
}
fun closeChat() {
layout.removeChild(inputFieldBackground)
inputField.clearText()
hudRenderer.renderWindow.currentKeyConsumer = null
- hudRenderer.renderWindow.currentElement.remove(KeyBindingsNames.WHEN_IN_CHAT)
- hudRenderer.renderWindow.currentElement.add(KeyBindingsNames.WHEN_IN_GAME)
}
}