Skip to content

Commit 3c062b3

Browse files
committed
BindSetting & KeyCode rework
1 parent b9bfa68 commit 3c062b3

File tree

12 files changed

+218
-149
lines changed

12 files changed

+218
-149
lines changed

common/src/main/kotlin/com/lambda/config/serializer/KeyCodeSerializer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ package com.lambda.config.serializer
22

33
import com.google.gson.*
44
import com.lambda.util.KeyCode
5+
import com.lambda.util.primitives.extension.displayValue
56
import java.lang.reflect.Type
67

7-
// ToDo: Use key lookup table to store actual key names
88
object KeyCodeSerializer : JsonSerializer<KeyCode>, JsonDeserializer<KeyCode> {
99
override fun serialize(
1010
src: KeyCode?,
1111
typeOfSrc: Type?,
1212
context: JsonSerializationContext?,
1313
): JsonElement =
1414
src?.let {
15-
JsonPrimitive(it.key)
15+
JsonPrimitive(it.displayValue)
1616
} ?: JsonNull.INSTANCE
1717

1818
override fun deserialize(
1919
json: JsonElement?,
2020
typeOfT: Type?,
2121
context: JsonDeserializationContext?,
2222
): KeyCode =
23-
json?.asInt?.let { KeyCode(it) } ?: throw JsonParseException("Invalid key code format")
23+
json?.asString?.let(KeyCode::byNameOrNull) ?: throw JsonParseException("Invalid key code format")
2424
}

common/src/main/kotlin/com/lambda/config/settings/comparable/EnumSetting.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.lambda.config.settings.comparable
22

33
import com.lambda.config.AbstractSetting
4-
import com.lambda.util.Nameable
5-
import java.util.*
64

75
class EnumSetting<T : Enum<T>>(
86
override val name: String,
@@ -14,12 +12,6 @@ class EnumSetting<T : Enum<T>>(
1412
description,
1513
visibility,
1614
) {
17-
val displayValue get() = (value as? Nameable)?.name ?: value.name.split('_').joinToString(" ") { low ->
18-
low.lowercase().replaceFirstChar {
19-
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
20-
}
21-
}
22-
2315
val enumValues: Array<T> = defaultValue.declaringJavaClass.enumConstants
2416

2517
fun next() {

common/src/main/kotlin/com/lambda/gui/api/LambdaGui.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ abstract class LambdaGui(
8080
}
8181

8282
final override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
83-
onEvent(GuiEvent.KeyPress(KeyCode(keyCode)))
83+
KeyCode.byIdOrNull(keyCode)?.let {
84+
onEvent(GuiEvent.KeyPress(it))
85+
}
8486

8587
if (keyCode == KeyCode.Escape.key) {
8688
close()

common/src/main/kotlin/com/lambda/gui/api/component/button/InputBarOverlay.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
2323
protected abstract val interactAnimation: Double
2424
protected abstract val hoverFontAnimation: Double
2525
protected abstract val showAnimation: Double
26+
protected open val isKeyBind: Boolean = false
2627

2728
val activeAnimation by owner.gui.animation.exp(0.0, 1.0, 0.7, ::isActive)
2829
private var typeAnimation by owner.gui.animation.exp({ 0.0 }, 0.2)
@@ -31,7 +32,8 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
3132
private var offset by owner.gui.animation.exp(::targetOffset, 0.4)
3233

3334
abstract fun getText(): String
34-
abstract fun setValue(string: String)
35+
open fun setStringValue(string: String) {}
36+
open fun setKeyValue(key: KeyCode) {}
3537

3638
open fun isCharAllowed(char: Char): Boolean = true
3739

@@ -76,24 +78,38 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
7678
}
7779

7880
is GuiEvent.CharTyped -> {
79-
if (!isActive || !isCharAllowed(e.char)) return
81+
if (!isActive || !isCharAllowed(e.char) || isKeyBind) return
8082
field.text += e.char
8183
typeAnimation = 1.0
8284
}
8385

8486
is GuiEvent.KeyPress -> {
8587
if (!isActive) return
8688

89+
if (isKeyBind) {
90+
val key = when (e.key) {
91+
KeyCode.Delete, KeyCode.Backspace -> KeyCode.Unbound
92+
KeyCode.Escape -> return
93+
else -> e.key
94+
}
95+
96+
setKeyValue(key)
97+
toggle()
98+
return
99+
}
100+
87101
when (e.key) {
88102
KeyCode.Enter -> {
89-
setValue(field.text)
103+
setStringValue(field.text)
90104
toggle()
91105
}
92106

93107
KeyCode.Backspace -> {
94108
field.text = field.text.dropLast(1)
95109
typeAnimation = -1.0
96110
}
111+
112+
else -> {}
97113
}
98114
}
99115
}

common/src/main/kotlin/com/lambda/gui/impl/clickgui/buttons/ModuleButton.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.lambda.config.settings.NumericSetting
44
import com.lambda.config.settings.StringSetting
55
import com.lambda.config.settings.comparable.BooleanSetting
66
import com.lambda.config.settings.comparable.EnumSetting
7+
import com.lambda.config.settings.complex.KeyBindSetting
78
import com.lambda.core.LambdaSound
89
import com.lambda.core.SoundManager.playSoundRandomly
910
import com.lambda.graphics.animation.Animation.Companion.exp
@@ -13,10 +14,7 @@ import com.lambda.gui.api.component.WindowComponent
1314
import com.lambda.gui.api.component.button.ListButton
1415
import com.lambda.gui.api.component.core.list.ChildLayer
1516
import com.lambda.gui.api.layer.RenderLayer
16-
import com.lambda.gui.impl.clickgui.buttons.setting.BooleanButton
17-
import com.lambda.gui.impl.clickgui.buttons.setting.EnumSlider
18-
import com.lambda.gui.impl.clickgui.buttons.setting.NumberSlider
19-
import com.lambda.gui.impl.clickgui.buttons.setting.StringButton
17+
import com.lambda.gui.impl.clickgui.buttons.setting.*
2018
import com.lambda.module.Module
2119
import com.lambda.module.modules.client.GuiSettings
2220
import com.lambda.util.Mouse
@@ -108,6 +106,7 @@ class ModuleButton(
108106
is NumericSetting<*> -> NumberSlider(it, settingsLayer)
109107
is StringSetting -> StringButton(it, settingsLayer)
110108
is EnumSetting<*> -> EnumSlider(it, settingsLayer)
109+
is KeyBindSetting -> BindButton(it, settingsLayer)
111110
else -> null
112111
}
113112
}.forEach(settingsLayer::addChild)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.lambda.gui.impl.clickgui.buttons.setting
2+
3+
import com.lambda.config.settings.complex.KeyBindSetting
4+
import com.lambda.gui.api.GuiEvent
5+
import com.lambda.gui.api.component.button.InputBarOverlay
6+
import com.lambda.gui.api.component.core.list.ChildLayer
7+
import com.lambda.gui.impl.clickgui.AbstractClickGui
8+
import com.lambda.gui.impl.clickgui.buttons.ModuleButton
9+
import com.lambda.gui.impl.clickgui.buttons.SettingButton
10+
import com.lambda.util.KeyCode
11+
import com.lambda.util.math.ColorUtils.multAlpha
12+
import com.lambda.util.primitives.extension.displayValue
13+
14+
class BindButton(
15+
setting: KeyBindSetting,
16+
owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
17+
) : SettingButton<KeyCode, KeyBindSetting>(setting, owner) {
18+
private val layer = ChildLayer.Drawable(owner.gui, this, owner.renderer, ::rect, InputBarOverlay::isActive)
19+
private val inputBar: InputBarOverlay = object : InputBarOverlay(renderer, layer) {
20+
override val pressAnimation get() = this@BindButton.pressAnimation
21+
override val interactAnimation get() = this@BindButton.interactAnimation
22+
override val hoverFontAnimation get() = this@BindButton.hoverFontAnimation
23+
override val showAnimation get() = this@BindButton.showAnimation
24+
override val isKeyBind = true
25+
26+
override fun getText() = value.displayValue
27+
override fun setKeyValue(key: KeyCode) { value = key }
28+
}.apply(layer::addChild)
29+
30+
override val textColor get() = super.textColor.multAlpha(1.0 - inputBar.activeAnimation)
31+
32+
override fun onEvent(e: GuiEvent) {
33+
super.onEvent(e)
34+
layer.onEvent(e)
35+
}
36+
37+
override fun unfocus() {
38+
inputBar.isActive = false
39+
}
40+
41+
override fun performClickAction(e: GuiEvent.MouseClick) {
42+
if (!inputBar.isActive) (owner.gui as? AbstractClickGui)?.unfocusSettings()
43+
inputBar.toggle()
44+
}
45+
}

common/src/main/kotlin/com/lambda/gui/impl/clickgui/buttons/setting/EnumSlider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.lambda.util.math.ColorUtils.setAlpha
1010
import com.lambda.util.math.MathUtils.lerp
1111
import com.lambda.util.math.Vec2d
1212
import com.lambda.util.math.transform
13+
import com.lambda.util.primitives.extension.displayValue
1314
import java.awt.Color
1415
import kotlin.math.floor
1516

@@ -40,7 +41,7 @@ class EnumSlider <T : Enum<T>> (
4041

4142
init {
4243
renderer.font {
43-
text = setting.displayValue
44+
text = value.displayValue
4445

4546
val progress = 1.0 - activeAnimation
4647
scale = lerp(0.5, 1.0, progress)

common/src/main/kotlin/com/lambda/gui/impl/clickgui/buttons/setting/NumberSlider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class NumberSlider <N>(
3232
override val showAnimation get() = this@NumberSlider.showAnimation
3333

3434
override fun getText() = value.let(Number::toString)
35-
override fun setValue(string: String) {
35+
override fun setStringValue(string: String) {
3636
string.toDoubleOrNull()?.let(::setValue)
3737
}
3838
}.apply(layer::addChild)

common/src/main/kotlin/com/lambda/gui/impl/clickgui/buttons/setting/StringButton.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import com.lambda.gui.api.component.core.list.ChildLayer
77
import com.lambda.gui.impl.clickgui.AbstractClickGui
88
import com.lambda.gui.impl.clickgui.buttons.ModuleButton
99
import com.lambda.gui.impl.clickgui.buttons.SettingButton
10-
import com.lambda.util.Mouse
1110
import com.lambda.util.math.ColorUtils.multAlpha
1211

1312
class StringButton(
@@ -22,7 +21,7 @@ class StringButton(
2221
override val showAnimation get() = this@StringButton.showAnimation
2322

2423
override fun getText() = value
25-
override fun setValue(string: String) { value = string }
24+
override fun setStringValue(string: String) { value = string }
2625
}.apply(layer::addChild)
2726

2827
override val textColor get() = super.textColor.multAlpha(1.0 - inputBar.activeAnimation)
@@ -37,7 +36,6 @@ class StringButton(
3736
}
3837

3938
override fun performClickAction(e: GuiEvent.MouseClick) {
40-
if (e.button != Mouse.Button.Right) return
4139
if (!inputBar.isActive) (owner.gui as? AbstractClickGui)?.unfocusSettings()
4240
inputBar.toggle()
4341
}

common/src/main/kotlin/com/lambda/module/modules/player/Freecam.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ object Freecam : Module(
7878
it.context = RotationContext(rotation, rotationConfig)
7979
}
8080

81-
listener<MovementEvent.InputUpdate> { event ->2
81+
listener<MovementEvent.InputUpdate> { event ->
8282
// Don't block baritone from working
8383
if (event.input !is PlayerMovementInput) {
8484
// Reset actual input

0 commit comments

Comments
 (0)