diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/AndroidMenuKeyMapping.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/AndroidMenuKeyMapping.kt index b75aed850..c3db69ee6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/AndroidMenuKeyMapping.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/AndroidMenuKeyMapping.kt @@ -104,15 +104,14 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon } } - fun onRenderGuiEvent(event: RenderGuiEvent.Post) { - if (!grabbedInput) { - lastRender = System.nanoTime() - return - } - + private fun renderWheel(event: RenderGuiEvent.Post) { val player = minecraft.player ?: return val matteryPlayer = player.matteryPlayer ?: return + if (!matteryPlayer.isAndroid) { + return + } + val features = matteryPlayer.features .filter { it is AndroidSwitchableFeature && it.allowToSwitchByPlayer && (!player.isSpectator || it.allowToSwitchByPlayerWhileSpectator) } .collect(Collectors.toList()) as MutableList @@ -250,6 +249,55 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon event.poseStack.popPose() } + private fun renderRegular(event: RenderGuiEvent.Post) { + val player = minecraft.player ?: return + val matteryPlayer = player.matteryPlayer ?: return + + if (!matteryPlayer.isAndroid) { + return + } + + val features = matteryPlayer.features + .filter { it is AndroidSwitchableFeature && it.isOnCooldown } + .collect(Collectors.toList()) as MutableList + + if (features.isEmpty()) { + return + } + + features.sortWith { a, b -> + return@sortWith a.type.registryName!!.compareTo(b.type.registryName!!) + } + + val y = minecraft.window.guiScaledHeight * 0.2f + var x = minecraft.window.guiScaledWidth * 0.5f - (features.size.toFloat() * (COOLDOWN_ICON_SIZE / 2f + COOLDOWN_ICON_MARGIN / 2f)) + + for (feature in features) { + feature.renderIcon(event.poseStack, x, y, COOLDOWN_ICON_SIZE, COOLDOWN_ICON_SIZE) + + RenderSystem.setShaderColor(1f, 1f, 1f, 0.5f) + drawArc(event.poseStack, x, y, COOLDOWN_ICON_SIZE / 2f, 0f, PI / 2.0, PI / 2.0 + PI * 2.0 * feature.cooldownPercent, alignAtCenter = false) + RenderSystem.setShaderColor(1f, 1f, 1f, 1f) + + font.drawAligned(event.poseStack, formatTickDuration(feature.cooldown), TextAlign.TOP_CENTER, x + COOLDOWN_ICON_SIZE / 2f, y + COOLDOWN_ICON_SIZE + 1f, RGBAColor.WHITE) + + x += COOLDOWN_ICON_SIZE + COOLDOWN_ICON_MARGIN + } + } + + const val COOLDOWN_ICON_SIZE = 18f + const val COOLDOWN_ICON_MARGIN = 12f + + fun onRenderGuiEvent(event: RenderGuiEvent.Post) { + if (!grabbedInput) { + lastRender = System.nanoTime() + renderRegular(event) + return + } else { + renderWheel(event) + } + } + fun register(event: RegisterKeyMappingsEvent) { event.register(this) }