Skip to content

Commit 6a91ec0

Browse files
committed
Add rotation support for the text and rectangle
1 parent ab35342 commit 6a91ec0

File tree

2 files changed

+39
-10
lines changed

2 files changed

+39
-10
lines changed

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/twodim/RectangleRenderer.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.mojang.blaze3d.vertex.Tesselator;
99
import com.mojang.blaze3d.vertex.VertexFormat;
1010
import com.mojang.math.Matrix4f;
11+
import com.mojang.math.Vector3f;
1112
import de.srendi.advancedperipherals.client.RenderUtil;
1213
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.RenderableObject;
1314
import net.minecraft.client.renderer.GameRenderer;
@@ -18,25 +19,38 @@
1819
public class RectangleRenderer implements ITwoDObjectRenderer {
1920

2021
@Override
21-
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
22+
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack ignored, float partialTick, int screenWidth, int screenHeight) {
2223
RenderSystem.setShader(GameRenderer::getPositionColorShader);
2324
BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder();
2425

2526
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
2627

2728
for (RenderableObject obj : objects) {
29+
float rotX = obj.rotX;
30+
float rotY = obj.rotY;
31+
float rotZ = obj.rotZ;
32+
33+
PoseStack poseStack = new PoseStack();
34+
35+
poseStack.translate(obj.x, obj.y, obj.z);
36+
2837
poseStack.pushPose();
38+
2939
Matrix4f matrix = poseStack.last().pose();
3040

41+
poseStack.mulPose(Vector3f.XP.rotationDegrees(rotX));
42+
poseStack.mulPose(Vector3f.YP.rotationDegrees(rotY));
43+
poseStack.mulPose(Vector3f.ZP.rotationDegrees(rotZ));
44+
3145
float alpha = obj.opacity;
3246
float red = RenderUtil.getRed(obj.color);
3347
float green = RenderUtil.getGreen(obj.color);
3448
float blue = RenderUtil.getBlue(obj.color);
3549

36-
bufferbuilder.vertex(matrix, obj.x, obj.maxY, obj.z).color(red, green, blue, alpha).endVertex();
37-
bufferbuilder.vertex(matrix, obj.maxX, obj.maxY, obj.z).color(red, green, blue, alpha).endVertex();
38-
bufferbuilder.vertex(matrix, obj.maxX, obj.y, obj.z).color(red, green, blue, alpha).endVertex();
39-
bufferbuilder.vertex(matrix, obj.x, obj.y, obj.z).color(red, green, blue, alpha).endVertex();
50+
bufferbuilder.vertex(matrix, 0, obj.maxY - obj.y, 0).color(red, green, blue, alpha).endVertex();
51+
bufferbuilder.vertex(matrix, obj.maxX - obj.x, obj.maxY - obj.y, 0).color(red, green, blue, alpha).endVertex();
52+
bufferbuilder.vertex(matrix, obj.maxX - obj.x, 0, 0).color(red, green, blue, alpha).endVertex();
53+
bufferbuilder.vertex(matrix, 0, 0, 0).color(red, green, blue, alpha).endVertex();
4054
poseStack.popPose();
4155

4256
}

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/twodim/TextRenderer.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4+
import com.mojang.math.Matrix4f;
5+
import com.mojang.math.Vector3f;
46
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.RenderableObject;
57
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.TextObject;
68
import net.minecraft.client.Minecraft;
@@ -11,23 +13,36 @@
1113
public class TextRenderer implements ITwoDObjectRenderer {
1214

1315
@Override
14-
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
16+
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack ignored, float partialTick, int screenWidth, int screenHeight) {
1517
Minecraft minecraft = Minecraft.getInstance();
1618
for (RenderableObject obj : objects) {
1719
TextObject text = (TextObject) obj;
18-
poseStack.pushPose();
19-
poseStack.scale(text.fontSize, text.fontSize, 1);
20+
float rotX = obj.rotX;
21+
float rotY = obj.rotY;
22+
float rotZ = obj.rotZ;
2023

2124
float x = text.x;
2225

2326
if (text.center) {
2427
x -= (minecraft.font.width(text.content) * text.fontSize) / 2f;
2528
}
2629

30+
PoseStack poseStack = new PoseStack();
31+
32+
poseStack.translate(x / text.fontSize, text.y / text.fontSize, obj.z);
33+
34+
poseStack.pushPose();
35+
36+
poseStack.mulPose(Vector3f.XP.rotationDegrees(rotX));
37+
poseStack.mulPose(Vector3f.YP.rotationDegrees(rotY));
38+
poseStack.mulPose(Vector3f.ZP.rotationDegrees(rotZ));
39+
40+
poseStack.scale(text.fontSize, text.fontSize, 1);
41+
2742
if (!text.shadow) {
28-
minecraft.font.drawShadow(poseStack, text.content, x / text.fontSize, text.y / text.fontSize, text.color);
43+
minecraft.font.drawShadow(poseStack, text.content, 0, 0, text.color);
2944
} else {
30-
minecraft.font.draw(poseStack, text.content, x / text.fontSize, text.y / text.fontSize, text.color);
45+
minecraft.font.draw(poseStack, text.content, 0, 0, text.color);
3146
}
3247
poseStack.popPose();
3348
}

0 commit comments

Comments
 (0)