Skip to content

Commit 10fd9e5

Browse files
committed
feat: begin work on route shields
1 parent 3f66d3c commit 10fd9e5

File tree

7 files changed

+142
-1
lines changed

7 files changed

+142
-1
lines changed

src/client/kotlin/me/znepb/roadworks/RoadworksClient.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ object RoadworksClient : ClientModInitializer {
9292
AttachmentRendererFactories.register(RoadworksRegistry.ModAttachments.BLANKOUT_NO_LEFT_TURN_TRAIN, ::BlankoutAttachmentRenderer)
9393
AttachmentRendererFactories.register(RoadworksRegistry.ModAttachments.BLANKOUT_NO_RIGHT_TURN_TRAIN, ::BlankoutAttachmentRenderer)
9494
AttachmentRendererFactories.register(RoadworksRegistry.ModAttachments.BLANKOUT_NO_TURN_ON_RED, ::BlankoutAttachmentRenderer)
95+
AttachmentRendererFactories.register(RoadworksRegistry.ModAttachments.ROUTE_SHEILD, ::RouteShieldAttachmentRenderer)
9596

9697
logger.info("Registering attachment renderers")
9798
attachmentRenderers = AttachmentRendererFactories.reload()
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package me.znepb.roadworks.render.attachments
2+
3+
import me.znepb.roadworks.RoadworksMain
4+
import me.znepb.roadworks.attachment.AttachmentPosition
5+
import me.znepb.roadworks.container.AttachmentContainerBlockEntity
6+
import me.znepb.roadworks.sign.RoadSignAttachment
7+
import me.znepb.roadworks.sign.RouteShieldAttachment
8+
import me.znepb.roadworks.util.Charset
9+
import me.znepb.roadworks.util.RenderUtils
10+
import net.minecraft.client.render.VertexConsumer
11+
import net.minecraft.client.render.VertexConsumerProvider
12+
import net.minecraft.client.util.math.MatrixStack
13+
import net.minecraft.util.Identifier
14+
import org.joml.Vector3d
15+
16+
class RouteShieldAttachmentRenderer : AttachmentRenderer<RouteShieldAttachment> {
17+
companion object {
18+
val FRONT_TEXTURE = RoadworksMain.ModId("textures/block/signs/route_shield.png")
19+
val BACK_TEXTURE = RoadworksMain.ModId("textures/block/signs/back_large_square.png")
20+
val NUMBERS_TEXTURE = RoadworksMain.ModId("textures/block/signs/highway_shield_numbers.png")
21+
}
22+
23+
override fun render(
24+
attachment: RouteShieldAttachment,
25+
blockEntity: AttachmentContainerBlockEntity,
26+
tickDelta: Float,
27+
matrices: MatrixStack,
28+
vertexConsumers: VertexConsumerProvider,
29+
light: Int,
30+
overlay: Int,
31+
offset: Vector3d
32+
) {
33+
val number = attachment.number
34+
35+
// Get size of contents
36+
val width = if(number < 100) 21.0 else 14.0
37+
val renderedCharWidth = if(number < 100) 15.0 else 10.0
38+
val height = if(number < 100) 21.0 else 14.0
39+
val charOffset = if(number < 10) 1 else if(number < 100) 3 else 2
40+
val pixelCount = number.toString().length * renderedCharWidth
41+
42+
val offsetPos = 0.0
43+
44+
val finalOffset = offset.add(Vector3d(0.0, offsetPos, 0.0078125))
45+
46+
// Prepare matrices
47+
matrices.push()
48+
matrices.translate(0.5F, 0.5F, 0.5F)
49+
matrices.multiply(attachment.facing.rotationQuaternion.rotateXYZ((Math.PI / 2).toFloat(), Math.PI.toFloat(), Math.PI.toFloat()))
50+
matrices.translate(-0.5F, -0.5F, -0.5F)
51+
matrices.translate(finalOffset.x, finalOffset.y, finalOffset.z)
52+
53+
// Render sign background
54+
val buffer: VertexConsumer = vertexConsumers.getBuffer(RenderLayers.getRenderLayer(FRONT_TEXTURE))
55+
val matrix = matrices.peek().positionMatrix
56+
RenderUtils.drawSquare(
57+
0F, 0F, 0.501F, 0F, 0F, 64F, 64F,
58+
64, 64, 64F, 64F,
59+
64, 64, buffer, matrix, light, overlay
60+
)
61+
62+
// Render sign text
63+
val charsetBuffer: VertexConsumer = vertexConsumers.getBuffer(RenderLayers.getRenderLayer(NUMBERS_TEXTURE))
64+
var x = 32.0 - (pixelCount / 2) - charOffset
65+
number.toString().forEach {
66+
val num = it.digitToIntOrNull()?.toDouble()
67+
68+
if(num != null)
69+
RenderUtils.drawSquare(
70+
x.toFloat(), 32F - (height / 2).toFloat(), 0.51F, (num * width).toFloat(), if(number < 100) 14F else 0F, width.toFloat(), height.toFloat(),
71+
64, 64, width.toFloat(), height.toFloat(),
72+
256, 256, charsetBuffer, matrix, light, overlay
73+
)
74+
75+
x += (width - charOffset)
76+
}
77+
78+
matrices.pop()
79+
80+
// Render sign back
81+
matrices.push()
82+
83+
matrices.translate(0.5F, 0.5F, 0.5F)
84+
matrices.multiply(attachment.facing.rotationQuaternion.rotateXYZ((Math.PI / 2).toFloat(), 0.0F, Math.PI.toFloat()))
85+
matrices.translate(-0.5F, -0.5F, -0.5F)
86+
matrices.translate(finalOffset.x, finalOffset.y, -finalOffset.z)
87+
88+
val backBuffer: VertexConsumer = vertexConsumers.getBuffer(RenderLayers.getRenderLayer(BACK_TEXTURE))
89+
val backMatrix = matrices.peek().positionMatrix
90+
RenderUtils.drawSquare(
91+
0F, 0F, 0.501F, 0F, 0F, 64F, 64F,
92+
64, 64, 64F, 64F,
93+
64, 64, backBuffer, backMatrix, light, overlay
94+
)
95+
96+
matrices.pop()
97+
}
98+
}

src/main/kotlin/me/znepb/roadworks/RoadworksRegistry.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import me.znepb.roadworks.marking.TMarking
1818
import me.znepb.roadworks.marking.TurnMarking
1919
import me.znepb.roadworks.misc.Catwalk
2020
import me.znepb.roadworks.sign.RoadSignAttachment
21+
import me.znepb.roadworks.sign.RouteShieldAttachment
2122
import me.znepb.roadworks.sign.SignAttachment
2223
import me.znepb.roadworks.sign.SignAttachmentItem
2324
import me.znepb.roadworks.signal.*
@@ -429,7 +430,7 @@ object RoadworksRegistry {
429430
val BLANKOUT_NO_TURN_ON_RED = rItem(ModAttachments.BLANKOUT_NO_TURN_ON_RED, ::AttachmentItem, itemSettings())
430431
val BLANKOUT_NO_LEFT_TURN_TRAIN = rItem(ModAttachments.BLANKOUT_NO_LEFT_TURN_TRAIN, ::AttachmentItem, itemSettings())
431432
val BLANKOUT_NO_RIGHT_TURN_TRAIN = rItem(ModAttachments.BLANKOUT_NO_RIGHT_TURN_TRAIN, ::AttachmentItem, itemSettings())
432-
433+
val ROUTE_SHEILD = rItem(ModAttachments.ROUTE_SHEILD, ::AttachmentItem, itemSettings())
433434
}
434435

435436
object ModAttachments {
@@ -438,6 +439,7 @@ object RoadworksRegistry {
438439

439440
val SIGN_ATTACHMENT = Registry.register(REGISTRY, ModId("sign"), AttachmentType.Builder(::SignAttachment).build())
440441
val ROAD_SIGN_ATTACHMENT = Registry.register(REGISTRY, ModId("road_sign"), AttachmentType.Builder(::RoadSignAttachment).build())
442+
val ROUTE_SHEILD = Registry.register(REGISTRY, ModId("route_shield"), AttachmentType.Builder(::RouteShieldAttachment).build())
441443

442444
val PEDESTRIAN_SIGNAL = Registry.register(REGISTRY, ModId("pedestrian_signal"), AttachmentType.Builder(::PedestrianSignalAttachment).build())
443445

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package me.znepb.roadworks.sign
2+
3+
import me.znepb.roadworks.RoadworksRegistry
4+
import me.znepb.roadworks.attachment.PositionableAttachment
5+
import me.znepb.roadworks.container.AttachmentContainerBlockEntity
6+
import me.znepb.roadworks.util.RotateVoxelShape
7+
import net.minecraft.block.ShapeContext
8+
import net.minecraft.nbt.NbtCompound
9+
import net.minecraft.util.math.Direction
10+
import net.minecraft.util.shape.VoxelShape
11+
import org.joml.Vector3d
12+
13+
class RouteShieldAttachment(container: AttachmentContainerBlockEntity) : PositionableAttachment(RoadworksRegistry.ModAttachments.ROUTE_SHEILD, container) {
14+
var number: Int = 66
15+
16+
override fun getShape(context: ShapeContext): VoxelShape {
17+
val depthOffset = this.container.getDepthOffset()
18+
19+
return RotateVoxelShape.offsetFromDirectionXZ(
20+
RotateVoxelShape.rotateVoxelShape(SignAttachment.SIGN_SHAPE_WALL, Direction.NORTH, this.facing),
21+
facing,
22+
Vector3d(0.0, 0.0, -depthOffset),
23+
Vector3d(depthOffset, 0.0, 0.0,),
24+
Vector3d(0.0, 0.0, depthOffset),
25+
Vector3d(-depthOffset, 0.0, 0.0),
26+
)
27+
}
28+
29+
override fun writeNBT(nbt: NbtCompound) {
30+
nbt.putInt("number", number)
31+
super.writeNBT(nbt)
32+
}
33+
34+
override fun readNBT(nbt: NbtCompound) {
35+
super.readNBT(nbt)
36+
this.number = nbt.getInt("number")
37+
}
38+
39+
override fun isPositionable() = true
40+
}
1.01 KB
Loading
Binary file not shown.
337 Bytes
Loading

0 commit comments

Comments
 (0)