Skip to content

Commit c7ede95

Browse files
committed
BlockRenderer
1 parent a0b66bf commit c7ede95

File tree

16 files changed

+115
-42
lines changed

16 files changed

+115
-42
lines changed

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

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import com.mojang.blaze3d.vertex.VertexFormat;
1010
import de.srendi.advancedperipherals.AdvancedPeripherals;
1111
import de.srendi.advancedperipherals.client.RenderUtil;
12+
import de.srendi.advancedperipherals.client.smartglasses.objects.threedim.IThreeDObjectRenderer;
13+
import de.srendi.advancedperipherals.client.smartglasses.objects.twodim.ITwoDObjectRenderer;
14+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
1215
import de.srendi.advancedperipherals.common.util.EnumColor;
1316
import net.minecraft.client.Minecraft;
1417
import net.minecraft.client.renderer.GameRenderer;
@@ -17,16 +20,18 @@
1720
import net.minecraft.core.Direction;
1821
import net.minecraft.world.level.block.Block;
1922
import net.minecraft.world.level.block.Blocks;
20-
import net.minecraft.world.level.block.CandleBlock;
21-
import net.minecraft.world.level.block.LecternBlock;
2223
import net.minecraft.world.phys.Vec3;
23-
import net.minecraft.world.phys.shapes.Shapes;
2424
import net.minecraft.world.phys.shapes.VoxelShape;
2525
import net.minecraftforge.api.distmarker.Dist;
2626
import net.minecraftforge.client.event.RenderLevelStageEvent;
2727
import net.minecraftforge.eventbus.api.SubscribeEvent;
2828
import net.minecraftforge.fml.common.Mod;
2929

30+
import java.util.ArrayList;
31+
import java.util.HashMap;
32+
import java.util.List;
33+
import java.util.Map;
34+
3035
@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE, modid = AdvancedPeripherals.MOD_ID)
3136
public class OverlayModuleLevelRenderer {
3237

@@ -37,6 +42,29 @@ public static void renderLevelState(RenderLevelStageEvent event) {
3742

3843
BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder();
3944
if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) {
45+
Map<Class<? extends RenderableObject>, List<RenderableObject>> batches = new HashMap<>();
46+
47+
for (RenderableObject object : OverlayObjectHolder.getObjects()) {
48+
if (!object.isEnabled() || object.getRenderObject() instanceof ITwoDObjectRenderer)
49+
continue;
50+
51+
Class<? extends RenderableObject> objectClass = object.getClass();
52+
53+
if (batches.containsKey(objectClass)) {
54+
batches.get(objectClass).add(object);
55+
continue;
56+
}
57+
58+
List<RenderableObject> newBatchArray = new ArrayList<>();
59+
newBatchArray.add(object);
60+
batches.put(objectClass, newBatchArray);
61+
}
62+
63+
for (List<RenderableObject> batch : batches.values()) {
64+
((IThreeDObjectRenderer) batch.get(0).getRenderObject()).renderBatch(batch, event, posestack, view, bufferbuilder);
65+
}
66+
67+
4068
bufferbuilder.begin(RenderType.solid().mode(), DefaultVertexFormat.BLOCK);
4169
BlockPos blockPos = new BlockPos(0, 190, 0);
4270

@@ -63,16 +91,6 @@ public static void renderLevelState(RenderLevelStageEvent event) {
6391

6492
RenderUtil.drawPlane(posestack, bufferbuilder, colors[0], colors[1], colors[2], 0.8f, Direction.UP, 0f, 0.5f, 0f, 0.5f, 0f, 1f);
6593

66-
BufferUploader.drawWithShader(bufferbuilder.end());
67-
posestack.popPose();
68-
posestack.pushPose();
69-
RenderSystem.setShader(GameRenderer::getPositionColorShader);
70-
bufferbuilder.begin(RenderType.translucent().mode(), DefaultVertexFormat.POSITION_COLOR_NORMAL);
71-
72-
blockPos = new BlockPos(5, 190, 0);
73-
posestack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
74-
75-
RenderUtil.drawBox(posestack, bufferbuilder, colors[0], colors[1], colors[2], 0.8f, 16f, 16f, 12f);
7694
BufferUploader.drawWithShader(bufferbuilder.end());
7795
posestack.popPose();
7896

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

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

33
import com.mojang.blaze3d.vertex.PoseStack;
4+
import de.srendi.advancedperipherals.client.smartglasses.objects.threedim.IThreeDObjectRenderer;
5+
import de.srendi.advancedperipherals.client.smartglasses.objects.twodim.ITwoDObjectRenderer;
46
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
57
import net.minecraftforge.client.gui.overlay.ForgeGui;
68
import net.minecraftforge.client.gui.overlay.IGuiOverlay;
@@ -20,7 +22,7 @@ public void render(ForgeGui gui, PoseStack poseStack, float partialTick, int scr
2022
Map<Class<? extends RenderableObject>, List<RenderableObject>> batches = new HashMap<>();
2123

2224
for (RenderableObject object : OverlayObjectHolder.getObjects()) {
23-
if (!object.isEnabled())
25+
if (!object.isEnabled() || !(object.getRenderObject() instanceof ITwoDObjectRenderer))
2426
continue;
2527

2628
Class<? extends RenderableObject> objectClass = object.getClass();
@@ -36,7 +38,7 @@ public void render(ForgeGui gui, PoseStack poseStack, float partialTick, int scr
3638
}
3739

3840
for (List<RenderableObject> batch : batches.values()) {
39-
batch.get(0).getRenderObject().renderBatch(batch, gui, poseStack, partialTick, screenWidth, screenHeight);
41+
((ITwoDObjectRenderer) batch.get(0).getRenderObject()).renderBatch(batch, gui, poseStack, partialTick, screenWidth, screenHeight);
4042
}
4143

4244
poseStack.popPose();
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
11
package de.srendi.advancedperipherals.client.smartglasses.objects;
22

3-
import com.mojang.blaze3d.vertex.PoseStack;
4-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
5-
import net.minecraftforge.client.gui.overlay.ForgeGui;
6-
7-
import java.util.List;
8-
93
public interface IObjectRenderer {
10-
11-
void renderBatch(List<RenderableObject> object, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight);
12-
134
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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 de.srendi.advancedperipherals.client.RenderUtil;
9+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
10+
import net.minecraft.client.renderer.GameRenderer;
11+
import net.minecraft.client.renderer.RenderType;
12+
import net.minecraft.world.phys.Vec3;
13+
import net.minecraftforge.client.event.RenderLevelStageEvent;
14+
15+
import java.util.List;
16+
17+
public class BlockRenderer implements IThreeDObjectRenderer {
18+
19+
@Override
20+
public void renderBatch(List<RenderableObject> objects, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder) {
21+
poseStack.pushPose();
22+
bufferBuilder.begin(RenderType.translucent().mode(), DefaultVertexFormat.POSITION_COLOR_NORMAL);
23+
24+
for (RenderableObject renderableObject : objects) {
25+
poseStack.pushPose();
26+
RenderSystem.setShader(GameRenderer::getPositionColorShader);
27+
float alpha = renderableObject.opacity;
28+
float red = (float) (renderableObject.color >> 16 & 255) / 255.0F;
29+
float green = (float) (renderableObject.color >> 8 & 255) / 255.0F;
30+
float blue = (float) (renderableObject.color & 255) / 255.0F;
31+
32+
poseStack.translate(-view.x +renderableObject.getX(), -view.y + renderableObject.getY(), -view.z + renderableObject.getZ());
33+
34+
RenderUtil.drawBox(poseStack, bufferBuilder, red, green, blue, alpha, renderableObject.getMaxX(), renderableObject.getMaxY(), renderableObject.getMaxX());
35+
poseStack.popPose();
36+
}
37+
BufferUploader.drawWithShader(bufferBuilder.end());
38+
poseStack.popPose();
39+
}
40+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.threedim;
2+
3+
import com.mojang.blaze3d.vertex.BufferBuilder;
4+
import com.mojang.blaze3d.vertex.PoseStack;
5+
import de.srendi.advancedperipherals.client.smartglasses.objects.IObjectRenderer;
6+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
7+
import net.minecraft.world.phys.Vec3;
8+
import net.minecraftforge.client.event.RenderLevelStageEvent;
9+
import net.minecraftforge.client.gui.overlay.ForgeGui;
10+
11+
import java.util.List;
12+
13+
public interface IThreeDObjectRenderer extends IObjectRenderer {
14+
15+
void renderBatch(List<RenderableObject> object, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view, BufferBuilder bufferBuilder);
16+
17+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package de.srendi.advancedperipherals.client.smartglasses.objects;
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.systems.RenderSystem;
44
import com.mojang.blaze3d.vertex.BufferBuilder;
@@ -15,7 +15,7 @@
1515

1616
import java.util.List;
1717

18-
public class CircleRenderer implements IObjectRenderer {
18+
public class CircleRenderer implements ITwoDObjectRenderer {
1919

2020
@Override
2121
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
package de.srendi.advancedperipherals.client.smartglasses.objects;
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4+
import de.srendi.advancedperipherals.client.smartglasses.objects.IObjectRenderer;
45
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
56
import net.minecraftforge.client.gui.overlay.ForgeGui;
67

78
import java.util.List;
89

9-
public class BlockRenderer implements IObjectRenderer {
10+
public interface ITwoDObjectRenderer extends IObjectRenderer {
1011

11-
@Override
12-
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
12+
void renderBatch(List<RenderableObject> object, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight);
1313

14-
}
1514
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package de.srendi.advancedperipherals.client.smartglasses.objects;
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
44
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.ItemObject;
@@ -12,7 +12,7 @@
1212

1313
import java.util.List;
1414

15-
public class ItemRenderer implements IObjectRenderer {
15+
public class ItemRenderer implements ITwoDObjectRenderer {
1616

1717
@Override
1818
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package de.srendi.advancedperipherals.client.smartglasses.objects;
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.systems.RenderSystem;
44
import com.mojang.blaze3d.vertex.BufferBuilder;
@@ -14,7 +14,7 @@
1414

1515
import java.util.List;
1616

17-
public class RectangleRenderer implements IObjectRenderer {
17+
public class RectangleRenderer implements ITwoDObjectRenderer {
1818

1919
@Override
2020
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package de.srendi.advancedperipherals.client.smartglasses.objects;
1+
package de.srendi.advancedperipherals.client.smartglasses.objects.twodim;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
44
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RenderableObject;
@@ -8,7 +8,7 @@
88

99
import java.util.List;
1010

11-
public class TextRenderer implements IObjectRenderer {
11+
public class TextRenderer implements ITwoDObjectRenderer {
1212

1313
@Override
1414
public void renderBatch(List<RenderableObject> objects, ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {

0 commit comments

Comments
 (0)