From 135fb96f0b0b097e1a2ee96ae8aae35277eaf8f5 Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Tue, 8 Mar 2022 00:03:54 +0000 Subject: [PATCH] Add EnumValue to possible Feature values --- .../hibiscus/api/feature/values/EnumValue.kt | 35 +++++++++++++++++++ .../api/feature/values/ValueRegistry.kt | 9 +++++ 2 files changed, 44 insertions(+) create mode 100644 src/main/kotlin/codes/som/hibiscus/api/feature/values/EnumValue.kt diff --git a/src/main/kotlin/codes/som/hibiscus/api/feature/values/EnumValue.kt b/src/main/kotlin/codes/som/hibiscus/api/feature/values/EnumValue.kt new file mode 100644 index 0000000..4522c35 --- /dev/null +++ b/src/main/kotlin/codes/som/hibiscus/api/feature/values/EnumValue.kt @@ -0,0 +1,35 @@ +package codes.som.hibiscus.api.feature.values + +import imgui.ImGui +import imgui.type.ImInt + +class EnumValue>(name: String, value: E) : RegisteredValue(name, value) { + override fun convertValueFromString(representation: String): E { + return value + .javaClass + .enumConstants + .first { it.name.equals(representation, ignoreCase = true) } + } + + override fun drawUIControl() { + val selectedValue = ImInt(value.ordinal ?: -1) + ImGui.combo(name, selectedValue, value.javaClass.enumConstants.map { it.name }.toTypedArray()) + value = value.javaClass.enumConstants[selectedValue.get()] + } +} + +class OptionalEnumValue>( + name: String, + private val enumType: Class, + value: E? +) : RegisteredValue(name, value) { + override fun convertValueFromString(representation: String): E { + return enumType.enumConstants.first { it.name.equals(representation, ignoreCase = true) } + } + + override fun drawUIControl() { + val selectedValue = ImInt(value?.ordinal ?: -1) + ImGui.combo(name, selectedValue, arrayOf("") + enumType.enumConstants.map { it.name }.toTypedArray()) + value = enumType.enumConstants.getOrNull(selectedValue.get() - 1) + } +} diff --git a/src/main/kotlin/codes/som/hibiscus/api/feature/values/ValueRegistry.kt b/src/main/kotlin/codes/som/hibiscus/api/feature/values/ValueRegistry.kt index 6d5c85e..6464635 100644 --- a/src/main/kotlin/codes/som/hibiscus/api/feature/values/ValueRegistry.kt +++ b/src/main/kotlin/codes/som/hibiscus/api/feature/values/ValueRegistry.kt @@ -26,4 +26,13 @@ class ValueRegistry { fun float(name: String, default: Float, min: Float = Float.MIN_VALUE, max: Float = Float.MAX_VALUE) = FloatValue(name, default, min, max).also(this::register) + + fun > enum(name: String, default: E) = + EnumValue(name, default) + + fun > optionalEnum(name: String, type: Class, default: E?) = + OptionalEnumValue(name, type, default) + + inline fun > optionalEnum(name: String, default: E?) = + optionalEnum(name, E::class.java, default) }