Skip to content

Commit 1cf9550

Browse files
committed
Simple window, text fields
1 parent 8e9c89c commit 1cf9550

File tree

11 files changed

+318
-144
lines changed

11 files changed

+318
-144
lines changed

common/src/main/kotlin/com/lambda/config/serializer/gui/CustomModuleWindowSerializer.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import com.lambda.gui.api.component.core.DockingRect
55
import com.lambda.gui.impl.clickgui.LambdaClickGui
66
import com.lambda.gui.impl.clickgui.windows.tag.CustomModuleWindow
77
import com.lambda.module.ModuleRegistry
8+
import com.lambda.newgui.component.HAlign
9+
import com.lambda.newgui.component.VAlign
810
import com.lambda.util.math.Vec2d
911
import java.lang.reflect.Type
1012

@@ -56,8 +58,8 @@ object CustomModuleWindowSerializer : JsonSerializer<CustomModuleWindow>, JsonDe
5658
it["position"].asJsonArray[0].asDouble,
5759
it["position"].asJsonArray[1].asDouble
5860
)
59-
dockingH = DockingRect.HAlign.entries[it["docking"].asJsonArray[0].asInt]
60-
dockingV = DockingRect.VAlign.entries[it["docking"].asJsonArray[1].asInt]
61+
dockingH = HAlign.entries[it["docking"].asJsonArray[0].asInt]
62+
dockingV = VAlign.entries[it["docking"].asJsonArray[1].asInt]
6163
}
6264
} ?: throw JsonParseException("Invalid window data")
6365
}

common/src/main/kotlin/com/lambda/config/serializer/gui/TagWindowSerializer.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.lambda.gui.impl.clickgui.LambdaClickGui
66
import com.lambda.gui.impl.clickgui.windows.tag.TagWindow
77
import com.lambda.gui.impl.hudgui.LambdaHudGui
88
import com.lambda.module.tag.ModuleTag
9+
import com.lambda.newgui.component.HAlign
10+
import com.lambda.newgui.component.VAlign
911
import com.lambda.util.math.Vec2d
1012
import java.lang.reflect.Type
1113

@@ -53,8 +55,8 @@ object TagWindowSerializer : JsonSerializer<TagWindow>, JsonDeserializer<TagWind
5355
it["position"].asJsonArray[0].asDouble,
5456
it["position"].asJsonArray[1].asDouble
5557
)
56-
dockingH = DockingRect.HAlign.entries[it["docking"].asJsonArray[0].asInt]
57-
dockingV = DockingRect.VAlign.entries[it["docking"].asJsonArray[1].asInt]
58+
dockingH = HAlign.entries[it["docking"].asJsonArray[0].asInt]
59+
dockingV = VAlign.entries[it["docking"].asJsonArray[1].asInt]
5860
}
5961
} ?: throw JsonParseException("Invalid window data")
6062
}

common/src/main/kotlin/com/lambda/gui/api/component/core/DockingRect.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lambda.gui.api.component.core
22

33
import com.lambda.module.modules.client.ClickGui
4+
import com.lambda.newgui.component.HAlign
5+
import com.lambda.newgui.component.VAlign
46
import com.lambda.util.math.MathUtils.coerceIn
57
import com.lambda.util.math.MathUtils.roundToStep
68
import com.lambda.util.math.Rect
@@ -68,16 +70,4 @@ abstract class DockingRect {
6870
}
6971
} else VAlign.TOP
7072
}
71-
72-
enum class HAlign(val multiplier: Double) {
73-
LEFT(0.0),
74-
CENTER(0.5),
75-
RIGHT(1.0)
76-
}
77-
78-
enum class VAlign(val multiplier: Double) {
79-
TOP(0.0),
80-
CENTER(0.5),
81-
BOTTOM(1.0)
82-
}
8373
}

common/src/main/kotlin/com/lambda/module/HudModule.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.lambda.gui.api.GuiEvent
88
import com.lambda.gui.api.RenderLayer
99
import com.lambda.gui.api.component.core.DockingRect
1010
import com.lambda.module.tag.ModuleTag
11+
import com.lambda.newgui.component.HAlign
12+
import com.lambda.newgui.component.VAlign
1113
import com.lambda.util.KeyCode
1214
import com.lambda.util.math.Vec2d
1315

common/src/main/kotlin/com/lambda/module/modules/client/NewCGui.kt

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.lambda.module.modules.client
22

3+
import com.lambda.Lambda.mc
34
import com.lambda.module.Module
45
import com.lambda.module.tag.ModuleTag
6+
import com.lambda.newgui.LambdaScreen.Companion.gui
57
import com.lambda.newgui.LambdaScreen.Companion.toScreen
6-
import com.lambda.newgui.gui
7-
import com.lambda.newgui.layout
8-
import com.lambda.util.math.ColorUtils.setAlpha
9-
import com.lambda.util.math.Rect
8+
import com.lambda.newgui.component.HAlign
9+
import com.lambda.newgui.component.core.TextField.Companion.textField
10+
import com.lambda.newgui.component.window.Window.Companion.window
1011
import com.lambda.util.math.Vec2d
1112
import java.awt.Color
1213

@@ -15,36 +16,28 @@ object NewCGui : Module(
1516
description = "ggs",
1617
defaultTags = setOf(ModuleTag.CLIENT)
1718
) {
19+
val titleBarHeight by setting("Title Bar Height", 4.0, 0.0..10.0, 0.1)
20+
1821
private val clickGuiLayout =
1922
gui {
20-
layout {
21-
rect { Rect(Vec2d.ONE * 10.0, Vec2d.ONE * 200.0) }
23+
window(position = Vec2d.ONE * 20.0, title = "Test window") {
24+
titleBar.textField.apply {
25+
text = "Overriding the title"
2226

23-
onRender {
24-
filled.build(rect, color = Color.WHITE.setAlpha(0.5))
27+
// Making it align the left corner and have 3px offset from the left side
28+
alignment = HAlign.LEFT
29+
offset = 3.0
2530
}
2631

27-
layout(true) {
28-
rect { Rect(Vec2d.ONE * 10.0, Vec2d.ONE * 200.0) }
29-
30-
onRender {
31-
filled.build(rect, color = Color.BLACK)
32-
}
33-
34-
layout(true) {
35-
rect { Rect(Vec2d.ONE * 10.0, Vec2d.ONE * 200.0) }
36-
37-
onRender {
38-
filled.build(rect, color = Color.WHITE.setAlpha(0.5))
39-
}
32+
textField("Text field over the window")
4033

41-
layout(true) {
42-
rect { Rect(Vec2d.ONE * 10.0, Vec2d.ONE * 200.0) }
34+
content.textField("Text field inside of the content region") {
35+
alignment = HAlign.CENTER
36+
scale = 0.5
4337

44-
onRender {
45-
filled.build(rect, color = Color.BLACK)
46-
}
47-
}
38+
onTick {
39+
// Dynamically updating states
40+
color = if (mc.player?.isDead == true) Color.RED else Color.GREEN
4841
}
4942
}
5043
}

common/src/main/kotlin/com/lambda/newgui/DslBuilders.kt

Lines changed: 0 additions & 44 deletions
This file was deleted.

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@ import com.lambda.event.Muteable
55
import com.lambda.event.events.RenderEvent
66
import com.lambda.event.events.TickEvent
77
import com.lambda.event.listener.SafeListener.Companion.listener
8+
import com.lambda.graphics.RenderMain
89
import com.lambda.gui.api.GuiEvent
910
import com.lambda.util.KeyCode
1011
import com.lambda.util.Mouse
1112
import com.lambda.util.Nameable
13+
import com.lambda.util.math.Rect
1214
import com.lambda.util.math.Vec2d
1315
import com.mojang.blaze3d.systems.RenderSystem.recordRenderCall
1416
import net.minecraft.client.gui.DrawContext
1517
import net.minecraft.client.gui.screen.Screen
1618
import net.minecraft.text.Text
1719

20+
/**
21+
* Represents a "tunnel" between the [Layout] system and minecraft's [Screen]
22+
*/
1823
class LambdaScreen(
1924
override val name: String,
2025
val layout: Layout
@@ -106,6 +111,26 @@ class LambdaScreen(
106111
}
107112

108113
companion object {
114+
/**
115+
* Creates gui layout
116+
*/
117+
@UIBuilder
118+
fun gui(block: Layout.() -> Unit) =
119+
Layout(owner = null, useBatching = false, batchChildren = true).apply {
120+
var screenSize = Vec2d.ONE * 10000.0
121+
122+
rect {
123+
Rect(Vec2d.ZERO, screenSize)
124+
}
125+
126+
onRender {
127+
screenSize = RenderMain.screenSize
128+
}
129+
}.apply(block)
130+
131+
/**
132+
* Converts this [Layout] to a minecraft-typed [Screen] represented by the [LambdaScreen] class
133+
*/
109134
fun Layout.toScreen(name: String) = LambdaScreen(name, this)
110135
}
111136
}

0 commit comments

Comments
 (0)