aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-07-11 21:01:58 +0200
committernea <nea@nea.moe>2023-07-11 21:01:58 +0200
commit4d93f475aadc42c4bf83c3a0749af41659235c71 (patch)
treec8e01710defe66e06c50fa962c72fdac66a35a1f /src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt
parent4444fcca44d9a53c8162d69e0e9f19fd214c2f54 (diff)
downloadFirmament-4d93f475aadc42c4bf83c3a0749af41659235c71.tar.gz
Firmament-4d93f475aadc42c4bf83c3a0749af41659235c71.tar.bz2
Firmament-4d93f475aadc42c4bf83c3a0749af41659235c71.zip
Bulk commit
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt')
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt b/src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt
new file mode 100644
index 0000000..f5185cd
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/features/debug/ObjectRenderer.kt
@@ -0,0 +1,52 @@
+package moe.nea.firmament.features.debug
+
+import io.github.cottonmc.cotton.gui.widget.WBox
+import io.github.cottonmc.cotton.gui.widget.WLabel
+import io.github.cottonmc.cotton.gui.widget.WWidget
+import io.github.cottonmc.cotton.gui.widget.data.Axis
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
+import kotlin.reflect.KProperty1
+import net.minecraft.text.Text
+import moe.nea.firmament.gui.WSpacer
+
+class ObjectRenderer(val box: WBox) {
+ var indent = 0
+
+ fun beginObject() {
+ indent++
+ }
+
+ fun endObject() {
+ indent--
+ }
+
+ fun emit(label: String, widget: WWidget) {
+ WSpacer(WBox(Axis.VERTICAL).also {
+ it.add(WWidget())
+ it.add(widget)
+ }, indent * 18)
+ }
+
+ fun <T : Any?> getDebuggingView(label: String, obj: T) {
+ if (obj == null) {
+ emit(label, WLabel(Text.literal("§cnull")))
+ return
+ }
+ if (obj is String) {
+ emit(label, WLabel(Text.literal(Json.encodeToString(obj))))
+ }
+ getObject(label, obj)
+ }
+
+ fun <T : Any> getObject(label: String, obj: T) {
+ emit(label, WLabel(Text.literal(obj::class.simpleName ?: "<unknown>")))
+ beginObject()
+ for (prop in obj::class.members.filterIsInstance<KProperty1<T, *>>()) {
+ val child = prop.get(obj)
+ getDebuggingView(prop.name, child)
+ }
+ endObject()
+ }
+
+}