Skip to content

Commit

Permalink
342
Browse files Browse the repository at this point in the history
  • Loading branch information
ATPStorages committed Aug 29, 2024
1 parent 472138d commit 58d29b9
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 47 deletions.
6 changes: 2 additions & 4 deletions src/main/kotlin/breadmod/ClientModEventBus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ import breadmod.ModMain.ID
import breadmod.ModMain.modLocation
import breadmod.client.gui.ToolGunOverlay
import breadmod.client.gui.WarOverlay
import breadmod.client.render.CreativeGeneratorRenderer
import breadmod.client.render.GenericMachineBlockEntityRenderer
import breadmod.client.render.SidedScreenRenderer
import breadmod.client.render.ToasterRenderer
import breadmod.client.render.*
import breadmod.client.render.entity.BreadBulletEntityRenderer
import breadmod.client.render.entity.PrimedHappyBlockRenderer
import breadmod.client.render.storage.EnergyStorageRenderer
Expand Down Expand Up @@ -157,6 +154,7 @@ object ClientModEventBus {
event.registerBlockEntityRenderer(ModBlockEntityTypes.CREATIVE_GENERATOR.get()) { CreativeGeneratorRenderer() }
event.registerBlockEntityRenderer(ModBlockEntityTypes.ENERGY_STORAGE.get()) { EnergyStorageRenderer() }
event.registerBlockEntityRenderer(ModBlockEntityTypes.TOASTER.get()) { ToasterRenderer() }
event.registerBlockEntityRenderer(ModBlockEntityTypes.SOUND_BLOCK.get()) { SoundBlockRenderer() }
// event.registerBlockEntityRenderer(ModBlockEntityTypes.FLUID_STORAGE.get()) { FluidStorageRenderer() }

val genericMachineRenderer = { _: BlockEntityRendererProvider.Context -> GenericMachineBlockEntityRenderer() }
Expand Down
46 changes: 43 additions & 3 deletions src/main/kotlin/breadmod/client/render/SoundBlockRenderer.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package breadmod.client.render

import breadmod.block.entity.SoundBlockEntity
import breadmod.util.render.drawCenteredTextOnSide
import breadmod.util.render.drawTextOnSide
import breadmod.util.render.rgMinecraft
import com.mojang.blaze3d.vertex.PoseStack
import net.minecraft.Util
import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
import net.minecraft.network.chat.Component
import net.minecraft.util.Mth
import kotlin.math.cos
import kotlin.math.max
import kotlin.math.sin

// todo adapt GuiGraphics scrolling text to BER
class SoundBlockRenderer: BlockEntityRenderer<SoundBlockEntity> {
internal class SoundBlockRenderer : BlockEntityRenderer<SoundBlockEntity> {
override fun render(
pBlockEntity: SoundBlockEntity,
pPartialTick: Float,
Expand All @@ -16,6 +23,39 @@ class SoundBlockRenderer: BlockEntityRenderer<SoundBlockEntity> {
pPackedLight: Int,
pPackedOverlay: Int
) {
// drawTextOnSide()
// TODO split into render general
val pText = Component.literal("dummy")
val pMinX = 0
val pMaxX = 100
val pMinY = 0
val pMaxY = rgMinecraft.font.lineHeight

val i: Int = rgMinecraft.font.width(pText)
val j: Int = (pMinY + pMaxY - 9) / 2 + 1
val k: Int = pMaxX - pMinX
if (i > k) {
val l = i - k
val d0 = Util.getMillis().toDouble() / 1000.0
val d1 = max(l.toDouble() * 0.5, 3.0)
val d2 = sin((Math.PI / 2.0) * cos((Math.PI * 2.0) * d0 / d1)) / 2.0 + 0.5
val d3 = Mth.lerp(d2, 0.0, l.toDouble())
// pGuiGraphics.enableScissor(pMinX, pMinY, pMaxX, pMaxY)
drawTextOnSide(
rgMinecraft.font, pText,
pMinX - d3, j.toDouble(),
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pScale = 0.0105f
)
// pGuiGraphics.disableScissor()
} else {
drawCenteredTextOnSide(
rgMinecraft.font, pText,
(pMinX + pMaxX) / 2.0, j.toDouble(),
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pScale = 0.0105f
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.network.chat.Component
import java.awt.Color

class EnergyStorageRenderer : BaseAbstractStorageBlockRenderer<EnergyStorageBlockEntity>() {

internal class EnergyStorageRenderer : BaseAbstractStorageBlockRenderer<EnergyStorageBlockEntity>() {
override fun render(
pBlockEntity: EnergyStorageBlockEntity,
pPartialTick: Float,
Expand All @@ -23,29 +22,29 @@ class EnergyStorageRenderer : BaseAbstractStorageBlockRenderer<EnergyStorageBloc
drawTextOnSide(
fontRenderer,
Component.literal("$energyStored FE"),
Color.GREEN.rgb,
Color(0, 0, 0, 0).rgb,
false,
pPoseStack, pBuffer, pBlockEntity.blockState,
pScale = 0.0105f, pPosX = 0.1, pPosY = -0.125
0.1, -0.125,
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pColor = Color.GREEN.rgb,
pScale = 0.0105f
)
drawTextOnSide(
fontRenderer,
Component.literal("-------------"),
Color.GREEN.rgb,
Color(0, 0, 0, 0).rgb,
false,
pPoseStack, pBuffer, pBlockEntity.blockState,
pScale = 0.0105f, pPosX = 0.095, pPosY = -0.185
0.095, -0.185,
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pColor = Color.GREEN.rgb,
pScale = 0.0105f
)
drawTextOnSide(
fontRenderer,
Component.literal("$maxEnergyStored FE"),
Color.GREEN.rgb,
Color(0, 0, 0, 0).rgb,
false,
pPoseStack, pBuffer, pBlockEntity.blockState,
pScale = 0.0105f, pPosX = 0.1, pPosY = -0.245
0.1, pPosY = -0.245,
pPoseStack = pPoseStack, pBuffer = pBuffer,
pBlockState = pBlockEntity.blockState,
pColor = Color.GREEN.rgb,
pScale = 0.0105f
)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package breadmod.client.render.tool_gun

import breadmod.util.render.renderText
import breadmod.util.render.scaleFlat
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.math.Axis
import net.minecraft.client.gui.Font
Expand All @@ -12,14 +13,22 @@ import net.minecraft.util.FormattedCharSequence

private const val SCREEN_TINT = 15728880

private fun initialTranslations(pPoseStack: PoseStack, pPosX: Double, pPosY: Double, pPosZ: Double, pScale: Float) {
pPoseStack.pushPose()
pPoseStack.translate(pPosX, pPosY, pPosZ)
pPoseStack.scaleFlat(pScale)
pPoseStack.mulPose(Axis.XN.rotationDegrees(180f))
pPoseStack.mulPose(Axis.YN.rotationDegrees(-90f))
pPoseStack.mulPose(Axis.XP.rotationDegrees(-22.5f))
}

/**
* +X moves text forward on tool gun
* -X moves text backward on tool gun
*
* +Z moves text right on tool gun
* -Z moves text left on tool gun
*/

fun drawTextOnScreen(
pComponent: Component,
pColor: Int,
Expand All @@ -33,13 +42,12 @@ fun drawTextOnScreen(
pPosZ: Double,
pScale: Float
) {
pPoseStack.pushPose()
pPoseStack.translate(pPosX, pPosY, pPosZ)
pPoseStack.scale(pScale, pScale, pScale)
pPoseStack.mulPose(Axis.XN.rotationDegrees(180f))
pPoseStack.mulPose(Axis.YN.rotationDegrees(-90f))
pPoseStack.mulPose(Axis.XP.rotationDegrees(-22.5f))
renderText(pComponent, pColor, pBackgroundColor, pFontRenderer, pPoseStack, pBuffer, pDropShadow, SCREEN_TINT)
initialTranslations(pPoseStack, pPosX, pPosY, pPosZ, pScale)
renderText(
pComponent.visualOrderText, pColor, pBackgroundColor, pFontRenderer,
pPoseStack, pBuffer,
pDropShadow, SCREEN_TINT
)
pPoseStack.popPose()
}

Expand Down Expand Up @@ -117,12 +125,7 @@ fun drawWrappedTextOnScreen(
pScale: Float,
pLineWidth: Int
) {
pPoseStack.pushPose()
pPoseStack.translate(pPosX, pPosY, pPosZ)
pPoseStack.scale(pScale, pScale, pScale)
pPoseStack.mulPose(Axis.XN.rotationDegrees(180f))
pPoseStack.mulPose(Axis.YN.rotationDegrees(-90f))
pPoseStack.mulPose(Axis.XP.rotationDegrees(-22.5f))
initialTranslations(pPoseStack, pPosX, pPosY, pPosZ, pScale)
var split: Float = pSplitY
for (formattedCharSequence: FormattedCharSequence in componentSplit(pText, pLineWidth, pFont)) {
pFont.drawInBatch(
Expand Down
57 changes: 48 additions & 9 deletions src/main/kotlin/breadmod/util/render/RenderGeneral.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import net.minecraft.client.resources.model.BakedModel
import net.minecraft.core.Direction
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.util.FormattedCharSequence
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.inventory.InventoryMenu
Expand Down Expand Up @@ -453,7 +454,7 @@ fun drawTexturedQuad(
* @since 0.0.1
*/
fun renderText(
pComponent: Component,
pComponent: FormattedCharSequence,
pColor: Int,
pBackgroundColor: Int,
pFontRenderer: Font,
Expand Down Expand Up @@ -506,26 +507,64 @@ fun translateOnBlockSide(
}
}

val TRANSPARENT = Color(0f, 0f, 0f, 0f).rgb

fun drawTextOnSide(
pFontRenderer: Font,
pComponent: Component,
pColor: Int,
pBackgroundColor: Int,
pDropShadow: Boolean,

pPosX: Double,
pPosY: Double,
pPosZ: Double = 0.0,

pPoseStack: PoseStack,
pBuffer: MultiBufferSource,
pBlockState: BlockState,

pColor: Int = Color.WHITE.rgb,
pBackgroundColor: Int = TRANSPARENT,
pDropShadow: Boolean = false,
pDirection: Direction? = null,
pScale: Float,
pScale: Float = 1f
) {
pPoseStack.pushPose()
translateOnBlockSide(pBlockState, pDirection, pPoseStack, pPosX, pPosY, pPosZ)
pPoseStack.mulPose(Axis.XN.rotationDegrees(180f))
pPoseStack.scaleFlat(pScale)
renderText(pComponent.visualOrderText, pColor, pBackgroundColor, pFontRenderer, pPoseStack, pBuffer, pDropShadow, 15728880)
pPoseStack.popPose()
}

fun drawCenteredTextOnSide(
pFontRenderer: Font,
pComponent: Component,

pPosX: Double,
pPosY: Double,
pPosZ: Double = 0.0
pPosZ: Double = 0.0,

pPoseStack: PoseStack,
pBuffer: MultiBufferSource,
pBlockState: BlockState,

pColor: Int = Color.WHITE.rgb,
pBackgroundColor: Int = TRANSPARENT,
pDropShadow: Boolean = false,
pDirection: Direction? = null,
pScale: Float = 1f
) {
pPoseStack.pushPose()
translateOnBlockSide(pBlockState, pDirection, pPoseStack, pPosX, pPosY, pPosZ)
translateOnBlockSide(
pBlockState, pDirection, pPoseStack,
pPosX - rgMinecraft.font.width(pComponent.visualOrderText) / 2,
pPosY, pPosZ
)
pPoseStack.mulPose(Axis.XN.rotationDegrees(180f))
pPoseStack.scale(pScale, pScale, pScale)
renderText(pComponent, pColor, pBackgroundColor, pFontRenderer, pPoseStack, pBuffer, pDropShadow, 15728880)
pPoseStack.scaleFlat(pScale)
renderText(
pComponent.visualOrderText, pColor, pBackgroundColor, pFontRenderer,
pPoseStack, pBuffer, pDropShadow, 15728880
)
pPoseStack.popPose()
}

Expand Down

0 comments on commit 58d29b9

Please sign in to comment.