diff --git a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt index 5824969..8b441ed 100644 --- a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt @@ -1,12 +1,18 @@ package net.taehui.twilight.system +import com.fasterxml.jackson.annotation.JsonValue import net.taehui.twilight.Logger import java.nio.file.Path import kotlin.io.path.pathString object AbilityClassSystem : Logger { - enum class AbilityClassVariety { - ABILITY_CLASS_5K, ABILITY_CLASS_7K, ABILITY_CLASS_9K + enum class AbilityClassVariety(@JvmField val value: Int) { + ETC(-1), _5K(0), _7K(1), _9K(2); + + @JsonValue + fun getValue(): Int { + return value + } } private var abilityClasses = arrayOf(emptyArray>(), emptyArray>(), emptyArray>()) @@ -41,9 +47,10 @@ return AbilityClassSystem::class.java.classLoader.getResourceAsStream( Path.of( when (abilityClassVariety) { - AbilityClassVariety.ABILITY_CLASS_5K -> "abilityClass5K" - AbilityClassVariety.ABILITY_CLASS_7K -> "abilityClass7K" - AbilityClassVariety.ABILITY_CLASS_9K -> "abilityClass9K" + AbilityClassVariety.ETC -> "" + AbilityClassVariety._5K -> "abilityClass5K" + AbilityClassVariety._7K -> "abilityClass7K" + AbilityClassVariety._9K -> "abilityClass9K" }, path ).pathString @@ -51,7 +58,7 @@ .use { it!!.readAllBytes() } } - abilityClasses[abilityClassVariety.ordinal] = arrayOf( + abilityClasses[abilityClassVariety.value] = arrayOf( arrayOf( loadDrawing("S+.png") ), arrayOf( @@ -92,9 +99,9 @@ ) } - loadAbilityClass(AbilityClassVariety.ABILITY_CLASS_5K) - loadAbilityClass(AbilityClassVariety.ABILITY_CLASS_7K) - loadAbilityClass(AbilityClassVariety.ABILITY_CLASS_9K) + loadAbilityClass(AbilityClassVariety._5K) + loadAbilityClass(AbilityClassVariety._7K) + loadAbilityClass(AbilityClassVariety._9K) logInfo("Loaded Ability Class") } diff --git a/src/main/kotlin/net/taehui/twilight/system/AbilitySystem.kt b/src/main/kotlin/net/taehui/twilight/system/AbilitySystem.kt index 7a24893..1ab6c5a 100644 --- a/src/main/kotlin/net/taehui/twilight/system/AbilitySystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/AbilitySystem.kt @@ -12,7 +12,6 @@ import org.jsoup.Jsoup import java.io.IOException import java.nio.file.Files -import java.util.Collections import java.util.TreeSet object AbilitySystem : Logger { @@ -23,7 +22,7 @@ class AbilityFile { var fileName = "" - var abilityClassVariety = AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_5K + var abilityClassVariety = AbilityClassSystem.AbilityClassVariety.ETC } } @@ -35,9 +34,21 @@ hashMap128.clear() hashMap256.clear() } + + fun getValue(noteID128: String, noteID256: String, defaultValue: T): T { + return hashMap128.getOrDefault(noteID128, hashMap256.getOrDefault(noteID256, defaultValue)) + } } - private val noteIDAbilityMap = arrayOf>(AbilityMap(), AbilityMap(), AbilityMap()) + private val noteIDAbilityMap = mapOf>( + Pair( + AbilityClassSystem.AbilityClassVariety.ETC, + AbilityMap() + ), + Pair(AbilityClassSystem.AbilityClassVariety.ETC, AbilityMap()), + Pair(AbilityClassSystem.AbilityClassVariety.ETC, AbilityMap()), + Pair(AbilityClassSystem.AbilityClassVariety.ETC, AbilityMap()) + ) private val noteIDAbilityIDsMap = AbilityMap>() private val noteIDAbilityNamesMap = AbilityMap>() private val abilityNameAbilityIDsMap = mutableMapOf>() @@ -108,8 +119,10 @@ } try { val abilityMap = defaultAbility.abilityMap - noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_5K.ordinal].wipe() - noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_7K.ordinal].wipe() + noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety.ETC]?.wipe() + noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety._5K]?.wipe() + noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety._7K]?.wipe() + noteIDAbilityMap[AbilityClassSystem.AbilityClassVariety._9K]?.wipe() noteIDAbilityIDsMap.wipe() noteIDAbilityNamesMap.wipe() abilityNameAbilityIDsMap.clear() @@ -129,7 +142,7 @@ it.fileName == abilityFileName }?.abilityClassVariety if (abilityClassVariety != null) { - val noteIDAbilityMap = noteIDAbilityMap[abilityClassVariety.ordinal] + val noteIDAbilityMap = noteIDAbilityMap[abilityClassVariety] val abilityTable = jm.readValue(abilityFilePath.toFile(), JSON.BMSTable::class.java) val levels = abilityTable.level_order.map { "${abilityTable.symbol}$it" }.toTypedArray(); @@ -142,7 +155,7 @@ val ability = abilityMap[abilityID] ?: 0.0 if (ability > 0.0) { if (abilityTableData.md5.isNotEmpty()) { - noteIDAbilityMap.hashMap128.putIfAbsent(abilityTableData.md5, ability) + noteIDAbilityMap?.hashMap128?.putIfAbsent(abilityTableData.md5, ability) noteIDAbilityIDsMap.hashMap128.computeIfAbsent( abilityTableData.md5 ) { mutableListOf() }.add(abilityID) @@ -151,7 +164,7 @@ ) { mutableListOf() }.add(abilityName) } if (abilityTableData.sha256.isNotEmpty()) { - noteIDAbilityMap.hashMap256.putIfAbsent(abilityTableData.sha256, ability) + noteIDAbilityMap?.hashMap256?.putIfAbsent(abilityTableData.sha256, ability) noteIDAbilityIDsMap.hashMap256.computeIfAbsent( abilityTableData.sha256 ) { mutableListOf() }.add(abilityID) @@ -161,7 +174,9 @@ } } abilityNameAbilityIDsMap.computeIfAbsent(abilityName) { - if (levels.isEmpty()) mutableListOf() else TreeSet { o1, o2 -> levels.indexOf(o1).compareTo(levels.indexOf(o2)) } + if (levels.isEmpty()) mutableListOf() else TreeSet { o1, o2 -> + levels.indexOf(o1).compareTo(levels.indexOf(o2)) + } }.add(abilityID) } logInfo("Loaded Ability (${abilityTable.name})") @@ -188,28 +203,21 @@ noteID128: String, noteID256: String ): Double { - val abilityHashMap = noteIDAbilityMap[abilityClassVariety.ordinal] - return abilityHashMap.hashMap128.getOrDefault(noteID128, abilityHashMap.hashMap256.getOrDefault(noteID256, 0.0)) + return noteIDAbilityMap[abilityClassVariety]?.getValue(noteID128, noteID256, 0.0) ?: 0.0 } fun getAbilityIDs( noteID128: String, noteID256: String ): Collection { - return noteIDAbilityIDsMap.hashMap128.getOrDefault( - noteID128, - noteIDAbilityIDsMap.hashMap256.getOrDefault(noteID256, emptyList()) - ) + return noteIDAbilityIDsMap.getValue(noteID128, noteID256, mutableListOf()) } fun getAbilityNames( noteID128: String, noteID256: String ): Collection { - return noteIDAbilityNamesMap.hashMap128.getOrDefault( - noteID128, - noteIDAbilityNamesMap.hashMap256.getOrDefault(noteID256, emptyList()) - ) + return noteIDAbilityNamesMap.getValue(noteID128, noteID256, mutableListOf()) } fun getAbilityIDs( diff --git a/src/main/kotlin/net/taehui/twilight/system/DB.kt b/src/main/kotlin/net/taehui/twilight/system/DB.kt index 7d8265f..2999738 100644 --- a/src/main/kotlin/net/taehui/twilight/system/DB.kt +++ b/src/main/kotlin/net/taehui/twilight/system/DB.kt @@ -1415,7 +1415,7 @@ dbStatement.setDouble( 13, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_5K, + AbilityClassSystem.AbilityClassVariety._5K, noteID128, noteID256 ) @@ -1423,7 +1423,7 @@ dbStatement.setDouble( 14, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_7K, + AbilityClassSystem.AbilityClassVariety._7K, noteID128, noteID256 ) @@ -1431,7 +1431,7 @@ dbStatement.setDouble( 15, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_9K, + AbilityClassSystem.AbilityClassVariety._9K, noteID128, noteID256 ) @@ -1479,7 +1479,7 @@ dbStatement.setDouble( 1, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_5K, + AbilityClassSystem.AbilityClassVariety._5K, noteID128, noteID256 ) @@ -1487,7 +1487,7 @@ dbStatement.setDouble( 2, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_7K, + AbilityClassSystem.AbilityClassVariety._7K, noteID128, noteID256 ) @@ -1495,7 +1495,7 @@ dbStatement.setDouble( 3, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_9K, + AbilityClassSystem.AbilityClassVariety._9K, noteID128, noteID256 ) diff --git a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt index d7700df..3942e2e 100644 --- a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt @@ -513,7 +513,7 @@ send( ctx, AbilityClassSystem.getAbilityClass( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_5K, + AbilityClassSystem.AbilityClassVariety._5K, abilityClass5K.toDouble() ) ) @@ -521,7 +521,7 @@ send( ctx, AbilityClassSystem.getAbilityClass( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_7K, + AbilityClassSystem.AbilityClassVariety._7K, abilityClass7K.toDouble() ) ) @@ -529,7 +529,7 @@ send( ctx, AbilityClassSystem.getAbilityClass( - AbilityClassSystem.AbilityClassVariety.ABILITY_CLASS_9K, + AbilityClassSystem.AbilityClassVariety._9K, abilityClass9K.toDouble() ) )