From e03ba746fa0ab6258fcd5e6855d1590b0ba6f5c9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:39:30 +0100 Subject: SkyHanniTracker now handles the display list as well. --- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 73 +++++++++++----------- 1 file changed, 38 insertions(+), 35 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils/tracker') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index ec0fc4848..d1b783f7e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -5,7 +5,6 @@ import at.hannibal2.skyhanni.config.core.config.Position import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft @@ -15,46 +14,15 @@ class SkyHanniTracker( private val name: String, private val createNewSession: () -> Data, private val getStorage: (Storage.ProfileSpecific) -> Data, - private val update: () -> Unit, + private val drawDisplay: (Data) -> List>, ) { private var inventoryOpen = false private var displayMode = DisplayMode.TOTAL private val currentSessions = mutableMapOf() + private var display = emptyList>() fun isInventoryOpen() = inventoryOpen - fun addSessionResetButton(list: MutableList>) { - if (!inventoryOpen || displayMode != DisplayMode.SESSION) return - - list.addAsSingletonList( - Renderable.clickAndHover( - "§cReset session!", - listOf( - "§cThis will reset your", - "§ccurrent session of", - "§c$name" - ), - ) { - reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") - }) - } - - fun addDisplayModeToggle(list: MutableList>) { - if (!inventoryOpen) return - - list.addSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == displayMode }, - onChange = { - displayMode = it - update() - } - ) - } - - fun currentDisplay() = getSharedTracker()?.get(displayMode) - fun resetCommand(args: Array, command: String) { if (args.size == 1 && args[0].lowercase() == "confirm") { reset(DisplayMode.TOTAL, "§e[SkyHanni] Reset total $name!") @@ -69,9 +37,10 @@ class SkyHanniTracker( fun modify(modifyFunction: (Data) -> Unit) { getSharedTracker()?.modify(modifyFunction) + update() } - fun renderDisplay(position: Position, display: List>) { + fun renderDisplay(position: Position) { val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory if (inventoryOpen != currentlyOpen) { inventoryOpen = currentlyOpen @@ -81,6 +50,40 @@ class SkyHanniTracker( position.renderStringsAndItems(display, posLabel = name) } + fun update() { + display = currentDisplay()?.let { + val list = drawDisplay(it).toMutableList() + if (inventoryOpen) { + list.add(1, LorenzUtils.buildSelector( + "§7Display Mode: ", + getName = { type -> type.displayName }, + isCurrent = { it == displayMode }, + onChange = { + displayMode = it + update() + } + )) + } + if (inventoryOpen && displayMode == DisplayMode.SESSION) { + list.addAsSingletonList( + Renderable.clickAndHover( + "§cReset session!", + listOf( + "§cThis will reset your", + "§ccurrent session of", + "§c$name" + ), + ) { + reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") + }) + } + + list + } ?: emptyList() + } + + private fun currentDisplay() = getSharedTracker()?.get(displayMode) + private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) -- cgit