Skip to content

Commit 62ea752

Browse files
Blade-ktAvanatiker
authored andcommitted
raw hud
1 parent 6d2f856 commit 62ea752

28 files changed

+371
-194
lines changed

common/src/main/kotlin/com/lambda/graphics/renderer/gui/AbstractGUIRenderer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ import com.lambda.graphics.RenderMain
2121
import com.lambda.graphics.buffer.VertexPipeline
2222
import com.lambda.graphics.buffer.vertex.attributes.VertexAttrib
2323
import com.lambda.graphics.buffer.vertex.attributes.VertexMode
24-
import com.lambda.graphics.pipeline.ScissorAdapter
2524
import com.lambda.graphics.shader.Shader
2625
import com.lambda.module.modules.client.GuiSettings
26+
import com.lambda.module.modules.client.GuiSettings.primaryColor
27+
import com.lambda.module.modules.client.GuiSettings.secondaryColor
2728
import com.lambda.util.math.MathUtils.toInt
28-
import com.lambda.util.math.Rect
2929
import com.lambda.util.math.Vec2d
3030
import org.lwjgl.glfw.GLFW
3131

@@ -47,8 +47,8 @@ abstract class AbstractGUIRenderer(
4747
shader["u_Shade"] = shade.toInt().toDouble()
4848
if (shade) {
4949
shader["u_ShadeTime"] = GLFW.glfwGetTime() * GuiSettings.colorSpeed * 5.0
50-
shader["u_ShadeColor1"] = GuiSettings.shadeColor1
51-
shader["u_ShadeColor2"] = GuiSettings.shadeColor2
50+
shader["u_ShadeColor1"] = primaryColor
51+
shader["u_ShadeColor2"] = secondaryColor
5252

5353
shader["u_ShadeSize"] = RenderMain.screenSize / Vec2d(GuiSettings.colorWidth, GuiSettings.colorHeight)
5454
}

common/src/main/kotlin/com/lambda/graphics/renderer/gui/TextureRenderer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import com.lambda.graphics.buffer.vertex.attributes.VertexMode
2424
import com.lambda.graphics.shader.Shader.Companion.shader
2525
import com.lambda.graphics.texture.Texture
2626
import com.lambda.module.modules.client.GuiSettings
27-
import com.lambda.util.math.MathUtils.toInt
27+
import com.lambda.module.modules.client.GuiSettings.primaryColor
28+
import com.lambda.module.modules.client.GuiSettings.secondaryColor
2829
import com.lambda.util.math.Rect
2930
import com.lambda.util.math.Vec2d
30-
import org.lwjgl.glfw.GLFW
3131
import org.lwjgl.glfw.GLFW.glfwGetTime
3232

3333
object TextureRenderer {
@@ -49,8 +49,8 @@ object TextureRenderer {
4949

5050
coloredShader["u_Shade"] = 1.0
5151
coloredShader["u_ShadeTime"] = glfwGetTime() * GuiSettings.colorSpeed * 5.0
52-
coloredShader["u_ShadeColor1"] = GuiSettings.shadeColor1
53-
coloredShader["u_ShadeColor2"] = GuiSettings.shadeColor2
52+
coloredShader["u_ShadeColor1"] = primaryColor
53+
coloredShader["u_ShadeColor2"] = secondaryColor
5454

5555
coloredShader["u_ShadeSize"] = RenderMain.screenSize / Vec2d(GuiSettings.colorWidth, GuiSettings.colorHeight)
5656

common/src/main/kotlin/com/lambda/gui/GuiManager.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ import com.lambda.config.settings.numeric.LongSetting
2929
import com.lambda.core.Loadable
3030
import com.lambda.gui.component.core.UIBuilder
3131
import com.lambda.gui.component.layout.Layout
32-
import com.lambda.gui.impl.clickgui.module.settings.impl.BooleanButton.Companion.booleanSetting
33-
import com.lambda.gui.impl.clickgui.module.settings.impl.ColorPicker.Companion.colorPicker
34-
import com.lambda.gui.impl.clickgui.module.settings.impl.EnumSlider.Companion.enumSetting
35-
import com.lambda.gui.impl.clickgui.module.settings.impl.KeybindPicker.Companion.keybindSetting
36-
import com.lambda.gui.impl.clickgui.module.settings.impl.NumberSlider.Companion.numberSlider
37-
import com.lambda.gui.impl.clickgui.module.settings.impl.UnitButton.Companion.unitButton
32+
import com.lambda.gui.impl.clickgui.module.setting.settings.BooleanButton.Companion.booleanSetting
33+
import com.lambda.gui.impl.clickgui.module.setting.settings.ColorPicker.Companion.colorPicker
34+
import com.lambda.gui.impl.clickgui.module.setting.settings.EnumSlider.Companion.enumSetting
35+
import com.lambda.gui.impl.clickgui.module.setting.settings.KeybindPicker.Companion.keybindSetting
36+
import com.lambda.gui.impl.clickgui.module.setting.settings.NumberSlider.Companion.numberSlider
37+
import com.lambda.gui.impl.clickgui.module.setting.settings.UnitButton.Companion.unitButton
3838
import kotlin.reflect.KClass
3939

4040
object GuiManager : Loadable {

common/src/main/kotlin/com/lambda/gui/LambdaScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import net.minecraft.text.Text
3838
*/
3939
class LambdaScreen(
4040
override val name: String,
41-
val layout: ScreenLayout
41+
val layout: RootLayout
4242
) : Screen(Text.of(name)), Nameable, Muteable {
4343
override val isMuted: Boolean get() = !isOpen
4444

common/src/main/kotlin/com/lambda/gui/ScreenLayout.kt renamed to common/src/main/kotlin/com/lambda/gui/RootLayout.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.lambda.graphics.RenderMain
2121
import com.lambda.gui.component.core.UIBuilder
2222
import com.lambda.gui.component.layout.Layout
2323

24-
class ScreenLayout : Layout(owner = null) {
24+
class RootLayout : Layout(owner = null) {
2525
init {
2626
onUpdate {
2727
size = RenderMain.screenSize
@@ -33,7 +33,7 @@ class ScreenLayout : Layout(owner = null) {
3333
* Creates gui layout
3434
*/
3535
@UIBuilder
36-
fun gui(name: String, block: ScreenLayout.() -> Unit) =
37-
LambdaScreen(name, ScreenLayout().apply(block))
36+
fun gui(name: String, block: RootLayout.() -> Unit) =
37+
LambdaScreen(name, RootLayout().apply(block))
3838
}
3939
}

common/src/main/kotlin/com/lambda/gui/component/layout/Layout.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ import com.lambda.graphics.RenderMain
2121
import com.lambda.graphics.animation.AnimationTicker
2222
import com.lambda.event.events.GuiEvent
2323
import com.lambda.graphics.pipeline.ScissorAdapter
24-
import com.lambda.gui.ScreenLayout
24+
import com.lambda.gui.RootLayout
2525
import com.lambda.gui.component.HAlign
2626
import com.lambda.gui.component.VAlign
2727
import com.lambda.gui.component.core.*
2828
import com.lambda.util.KeyCode
2929
import com.lambda.util.Mouse
30+
import com.lambda.util.math.MathUtils.toInt
3031
import com.lambda.util.math.Rect
3132
import com.lambda.util.math.Vec2d
3233

@@ -126,7 +127,7 @@ open class Layout(
126127
own = own.owner ?: break
127128
}
128129

129-
own as? ScreenLayout ?: throw IllegalStateException("Root layout is not a ScreenLayout class")
130+
own// as? RootLayout ?: throw IllegalStateException("Root layout is not a ScreenLayout class")
130131
}
131132

132133
protected open val renderSelf: Boolean get() = width > 1 && height > 1
@@ -392,6 +393,21 @@ open class Layout(
392393
}
393394
}
394395

396+
fun buildTree(builder: StringBuilder = StringBuilder(), level: Int = 0): String {
397+
val space = " ".repeat(level)
398+
builder.appendLine(
399+
space + this::class.java.simpleName + " {".repeat(children.isNotEmpty().toInt())
400+
)
401+
402+
children.forEach {
403+
it.buildTree(builder, level + 1)
404+
}
405+
406+
if (children.isNotEmpty()) builder.appendLine("$space}")
407+
408+
return builder.toString()
409+
}
410+
395411
companion object {
396412
/**
397413
* Creates an empty [Layout].

common/src/main/kotlin/com/lambda/gui/component/window/Window.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package com.lambda.gui.component.window
1919

2020
import com.lambda.graphics.animation.Animation.Companion.exp
2121
import com.lambda.module.modules.client.ClickGui
22-
import com.lambda.gui.ScreenLayout
22+
import com.lambda.gui.RootLayout
2323
import com.lambda.gui.component.core.FilledRect.Companion.rect
2424
import com.lambda.gui.component.core.LayoutBuilder
2525
import com.lambda.gui.component.core.OutlineRect.Companion.outline
@@ -152,7 +152,7 @@ open class Window(
152152

153153
init {
154154
position = initialPosition
155-
properties.clampPosition = owner is ScreenLayout
155+
properties.clampPosition = owner is RootLayout
156156

157157
onUpdate {
158158
// Update it here

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

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,18 @@ package com.lambda.gui.impl.clickgui.core
1919

2020
import com.lambda.graphics.animation.Animation.Companion.exp
2121
import com.lambda.gui.component.HAlign
22+
import com.lambda.gui.component.core.FilledRect
23+
import com.lambda.gui.component.core.FilledRect.Companion.rect
24+
import com.lambda.gui.component.core.FilledRect.Companion.rectBehind
2225
import com.lambda.gui.component.layout.Layout
2326
import com.lambda.gui.component.window.Window
2427
import com.lambda.gui.impl.clickgui.module.ModuleLayout
25-
import com.lambda.gui.impl.clickgui.module.settings.SettingLayout
28+
import com.lambda.gui.impl.clickgui.module.setting.SettingLayout
2629
import com.lambda.module.modules.client.ClickGui
2730
import com.lambda.util.math.MathUtils.toInt
2831
import com.lambda.util.math.Vec2d
2932
import com.lambda.util.math.lerp
33+
import com.lambda.util.math.multAlpha
3034
import com.lambda.util.math.setAlpha
3135
import com.lambda.util.math.transform
3236
import java.awt.Color
@@ -152,4 +156,69 @@ abstract class AnimatedChild(
152156
outlineRect
153157
).forEach(Layout::destroy)
154158
}
159+
160+
companion object {
161+
fun AnimatedChild.animatedBackground(
162+
enableProgress: () -> Double = { hoverAnimation }
163+
) = rectBehind(titleBar) {
164+
// base rect with lowest y to avoid children overlying
165+
onUpdate {
166+
val enableAnimation = enableProgress()
167+
168+
rect = this@animatedBackground.rect.shrink(shrink)
169+
shade = ClickGui.backgroundShade
170+
171+
val openRev = 1.0 - openAnimation // 1.0 <-> 0.0
172+
val openRevSigned = openRev * 2 - 1 // 1.0 <-> -1.0
173+
val enableRev = 1.0 - enableAnimation // 1.0 <-> 0.0
174+
175+
var progress = enableAnimation
176+
177+
// hover: +0.1 to alpha if minimized, -0.1 to alpha if maximized and enabled
178+
progress += hoverAnimation * ClickGui.moduleHoverAccent *
179+
lerp(enableAnimation, 1.0, openRevSigned)
180+
181+
// +0.4 to alpha if opened and disabled
182+
progress += openAnimation * ClickGui.moduleOpenAccent * enableRev
183+
184+
// interpolate and set the color
185+
setColor(
186+
lerp(progress,
187+
ClickGui.moduleDisabledColor,
188+
ClickGui.moduleEnabledColor
189+
).multAlpha(showAnimation)
190+
)
191+
192+
setRadius(hoverAnimation)
193+
194+
if (isLast && ClickGui.autoResize) {
195+
leftBottomRadius = ClickGui.roundRadius - (ClickGui.padding + shrink)
196+
rightBottomRadius = leftBottomRadius
197+
}
198+
}
199+
200+
rect { // hover fx
201+
onUpdate {
202+
val base = this@rect.owner as FilledRect
203+
204+
position = base.position
205+
size = base.size
206+
shade = base.shade
207+
208+
setRadius(
209+
base.leftTopRadius,
210+
base.rightTopRadius,
211+
base.rightBottomRadius,
212+
base.leftBottomRadius
213+
)
214+
215+
val hoverColor = Color.WHITE.setAlpha(
216+
ClickGui.moduleHoverAccent * hoverAnimation * (1.0 - openAnimation) * showAnimation
217+
)
218+
219+
setColorH(hoverColor.setAlpha(0.0), hoverColor)
220+
}
221+
}
222+
}
223+
}
155224
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.lambda.gui.component.core.OutlineRect.Companion.outline
2424
import com.lambda.gui.component.core.UIBuilder
2525
import com.lambda.gui.component.core.insertLayout
2626
import com.lambda.gui.component.layout.Layout
27-
import com.lambda.gui.impl.clickgui.module.settings.SettingSlider
27+
import com.lambda.gui.impl.clickgui.module.setting.SettingSlider
2828
import com.lambda.module.modules.client.ClickGui
2929
import com.lambda.util.Mouse
3030
import com.lambda.util.math.MathUtils.toInt

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

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import com.lambda.gui.component.layout.Layout
2929
import com.lambda.gui.component.window.Window
3030
import com.lambda.gui.impl.clickgui.ModuleWindow
3131
import com.lambda.gui.impl.clickgui.core.AnimatedChild
32-
import com.lambda.gui.impl.clickgui.module.settings.SettingLayout
32+
import com.lambda.gui.impl.clickgui.module.setting.SettingLayout
3333
import com.lambda.util.Mouse
3434
import com.lambda.util.math.*
3535
import java.awt.Color
@@ -50,63 +50,7 @@ class ModuleLayout(
5050

5151
private var enableAnimation by animation.exp(0.0, 1.0, 0.6, module::isEnabled)
5252

53-
val backgroundRect = rectBehind(titleBar) { // base rect with lowest y to avoid children overlying
54-
onUpdate {
55-
rect = this@ModuleLayout.rect.shrink(shrink)
56-
shade = ClickGui.backgroundShade
57-
58-
val openRev = 1.0 - openAnimation // 1.0 <-> 0.0
59-
val openRevSigned = openRev * 2 - 1 // 1.0 <-> -1.0
60-
val enableRev = 1.0 - enableAnimation // 1.0 <-> 0.0
61-
62-
var progress = enableAnimation
63-
64-
// hover: +0.1 to alpha if minimized, -0.1 to alpha if maximized and enabled
65-
progress += hoverAnimation * ClickGui.moduleHoverAccent *
66-
lerp(enableAnimation, 1.0, openRevSigned)
67-
68-
// +0.4 to alpha if opened and disabled
69-
progress += openAnimation * ClickGui.moduleOpenAccent * enableRev
70-
71-
// interpolate and set the color
72-
setColor(
73-
lerp(progress,
74-
ClickGui.moduleDisabledColor,
75-
ClickGui.moduleEnabledColor
76-
).multAlpha(showAnimation)
77-
)
78-
79-
setRadius(hoverAnimation)
80-
81-
if (isLast && ClickGui.autoResize) {
82-
leftBottomRadius = ClickGui.roundRadius - (ClickGui.padding + shrink)
83-
rightBottomRadius = leftBottomRadius
84-
}
85-
}
86-
87-
rect { // hover fx
88-
onUpdate {
89-
val base = this@rect.owner as FilledRect
90-
91-
position = base.position
92-
size = base.size
93-
shade = base.shade
94-
95-
setRadius(
96-
base.leftTopRadius,
97-
base.rightTopRadius,
98-
base.rightBottomRadius,
99-
base.leftBottomRadius
100-
)
101-
102-
val hoverColor = Color.WHITE.setAlpha(
103-
ClickGui.moduleHoverAccent * hoverAnimation * (1.0 - openAnimation) * showAnimation
104-
)
105-
106-
setColorH(hoverColor.setAlpha(0.0), hoverColor)
107-
}
108-
}
109-
}
53+
val backgroundRect = animatedBackground(::enableAnimation)
11054

11155
init {
11256
backgroundTint()

0 commit comments

Comments
 (0)