blob: 799a9b803a39b47c807d4ed21310406c9f06b02f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package moe.nea.firmament.features.debug
import io.github.cottonmc.cotton.gui.client.CottonHud
import io.github.cottonmc.cotton.gui.widget.WBox
import io.github.cottonmc.cotton.gui.widget.WDynamicLabel
import io.github.cottonmc.cotton.gui.widget.WLabel
import io.github.cottonmc.cotton.gui.widget.data.Axis
import java.util.Optional
import java.util.stream.Collectors
import kotlin.time.Duration.Companion.seconds
import net.minecraft.scoreboard.Scoreboard
import net.minecraft.scoreboard.Team
import net.minecraft.text.StringVisitable
import net.minecraft.text.Style
import net.minecraft.text.Text
import net.minecraft.util.Formatting
import moe.nea.firmament.Firmament
import moe.nea.firmament.events.TickEvent
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.TimeMark
object DebugView : FirmamentFeature {
private data class StoredVariable<T>(
val obj: T,
val timer: TimeMark,
)
private val storedVariables: MutableMap<String, StoredVariable<*>> = sortedMapOf()
override val identifier: String
get() = "debug-view"
override val defaultEnabled: Boolean
get() = Firmament.DEBUG
fun <T : Any?> showVariable(label: String, obj: T) {
synchronized(this) {
storedVariables[label] = StoredVariable(obj, TimeMark.now())
}
}
fun recalculateDebugWidget() {
storedVariables.entries.removeIf { it.value.timer.passedTime() > 1.seconds }
debugWidget.streamChildren().collect(Collectors.toList()).forEach {
debugWidget.remove(it)
}
storedVariables.entries.forEach {
debugWidget.add(WDynamicLabel({ "${it.key}: ${it.value.obj}" }))
}
debugWidget.layout()
if (storedVariables.isNotEmpty()) {
CottonHud.add(debugWidget, 20, 20)
} else {
CottonHud.remove(debugWidget)
}
}
val debugWidget = WBox(Axis.VERTICAL)
override fun onLoad() {
TickEvent.subscribe {
synchronized(this) {
recalculateDebugWidget()
}
}
}
}
|