Render android abilities cooldown on main HUD

This commit is contained in:
DBotThePony 2022-10-16 17:55:27 +07:00
parent 65eaf916f8
commit dfb93f65f1
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -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<AndroidSwitchableFeature>
@ -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<AndroidSwitchableFeature>
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)
}