package net.taehui.twilight.system import com.fasterxml.jackson.annotation.JsonValue import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.databind.ObjectMapper import net.taehui.twilight.Logger import net.taehui.twilight.TwilightComponent import java.io.IOException import java.nio.file.Files object AbilityClassSystem : Logger { enum class AbilityClassVariety(@JvmField val value: Int) { ETC(-1), INPUT_MODE_5K(0), INPUT_MODE_7K(1), INPUT_MODE_9K(2); @JsonValue fun getValue(): Int { return value } } private var abilityClasses = arrayOf(emptyArray<ByteArray>(), emptyArray<ByteArray>(), emptyArray<ByteArray>()) private var abilityClassStore = emptyArray<Array<Double>>() var isLoading = false fun getAbilityClass(abilityClassVariety: AbilityClassVariety, abilityClass: Double): ByteArray { val abilityClasses = abilityClasses[abilityClassVariety.value] val abilityClassStore = abilityClassStore[abilityClassVariety.value] for (i in 0..abilityClassStore.size - 2) { if (abilityClass >= abilityClassStore[i]) { return abilityClasses[i] } } return abilityClasses[0] } fun loadAbilityClass() { isLoading = true try { val jm = ObjectMapper() abilityClassStore = jm.readValue( TwilightComponent.ABILITY_CLASS_ENTRY_PATH.resolve("Default.json").toFile(), object : TypeReference<Array<Array<Double>>>() {}) fun loadAbilityClass(abilityClassVariety: AbilityClassVariety) { fun loadDrawing(fileName: String): ByteArray { return Files.readAllBytes(TwilightComponent.ABILITY_CLASS_ENTRY_PATH.resolve(when (abilityClassVariety) { AbilityClassVariety.ETC -> "" AbilityClassVariety.INPUT_MODE_5K -> "5K" AbilityClassVariety.INPUT_MODE_7K -> "7K" AbilityClassVariety.INPUT_MODE_9K -> "9K" }).resolve(fileName)) } abilityClasses[abilityClassVariety.value] = arrayOf( loadDrawing("S+1.png"), loadDrawing("S+2.png"), loadDrawing("S+3.png"), loadDrawing("S+4.png"), loadDrawing("S+5.png"), loadDrawing("S1.png"), loadDrawing("S2.png"), loadDrawing("S3.png"), loadDrawing("S4.png"), loadDrawing("S5.png"), loadDrawing("A+1.png"), loadDrawing("A+2.png"), loadDrawing("A+3.png"), loadDrawing("A+4.png"), loadDrawing("A+5.png"), loadDrawing("A1.png"), loadDrawing("A2.png"), loadDrawing("A3.png"), loadDrawing("A4.png"), loadDrawing("A5.png"), loadDrawing("B1.png"), loadDrawing("B2.png"), loadDrawing("B3.png"), loadDrawing("B4.png"), loadDrawing("B5.png"), loadDrawing("C1.png"), loadDrawing("C2.png"), loadDrawing("C3.png"), loadDrawing("C4.png"), loadDrawing("C5.png"), loadDrawing("D1.png"), loadDrawing("D2.png"), loadDrawing("D3.png"), loadDrawing("D4.png"), loadDrawing("D5.png"), loadDrawing("F.png") ) } loadAbilityClass(AbilityClassVariety.INPUT_MODE_5K) loadAbilityClass(AbilityClassVariety.INPUT_MODE_7K) loadAbilityClass(AbilityClassVariety.INPUT_MODE_9K) logInfo("Loaded Ability Class") jm.writerWithDefaultPrettyPrinter() .writeValue( TwilightComponent.ABILITY_CLASS_ENTRY_PATH.resolve("Default.json").toFile(), abilityClassStore ) logInfo("Saved Ability Class") } catch (e: IOException) { logFault(e) } finally { isLoading = false } } }