Skip to content

Commit eee9665

Browse files
committed
refactor overlay decoders & fix text object position
1 parent 80f1287 commit eee9665

35 files changed

+507
-593
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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;
45
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.RenderableObject;
56
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
67
import net.minecraft.world.phys.Vec3;
@@ -23,7 +24,7 @@ public static void renderLevelState(RenderLevelStageEvent event) {
2324
Vec3 view = event.getCamera().getPosition();
2425

2526
if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) {
26-
Map<Class<? extends RenderableObject>, List<ThreeDimensionalObject>> batches = new HashMap<>();
27+
Map<Class<? extends ThreeDimensionalObject>, List<ThreeDimensionalObject>> batches = new HashMap<>();
2728

2829
for (RenderableObject object : OverlayObjectHolder.getObjects()) {
2930
if (!object.isEnabled()) {
@@ -44,7 +45,7 @@ public static void renderLevelState(RenderLevelStageEvent event) {
4445
}
4546

4647
for (List<ThreeDimensionalObject> batch : batches.values()) {
47-
batch.get(0).getObjectRenderer().renderBatch(batch, event, poseStack, view);
48+
((IThreeDObjectRenderer) batch.get(0).getObjectRenderer()).renderBatch(batch, event, poseStack, view);
4849
}
4950
}
5051
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.HashMap;
1414
import java.util.List;
1515
import java.util.Map;
16+
import java.util.NavigableMap;
1617
import java.util.TreeMap;
1718

1819
public class OverlayModuleOverlay implements LayeredDraw.Layer {
@@ -26,7 +27,7 @@ public void render(GuiGraphics gui, DeltaTracker deltaTracker) {
2627
public void render(GuiGraphics gui, PoseStack poseStack, DeltaTracker deltaTracker, int screenWidth, int screenHeight) {
2728
poseStack.pushPose();
2829

29-
Map<Integer, Map<Class<? extends RenderableObject>, List<RenderableObject>>> prioritizedBatches = new TreeMap<>();
30+
NavigableMap<Integer, Map<Class<?>, List<RenderableObject>>> prioritizedBatches = new TreeMap<>();
3031

3132
for (RenderableObject object : OverlayObjectHolder.getObjects()) {
3233
if (!object.isEnabled() || !(object.getObjectRenderer() instanceof ITwoDObjectRenderer)) {
@@ -36,15 +37,15 @@ public void render(GuiGraphics gui, PoseStack poseStack, DeltaTracker deltaTrack
3637
// We need to sort the objects by their weight, some things can't be rendered before something else.
3738
// For example, when texts are rendered before our circles, rectangles, etc., the other objects can't be transparent anymore
3839
int weight = object.getObjectRenderer().getWeight();
39-
Class<? extends RenderableObject> objectClass = object.getClass();
40+
Class<?> objectClass = object.getClass();
4041

4142
// Get or create the batch map for the current weight
42-
Map<Class<? extends RenderableObject>, List<RenderableObject>> batchesForWeight = prioritizedBatches.computeIfAbsent(weight, k -> new HashMap<>());
43+
Map<Class<?>, List<RenderableObject>> batchesForWeight = prioritizedBatches.computeIfAbsent(weight, k -> new HashMap<>());
4344
List<RenderableObject> batch = batchesForWeight.computeIfAbsent(objectClass, k -> new ArrayList<>());
4445
batch.add(object);
4546
}
4647

47-
for (Map<Class<? extends RenderableObject>, List<RenderableObject>> batchesForWeight : prioritizedBatches.values()) {
48+
for (Map<Class<?>, List<RenderableObject>> batchesForWeight : prioritizedBatches.values()) {
4849
for (List<RenderableObject> batch : batchesForWeight.values()) {
4950
if (batch.isEmpty()) {
5051
continue;

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

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

3-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.ObjectDecodeRegistry;
3+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.ObjectFactoryRegistry;
44
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.RenderableObject;
55
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BlockObject;
66
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BoxObject;
@@ -13,15 +13,15 @@
1313
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.TextObject;
1414

1515
import java.util.Collection;
16-
import java.util.HashMap;
1716
import java.util.Map;
17+
import java.util.concurrent.ConcurrentHashMap;
1818

1919
/**
2020
* Static holder for client side renderable objects - will change
2121
*/
2222
public class OverlayObjectHolder {
2323

24-
public static Map<Integer, RenderableObject> objects = new HashMap<>();
24+
public static Map<Integer, RenderableObject> objects = new ConcurrentHashMap<>();
2525

2626
public static void addOrUpdateObject(RenderableObject object) {
2727
objects.put(object.getId(), object);
@@ -46,15 +46,15 @@ public static void clear() {
4646
}
4747

4848
public static void registerDecodeObjects() {
49-
ObjectDecodeRegistry.register(RectangleObject.TYPE_ID, RectangleObject::decode);
50-
ObjectDecodeRegistry.register(CircleObject.TYPE_ID, CircleObject::decode);
51-
ObjectDecodeRegistry.register(TextObject.TYPE_ID, TextObject::decode);
52-
ObjectDecodeRegistry.register(ItemObject.TYPE_ID, ItemObject::decode);
53-
ObjectDecodeRegistry.register(LineObject.TYPE_ID, LineObject::decode);
54-
55-
ObjectDecodeRegistry.register(BoxObject.TYPE_ID, BoxObject::decode);
56-
ObjectDecodeRegistry.register(BlockObject.TYPE_ID, BlockObject::decode);
57-
ObjectDecodeRegistry.register(SphereObject.TYPE_ID, SphereObject::decode);
58-
ObjectDecodeRegistry.register(TorusObject.TYPE_ID, TorusObject::decode);
49+
ObjectFactoryRegistry.register(RectangleObject.TYPE_ID, RectangleObject::new);
50+
ObjectFactoryRegistry.register(CircleObject.TYPE_ID, CircleObject::new);
51+
ObjectFactoryRegistry.register(TextObject.TYPE_ID, TextObject::new);
52+
ObjectFactoryRegistry.register(ItemObject.TYPE_ID, ItemObject::new);
53+
ObjectFactoryRegistry.register(LineObject.TYPE_ID, LineObject::new);
54+
55+
ObjectFactoryRegistry.register(BoxObject.TYPE_ID, BoxObject::new);
56+
ObjectFactoryRegistry.register(BlockObject.TYPE_ID, BlockObject::new);
57+
ObjectFactoryRegistry.register(SphereObject.TYPE_ID, SphereObject::new);
58+
ObjectFactoryRegistry.register(TorusObject.TYPE_ID, TorusObject::new);
5959
}
6060
}

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/IObjectRenderer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,4 @@ public interface IObjectRenderer {
99
default int getWeight() {
1010
return 100;
1111
}
12-
1312
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import com.mojang.blaze3d.vertex.VertexConsumer;
55
import de.srendi.advancedperipherals.client.RenderUtil;
66
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BlockObject;
7-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
8-
import de.srendi.advancedperipherals.common.util.RegistryUtil;
97
import net.minecraft.client.Minecraft;
108
import net.minecraft.client.renderer.MultiBufferSource;
119
import net.minecraft.client.renderer.RenderType;
@@ -20,27 +18,29 @@
2018

2119
import java.util.List;
2220

23-
public class BlockRenderer implements IThreeDObjectRenderer {
21+
public class BlockRenderer implements IThreeDObjectRenderer<BlockObject> {
2422

2523
@Override
26-
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
24+
public void renderBatch(List<BlockObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
2725
Level level = event.getCamera().getEntity().level();
2826
BlockRenderDispatcher blockRenderer = Minecraft.getInstance().getBlockRenderer();
2927
MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource();
3028
VertexConsumer bufferBuilder = bufferSource.getBuffer(RenderType.solid());
3129

3230
poseStack.pushPose();
3331

34-
for (ThreeDimensionalObject obj : batch) {
35-
BlockObject block = (BlockObject) obj;
36-
37-
Block blockToRender = RegistryUtil.getRegistryEntry(block.block, BuiltInRegistries.BLOCK);
32+
for (BlockObject block : batch) {
33+
if (block.block == null) {
34+
return;
35+
}
36+
Block blockToRender = BuiltInRegistries.BLOCK.get(block.block);
3837
if (blockToRender == null) {
3938
continue;
4039
}
4140

41+
this.onPreRender(block);
42+
4243
poseStack.pushPose();
43-
onPreRender(block);
4444

4545
poseStack.translate(-view.x + block.getX(), -view.y + block.getY(), -view.z + block.getZ());
4646
poseStack.mulPose(new Quaternionf().rotationXYZ((float) Math.toRadians(block.rotX), (float) Math.toRadians(block.rotY), (float) Math.toRadians(block.rotZ)));
@@ -66,7 +66,7 @@ public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEven
6666
float green = RenderUtil.getGreen(block.color);
6767
float blue = RenderUtil.getBlue(block.color);
6868

69-
onPostRender(obj);
69+
this.onPostRender(block);
7070
}
7171

7272
poseStack.popPose();

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,20 @@
88
import com.mojang.blaze3d.vertex.VertexFormat;
99
import de.srendi.advancedperipherals.client.RenderUtil;
1010
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BoxObject;
11-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1211
import net.minecraft.world.phys.Vec3;
1312
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
1413

1514
import java.util.List;
1615

17-
public class BoxRenderer implements IThreeDObjectRenderer {
16+
public class BoxRenderer implements IThreeDObjectRenderer<BoxObject> {
1817

1918
@Override
20-
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
19+
public void renderBatch(List<BoxObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
2120
poseStack.pushPose();
2221

23-
for (ThreeDimensionalObject obj : batch) {
24-
BoxObject box = (BoxObject) obj;
25-
22+
for (BoxObject box : batch) {
23+
this.onPreRender(box);
2624
poseStack.pushPose();
27-
onPreRender(box);
28-
2925
// TODO: we suppose to use bufferSource instead of Tesselator
3026
// BufferBuilder bufferBuilder = Minecraft.getInstance().renderBuffers().bufferSource().getBuffer(RenderType.solid());
3127
BufferBuilder bufferBuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
@@ -38,9 +34,8 @@ public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEven
3834
poseStack.translate(-view.x + box.getX(), -view.y + box.getY(), -view.z + box.getZ());
3935
RenderUtil.drawBox(poseStack, bufferBuilder, red, green, blue, alpha, box.x, box.y, box.z, box.rotX, box.rotY, box.rotZ, box.maxX, box.maxY, box.maxZ);
4036
BufferUploader.drawWithShader(bufferBuilder.buildOrThrow());
41-
onPostRender(box);
42-
4337
poseStack.popPose();
38+
this.onPostRender(box);
4439
}
4540

4641
poseStack.popPose();

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,25 @@
99

1010
import java.util.List;
1111

12-
public interface IThreeDObjectRenderer extends IObjectRenderer {
12+
public interface IThreeDObjectRenderer<O extends ThreeDimensionalObject> extends IObjectRenderer {
1313

14-
void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view);
14+
void renderBatch(List<O> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view);
1515

16-
default void onPostRender(ThreeDimensionalObject object) {
17-
if (object.disableCulling)
16+
default void onPostRender(O object) {
17+
if (object.disableCulling) {
1818
RenderSystem.enableCull();
19-
if (object.disableDepthTest)
19+
}
20+
if (object.disableDepthTest) {
2021
RenderSystem.enableDepthTest();
22+
}
2123
}
2224

23-
default void onPreRender(ThreeDimensionalObject object) {
24-
if (object.disableCulling)
25+
default void onPreRender(O object) {
26+
if (object.disableCulling) {
2527
RenderSystem.disableCull();
26-
if (object.disableDepthTest)
28+
}
29+
if (object.disableDepthTest) {
2730
RenderSystem.disableDepthTest();
31+
}
2832
}
2933
}

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,21 @@
99
import com.mojang.blaze3d.vertex.VertexFormat;
1010
import de.srendi.advancedperipherals.client.RenderUtil;
1111
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.SphereObject;
12-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1312
import net.minecraft.client.renderer.GameRenderer;
1413
import net.minecraft.world.phys.Vec3;
1514
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
1615

1716
import java.util.List;
1817

19-
public class SphereRenderer implements IThreeDObjectRenderer {
18+
public class SphereRenderer implements IThreeDObjectRenderer<SphereObject> {
2019

2120
@Override
22-
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
21+
public void renderBatch(List<SphereObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
2322
poseStack.pushPose();
2423

25-
for (ThreeDimensionalObject obj : batch) {
26-
SphereObject sphere = (SphereObject) obj;
27-
24+
for (SphereObject sphere : batch) {
25+
this.onPreRender(sphere);
2826
poseStack.pushPose();
29-
onPreRender(sphere);
3027
BufferBuilder bufferBuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
3128

3229
RenderSystem.setShader(GameRenderer::getPositionColorShader);
@@ -39,8 +36,8 @@ public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEven
3936
RenderUtil.drawSphere(poseStack, bufferBuilder, sphere.radius, sphere.x, sphere.y, sphere.z, sphere.rotX, sphere.rotY, sphere.rotZ, red, green, blue, alpha, sphere.sectors, sphere.stacks);
4037
BufferUploader.drawWithShader(bufferBuilder.buildOrThrow());
4138

42-
onPostRender(sphere);
4339
poseStack.popPose();
40+
this.onPostRender(sphere);
4441
}
4542

4643
poseStack.popPose();

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,22 @@
88
import com.mojang.blaze3d.vertex.Tesselator;
99
import com.mojang.blaze3d.vertex.VertexFormat;
1010
import de.srendi.advancedperipherals.client.RenderUtil;
11-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1211
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.TorusObject;
1312
import net.minecraft.client.renderer.GameRenderer;
1413
import net.minecraft.world.phys.Vec3;
1514
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
1615

1716
import java.util.List;
1817

19-
public class TorusRenderer implements IThreeDObjectRenderer {
18+
public class TorusRenderer implements IThreeDObjectRenderer<TorusObject> {
2019

2120
@Override
22-
public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
21+
public void renderBatch(List<TorusObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 view) {
2322
poseStack.pushPose();
2423

25-
for (ThreeDimensionalObject obj : batch) {
26-
TorusObject torus = (TorusObject) obj;
27-
24+
for (TorusObject torus : batch) {
25+
this.onPreRender(torus);
2826
poseStack.pushPose();
29-
onPreRender(obj);
3027
BufferBuilder bufferBuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
3128

3229
RenderSystem.setShader(GameRenderer::getPositionColorShader);
@@ -39,8 +36,8 @@ public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEven
3936
RenderUtil.drawTorus(poseStack, bufferBuilder, torus.majorRadius, torus.minorRadius, 0, 0, 0, torus.rotX, torus.rotY, torus.rotZ, red, green, blue, alpha, torus.rings, torus.sides);
4037
BufferUploader.drawWithShader(bufferBuilder.buildOrThrow());
4138

42-
onPostRender(obj);
4339
poseStack.popPose();
40+
this.onPostRender(torus);
4441
}
4542

4643
poseStack.popPose();

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.mojang.blaze3d.vertex.VertexFormat;
1010
import com.mojang.math.Axis;
1111
import de.srendi.advancedperipherals.client.RenderUtil;
12-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.RenderableObject;
1312
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.CircleObject;
1413
import net.minecraft.client.DeltaTracker;
1514
import net.minecraft.client.gui.GuiGraphics;
@@ -18,14 +17,10 @@
1817

1918
import java.util.List;
2019

21-
public class CircleRenderer implements ITwoDObjectRenderer {
22-
20+
public class CircleRenderer implements ITwoDObjectRenderer<CircleObject> {
2321
@Override
24-
public void renderBatch(List<RenderableObject> objects, GuiGraphics gui, PoseStack poseStack, DeltaTracker partialTick, int screenWidth, int screenHeight) {
25-
for (RenderableObject obj : objects) {
26-
27-
CircleObject circle = (CircleObject) obj;
28-
22+
public void renderBatch(List<CircleObject> objects, GuiGraphics gui, PoseStack poseStack, DeltaTracker partialTick, int screenWidth, int screenHeight) {
23+
for (CircleObject circle : objects) {
2924
float alpha = circle.opacity;
3025
float red = RenderUtil.getRed(circle.color);
3126
float green = RenderUtil.getGreen(circle.color);
@@ -51,10 +46,10 @@ public void drawCircle(PoseStack t, CircleObject circle, float red, float green,
5146

5247
PoseStack poseStack = new PoseStack();
5348

54-
poseStack.translate(cx, cy, cz);
55-
5649
poseStack.pushPose();
5750

51+
poseStack.translate(cx, cy, cz);
52+
5853
poseStack.mulPose(Axis.XP.rotationDegrees(rotX));
5954
poseStack.mulPose(Axis.YP.rotationDegrees(rotY));
6055
poseStack.mulPose(Axis.ZP.rotationDegrees(rotZ));

0 commit comments

Comments
 (0)