Skip to content

Commit 94d66cb

Browse files
committed
Functional paradigm
1 parent 1bd6d5f commit 94d66cb

24 files changed

+162
-197
lines changed

src/main/kotlin/com/lambda/config/AbstractSetting.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import com.lambda.command.CommandRegistry
3131
import com.lambda.command.commands.ConfigCommand
3232
import com.lambda.context.SafeContext
3333
import com.lambda.gui.Layout
34-
import com.lambda.gui.dsl.ImGuiBuilder
3534
import com.lambda.threading.runSafe
3635
import com.lambda.util.Communication.info
3736
import com.lambda.util.Nameable
@@ -98,10 +97,7 @@ abstract class AbstractSetting<T : Any>(
9897
val type: Type,
9998
val description: String,
10099
val visibility: () -> Boolean,
101-
) : Jsonable,
102-
Nameable,
103-
Layout
104-
{
100+
) : Jsonable, Nameable, Layout {
105101
private val listeners = mutableListOf<ValueListener<T>>()
106102

107103
var value by Delegates.observable(defaultValue) { _, from, to ->

src/main/kotlin/com/lambda/config/settings/CharSetting.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,9 @@ class CharSetting(
4343
description,
4444
visibility
4545
) {
46-
override val layout: ImGuiBuilder.() -> Unit
47-
get() =
48-
{
49-
// ToDo
50-
}
46+
override fun ImGuiBuilder.buildLayout() {
47+
// ToDo
48+
}
5149

5250
override fun CommandBuilder.buildCommand(registry: CommandRegistryAccess) {
5351
required(word(name)) { parameter ->

src/main/kotlin/com/lambda/config/settings/FunctionSetting.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,12 @@ open class FunctionSetting<T>(
3434
description,
3535
visibility
3636
) {
37-
override val layout: ImGuiBuilder.() -> Unit
38-
get() =
39-
{
40-
button(name) { value() }
37+
override fun ImGuiBuilder.buildLayout() {
38+
button(name) { value() }
4139

42-
sameLine()
43-
helpMarker(description)
44-
}
40+
sameLine()
41+
helpMarker(description)
42+
}
4543

4644
override fun toJson(): JsonElement = JsonNull.INSTANCE
4745
override fun loadFromJson(serialized: JsonElement) { value = defaultValue }

src/main/kotlin/com/lambda/config/settings/StringSetting.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,15 @@ class StringSetting(
4444
description,
4545
visibility
4646
) {
47-
override val layout: ImGuiBuilder.() -> Unit
48-
get() =
49-
{
50-
text(name)
47+
override fun ImGuiBuilder.buildLayout() {
48+
text(name)
5149

52-
sameLine()
53-
helpMarker(description)
50+
sameLine()
51+
helpMarker(description)
5452

55-
if (multiline) inputTextMultiline(name, ::value, flags = flags)
56-
else inputText(name, ::value, flags)
57-
}
53+
if (multiline) inputTextMultiline(name, ::value, flags = flags)
54+
else inputText(name, ::value, flags)
55+
}
5856

5957
override fun CommandBuilder.buildCommand(registry: CommandRegistryAccess) {
6058
required(greedyString(name)) { parameter ->

src/main/kotlin/com/lambda/config/settings/collections/ListSetting.kt

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ class ListSetting<T : Any>(
4545
private val strListType =
4646
TypeToken.getParameterized(MutableList::class.java, String::class.java).type
4747

48+
override fun ImGuiBuilder.buildLayout() {
49+
combo(name, "${value.size} item(s)") {
50+
immutableList
51+
.forEach {
52+
val isSelected = value.contains(it)
53+
54+
selectable(it.toString(), isSelected,
55+
flags = DontClosePopups)
56+
{ if (isSelected) value.remove(it) else value.add(it) }
57+
}
58+
}
59+
}
60+
4861
// When serializing the list to json we do not want to serialize the elements' classes, but
4962
// their stringified representation.
5063
// If we do serialize the classes we'll run into missing type adapters errors by Gson.
@@ -58,19 +71,4 @@ class ListSetting<T : Any>(
5871

5972
value = strList
6073
}
61-
62-
override val layout: ImGuiBuilder.() -> Unit
63-
get() =
64-
{
65-
combo(name, "${value.size} item(s)") {
66-
immutableList
67-
.forEach {
68-
val isSelected = value.contains(it)
69-
70-
selectable(it.toString(), isSelected,
71-
flags = DontClosePopups)
72-
{ if (isSelected) value.remove(it) else value.add(it) }
73-
}
74-
}
75-
}
7674
}

src/main/kotlin/com/lambda/config/settings/collections/MapSetting.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ class MapSetting<K, V>(
3636
description,
3737
visibility
3838
) {
39-
override val layout: ImGuiBuilder.() -> Unit
40-
get() =
41-
{
42-
// ToDo
43-
}
39+
override fun ImGuiBuilder.buildLayout() {
40+
// ToDo
41+
}
4442
}

src/main/kotlin/com/lambda/config/settings/collections/SetSetting.kt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ class SetSetting<T : Any>(
4444
private val strSetType =
4545
TypeToken.getParameterized(Set::class.java, String::class.java).type
4646

47+
override fun ImGuiBuilder.buildLayout() {
48+
combo(name, "${value.size} item(s)") {
49+
immutableSet
50+
.forEach {
51+
val isSelected = value.contains(it)
52+
53+
selectable(it.toString(), isSelected,
54+
flags = DontClosePopups)
55+
{ if (isSelected) value.remove(it) else value.add(it) }
56+
}
57+
}
58+
}
59+
4760
// When serializing the list to json we do not want to serialize the elements' classes, but
4861
// their stringified representation.
4962
// If we do serialize the classes we'll run into missing type adapters errors by Gson.
@@ -57,20 +70,4 @@ class SetSetting<T : Any>(
5770

5871
value = strSet
5972
}
60-
61-
62-
override val layout: ImGuiBuilder.() -> Unit
63-
get() =
64-
{
65-
combo(name, "${value.size} item(s)") {
66-
immutableSet
67-
.forEach {
68-
val isSelected = value.contains(it)
69-
70-
selectable(it.toString(), isSelected,
71-
flags = DontClosePopups)
72-
{ if (isSelected) value.remove(it) else value.add(it) }
73-
}
74-
}
75-
}
7673
}

src/main/kotlin/com/lambda/config/settings/comparable/BooleanSetting.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,12 @@ class BooleanSetting(
4141
description,
4242
visibility
4343
) {
44-
override val layout: ImGuiBuilder.() -> Unit
45-
get() =
46-
{
47-
checkbox(name, ::value)
44+
override fun ImGuiBuilder.buildLayout() {
45+
checkbox(name, ::value)
4846

49-
sameLine()
50-
helpMarker(description)
51-
}
47+
sameLine()
48+
helpMarker(description)
49+
}
5250

5351
override fun CommandBuilder.buildCommand(registry: CommandRegistryAccess) {
5452
required(boolean(name)) { parameter ->

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

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,30 +54,29 @@ class EnumSetting<T : Enum<T>>(
5454
value = value.enumValues[to % value.enumValues.size]
5555
}
5656

57-
override val layout: ImGuiBuilder.() -> Unit
58-
get() =
59-
{
60-
text(name)
57+
override fun ImGuiBuilder.buildLayout() {
58+
text(name)
6159

62-
sameLine()
63-
helpMarker(description)
60+
sameLine()
61+
helpMarker(description)
6462

65-
slider("##$name", ::index, 0, value.enumValues.size - 1, format = "", flags = AlwaysClamp)
63+
combo("##$name", ::index, value.enumValues.map { it.name.capitalize() }.toTypedArray())
64+
slider("##$name#", ::index, 0, value.enumValues.size - 1, format = "", flags = AlwaysClamp)
6665

67-
val min = ImGui.getItemRectMin()
68-
val max = ImGui.getItemRectMax()
69-
val textSize = ImGui.calcTextSize(value.name)
70-
val center = ImVec2(
71-
(min.x + max.x) * 0.5f - textSize.x * 0.5f,
72-
(min.y + max.y) * 0.5f - textSize.y * 0.5f
73-
)
66+
val min = ImGui.getItemRectMin()
67+
val max = ImGui.getItemRectMax()
68+
val textSize = ImGui.calcTextSize(value.name)
69+
val center = ImVec2(
70+
(min.x + max.x) * 0.5f - textSize.x * 0.5f,
71+
(min.y + max.y) * 0.5f - textSize.y * 0.5f
72+
)
7473

75-
windowDrawList.addText(
76-
center,
77-
ImColor.rgb(Color.WHITE),
78-
value.name,
79-
)
80-
}
74+
windowDrawList.addText(
75+
center,
76+
ImColor.rgb(Color.WHITE),
77+
value.name,
78+
)
79+
}
8180

8281
override fun CommandBuilder.buildCommand(registry: CommandRegistryAccess) {
8382
required(word(name)) { parameter ->

src/main/kotlin/com/lambda/config/settings/complex/BlockPosSetting.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ import com.lambda.brigadier.execute
2424
import com.lambda.brigadier.required
2525
import com.lambda.config.AbstractSetting
2626
import com.lambda.gui.dsl.ImGuiBuilder
27+
import com.lambda.gui.dsl.ImGuiBuilder.helpMarker
28+
import com.lambda.gui.dsl.ImGuiBuilder.inputVec3i
29+
import com.lambda.gui.dsl.ImGuiBuilder.sameLine
30+
import com.lambda.gui.dsl.ImGuiBuilder.text
31+
import com.lambda.gui.dsl.ProcedureBlock
2732
import com.lambda.util.BlockUtils.blockPos
2833
import com.lambda.util.extension.CommandBuilder
2934
import net.minecraft.command.CommandRegistryAccess
@@ -47,16 +52,14 @@ class BlockPosSetting(
4752
private var y = value.y
4853
private var z = value.z
4954

50-
override val layout: ImGuiBuilder.() -> Unit
51-
get() =
52-
{
53-
text(name)
55+
override fun ImGuiBuilder.buildLayout() {
56+
text(name)
5457

55-
sameLine()
56-
helpMarker(description)
58+
sameLine()
59+
helpMarker(description)
5760

58-
inputVec3i("##$name", value) { value = it.blockPos }
59-
}
61+
inputVec3i("##$name", value) { value = it.blockPos }
62+
}
6063

6164
override fun CommandBuilder.buildCommand(registry: CommandRegistryAccess) {
6265
required(integer("X", -30000000, 30000000)) { x ->

0 commit comments

Comments
 (0)