-
-
Notifications
You must be signed in to change notification settings - Fork 339
Expand file tree
/
Copy pathMayorOverlay.kt
More file actions
117 lines (106 loc) · 3.95 KB
/
MayorOverlay.kt
File metadata and controls
117 lines (106 loc) · 3.95 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package at.hannibal2.skyhanni.features.gui
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.api.event.HandleEvent
import at.hannibal2.skyhanni.config.enums.OutsideSBFeature
import at.hannibal2.skyhanni.data.ElectionApi
import at.hannibal2.skyhanni.data.Perk
import at.hannibal2.skyhanni.data.Perk.Companion.toPerk
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.SecondPassedEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderable
import at.hannibal2.skyhanni.utils.SkyBlockUtils
import at.hannibal2.skyhanni.utils.TimeUtils.format
import at.hannibal2.skyhanni.utils.renderables.Renderable
import at.hannibal2.skyhanni.utils.renderables.container.VerticalContainerRenderable.Companion.vertical
import at.hannibal2.skyhanni.utils.renderables.primitives.WrappedStringRenderable.Companion.wrappedText
import at.hannibal2.skyhanni.utils.renderables.primitives.text
private val config get() = SkyHanniMod.feature.gui.mayorOverlay
enum class MayorOverlay(private val configLine: String, private val createLines: () -> Renderable) {
TITLE(
"Title",
{ Renderable.text("§6§lMAYOR OVERLAY") },
),
MAYOR(
"Mayor",
{
val currentMayor = ElectionApi.currentMayor
renderPerson(
"Mayor",
currentMayor?.mayorName,
currentMayor?.activePerks,
)
},
),
MINISTER(
"Minister",
{
val currentMinister = ElectionApi.currentMinister
renderPerson(
"Minister",
currentMinister?.mayorName,
currentMinister?.activePerks,
)
},
),
CANDIDATES(
"Candidates",
{
val candidates = ElectionApi.rawMayorData?.current?.candidates.orEmpty()
Renderable.vertical(
candidates.map { candidate ->
renderPerson(
"Candidate",
candidate.name,
candidate.perks.mapNotNull { it.toPerk() },
)
},
spacing = config.candidateSpacing,
)
},
),
NEW_MAYOR(
"New Mayor Time",
{
Renderable.text("§7New Mayor in: §e${ElectionApi.nextMayorTimestamp.timeUntil().format(showMilliSeconds = false)}")
},
),
;
override fun toString() = configLine
@SkyHanniModule
companion object {
var display: Renderable? = null
@HandleEvent
fun onSecondPassed(event: SecondPassedEvent) {
if (!isEnabled()) return
with(config) {
display = Renderable.vertical(mayorOverlay.map { it.createLines() }, spacing = spacing)
}
}
@HandleEvent
fun onGuiRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) {
if (!isEnabled()) return
display?.let { config.position.renderRenderable(it, posLabel = "Mayor Overlay") }
}
private fun isEnabled() = (SkyBlockUtils.inSkyBlock || OutsideSBFeature.MAYOR_OVERLAY.isSelected()) && config.enabled
}
}
private fun renderPerson(title: String, name: String?, perks: List<Perk>?): Renderable {
val colorCode = ElectionApi.mayorNameToColorCode(name.orEmpty())
val perkLines = perks?.takeIf { config.showPerks }?.map { perk ->
" ${if (perk.minister) "§6✯ " else ""}§e${perk.perkName}" to "§7${perk.description}"
}.orEmpty()
return Renderable.vertical(
buildMap {
name?.let { put("$colorCode$title $it", null) }
putAll(perkLines)
}.map { (key, value) ->
value?.let {
Renderable.hoverTips(
Renderable.text(key),
listOf(Renderable.wrappedText(it, 200)),
)
} ?: Renderable.text(key)
},
)
}