Add better key binding support
This commit is contained in:
@@ -7,17 +7,24 @@
|
||||
package moe.nea.firmament.keybindings
|
||||
|
||||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper
|
||||
import org.lwjgl.glfw.GLFW
|
||||
import net.minecraft.client.option.KeyBinding
|
||||
import net.minecraft.client.util.InputUtil
|
||||
import moe.nea.firmament.features.inventory.SlotLocking
|
||||
import moe.nea.firmament.gui.config.ManagedConfig
|
||||
|
||||
object FirmamentKeyBindings {
|
||||
val SLOT_LOCKING = KeyBindingHelper.registerKeyBinding(
|
||||
KeyBinding(
|
||||
"firmament.key.slotlocking",
|
||||
InputUtil.Type.KEYSYM,
|
||||
GLFW.GLFW_KEY_L,
|
||||
"firmament.key.category"
|
||||
fun registerKeyBinding(name: String, config: ManagedConfig) {
|
||||
val vanillaKeyBinding = KeyBindingHelper.registerKeyBinding(
|
||||
KeyBinding(
|
||||
name,
|
||||
InputUtil.Type.KEYSYM,
|
||||
-1,
|
||||
"firmament.key.category"
|
||||
)
|
||||
)
|
||||
)
|
||||
keyBindings[vanillaKeyBinding] = config
|
||||
}
|
||||
|
||||
val keyBindings = mutableMapOf<KeyBinding, ManagedConfig>()
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package moe.nea.firmament.keybindings
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.lwjgl.glfw.GLFW
|
||||
|
||||
@Serializable
|
||||
data class SavedKeyBinding(
|
||||
val keyCode: Int,
|
||||
val shift: Boolean = false,
|
||||
val ctrl: Boolean = false,
|
||||
val alt: Boolean = false,
|
||||
) : IKeyBinding {
|
||||
constructor(keyCode: Int, mods: Triple<Boolean, Boolean, Boolean>) : this(
|
||||
keyCode,
|
||||
mods.first && keyCode != GLFW.GLFW_KEY_LEFT_SHIFT && keyCode != GLFW.GLFW_KEY_RIGHT_SHIFT,
|
||||
mods.second && keyCode != GLFW.GLFW_KEY_LEFT_CONTROL && keyCode != GLFW.GLFW_KEY_RIGHT_CONTROL,
|
||||
mods.third && keyCode != GLFW.GLFW_KEY_LEFT_ALT && keyCode != GLFW.GLFW_KEY_RIGHT_ALT,
|
||||
)
|
||||
|
||||
constructor(keyCode: Int, mods: Int) : this(keyCode, getMods(mods))
|
||||
|
||||
companion object {
|
||||
fun getMods(modifiers: Int): Triple<Boolean, Boolean, Boolean> {
|
||||
return Triple(
|
||||
modifiers and GLFW.GLFW_MOD_SHIFT != 0,
|
||||
modifiers and GLFW.GLFW_MOD_CONTROL != 0,
|
||||
modifiers and GLFW.GLFW_MOD_ALT != 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun matches(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
|
||||
return keyCode == this.keyCode && getMods(modifiers) == Triple(shift, ctrl, alt)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user