Skip to content

Commit

Permalink
Reformatting, text shadow support
Browse files Browse the repository at this point in the history
  • Loading branch information
ATPStorages committed Aug 29, 2024
1 parent 3cb4eba commit 12763fb
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import breadmod.menu.block.SoundBlockMenu
import breadmod.util.gui.SerializedScreenFactory
import breadmod.util.gui.widget.BackgroundWidget
import breadmod.util.gui.widget.ContainerWidget
import breadmod.util.render.rgMinecraft
import net.minecraft.client.gui.components.EditBox
import net.minecraft.network.chat.Component
import net.minecraft.world.entity.player.Inventory

Expand All @@ -25,16 +23,16 @@ internal object SoundBlockScreenFactory : SerializedScreenFactory<SoundBlockMenu
176, 166,
modLocation("textures", "gui", "container", "sound_block.png")
) to (0.0 to "background"),
EditBox(
rgMinecraft.font, 4, 7,
160, 10,
Component.empty()
).also { editBox ->
editBox.value = "sound input WIP"
editBox.setResponder {
println(editBox.value)
}
} to (0.1 to null)
// EditBox(
// rgMinecraft.font, 4, 7,
// 160, 10,
// Component.empty()
// ).also { editBox ->
// editBox.value = "sound input WIP"
// editBox.setResponder {
// println(editBox.value)
// }
// } to (0.1 to null)
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import breadmod.util.gui.SerializedScreen
import breadmod.util.gui.widget.ContainerWidget
import breadmod.util.gui.widget.InventoryWidget
import breadmod.util.gui.widget.TextWidget
import breadmod.util.render.rgMinecraft
import net.minecraft.client.gui.GuiGraphics
import net.minecraft.network.chat.Component
import net.minecraft.world.entity.player.Inventory
Expand Down Expand Up @@ -33,9 +34,16 @@ internal class SoundBlockSerializedScreen(
rootWidget.y = (height - image.height) / 2

rootWidget.addWidget(
TextWidget(2, 2, 20, 10, Component.literal("A TEST"), Color(0f, 0f, 0f, 0f)),
0.3, "title"
TextWidget(
0, 3,
image.width, rgMinecraft.font.lineHeight,
pMenu.parent.displayName, Color.DARK_GRAY,
pNoScissor = true
),
200.0
).addWidget(
InventoryWidget(8, 88, pInventory, pMenu),
0.0
)
rootWidget.addWidget(InventoryWidget(8, 88, pInventory, pMenu), 0.0, "inventory")
}
}
4 changes: 2 additions & 2 deletions src/main/kotlin/breadmod/util/gui/widget/ContainerWidget.kt
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,9 @@ open class ContainerWidget(
* @author Miko Elbrecht
* @since 1.0
*/
fun addWidget(pWidget: AbstractWidget, pZIndex: Double, pTag: String): ContainerWidget = this.also {
fun addWidget(pWidget: AbstractWidget, pZIndex: Double, pTag: String? = null): ContainerWidget = this.also {
childrenWidgets[pWidget] = pZIndex to pTag
associationMap[pTag] = pWidget
if (pTag != null) associationMap[pTag] = pWidget
}

/**
Expand Down
27 changes: 22 additions & 5 deletions src/main/kotlin/breadmod/util/gui/widget/TextWidget.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package breadmod.util.gui.widget

import breadmod.util.render.rgMinecraft
import net.minecraft.client.gui.Font
import net.minecraft.client.gui.GuiGraphics
import net.minecraft.client.gui.components.AbstractWidget
import net.minecraft.client.gui.narration.NarratedElementType
import net.minecraft.client.gui.narration.NarrationElementOutput
import net.minecraft.network.chat.Component
import net.minecraft.network.chat.FormattedText
import org.joml.Vector2i
import java.awt.Color

Expand All @@ -31,6 +33,7 @@ class TextWidget(

pMessage: Component,
private val pMessageColor: Color = Color.WHITE,
private val pDropShadow: Boolean = false,
private val pBackgroundColor: Color? = null,

private val pCentering: CenteringType = CenteringType.CENTER_LINE,
Expand Down Expand Up @@ -100,7 +103,20 @@ class TextWidget(
NONE
}

private val getCenterForFont = (height / 2) - (rgMinecraft.font.lineHeight / 2)
private val centerForFont = (height / 2) - (rgMinecraft.font.lineHeight / 2)

private fun GuiGraphics.drawLWordWrap(pFont: Font, pText: FormattedText, pX: Int, pY: Int, pLineWidth: Int, pColor: Int) {
var rY = pY
for (formattedCS in pFont.split(pText, pLineWidth)) {
this.drawString(pFont, formattedCS, pX, rY, pColor, pDropShadow)
rY += 9
}
}

private fun GuiGraphics.drawLCenteredString(pFont: Font, pText: Component, pX: Int, pY: Int, pColor: Int) {
val formattedCS = pText.visualOrderText
this.drawString(pFont, formattedCS, pX - pFont.width(formattedCS) / 2, pY, pColor, pDropShadow)
}

/**
* Renders this [TextWidget].
Expand All @@ -115,20 +131,21 @@ class TextWidget(
if (pMessageColor.alpha > 0) {
val tooBig = rgMinecraft.font.width(message) > width
when {
// TODO Shadow
tooBig && pWrapping == WrappingType.SCROLL_HORIZONTAL -> renderScrollingString(
pGuiGraphics, rgMinecraft.font, message,
0, 0, width, if (pCentering == CenteringType.CENTER_LINE) rgMinecraft.font.lineHeight else height,
pMessageColor.rgb
)

tooBig && pWrapping == WrappingType.WRAP_VERTICAL ->
pGuiGraphics.drawWordWrap(rgMinecraft.font, message, 0, 0, width, pMessageColor.rgb)
pGuiGraphics.drawLWordWrap(rgMinecraft.font, message, 0, 0, width, pMessageColor.rgb)

pCentering != CenteringType.NONE -> {
val position = Vector2i(width / 2, 0)
if (pCentering == CenteringType.CENTER_RECT) position.add(0, getCenterForFont)
if (pCentering == CenteringType.CENTER_RECT) position.add(0, centerForFont)

pGuiGraphics.drawCenteredString(
pGuiGraphics.drawLCenteredString(
rgMinecraft.font,
message,
position.x,
Expand All @@ -137,7 +154,7 @@ class TextWidget(
)
}

else -> pGuiGraphics.drawString(rgMinecraft.font, message, 0, 0, pMessageColor.rgb)
else -> pGuiGraphics.drawString(rgMinecraft.font, message, 0, 0, pMessageColor.rgb, pDropShadow)
}
}

Expand Down

0 comments on commit 12763fb

Please sign in to comment.