Skip to content

Commit d876309

Browse files
committed
String setting
1 parent cc38ff9 commit d876309

File tree

9 files changed

+89
-40
lines changed

9 files changed

+89
-40
lines changed

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.lambda.gui.api.component.core.list.ChildLayer
77
import com.lambda.gui.api.layer.LayerEntry
88
import com.lambda.module.modules.client.ClickGui
99
import com.lambda.util.KeyCode
10+
import com.lambda.util.math.ColorUtils.multAlpha
1011
import com.lambda.util.math.ColorUtils.setAlpha
1112
import com.lambda.util.math.MathUtils.lerp
1213
import com.lambda.util.math.Rect
@@ -18,18 +19,18 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
1819
override val rect: Rect get() = owner.rect
1920
override var isActive = false
2021

21-
abstract val pressAnimation: Double
22-
abstract val interactAnimation: Double
23-
abstract val hoverFontAnimation: Double
24-
abstract val showAnimation: Double
22+
protected abstract val pressAnimation: Double
23+
protected abstract val interactAnimation: Double
24+
protected abstract val hoverFontAnimation: Double
25+
protected abstract val showAnimation: Double
2526

2627
val activeAnimation by owner.gui.animation.exp(0.0, 1.0, 0.7, ::isActive)
2728
private var typeAnimation by owner.gui.animation.exp({ 0.0 }, 0.2)
2829

2930
private var targetOffset = 0.0
3031
private var offset by owner.gui.animation.exp(::targetOffset, 0.4)
3132

32-
abstract fun getInitText(): String
33+
abstract fun getText(): String
3334
abstract fun setValue(string: String)
3435

3536
open fun isCharAllowed(char: Char): Boolean = true
@@ -53,7 +54,16 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
5354
Vec2d(1.0, rect.bottom - shrink)
5455
) + Vec2d(lerp(rect.right, x, activeAnimation), 0.0)
5556

56-
color(field.color.setAlpha(0.8))
57+
color(field.color.multAlpha(0.8))
58+
}
59+
60+
renderer.font {
61+
text = getText()
62+
63+
val progress = 1.0 - activeAnimation
64+
scale = lerp(0.5, 1.0, progress)
65+
position = Vec2d(rect.right, rect.center.y) - Vec2d(ClickGui.windowPadding + stringWidth, 0.0)
66+
color = Color.WHITE.setAlpha(lerp(0.0, progress, showAnimation))
5767
}
5868
}
5969

@@ -93,7 +103,7 @@ abstract class InputBarOverlay (renderer: LayerEntry, owner: ChildLayer.Drawable
93103
isActive = !isActive
94104

95105
if (isActive) {
96-
field.text = getInitText()
106+
field.text = getText()
97107
targetOffset = field.stringWidth
98108
}
99109
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.lambda.gui.api.GuiEvent
66
import com.lambda.gui.api.LambdaGui
77
import com.lambda.gui.api.component.WindowComponent
88
import com.lambda.gui.api.component.core.list.ChildLayer
9+
import com.lambda.gui.impl.clickgui.buttons.SettingButton
10+
import com.lambda.gui.impl.clickgui.windows.ModuleWindow
911
import com.lambda.module.modules.client.ClickGui
1012
import com.lambda.util.Mouse
1113
import com.mojang.blaze3d.systems.RenderSystem.recordRenderCall
@@ -60,6 +62,14 @@ abstract class AbstractClickGui(name: String = "ClickGui") : LambdaGui(name, Cli
6062
}
6163
}
6264

65+
fun unfocusSettings() {
66+
windows.children.filterIsInstance<ModuleWindow>().forEach { moduleWindow ->
67+
moduleWindow.contentComponents.children.forEach { moduleButton ->
68+
moduleButton.settingsLayer.children.forEach(SettingButton<*, *>::unfocus)
69+
}
70+
}
71+
}
72+
6373
override fun close() {
6474
closing = true
6575
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lambda.gui.impl.clickgui.buttons
22

33
import com.lambda.config.settings.NumericSetting
4+
import com.lambda.config.settings.StringSetting
45
import com.lambda.config.settings.comparable.BooleanSetting
56
import com.lambda.core.LambdaSound
67
import com.lambda.core.SoundManager.playSoundRandomly
@@ -13,6 +14,7 @@ import com.lambda.gui.api.component.core.list.ChildLayer
1314
import com.lambda.gui.api.layer.RenderLayer
1415
import com.lambda.gui.impl.clickgui.buttons.setting.BooleanButton
1516
import com.lambda.gui.impl.clickgui.buttons.setting.NumberSlider
17+
import com.lambda.gui.impl.clickgui.buttons.setting.StringButton
1618
import com.lambda.module.Module
1719
import com.lambda.module.modules.client.GuiSettings
1820
import com.lambda.util.Mouse
@@ -101,6 +103,7 @@ class ModuleButton(
101103
when (it) {
102104
is BooleanSetting -> BooleanButton(it, settingsLayer)
103105
is NumericSetting<*> -> NumberSlider(it, settingsLayer)
106+
is StringSetting -> StringButton(it, settingsLayer)
104107
else -> null
105108
}
106109
}.forEach(settingsLayer::addChild)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.lambda.util.math.MathUtils.lerp
99

1010
abstract class SettingButton <V : Any, T : AbstractSetting<V>> (
1111
val setting: T,
12-
final override val owner: ChildLayer.Drawable<*, ModuleButton>
12+
final override val owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
1313
): ListButton(owner) {
1414
override val text = setting.name
1515
protected var value by setting
@@ -29,4 +29,6 @@ abstract class SettingButton <V : Any, T : AbstractSetting<V>> (
2929
if (!prevTickVisible && visible) renderHeightAnimation = heightOffset
3030
prevTickVisible = visible
3131
}
32+
33+
open fun unfocus() {}
3234
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import com.lambda.util.math.Vec2d
1818

1919
class BooleanButton(
2020
setting: BooleanSetting,
21-
owner: ChildLayer.Drawable<*, ModuleButton>
21+
owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
2222
) : SettingButton<Boolean, BooleanSetting>(setting, owner) {
2323
private var active by animation.exp(0.0, 1.0, 0.6, ::value)
2424
private val zoomAnimation get() = lerp(2.0, 0.0, showAnimation)

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

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,18 @@ import com.lambda.gui.api.component.button.InputBarOverlay
77
import com.lambda.gui.api.component.core.list.ChildLayer
88
import com.lambda.gui.impl.clickgui.AbstractClickGui
99
import com.lambda.gui.impl.clickgui.buttons.ModuleButton
10-
import com.lambda.gui.impl.clickgui.windows.ModuleWindow
11-
import com.lambda.module.modules.client.ClickGui
10+
import com.lambda.gui.impl.clickgui.buttons.SettingButton
1211
import com.lambda.util.Mouse
1312
import com.lambda.util.math.ColorUtils.multAlpha
14-
import com.lambda.util.math.ColorUtils.setAlpha
1513
import com.lambda.util.math.MathUtils.lerp
1614
import com.lambda.util.math.MathUtils.roundToStep
1715
import com.lambda.util.math.MathUtils.typeConvert
1816
import com.lambda.util.math.Vec2d
1917
import com.lambda.util.math.normalize
20-
import java.awt.Color
2118

2219
class NumberSlider <N>(
2320
setting: NumericSetting<N>,
24-
owner: ChildLayer.Drawable<*, ModuleButton>
21+
owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
2522
) : SliderSetting<N, NumericSetting<N>>(
2623
setting, owner
2724
) where N : Number, N : Comparable<N> {
@@ -37,43 +34,26 @@ class NumberSlider <N>(
3734
override val hoverFontAnimation get() = this@NumberSlider.hoverFontAnimation
3835
override val showAnimation get() = this@NumberSlider.showAnimation
3936

40-
override fun getInitText() = value.let(Number::toString)
37+
override fun getText() = value.let(Number::toString)
4138
override fun setValue(string: String) {
4239
string.toDoubleOrNull()?.let(::setValue)
4340
}
4441
}.apply(layer::addChild)
4542

4643
override val textColor get() = super.textColor.multAlpha(1.0 - inputBar.activeAnimation)
4744

48-
init {
49-
renderer.font {
50-
text = value.let(Number::toString)
51-
52-
val progress = 1.0 - inputBar.activeAnimation
53-
scale = lerp(0.5, 1.0, progress)
54-
position = Vec2d(rect.right, rect.center.y) - Vec2d(ClickGui.windowPadding + stringWidth, 0.0)
55-
color = Color.WHITE.setAlpha(lerp(0.0, progress, showAnimation))
56-
}
57-
}
58-
5945
override fun onEvent(e: GuiEvent) {
6046
super.onEvent(e)
6147
layer.onEvent(e)
6248
}
6349

50+
override fun unfocus() {
51+
inputBar.isActive = false
52+
}
53+
6454
override fun performClickAction(e: GuiEvent.MouseClick) {
6555
if (e.button != Mouse.Button.Right) return
66-
67-
val windows = (owner.gui as AbstractClickGui).windows
68-
windows.children.filterIsInstance<ModuleWindow>().forEach { moduleWindow ->
69-
moduleWindow.contentComponents.children.forEach { moduleButton ->
70-
moduleButton.settingsLayer.children
71-
.filterIsInstance<NumberSlider<*>>()
72-
.apply { (this as MutableList).remove(this@NumberSlider) }
73-
.forEach { it.inputBar.isActive = false }
74-
}
75-
}
76-
56+
if (!inputBar.isActive) (owner.gui as? AbstractClickGui)?.unfocusSettings()
7757
inputBar.toggle()
7858
}
7959

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.lambda.util.math.Vec2d
1515
import com.lambda.util.math.transform
1616

1717
abstract class SliderSetting <V : Any, T : AbstractSetting<V>>(
18-
setting: T, owner: ChildLayer.Drawable<*, ModuleButton>
18+
setting: T, owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
1919
) : SettingButton<V, T>(setting, owner) {
2020
protected abstract val renderProgress: Double
2121
protected abstract fun setValueByProgress(progress: Double)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.lambda.gui.impl.clickgui.buttons.setting
2+
3+
import com.lambda.config.settings.StringSetting
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.Mouse
11+
import com.lambda.util.math.ColorUtils.multAlpha
12+
13+
class StringButton(
14+
setting: StringSetting,
15+
owner: ChildLayer.Drawable<SettingButton<*, *>, ModuleButton>
16+
) : SettingButton<String, StringSetting>(setting, owner) {
17+
private val layer = ChildLayer.Drawable(owner.gui, this, owner.renderer, ::rect, InputBarOverlay::isActive)
18+
private val inputBar: InputBarOverlay = object : InputBarOverlay(renderer, layer) {
19+
override val pressAnimation get() = this@StringButton.pressAnimation
20+
override val interactAnimation get() = this@StringButton.interactAnimation
21+
override val hoverFontAnimation get() = this@StringButton.hoverFontAnimation
22+
override val showAnimation get() = this@StringButton.showAnimation
23+
24+
override fun getText() = value
25+
override fun setValue(string: String) { value = string }
26+
}.apply(layer::addChild)
27+
28+
override val textColor get() = super.textColor.multAlpha(1.0 - inputBar.activeAnimation)
29+
30+
override fun onEvent(e: GuiEvent) {
31+
super.onEvent(e)
32+
layer.onEvent(e)
33+
}
34+
35+
override fun unfocus() {
36+
inputBar.isActive = false
37+
}
38+
39+
override fun performClickAction(e: GuiEvent.MouseClick) {
40+
if (e.button != Mouse.Button.Right) return
41+
if (!inputBar.isActive) (owner.gui as? AbstractClickGui)?.unfocusSettings()
42+
inputBar.toggle()
43+
}
44+
}

common/src/main/kotlin/com/lambda/module/modules/render/RenderTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ object RenderTest : Module(
2323
) {
2424
private val test1 by setting("Toggle visibility", true)
2525
private val test21 by setting("Hallo 1", true, visibility = ::test1)
26-
private val test22 by setting("Hallo 2", true, visibility = ::test1)
27-
private val test23 by setting("Hallo 3", true, visibility = ::test1)
26+
private val test22 by setting("Hallo Slider", 1.0, 0.0..5.0, 0.5, visibility = ::test1)
27+
private val test23 by setting("Hallo String", "bruh", visibility = ::test1)
2828
private val test31 by setting("Holla huh 1", true, visibility = { !test1 })
2929
private val test32 by setting("Holla buh 2", true, visibility = { !test1 })
3030

0 commit comments

Comments
 (0)