aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/features/debug/DebugView.kt
blob: e8c85d836cf0447a058f4861eb115bcec8c65531 (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
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.data.Axis
import java.util.Optional
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<*>> = mutableMapOf()
    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())
        }
    }

    val debugWidget = WBox(Axis.VERTICAL)


    override fun onLoad() {
        TickEvent.subscribe {
            synchronized(this) {
                storedVariables.entries.removeIf { it.value.timer.passedTime() > 1.seconds }
                if (storedVariables.isEmpty()) {
                    CottonHud.add(debugWidget, 20, 20)
                } else {
                    CottonHud.remove(debugWidget)
                }
            }
        }
    }
}