diff --git a/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsNames.kt b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsNames.kt index a46ab68d0..a53a0253e 100644 --- a/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsNames.kt +++ b/src/main/java/de/bixilon/minosoft/config/config/game/controls/KeyBindingsNames.kt @@ -17,38 +17,12 @@ 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.registries.ResourceLocation -import de.bixilon.minosoft.util.KUtil.toResourceLocation +@Deprecated(message = "Use new system with providing default key bindings when registering instead of \"pre registering\" the key") 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_TOGGLE_FLY = ResourceLocation("minosoft:move_toggle_fly") - val MOVE_FLY_UP = ResourceLocation("minosoft:move_fly_up") - val MOVE_FLY_DOWN = ResourceLocation("minosoft:move_fly_down") - val MOVE_SNEAK = ResourceLocation("minosoft:move_sneak") - val MOVE_JUMP = ResourceLocation("minosoft:move_jump") - - val DESTROY_BLOCK = ResourceLocation("minosoft:destroy_block") - - val DROP_ITEM = "minosoft:drop_item".toResourceLocation() - val DROP_ITEM_STACK = "minosoft:drop_item_stack".toResourceLocation() - - 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 DEBUG_PAUSE_INCOMING_PACKETS = ResourceLocation("minosoft:pause_incoming_packets") - val DEBUG_PAUSE_OUTGOING_PACKETS = ResourceLocation("minosoft:pause_outgoing_packets") - - val TAKE_SCREENSHOT = ResourceLocation("minosoft:take_screenshot") val TOGGLE_HUD = ResourceLocation("minosoft:toggle_hud") @@ -57,161 +31,12 @@ object KeyBindingsNames { val CLOSE = ResourceLocation("minosoft:close") - val BLOCK_INTERACT = ResourceLocation("minosoft:interact_block") - - - 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_TOGGLE_FLY to KeyBinding( - mutableMapOf( - KeyAction.DOUBLE_PRESS to mutableSetOf(KeyCodes.KEY_SPACE), - ), - ), - MOVE_FLY_DOWN to KeyBinding( - mutableMapOf( - KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT), - ), - ), - MOVE_SNEAK to KeyBinding( - mutableMapOf( - KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT), - ), - ), - DESTROY_BLOCK to KeyBinding( - mutableMapOf( - KeyAction.CHANGE to mutableSetOf(KeyCodes.MOUSE_BUTTON_LEFT), - ), - ), - ZOOM to KeyBinding( - mutableMapOf( - KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C), - ), - ), TOGGLE_DEBUG_SCREEN to KeyBinding( mutableMapOf( KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_F3), ), ), - DEBUG_POLYGON to KeyBinding( - mutableMapOf( - KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), - KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_P), - ), - ), - DEBUG_MOUSE_CATCH to KeyBinding( - mutableMapOf( - KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), - KeyAction.STICKY 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), - ), - ignoreConsumer = true, - ), - 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), @@ -228,35 +53,5 @@ object KeyBindingsNames { ), ignoreConsumer = true, ), - BLOCK_INTERACT to KeyBinding( - mutableMapOf( - KeyAction.CHANGE to mutableSetOf(KeyCodes.MOUSE_BUTTON_RIGHT), - ), - ), - DEBUG_PAUSE_INCOMING_PACKETS to KeyBinding( - mutableMapOf( - KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), - KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_I), - ), - ignoreConsumer = true, - ), - DEBUG_PAUSE_OUTGOING_PACKETS to KeyBinding( - mutableMapOf( - KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), - KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_O), - ), - ignoreConsumer = true, - ), - DROP_ITEM to KeyBinding( - mutableMapOf( - KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_Q), - ), - ), - DROP_ITEM_STACK to KeyBinding( - mutableMapOf( - KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_Q), - KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_LEFT_CONTROL) - ), - ), ) } 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 087ae589e..b3ea65811 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt @@ -15,7 +15,9 @@ package de.bixilon.minosoft.gui.rendering import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.config.StaticConfiguration -import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames +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.registries.ResourceLocation import de.bixilon.minosoft.gui.rendering.block.WorldRenderer import de.bixilon.minosoft.gui.rendering.block.chunk.ChunkBorderRenderer @@ -46,6 +48,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.CountUpAndDownLatch import de.bixilon.minosoft.util.KUtil.decide import de.bixilon.minosoft.util.KUtil.synchronizedMapOf +import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.MMath.round10 import de.bixilon.minosoft.util.Queue import de.bixilon.minosoft.util.Stopwatch @@ -216,20 +219,48 @@ class RenderWindow( } private fun registerGlobalKeyCombinations() { - inputHandler.registerKeyCallback(KeyBindingsNames.DEBUG_POLYGON) { + inputHandler.registerKeyCallback("minosoft:debug_polygon".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), + KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_P), + ), + )) { val nextMode = it.decide(PolygonModes.LINE, PolygonModes.FILL) renderSystem.polygonMode = nextMode sendDebugMessage("Set polygon to: $nextMode") } - inputHandler.registerKeyCallback(KeyBindingsNames.QUIT_RENDERING) { window.close() } - inputHandler.registerKeyCallback(KeyBindingsNames.TAKE_SCREENSHOT) { screenshotTaker.takeScreenshot() } + inputHandler.registerKeyCallback("minosoft:quit_rendering".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.RELEASE to mutableSetOf(KeyCodes.KEY_ESCAPE), + ), + )) { window.close() } - inputHandler.registerKeyCallback(KeyBindingsNames.DEBUG_PAUSE_INCOMING_PACKETS) { + inputHandler.registerKeyCallback("minosoft:take_screenshot".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_F2), + ), + ignoreConsumer = true, + )) { screenshotTaker.takeScreenshot() } + + inputHandler.registerKeyCallback("minosoft:pause_incoming_packets".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), + KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_I), + ), + ignoreConsumer = true, + )) { sendDebugMessage("Pausing incoming packets: $it") connection.network.pauseReceiving(it) } - inputHandler.registerKeyCallback(KeyBindingsNames.DEBUG_PAUSE_OUTGOING_PACKETS) { + + inputHandler.registerKeyCallback("minosoft:pause_outgoing_packets".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), + KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_O), + ), + ignoreConsumer = true, + )) { sendDebugMessage("Pausing outgoing packets: $it") connection.network.pauseSending(it) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt index 52f183bc2..967b22c3b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt @@ -13,7 +13,9 @@ package de.bixilon.minosoft.gui.rendering.block -import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames +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.direction.Directions import de.bixilon.minosoft.data.direction.FakeDirection import de.bixilon.minosoft.data.registries.ResourceLocation @@ -47,6 +49,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.synchronizedMapOf import de.bixilon.minosoft.util.KUtil.synchronizedSetOf +import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toSynchronizedMap import de.bixilon.minosoft.util.collections.SynchronizedMap import de.bixilon.minosoft.util.task.pool.DefaultThreadPool @@ -145,7 +148,12 @@ class WorldRenderer( // register keybindings - renderWindow.inputHandler.registerKeyCallback(KeyBindingsNames.DEBUG_CLEAR_CHUNK_CACHE) { + renderWindow.inputHandler.registerKeyCallback("minosoft:debug_clear_chunk_cache".toResourceLocation(), KeyBinding( + mutableMapOf( + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F3), + KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_A), + ), + )) { clearChunkCache() renderWindow.sendDebugMessage("Cleared chunk cache!") prepareWorld(world) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt index 427977958..bafecf9f0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt @@ -13,7 +13,9 @@ package de.bixilon.minosoft.gui.rendering.input -import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames +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.abilities.Gamemodes import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.inventory.ItemStack @@ -30,6 +32,7 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.BlockBreakC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.synchronizedMapOf +import de.bixilon.minosoft.util.KUtil.toResourceLocation import glm_.pow import glm_.vec3.Vec3i @@ -243,7 +246,11 @@ class LeftClickHandler( } fun init() { - renderWindow.inputHandler.registerCheckCallback(KeyBindingsNames.DESTROY_BLOCK) + renderWindow.inputHandler.registerCheckCallback(DESTROY_BLOCK_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.MOUSE_BUTTON_LEFT), + ), + )) connection.registerEvent(CallbackEventInvoker.of { when (it.breakType) { @@ -269,7 +276,7 @@ class LeftClickHandler( } fun draw(deltaTime: Double) { - val isKeyDown = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.DESTROY_BLOCK) + val isKeyDown = renderWindow.inputHandler.isKeyBindingDown(DESTROY_BLOCK_KEYBINDING) // ToDo: Entity attacking val consumed = checkBreaking(isKeyDown, deltaTime) @@ -281,4 +288,8 @@ class LeftClickHandler( } swingArm() } + + companion object { + private val DESTROY_BLOCK_KEYBINDING = "minosoft:destroy_block".toResourceLocation() + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt index 0bd31ace9..9210c260d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt @@ -13,7 +13,9 @@ package de.bixilon.minosoft.gui.rendering.input -import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames +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.abilities.Gamemodes import de.bixilon.minosoft.data.player.Hands import de.bixilon.minosoft.data.registries.blocks.BlockUsages @@ -22,6 +24,7 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.BlockPlaceC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.ItemUseC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.KUtil.toResourceLocation import glm_.vec3.Vec3 class RightClickHandler( @@ -32,7 +35,11 @@ class RightClickHandler( private var lastInteractionSent = 0L fun init() { - renderWindow.inputHandler.registerCheckCallback(KeyBindingsNames.BLOCK_INTERACT) + renderWindow.inputHandler.registerCheckCallback(BLOCK_INTERACT_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.MOUSE_BUTTON_RIGHT), + ), + )) } private fun checkInteraction(isKeyDown: Boolean) { @@ -132,6 +139,10 @@ class RightClickHandler( fun draw(deltaTime: Double) { // ToDo: Entity interaction, shield/sword blocking, etc - checkInteraction(renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.BLOCK_INTERACT)) + checkInteraction(renderWindow.inputHandler.isKeyBindingDown(BLOCK_INTERACT_KEYBINDING)) + } + + companion object { + private val BLOCK_INTERACT_KEYBINDING = "minosoft:interact_block".toResourceLocation() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt index c09183e97..e071612e7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt @@ -14,7 +14,9 @@ package de.bixilon.minosoft.gui.rendering.input.camera import de.bixilon.minosoft.Minosoft -import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames +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.entities.EntityRotation import de.bixilon.minosoft.data.player.LocalPlayerEntity import de.bixilon.minosoft.data.registries.VoxelShape @@ -40,6 +42,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.play.BlockBreakC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.decide +import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.Previous import glm_.func.cos import glm_.func.rad @@ -149,17 +152,61 @@ class Camera( fun init(renderWindow: RenderWindow) { renderWindow.inputHandler.registerCheckCallback( - KeyBindingsNames.MOVE_SPRINT, - KeyBindingsNames.MOVE_FORWARD, - KeyBindingsNames.MOVE_BACKWARDS, - KeyBindingsNames.MOVE_LEFT, - KeyBindingsNames.MOVE_RIGHT, - KeyBindingsNames.MOVE_FLY_UP, - KeyBindingsNames.MOVE_FLY_DOWN, - KeyBindingsNames.ZOOM, - KeyBindingsNames.MOVE_JUMP, - KeyBindingsNames.MOVE_SNEAK, - KeyBindingsNames.MOVE_TOGGLE_FLY, + MOVE_SPRINT_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_CONTROL), + ), + ), + MOVE_FORWARDS_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_W), + ), + ), + MOVE_BACKWARDS_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_S), + ), + ), + MOVE_LEFT_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_A), + ), + ), + MOVE_RIGHT_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_D), + ), + ), + FLY_UP_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE), + ), + ), + FLY_DOWN_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT), + ), + ), + ZOOM_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C), + ), + ), + JUMP_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_SPACE), + ), + ), + SNEAK_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT), + ), + ), + TOGGLE_FLY_KEYBINDING to KeyBinding( + mutableMapOf( + KeyAction.DOUBLE_PRESS to mutableSetOf(KeyCodes.KEY_SPACE), + ), + ), ) connection.registerEvent(CallbackEventInvoker.of { recalculateViewProjectionMatrix() }) @@ -173,8 +220,18 @@ class Camera( lastDropPacketSent = time } - renderWindow.inputHandler.registerKeyCallback(KeyBindingsNames.DROP_ITEM) { dropItem(BlockBreakC2SP.BreakType.DROP_ITEM) } - renderWindow.inputHandler.registerKeyCallback(KeyBindingsNames.DROP_ITEM_STACK) { dropItem(BlockBreakC2SP.BreakType.DROP_ITEM_STACK) } + // ToDo: This has nothing todo with the camera, should be in the interaction manager + renderWindow.inputHandler.registerKeyCallback(DROP_ITEM_KEYBINDING, KeyBinding( + mutableMapOf( + KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_Q), + ), + )) { dropItem(BlockBreakC2SP.BreakType.DROP_ITEM) } + renderWindow.inputHandler.registerKeyCallback(DROP_ITEM_STACK_KEYBINDING, KeyBinding( + mutableMapOf( + KeyAction.PRESS to mutableSetOf(KeyCodes.KEY_Q), + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_LEFT_CONTROL) + ), + )) { dropItem(BlockBreakC2SP.BreakType.DROP_ITEM_STACK) } frustum.recalculate() connection.fireEvent(FrustumChangeEvent(renderWindow, frustum)) } @@ -251,16 +308,16 @@ class Camera( } //val input = if (renderWindow.inputHandler.currentKeyConsumer == null) { val input = MovementInput( - pressingForward = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_FORWARD), - pressingBack = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_BACKWARDS), - pressingLeft = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_LEFT), - pressingRight = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_RIGHT), - jumping = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_JUMP), - sneaking = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_SNEAK), - sprinting = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_SPRINT), - flyDown = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_FLY_DOWN), - flyUp = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_FLY_UP), - toggleFlyDown = renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_TOGGLE_FLY), + pressingForward = renderWindow.inputHandler.isKeyBindingDown(MOVE_FORWARDS_KEYBINDING), + pressingBack = renderWindow.inputHandler.isKeyBindingDown(MOVE_BACKWARDS_KEYBINDING), + pressingLeft = renderWindow.inputHandler.isKeyBindingDown(MOVE_LEFT_KEYBINDING), + pressingRight = renderWindow.inputHandler.isKeyBindingDown(MOVE_RIGHT_KEYBINDING), + jumping = renderWindow.inputHandler.isKeyBindingDown(JUMP_KEYBINDING), + sneaking = renderWindow.inputHandler.isKeyBindingDown(SNEAK_KEYBINDING), + sprinting = renderWindow.inputHandler.isKeyBindingDown(MOVE_SPRINT_KEYBINDING), + flyDown = renderWindow.inputHandler.isKeyBindingDown(FLY_DOWN_KEYBINDING), + flyUp = renderWindow.inputHandler.isKeyBindingDown(FLY_UP_KEYBINDING), + toggleFlyDown = renderWindow.inputHandler.isKeyBindingDown(TOGGLE_FLY_KEYBINDING), ) //} else { // MovementInput() @@ -268,7 +325,7 @@ class Camera( connection.player.input = input connection.player.tick() // The thread pool might be busy, we force a tick here to avoid lagging - zoom = if (renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.ZOOM)) { + zoom = if (renderWindow.inputHandler.isKeyBindingDown(ZOOM_KEYBINDING)) { 2f } else { 0.0f @@ -375,5 +432,24 @@ class Camera( val CAMERA_UP_VEC3 = Vec3d(0.0, 1.0, 0.0) private const val RAYCAST_MAX_STEPS = 100 + + private val MOVE_SPRINT_KEYBINDING = "minosoft:move_sprint".toResourceLocation() + private val MOVE_FORWARDS_KEYBINDING = "minosoft:move_forward".toResourceLocation() + private val MOVE_BACKWARDS_KEYBINDING = "minosoft:move_backwards".toResourceLocation() + private val MOVE_LEFT_KEYBINDING = "minosoft:move_left".toResourceLocation() + private val MOVE_RIGHT_KEYBINDING = "minosoft:move_right".toResourceLocation() + + private val SNEAK_KEYBINDING = "minosoft:move_sneak".toResourceLocation() + private val JUMP_KEYBINDING = "minosoft:move_jump".toResourceLocation() + + private val TOGGLE_FLY_KEYBINDING = "minosoft:move_toggle_fly".toResourceLocation() + private val FLY_UP_KEYBINDING = "minosoft:move_fly_up".toResourceLocation() + private val FLY_DOWN_KEYBINDING = "minosoft:move_fly_down".toResourceLocation() + + private val ZOOM_KEYBINDING = "minosoft:zoom".toResourceLocation() + + + private val DROP_ITEM_KEYBINDING = "minosoft:drop_item".toResourceLocation() + private val DROP_ITEM_STACK_KEYBINDING = "minosoft:drop_item_stack".toResourceLocation() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/RenderWindowInputHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/RenderWindowInputHandler.kt index d20e7d362..79833b871 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/RenderWindowInputHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/RenderWindowInputHandler.kt @@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.input.key import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames 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.registries.ResourceLocation import de.bixilon.minosoft.gui.rendering.RenderConstants @@ -49,7 +50,12 @@ class RenderWindowInputHandler( val leftClickHandler = LeftClickHandler(renderWindow) init { - registerKeyCallback(KeyBindingsNames.DEBUG_MOUSE_CATCH) { + registerKeyCallback(KeyBindingsNames.DEBUG_MOUSE_CATCH, KeyBinding( + mutableMapOf( + KeyAction.MODIFIER to mutableSetOf(KeyCodes.KEY_F4), + KeyAction.STICKY to mutableSetOf(KeyCodes.KEY_M), + ), + )) { renderWindow.window.cursorMode = it.decide(CursorModes.DISABLED, CursorModes.NORMAL) renderWindow.sendDebugMessage("Toggled mouse catch!") } @@ -220,8 +226,8 @@ class RenderWindowInputHandler( //currentKeyConsumer?.charInput(char.toChar()) } - fun registerKeyCallback(resourceLocation: ResourceLocation, callback: ((keyDown: Boolean) -> Unit)) { - val keyBinding = Minosoft.config.config.game.controls.keyBindings.entries[resourceLocation] ?: return + fun registerKeyCallback(resourceLocation: ResourceLocation, defaultKeyBinding: KeyBinding, callback: ((keyDown: Boolean) -> Unit)) { + val keyBinding = Minosoft.config.config.game.controls.keyBindings.entries.getOrPut(resourceLocation) { defaultKeyBinding } // ToDo (Performance): Should the defaultKeyBinding be a lambda parameter? val callbackPair = keyBindingCallbacks.getOrPut(resourceLocation) { KeyBindingCallbackPair(keyBinding) } if (keyBinding.ignoreConsumer) { callbackPair.callback += callback @@ -235,10 +241,9 @@ class RenderWindowInputHandler( } } - fun registerCheckCallback(vararg resourceLocations: ResourceLocation) { - for (resourceLocation in resourceLocations) { - val keyBinding = Minosoft.config.config.game.controls.keyBindings.entries[resourceLocation] ?: return - keyBindingCallbacks.getOrPut(resourceLocation) { KeyBindingCallbackPair(keyBinding) } + fun registerCheckCallback(vararg checks: Pair) { + for ((resourceLocation, defaultKeyBinding) in checks) { + keyBindingCallbacks.getOrPut(resourceLocation) { KeyBindingCallbackPair(Minosoft.config.config.game.controls.keyBindings.entries.getOrPut(resourceLocation) { defaultKeyBinding }) } } }