From e7d924817bcd20ffd0693f95f735b7e3cbb88d1c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sat, 18 Sep 2021 14:42:09 +0200 Subject: [PATCH] hud: break progress indicator --- .../gui/rendering/gui/hud/HUDRenderer.kt | 1 + .../hud/elements/BreakProgressHUDElement.kt | 53 +++++++++++++++++++ .../gui/hud/elements/CrosshairHUDElement.kt | 6 +-- .../gui/rendering/input/LeftClickHandler.kt | 2 +- 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/BreakProgressHUDElement.kt diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDRenderer.kt index aad7598fd..edf91b6ef 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDRenderer.kt @@ -79,6 +79,7 @@ class HUDRenderer( registerElement(InternalMessagesHUDElement) } registerElement(TabListHUDElement) + registerElement(BreakProgressHUDElement) } override fun init() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/BreakProgressHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/BreakProgressHUDElement.kt new file mode 100644 index 000000000..0ac4a7db8 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/BreakProgressHUDElement.kt @@ -0,0 +1,53 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.gui.hud.elements + +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.text.ChatColors +import de.bixilon.minosoft.data.text.TextComponent +import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement +import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer +import de.bixilon.minosoft.util.KUtil.toResourceLocation +import glm_.vec2.Vec2i + +class BreakProgressHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer) { + override val layout: TextElement = TextElement(hudRenderer, "") + private val leftClickHandler = hudRenderer.renderWindow.inputHandler.leftClickHandler + override val layoutOffset: Vec2i + get() = Vec2i((hudRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (hudRenderer.scaledSize.y - layout.size.y) / 2) + + override fun draw() { + val breakProgress = leftClickHandler.breakProgress + if (breakProgress <= 0 || breakProgress >= 1.0) { + layout.text = "" + return + } + val percent = (leftClickHandler.breakProgress * 100).toInt() + val text = TextComponent("$percent%") + text.color = when { + percent <= 30 -> ChatColors.RED + percent <= 70 -> ChatColors.YELLOW + else -> ChatColors.GREEN + } + layout.text = text + } + + companion object : HUDBuilder { + override val RESOURCE_LOCATION: ResourceLocation = "minosoft:progress_indicator".toResourceLocation() + + override fun build(hudRenderer: HUDRenderer): BreakProgressHUDElement { + return BreakProgressHUDElement(hudRenderer) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CrosshairHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CrosshairHUDElement.kt index fdaeef983..c41e2f3ae 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CrosshairHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CrosshairHUDElement.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.registries.ResourceLocation -import de.bixilon.minosoft.gui.rendering.gui.elements.layout.grid.GridLayout +import de.bixilon.minosoft.gui.rendering.gui.elements.Element import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.HUDAtlasElement import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh @@ -25,7 +25,7 @@ import de.bixilon.minosoft.gui.rendering.input.camera.hit.EntityRaycastHit import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions import de.bixilon.minosoft.util.KUtil.toResourceLocation -class CrosshairHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer) { +class CrosshairHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer) { private lateinit var crosshairAtlasElement: HUDAtlasElement private var mesh: GUIMesh? = null private var previousDebugEnabled: Boolean? = true @@ -91,7 +91,7 @@ class CrosshairHUDElement(hudRenderer: HUDRenderer) : HUDElement(hud companion object : HUDBuilder { - private const val CROSSHAIR_SIZE = 16 + const val CROSSHAIR_SIZE = 16 override val RESOURCE_LOCATION: ResourceLocation = "minosoft:crosshair".toResourceLocation() private val ATLAS_NAME = "minecraft:crosshair".toResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt index bafecf9f0..e29e6f8a5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt @@ -286,7 +286,7 @@ class LeftClickHandler( if (consumed) { return } - swingArm() + swingArm() // ToDo: Only once } companion object {