From 12cbcc147d982f1fedd19ffce6c20b1cf94d5ee9 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Thu, 11 Jun 2026 14:40:36 -0700 Subject: [PATCH] fix Score Counters sorting + AP/AP+ labels --- .../com/derakkuma/ui/images/MaimaiImages.kt | 5 ++ .../com/derakkuma/ui/tabs/PlayerDataTab.kt | 56 ++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/derakkuma/ui/images/MaimaiImages.kt b/composeApp/src/commonMain/kotlin/com/derakkuma/ui/images/MaimaiImages.kt index 2ae4780..2caf6e1 100644 --- a/composeApp/src/commonMain/kotlin/com/derakkuma/ui/images/MaimaiImages.kt +++ b/composeApp/src/commonMain/kotlin/com/derakkuma/ui/images/MaimaiImages.kt @@ -298,6 +298,11 @@ fun musicIconImage(rank: String): BundledImage? = when (rank.lowercase()) { "fdxp" -> BundledImage.MusicIconFDXP "sync" -> BundledImage.MusicIconSync "clear" -> BundledImage.MusicIconClear + "dxstar1", "dxstar_1" -> BundledImage.DxStar1 + "dxstar2", "dxstar_2" -> BundledImage.DxStar2 + "dxstar3", "dxstar_3" -> BundledImage.DxStar3 + "dxstar4", "dxstar_4" -> BundledImage.DxStar4 + "dxstar5", "dxstar_5" -> BundledImage.DxStar5 else -> null } diff --git a/composeApp/src/commonMain/kotlin/com/derakkuma/ui/tabs/PlayerDataTab.kt b/composeApp/src/commonMain/kotlin/com/derakkuma/ui/tabs/PlayerDataTab.kt index 727384e..02e06d9 100644 --- a/composeApp/src/commonMain/kotlin/com/derakkuma/ui/tabs/PlayerDataTab.kt +++ b/composeApp/src/commonMain/kotlin/com/derakkuma/ui/tabs/PlayerDataTab.kt @@ -231,7 +231,11 @@ fun PlayerDataTab(client: MaimaiClient, cookie: String, profile: Profile? = null @Composable private fun ScoreCounterBarChart(counters: List, modifier: Modifier = Modifier) { - val displayCounters = remember(counters) { counters.filter { it.total > 0 || it.achieved > 0 } } + val displayCounters = remember(counters) { + counters + .filter { it.total > 0 || it.achieved > 0 } + .sortedWith(compareBy { scoreCounterSortOrder(it.rank) }.thenBy { it.rank }) + } if (displayCounters.isEmpty()) return val animatedFractions = displayCounters.mapIndexed { index, counter -> val target = if (counter.total > 0) counter.achieved.toFloat() / counter.total.toFloat() else 0f @@ -645,7 +649,7 @@ private fun List.modeCounts(primaryColor: Color): List } private fun List.rankCounts(primaryColor: Color): List { - val order = listOf("sssp", "sss", "ssp", "ss", "sp", "s", "aaa", "aa", "a", "bbb", "bb", "b", "c", "d") + val order = listOf("sssp", "sss", "ssp", "ss", "sp", "s", "dxstar5", "dxstar4", "dxstar3", "dxstar2", "dxstar1", "aaa", "aa", "a", "bbb", "bb", "b", "c", "d") val colors = listOf(primaryColor, DiffMaster, DiffExpert, DiffAdvanced, DiffBasic) return groupBy { it.scoreRank.normalizedRank() } .filterKeys { it.isNotBlank() } @@ -661,7 +665,53 @@ private fun String.normalizedRank(): String = lowercase() .replace("_", "") .replace(" ", "") -private fun String.displayRank(): String = uppercase().replace("P", "+") +private val SCORE_COUNTER_SORT_ORDER = listOf( + "fdxp", + "fdx", + "fsp", + "fs", + "app", + "ap", + "fcp", + "fc", + "sssp", + "sss", + "ssp", + "ss", + "sp", + "s", + "sync", + "clear", + "dxstar_5", + "dxstar_4", + "dxstar_3", + "dxstar_2", + "dxstar_1", +) + +private fun scoreCounterSortOrder(rank: String): Int { + val index = SCORE_COUNTER_SORT_ORDER.indexOf(rank.lowercase()) + return if (index >= 0) index else SCORE_COUNTER_SORT_ORDER.size +} + +private fun String.displayRank(): String = when (lowercase()) { + "fdxp" -> "FDX+" + "fdx" -> "FDX" + "fsp" -> "FS+" + "fs" -> "FS" + "sp" -> "S+" + "ssp" -> "SS+" + "sssp" -> "SSS+" + "fcp" -> "FC+" + "fc" -> "FC" + "app" -> "AP+" + "dxstar_1", "dxstar1" -> "DX ✦" + "dxstar_2", "dxstar2" -> "DX ✦✦" + "dxstar_3", "dxstar3" -> "DX ✦✦✦" + "dxstar_4", "dxstar4" -> "DX ✦✦✦✦" + "dxstar_5", "dxstar5" -> "DX ✦✦✦✦✦" + else -> uppercase() +} private fun List.dedupeArchivedPlays(): List = distinctBy { play -> listOf( -- 2.51.2