Skip to content

Commit 130d91c

Browse files
committed
Torus Object implemented, clean up some inconsistencies, clean up RenderUtil.java, support for rotation and floating number coordinates
1 parent 396e6b7 commit 130d91c

22 files changed

+569
-271
lines changed

src/main/java/de/srendi/advancedperipherals/client/RenderUtil.java

Lines changed: 118 additions & 130 deletions
Large diffs are not rendered by default.

src/main/java/de/srendi/advancedperipherals/client/smartglasses/OverlayModuleLevelRenderer.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
import net.minecraft.client.renderer.RenderType;
1919
import net.minecraft.core.BlockPos;
2020
import net.minecraft.core.Direction;
21-
import net.minecraft.world.level.block.Block;
2221
import net.minecraft.world.phys.Vec3;
23-
import net.minecraft.world.phys.shapes.VoxelShape;
2422
import net.minecraftforge.api.distmarker.Dist;
2523
import net.minecraftforge.client.event.RenderLevelStageEvent;
2624
import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -82,30 +80,25 @@ public static void renderLevelState(RenderLevelStageEvent event) {
8280
BufferUploader.drawWithShader(bufferbuilder.end());
8381
posestack.popPose();
8482

83+
bufferbuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR_NORMAL);
8584
posestack.pushPose();
86-
RenderSystem.setShader(GameRenderer::getPositionColorShader);
87-
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
88-
colors = EnumColor.LIGHT_PURPLE.getRgb();
8985

90-
blockPos = new BlockPos(0, 10, 2);
86+
blockPos = new BlockPos(0, 10, 0);
9187
posestack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
9288

93-
VoxelShape shape = Block.box(0.0, 0.0, 0.0, 16.0, 18.0, 16.0);
94-
RenderSystem.setShaderColor(colors[0], colors[1], colors[2], 0.6f);
95-
96-
RenderUtil.drawVoxelShape(posestack, bufferbuilder, shape, 0f, 0f, 0f, colors[0], colors[1], colors[2], 0.6f);
97-
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
89+
RenderUtil.drawSphere(posestack, bufferbuilder, 0.5f, 0f, 0f, 0f, 90f, 0f, 0f, colors[0], colors[1], colors[2], 0.6f, 128, 48);
9890

9991
BufferUploader.drawWithShader(bufferbuilder.end());
10092
posestack.popPose();
10193

102-
bufferbuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR_NORMAL);
94+
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
10395
posestack.pushPose();
10496

105-
blockPos = new BlockPos(0, 10, 0);
97+
colors = EnumColor.DARK_BLUE.getRgb();
98+
blockPos = new BlockPos(6, 10, 0);
10699
posestack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
107100

108-
RenderUtil.drawSphere(posestack, bufferbuilder, 0.5f, 0f, 0f, 0f, colors[0], colors[1], colors[2], 0.6f, 128, 48);
101+
RenderUtil.drawTorus(posestack, bufferbuilder, 0.5f, 0.09f, 0f, 0f, 0f, 0f, 0f, 0f, colors[0], colors[1], colors[2], 0.6f, 300, 32);
109102

110103
BufferUploader.drawWithShader(bufferbuilder.end());
111104
posestack.popPose();

src/main/java/de/srendi/advancedperipherals/client/smartglasses/OverlayObjectHolder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BlockObject;
55
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BoxObject;
66
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.SphereObject;
7+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.TorusObject;
78
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.CircleObject;
89
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.ItemObject;
910
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RectangleObject;
@@ -52,5 +53,6 @@ public static void registerDecodeObjects() {
5253
ObjectDecodeRegistry.register(BoxObject.TYPE_ID, BoxObject::decode);
5354
ObjectDecodeRegistry.register(BlockObject.TYPE_ID, BlockObject::decode);
5455
ObjectDecodeRegistry.register(SphereObject.TYPE_ID, SphereObject::decode);
56+
ObjectDecodeRegistry.register(TorusObject.TYPE_ID, TorusObject::decode);
5557
}
5658
}

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/threedim/BlockRenderer.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.mojang.blaze3d.vertex.BufferUploader;
66
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
77
import com.mojang.blaze3d.vertex.PoseStack;
8+
import com.mojang.math.Quaternion;
9+
import de.srendi.advancedperipherals.client.RenderUtil;
810
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BlockObject;
911
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1012
import de.srendi.advancedperipherals.common.util.RegistryUtil;
@@ -25,33 +27,34 @@ public class BlockRenderer implements IThreeDObjectRenderer {
2527
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder) {
2628
poseStack.pushPose();
2729

28-
for (ThreeDimensionalObject renderableObject : batch) {
30+
for (ThreeDimensionalObject obj : batch) {
2931
poseStack.pushPose();
30-
onPreRender(renderableObject);
32+
onPreRender(obj);
3133

3234
bufferBuilder.begin(RenderType.solid().mode(), DefaultVertexFormat.BLOCK);
3335

34-
BlockObject block = (BlockObject) renderableObject;
36+
BlockObject block = (BlockObject) obj;
3537

36-
BlockPos blockPos = new BlockPos(renderableObject.getX(), renderableObject.getY(), renderableObject.getZ());
37-
38-
poseStack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
39-
float alpha = renderableObject.opacity;
40-
float red = (float) (renderableObject.color >> 16 & 255) / 255.0F;
41-
float green = (float) (renderableObject.color >> 8 & 255) / 255.0F;
42-
float blue = (float) (renderableObject.color & 255) / 255.0F;
38+
poseStack.translate(-view.x + block.getX(), -view.y + block.getY(), -view.z + block.getZ());
39+
poseStack.mulPose(new Quaternion(block.xRot, block.yRot, block.zRot, true));
40+
poseStack.translate(-0.5f, -0.5f, -0.5f);
41+
float alpha = block.opacity;
42+
float red = RenderUtil.getRed(block.color);
43+
float green = RenderUtil.getGreen(block.color);
44+
float blue = RenderUtil.getBlue(block.color);
4345

4446
RenderSystem.setShader(GameRenderer::getBlockShader);
4547
RenderSystem.setShaderColor(red, green, blue, alpha);
4648

4749
Block blockToRender = RegistryUtil.getRegistryEntry(block.block, ForgeRegistries.BLOCKS);
50+
BlockPos blockPos = new BlockPos(obj.getX(), obj.getY(), obj.getZ());
4851

4952
if (blockToRender != null)
5053
Minecraft.getInstance().getBlockRenderer().renderBatched(blockToRender.defaultBlockState(), blockPos, event.getCamera().getEntity().level, poseStack, bufferBuilder, false, event.getCamera().getEntity().level.random);
5154

5255
poseStack.popPose();
5356
BufferUploader.drawWithShader(bufferBuilder.end());
54-
onPostRender(renderableObject);
57+
onPostRender(obj);
5558
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
5659
}
5760

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/threedim/BoxRenderer.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.mojang.blaze3d.vertex.PoseStack;
88
import com.mojang.blaze3d.vertex.VertexFormat;
99
import de.srendi.advancedperipherals.client.RenderUtil;
10+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BoxObject;
1011
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1112
import net.minecraft.client.renderer.GameRenderer;
1213
import net.minecraft.world.phys.Vec3;
@@ -20,21 +21,23 @@ public class BoxRenderer implements IThreeDObjectRenderer {
2021
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder) {
2122
poseStack.pushPose();
2223

23-
for (ThreeDimensionalObject renderableObject : batch) {
24+
for (ThreeDimensionalObject obj : batch) {
2425
poseStack.pushPose();
25-
onPreRender(renderableObject);
26+
onPreRender(obj);
2627
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
2728

29+
BoxObject box = (BoxObject) obj;
30+
2831
RenderSystem.setShader(GameRenderer::getPositionColorShader);
29-
float alpha = renderableObject.opacity;
30-
float red = (float) (renderableObject.color >> 16 & 255) / 255.0F;
31-
float green = (float) (renderableObject.color >> 8 & 255) / 255.0F;
32-
float blue = (float) (renderableObject.color & 255) / 255.0F;
32+
float alpha = box.opacity;
33+
float red = RenderUtil.getRed(box.color);
34+
float green = RenderUtil.getGreen(box.color);
35+
float blue = RenderUtil.getBlue(box.color);
3336

34-
poseStack.translate(-view.x + renderableObject.getX(), -view.y + renderableObject.getY(), -view.z + renderableObject.getZ());
35-
RenderUtil.drawBox(poseStack, bufferBuilder, red, green, blue, alpha, renderableObject.getMaxX(), renderableObject.getMaxY(), renderableObject.getMaxX());
37+
poseStack.translate(-view.x + box.getX(), -view.y + box.getY(), -view.z + box.getZ());
38+
RenderUtil.drawBox(poseStack, bufferBuilder, red, green, blue, alpha, box.x, box.y, box.z, obj.xRot, obj.yRot, obj.zRot, obj.getMaxX(), obj.getMaxY(), obj.getMaxX());
3639
BufferUploader.drawWithShader(bufferBuilder.end());
37-
onPostRender(renderableObject);
40+
onPostRender(obj);
3841

3942
poseStack.popPose();
4043
}

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/threedim/SphereRenderer.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,23 @@ public class SphereRenderer implements IThreeDObjectRenderer {
2121
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder) {
2222
poseStack.pushPose();
2323

24-
for (ThreeDimensionalObject renderableObject : batch) {
24+
for (ThreeDimensionalObject obj : batch) {
2525
poseStack.pushPose();
26-
onPreRender(renderableObject);
26+
onPreRender(obj);
2727
bufferBuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR_NORMAL);
2828

29-
SphereObject sphere = (SphereObject) renderableObject;
29+
SphereObject sphere = (SphereObject) obj;
3030

3131
RenderSystem.setShader(GameRenderer::getPositionColorShader);
32-
float alpha = renderableObject.opacity;
33-
float red = (float) (renderableObject.color >> 16 & 255) / 255.0F;
34-
float green = (float) (renderableObject.color >> 8 & 255) / 255.0F;
35-
float blue = (float) (renderableObject.color & 255) / 255.0F;
32+
float alpha = sphere.opacity;
33+
float red = RenderUtil.getRed(sphere.color);
34+
float green = RenderUtil.getRed(sphere.color);
35+
float blue = RenderUtil.getRed(sphere.color);
3636

37-
poseStack.translate(-view.x + renderableObject.getX(), -view.y + renderableObject.getY(), -view.z + renderableObject.getZ());
38-
RenderUtil.drawSphere(poseStack, bufferBuilder, 1f, 0f, 0f, 0f, red, green, blue, alpha, sphere.sectors, sphere.stacks);
37+
poseStack.translate(-view.x, -view.y, -view.z);
38+
RenderUtil.drawSphere(poseStack, bufferBuilder, sphere.radius, sphere.x, sphere.y, sphere.z, sphere.xRot, sphere.yRot, sphere.zRot, red, green, blue, alpha, sphere.sectors, sphere.stacks);
3939
BufferUploader.drawWithShader(bufferBuilder.end());
40-
onPostRender(renderableObject);
40+
onPostRender(obj);
4141

4242
poseStack.popPose();
4343
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.threedim;
2+
3+
import com.mojang.blaze3d.systems.RenderSystem;
4+
import com.mojang.blaze3d.vertex.BufferBuilder;
5+
import com.mojang.blaze3d.vertex.BufferUploader;
6+
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
7+
import com.mojang.blaze3d.vertex.PoseStack;
8+
import com.mojang.blaze3d.vertex.VertexFormat;
9+
import de.srendi.advancedperipherals.client.RenderUtil;
10+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
11+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.TorusObject;
12+
import net.minecraft.client.renderer.GameRenderer;
13+
import net.minecraft.world.phys.Vec3;
14+
import net.minecraftforge.client.event.RenderLevelStageEvent;
15+
16+
import java.util.List;
17+
18+
public class TorusRenderer implements IThreeDObjectRenderer {
19+
20+
@Override
21+
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder) {
22+
poseStack.pushPose();
23+
24+
for (ThreeDimensionalObject obj : batch) {
25+
poseStack.pushPose();
26+
onPreRender(obj);
27+
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
28+
29+
TorusObject torus = (TorusObject) obj;
30+
31+
RenderSystem.setShader(GameRenderer::getPositionColorShader);
32+
float alpha = torus.opacity;
33+
float red = RenderUtil.getRed(torus.color);
34+
float green = RenderUtil.getGreen(torus.color);
35+
float blue = RenderUtil.getBlue(torus.color);
36+
37+
poseStack.translate(-view.x + torus.x, -view.y + torus.y, -view.z + torus.z);
38+
RenderUtil.drawTorus(poseStack, bufferBuilder, torus.majorRadius, torus.minorRadius, 0, 0, 0, torus.xRot, torus.yRot, torus.zRot, red, green, blue, alpha, torus.rings, torus.sides);
39+
BufferUploader.drawWithShader(bufferBuilder.end());
40+
onPostRender(obj);
41+
42+
poseStack.popPose();
43+
}
44+
45+
poseStack.popPose();
46+
}
47+
}

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

Lines changed: 7 additions & 6 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 de.srendi.advancedperipherals.client.RenderUtil;
1112
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.CircleObject;
1213
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
1314
import net.minecraft.client.renderer.GameRenderer;
@@ -19,14 +20,14 @@ public class CircleRenderer implements ITwoDObjectRenderer {
1920

2021
@Override
2122
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
22-
for (RenderableObject object : objects) {
23+
for (RenderableObject obj : objects) {
2324

24-
CircleObject circle = (CircleObject) object;
25+
CircleObject circle = (CircleObject) obj;
2526

26-
float alpha = object.opacity;
27-
float red = (float) (object.color >> 16 & 255) / 255.0F;
28-
float green = (float) (object.color >> 8 & 255) / 255.0F;
29-
float blue = (float) (object.color & 255) / 255.0F;
27+
float alpha = circle.opacity;
28+
float red = RenderUtil.getRed(circle.color);
29+
float green = RenderUtil.getGreen(circle.color);
30+
float blue = RenderUtil.getBlue(circle.color);
3031

3132
drawCircle(poseStack, circle.x, circle.y, circle.radius, 120, red, green, blue, alpha);
3233
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ public class ItemRenderer implements ITwoDObjectRenderer {
1818
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
1919
Minecraft minecraft = Minecraft.getInstance();
2020

21-
for (RenderableObject object : objects) {
22-
Item renderItem = RegistryUtil.getRegistryEntry(((ItemObject) object).item, ForgeRegistries.ITEMS);
21+
for (RenderableObject obj : objects) {
22+
Item renderItem = RegistryUtil.getRegistryEntry(((ItemObject) obj).item, ForgeRegistries.ITEMS);
2323
if (renderItem == null)
2424
continue;
25-
minecraft.getItemRenderer().renderGuiItem(new ItemStack(renderItem), object.x, object.y);
25+
minecraft.getItemRenderer().renderGuiItem(new ItemStack(renderItem), (int) obj.x, (int) obj.y);
2626
}
2727

2828
}

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

Lines changed: 10 additions & 10 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 de.srendi.advancedperipherals.client.RenderUtil;
1112
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
1213
import net.minecraft.client.renderer.GameRenderer;
1314
import net.minecraftforge.client.gui.overlay.ForgeGui;
@@ -23,19 +24,18 @@ public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack
2324
Matrix4f matrix = poseStack.last().pose();
2425
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
2526

26-
for (RenderableObject object : objects) {
27-
float alpha = object.opacity;
28-
float red = (float) (object.color >> 16 & 255) / 255.0F;
29-
float green = (float) (object.color >> 8 & 255) / 255.0F;
30-
float blue = (float) (object.color & 255) / 255.0F;
27+
for (RenderableObject obj : objects) {
28+
float alpha = obj.opacity;
29+
float red = RenderUtil.getRed(obj.color);
30+
float green = RenderUtil.getGreen(obj.color);
31+
float blue = RenderUtil.getBlue(obj.color);
3132

32-
bufferbuilder.vertex(matrix, (float) object.x, (float) object.maxY, 0f).color(red, green, blue, alpha).endVertex();
33-
bufferbuilder.vertex(matrix, (float) object.maxX, (float) object.maxY, 0f).color(red, green, blue, alpha).endVertex();
34-
bufferbuilder.vertex(matrix, (float) object.maxX, (float) object.y, 0f).color(red, green, blue, alpha).endVertex();
35-
bufferbuilder.vertex(matrix, (float) object.x, (float) object.y, 0f).color(red, green, blue, alpha).endVertex();
33+
bufferbuilder.vertex(matrix, obj.x, obj.maxY, 0f).color(red, green, blue, alpha).endVertex();
34+
bufferbuilder.vertex(matrix, obj.maxX, obj.maxY, 0f).color(red, green, blue, alpha).endVertex();
35+
bufferbuilder.vertex(matrix, obj.maxX, obj.y, 0f).color(red, green, blue, alpha).endVertex();
36+
bufferbuilder.vertex(matrix, obj.x, obj.y, 0f).color(red, green, blue, alpha).endVertex();
3637
}
3738

3839
BufferUploader.drawWithShader(bufferbuilder.end());
39-
4040
}
4141
}

0 commit comments

Comments
 (0)