hud: add text warping

This commit is contained in:
Lukas 2021-06-16 17:21:08 +02:00
parent 9ec2ccaff3
commit f3db1b1832
13 changed files with 18 additions and 72 deletions

View File

@ -18,7 +18,7 @@ import de.bixilon.minosoft.config.config.game.entities.EntitiesConfig
import de.bixilon.minosoft.config.config.game.graphics.GraphicsGameConfig
import de.bixilon.minosoft.config.config.game.sound.SoundConfig
import de.bixilon.minosoft.config.config.game.world.WorldConfig
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.hud.elements.primitive.HUDElement
data class GameConfig(

View File

@ -1,21 +0,0 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.config.game.elements
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.gui.rendering.hud.elements.primitive.HUDElement
data class ElementsGameConfig(
val entries: MutableMap<ResourceLocation, HUDElement> = mutableMapOf(),
)

View File

@ -17,7 +17,10 @@ import com.google.gson.JsonElement
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.locale.minecraft.Translator
import de.bixilon.minosoft.data.text.RGBColor.Companion.asColor
import de.bixilon.minosoft.data.text.events.ClickEvent
import de.bixilon.minosoft.data.text.events.HoverEvent
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.nullCast
import javafx.collections.ObservableList
import javafx.scene.Node
import java.text.CharacterIterator
@ -54,9 +57,8 @@ class BaseComponent : ChatComponent {
val formattingChar = iterator.next()
ChatColors.getColorByFormattingChar(formattingChar)?.let {
ChatColors.VALUES.getOrNull(Character.digit(formattingChar, 16))?.let {
push()
currentColor = it
} ?: ChatFormattingCodes.getChatFormattingCodeByChar(formattingChar)?.let {
push()
@ -92,7 +94,7 @@ class BaseComponent : ChatComponent {
if (colorName.startsWith("#")) {
colorName.asColor()
} else {
ChatColors.getColorByName(colorName)
ChatCode.FORMATTING_CODES[colorName]?.nullCast<RGBColor>()
}
} ?: parent?.color

View File

@ -15,7 +15,7 @@ package de.bixilon.minosoft.gui.rendering.hud
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.Renderer

View File

@ -32,15 +32,6 @@ data class HUDAtlasElement(
override val size: Vec2i
get() = binding.size
val uvs: Array<Vec2> get() {
return arrayOf(
Vec2(uvStart.x, uvStart.y),
Vec2(uvStart.x, uvEnd.y),
Vec2(uvEnd.x, uvStart.y),
Vec2(uvEnd.x, uvEnd.y),
)
}
fun postInit() {
uvStart = (Vec2(binding.start) + RenderConstants.PIXEL_UV_PIXEL_ADD) * texture.arraySinglePixelFactor
uvEnd = Vec2(binding.end) * texture.arraySinglePixelFactor

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.gui.rendering.hud.elements
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import glm_.vec2.Vec2i
enum class HUDElementPositionAnchors(val resourceLocation: ResourceLocation, val quadTransform: (Vec2i, Vec2i) -> Array<Vec2i>) {

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.gui.rendering.hud.elements.position
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONES
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec2
@ -8,9 +8,9 @@ import glm_.vec2.Vec2
import glm_.vec2.Vec2i
enum class HUDElementPositionAnchors(
val resourceLocation: ResourceLocation,
val quadTransform: (Vec2i, Vec2i) -> Array<Vec2i>,
val positionTransform: Vec2
val resourceLocation: ResourceLocation,
val quadTransform: (Vec2i, Vec2i) -> Array<Vec2i>,
val positionTransform: Vec2
) {
// quad transform order: top left, bottom left, bottom right, top right
CENTER(ResourceLocation("minosoft:center"),

View File

@ -13,12 +13,6 @@
package de.bixilon.minosoft.gui.rendering.hud.elements.primitive
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.hud.HUDRenderer
import de.bixilon.minosoft.gui.rendering.hud.elements.HUDElementPositionAnchors
import de.bixilon.minosoft.gui.rendering.hud.elements.HUDElementVec2
import glm_.mat4x4.Mat4
import de.bixilon.minosoft.gui.rendering.hud.HUDRenderer
import de.bixilon.minosoft.gui.rendering.hud.elements.position.HUDElementPositionAnchors
import de.bixilon.minosoft.gui.rendering.hud.elements.position.HUDElementVec2

View File

@ -1,7 +1,7 @@
package de.bixilon.minosoft.gui.rendering.hud.elements.primitive
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.hud.HUDRenderer
import de.bixilon.minosoft.gui.rendering.hud.elements.position.HUDElementPositionAnchors
import de.bixilon.minosoft.gui.rendering.hud.elements.position.HUDElementVec2

View File

@ -3,10 +3,7 @@ package de.bixilon.minosoft.gui.rendering.hud.elements.primitive
import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonWriter
import com.squareup.moshi.ToJson
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.gui.rendering.hud.elements.HUDElementPositionAnchors
import de.bixilon.minosoft.gui.rendering.hud.elements.HUDElementVec2
import de.bixilon.minosoft.util.json.RGBColorSerializer
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.hud.elements.position.HUDElementVec2
import de.bixilon.minosoft.gui.rendering.hud.elements.text.HUDTextElement

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.gui.rendering.hud.elements.primitive
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.text.ChatColors
import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderConstants

View File

@ -1,6 +1,6 @@
package de.bixilon.minosoft.gui.rendering.hud.elements.text
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocation
enum class HUDTextElementAlignments(val resourceLocation: ResourceLocation, val transform: (Float, Float) -> Float) {
LEFT(ResourceLocation("minosoft:left"), { _, position ->

View File

@ -64,13 +64,12 @@ object VecUtil {
val Vec2.Companion.ONES: Vec2
get() = Vec2(1f, 1f)
fun JsonElement.toVec3(): Vec3 {
fun JsonElement.toVec3(default: Vec3? = null): Vec3 {
return when (this) {
is JsonArray -> Vec3(this[0].asFloat, this[1].asFloat, this[2].asFloat)
is JsonObject -> Vec3(this["x"]?.asFloat ?: 0, this["y"]?.asFloat ?: 0, this["z"]?.asFloat ?: 0)
is JsonPrimitive -> Vec3(this.asFloat)
else -> throw IllegalArgumentException("Not a Vec3!")
else -> default ?: throw IllegalArgumentException("Not a Vec3!")
}
}
@ -514,20 +513,4 @@ object VecUtil {
z = 0.0
}
}
operator fun Vec2i.get(axis: Axes): Int {
return when (axis) {
Axes.X -> this.x
Axes.Y -> this.y
Axes.Z -> throw java.lang.IllegalArgumentException("Z does not exist")
}
}
operator fun Vec2.get(axis: Axes): Float {
return when (axis) {
Axes.X -> this.x
Axes.Y -> this.y
Axes.Z -> throw java.lang.IllegalArgumentException("Z does not exist")
}
}
}