From 3708ea6a83c39badad3486143572949d1933dfe6 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Tue, 10 Sep 2024 20:40:01 +0200 Subject: Improvement: Add per election year diana trackers (#2487) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/utils/tracker/SkyHanniItemTracker.kt | 8 ++-- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 45 ++++++++++++++-------- 2 files changed, 34 insertions(+), 19 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils/tracker') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt index 8d6f98d69..3cadd767b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt @@ -25,8 +25,9 @@ class SkyHanniItemTracker( name: String, createNewSession: () -> Data, getStorage: (ProfileSpecificStorage) -> Data, + vararg extraStorage: Pair Data>, drawDisplay: (Data) -> List, -) : SkyHanniTracker(name, createNewSession, getStorage, drawDisplay) { +) : SkyHanniTracker(name, createNewSession, getStorage, *extraStorage, drawDisplay = drawDisplay) { companion object { val SKYBLOCK_COIN = NEUInternalName.SKYBLOCK_COIN @@ -37,9 +38,8 @@ class SkyHanniItemTracker( it.addItem(internalName, amount, command) } getSharedTracker()?.let { sharedData -> - sharedData.get(DisplayMode.TOTAL).items[internalName]?.let { data -> - sharedData.get(DisplayMode.SESSION).items[internalName]!!.hidden = data.hidden - } + val isHidden = sharedData.get(DisplayMode.TOTAL).items[internalName]?.hidden + if (isHidden != null) sharedData.modify { it.items[internalName]?.hidden = isHidden } } if (command) { 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 5b07c9906..7810c1ee6 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.data.TrackerManager import at.hannibal2.skyhanni.features.misc.items.EstimatedItemValue +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils import at.hannibal2.skyhanni.utils.NEUInternalName @@ -24,9 +25,11 @@ open class SkyHanniTracker( val name: String, private val createNewSession: () -> Data, private val getStorage: (ProfileSpecificStorage) -> Data, + vararg extraStorage: Pair Data>, private val drawDisplay: (Data) -> List, ) { + private val extraDisplayModes = extraStorage.toMap() private var inventoryOpen = false private var displayMode: DisplayMode? = null private val currentSessions = mutableMapOf() @@ -61,12 +64,8 @@ open class SkyHanniTracker( } fun modify(mode: DisplayMode, modifyFunction: (Data) -> Unit) { - val storage = ProfileStorageData.profileSpecific ?: return - val data: Data = when (mode) { - DisplayMode.TOTAL -> storage.getTotal() - DisplayMode.SESSION -> storage.getCurrentSession() - } - modifyFunction(data) + val sharedTracker = getSharedTracker() ?: return + sharedTracker.modify(mode, modifyFunction) update() } @@ -124,6 +123,8 @@ open class SkyHanniTracker( }, ) + private val availableTrackers = arrayOf(DisplayMode.TOTAL, DisplayMode.SESSION) + extraDisplayModes.keys + private fun buildDisplayModeView() = Renderable.horizontalContainer( CollectionUtils.buildSelector( "§7Display Mode: ", @@ -134,11 +135,17 @@ open class SkyHanniTracker( storedTrackers[name] = it update() }, + universe = availableTrackers, ), ) - protected fun getSharedTracker() = ProfileStorageData.profileSpecific?.let { - SharedTracker(it.getTotal(), it.getCurrentSession()) + protected fun getSharedTracker() = ProfileStorageData.profileSpecific?.let { ps -> + SharedTracker( + mapOf( + DisplayMode.TOTAL to ps.getTotal(), + DisplayMode.SESSION to ps.getCurrentSession(), + ) + extraDisplayModes.mapValues { it.value(ps) }, + ) } private fun ProfileSpecificStorage.getCurrentSession() = currentSessions.getOrPut(this) { createNewSession() } @@ -165,22 +172,30 @@ open class SkyHanniTracker( } } - class SharedTracker(private val total: Data, private val currentSession: Data) { + inner class SharedTracker( + private val entries: Map, + ) { - fun modify(modifyFunction: (Data) -> Unit) { - modifyFunction(total) - modifyFunction(currentSession) + fun modify(mode: DisplayMode, modifyFunction: (Data) -> Unit) { + get(mode).let(modifyFunction) } - fun get(displayMode: DisplayMode) = when (displayMode) { - DisplayMode.TOTAL -> total - DisplayMode.SESSION -> currentSession + fun modify(modifyFunction: (Data) -> Unit) { + entries.values.forEach(modifyFunction) } + + fun get(displayMode: DisplayMode) = entries[displayMode] ?: ErrorManager.skyHanniError( + "Unregistered display mode accessed on tracker", + "tracker" to name, + "displayMode" to displayMode, + "availableModes" to entries.keys, + ) } enum class DisplayMode(val displayName: String) { TOTAL("Total"), SESSION("This Session"), + MAYOR("This Mayor"), ; } -- cgit