Skip to content

Commit 396e6b7

Browse files
committed
Sphere renderer, very cursed
1 parent 07d14d8 commit 396e6b7

File tree

7 files changed

+306
-68
lines changed

7 files changed

+306
-68
lines changed

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

Lines changed: 141 additions & 64 deletions
Large diffs are not rendered by default.

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ public static void renderLevelState(RenderLevelStageEvent event) {
6565
((IThreeDObjectRenderer) batch.get(0).getRenderObject()).renderBatch(batch, event, posestack, view, bufferbuilder);
6666
}
6767

68-
BlockPos blockPos = new BlockPos(2, 190, 0);
68+
//TODO Everything below here is just for debugging and testing. Will be removed before we push to production
69+
70+
BlockPos blockPos = new BlockPos(2, 10, 0);
6971

7072
float[] colors = EnumColor.DARK_PURPLE.getRgb();
7173

@@ -85,7 +87,7 @@ public static void renderLevelState(RenderLevelStageEvent event) {
8587
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
8688
colors = EnumColor.LIGHT_PURPLE.getRgb();
8789

88-
blockPos = new BlockPos(0, 190, 2);
90+
blockPos = new BlockPos(0, 10, 2);
8991
posestack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
9092

9193
VoxelShape shape = Block.box(0.0, 0.0, 0.0, 16.0, 18.0, 16.0);
@@ -97,6 +99,17 @@ public static void renderLevelState(RenderLevelStageEvent event) {
9799
BufferUploader.drawWithShader(bufferbuilder.end());
98100
posestack.popPose();
99101

102+
bufferbuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR_NORMAL);
103+
posestack.pushPose();
104+
105+
blockPos = new BlockPos(0, 10, 0);
106+
posestack.translate(-view.x + blockPos.getX(), -view.y + blockPos.getY(), -view.z + blockPos.getZ());
107+
108+
RenderUtil.drawSphere(posestack, bufferbuilder, 0.5f, 0f, 0f, 0f, colors[0], colors[1], colors[2], 0.6f, 128, 48);
109+
110+
BufferUploader.drawWithShader(bufferbuilder.end());
111+
posestack.popPose();
112+
100113
}
101114
}
102115

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.ObjectDecodeRegistry;
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;
6+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.SphereObject;
67
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.CircleObject;
78
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.ItemObject;
89
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RectangleObject;
@@ -50,5 +51,6 @@ public static void registerDecodeObjects() {
5051

5152
ObjectDecodeRegistry.register(BoxObject.TYPE_ID, BoxObject::decode);
5253
ObjectDecodeRegistry.register(BlockObject.TYPE_ID, BlockObject::decode);
54+
ObjectDecodeRegistry.register(SphereObject.TYPE_ID, SphereObject::decode);
5355
}
5456
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
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.blaze3d.vertex.VertexFormat;
89
import de.srendi.advancedperipherals.client.RenderUtil;
910
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
1011
import net.minecraft.client.renderer.GameRenderer;
11-
import net.minecraft.client.renderer.RenderType;
1212
import net.minecraft.world.phys.Vec3;
1313
import net.minecraftforge.client.event.RenderLevelStageEvent;
1414

@@ -23,7 +23,7 @@ public void renderBatch(List<ThreeDimensionalObject> batch, RenderLevelStageEven
2323
for (ThreeDimensionalObject renderableObject : batch) {
2424
poseStack.pushPose();
2525
onPreRender(renderableObject);
26-
bufferBuilder.begin(RenderType.translucent().mode(), DefaultVertexFormat.POSITION_COLOR_NORMAL);
26+
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_NORMAL);
2727

2828
RenderSystem.setShader(GameRenderer::getPositionColorShader);
2929
float alpha = renderableObject.opacity;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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.SphereObject;
11+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
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 SphereRenderer 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 renderableObject : batch) {
25+
poseStack.pushPose();
26+
onPreRender(renderableObject);
27+
bufferBuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR_NORMAL);
28+
29+
SphereObject sphere = (SphereObject) renderableObject;
30+
31+
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;
36+
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);
39+
BufferUploader.drawWithShader(bufferBuilder.end());
40+
onPostRender(renderableObject);
41+
42+
poseStack.popPose();
43+
}
44+
45+
46+
poseStack.popPose();
47+
48+
}
49+
}

src/main/java/de/srendi/advancedperipherals/common/smartglasses/modules/overlay/OverlayGlassesFunctions.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import de.srendi.advancedperipherals.common.smartglasses.modules.IModuleFunctions;
99
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.BlockObject;
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.SphereObject;
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.ItemObject;
1314
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.RectangleObject;
@@ -73,6 +74,14 @@ public final MethodResult createBox(IArguments arguments) throws LuaException {
7374
return MethodResult.of(object, "SUCCESS");
7475
}
7576

77+
@LuaFunction
78+
public final MethodResult createSphere(IArguments arguments) throws LuaException {
79+
SphereObject block = new SphereObject(overlayModule, arguments);
80+
RenderableObject object = overlayModule.addObject(block);
81+
82+
return MethodResult.of(object, "SUCCESS");
83+
}
84+
7685
@LuaFunction
7786
public final MethodResult getObject(IArguments arguments) throws LuaException {
7887
int id = arguments.getInt(0);
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim;
2+
3+
import dan200.computercraft.api.lua.IArguments;
4+
import dan200.computercraft.api.lua.LuaException;
5+
import de.srendi.advancedperipherals.AdvancedPeripherals;
6+
import de.srendi.advancedperipherals.client.smartglasses.objects.IObjectRenderer;
7+
import de.srendi.advancedperipherals.client.smartglasses.objects.threedim.SphereRenderer;
8+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayModule;
9+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.propertytypes.FixedPointNumberProperty;
10+
import net.minecraft.network.FriendlyByteBuf;
11+
12+
import java.util.UUID;
13+
14+
public class SphereObject extends ThreeDimensionalObject {
15+
public static final int TYPE_ID = 6;
16+
17+
private final IObjectRenderer renderer = new SphereRenderer();
18+
19+
@FixedPointNumberProperty(min = 1, max = 1024)
20+
public int sectors = 16;
21+
22+
@FixedPointNumberProperty(min = 1, max = 1024)
23+
public int stacks = 16;
24+
25+
public SphereObject(OverlayModule module, IArguments arguments) throws LuaException {
26+
super(module, arguments);
27+
reflectivelyMapProperties(arguments);
28+
}
29+
30+
public SphereObject(UUID player) {
31+
super(player);
32+
}
33+
34+
@Override
35+
public void encode(FriendlyByteBuf buffer) {
36+
buffer.writeInt(TYPE_ID);
37+
super.encode(buffer);
38+
buffer.writeInt(sectors);
39+
buffer.writeInt(stacks);
40+
}
41+
42+
public static SphereObject decode(FriendlyByteBuf buffer) {
43+
int objectId = buffer.readInt();
44+
boolean hasValidUUID = buffer.readBoolean();
45+
if (!hasValidUUID) {
46+
AdvancedPeripherals.exception("Tried to decode a buffer for an OverlayObject but without a valid player as target.", new IllegalArgumentException());
47+
return null;
48+
}
49+
UUID player = buffer.readUUID();
50+
int color = buffer.readInt();
51+
float opacity = buffer.readFloat();
52+
53+
int x = buffer.readInt();
54+
int y = buffer.readInt();
55+
int z = buffer.readInt();
56+
int maxX = buffer.readInt();
57+
int maxY = buffer.readInt();
58+
int maxZ = buffer.readInt();
59+
60+
boolean disableDepthTest = buffer.readBoolean();
61+
boolean disableCulling = buffer.readBoolean();
62+
63+
int sectors = buffer.readInt();
64+
int stacks = buffer.readInt();
65+
66+
SphereObject clientObject = new SphereObject(player);
67+
clientObject.setId(objectId);
68+
clientObject.color = color;
69+
clientObject.opacity = opacity;
70+
clientObject.x = x;
71+
clientObject.y = y;
72+
clientObject.z = z;
73+
clientObject.maxX = maxX;
74+
clientObject.maxY = maxY;
75+
clientObject.maxZ = maxZ;
76+
clientObject.disableDepthTest = disableDepthTest;
77+
clientObject.disableCulling = disableCulling;
78+
clientObject.sectors = sectors;
79+
clientObject.stacks = stacks;
80+
81+
return clientObject;
82+
}
83+
84+
@Override
85+
public IObjectRenderer getRenderObject() {
86+
return renderer;
87+
}
88+
}

0 commit comments

Comments
 (0)