Skip to content

Commit a62de02

Browse files
committed
add get/setPos methods and fix relative rotation
1 parent 4e4aadd commit a62de02

File tree

12 files changed

+131
-22
lines changed

12 files changed

+131
-22
lines changed

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
66
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.ThreeDimensionalObject;
77
import net.minecraft.client.Camera;
8+
import net.minecraft.util.Mth;
9+
import net.minecraft.world.entity.Entity;
10+
import net.minecraft.world.entity.LivingEntity;
811
import net.minecraft.world.phys.Vec3;
912
import net.neoforged.api.distmarker.Dist;
1013
import net.neoforged.bus.api.SubscribeEvent;
1114
import net.neoforged.fml.common.EventBusSubscriber;
1215
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
16+
import org.joml.Quaternionf;
1317

1418
import java.util.ArrayList;
1519
import java.util.HashMap;
@@ -27,12 +31,20 @@ public static void renderLevelState(RenderLevelStageEvent event) {
2731
}
2832
PoseStack poseStack = event.getPoseStack();
2933
Camera camera = event.getCamera();
30-
if (camera.getEntity() == null) {
34+
Entity entity = camera.getEntity();
35+
if (entity == null) {
3136
return;
3237
}
38+
float partialTicks = camera.getPartialTickTime();
39+
Quaternionf eyeRotation = new Quaternionf();
40+
if (entity instanceof LivingEntity livingEntity) {
41+
eyeRotation
42+
.rotationY(Mth.DEG_TO_RAD * (180 - livingEntity.getViewYRot(partialTicks)))
43+
.rotateX(Mth.DEG_TO_RAD * -livingEntity.getViewXRot(partialTicks));
44+
}
3345

3446
Vec3 view = camera.getPosition();
35-
Vec3 eyePos = camera.getEntity().getEyePosition(camera.getPartialTickTime());
47+
Vec3 eyePos = entity.getEyePosition(camera.getPartialTickTime());
3648
poseStack.pushPose();
3749
poseStack.translate(-view.x, -view.y, -view.z);
3850

@@ -51,7 +63,7 @@ public static void renderLevelState(RenderLevelStageEvent event) {
5163
}
5264

5365
for (Map.Entry<IThreeDObjectRenderer, List<ThreeDimensionalObject>> entry : batches.entrySet()) {
54-
entry.getKey().renderBatch(entry.getValue(), event, poseStack, eyePos);
66+
entry.getKey().renderBatch(entry.getValue(), event, poseStack, eyePos, eyeRotation);
5567
}
5668
poseStack.popPose();
5769
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
import net.minecraft.world.level.block.state.BlockState;
1515
import net.minecraft.world.phys.Vec3;
1616
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
17+
import org.joml.Quaternionf;
1718

1819
import java.util.List;
1920

2021
public class BlockRenderer implements IThreeDObjectRenderer<BlockObject> {
2122

2223
@Override
23-
public void renderBatch(List<BlockObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos) {
24+
public void renderBatch(List<BlockObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation) {
2425
Camera camera = event.getCamera();
2526
Level level = camera.getEntity().level();
2627
BlockRenderDispatcher blockRenderer = Minecraft.getInstance().getBlockRenderer();
@@ -40,7 +41,7 @@ public void renderBatch(List<BlockObject> batch, RenderLevelStageEvent event, Po
4041
if (block.relativePosition) {
4142
poseStack.translate(eyePos.x, eyePos.y, eyePos.z);
4243
if (block.relativeRotation) {
43-
poseStack.mulPose(camera.rotation());
44+
poseStack.mulPose(eyeRotation);
4445
}
4546
}
4647
poseStack.translate(block.x - 0.5, block.y - 0.5, block.z - 0.5);

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
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.BoxObject;
7-
import net.minecraft.client.Camera;
87
import net.minecraft.client.Minecraft;
98
import net.minecraft.client.renderer.MultiBufferSource;
109
import net.minecraft.client.renderer.RenderType;
1110
import net.minecraft.world.phys.Vec3;
1211
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
12+
import org.joml.Quaternionf;
1313
import org.joml.Vector3f;
1414
import org.joml.Vector4f;
1515

@@ -19,8 +19,7 @@ public class BoxRenderer implements IThreeDObjectRenderer<BoxObject> {
1919
private static final RenderUtil.BoxLightMap FULL_BRIGHT = RenderUtil.BoxLightMap.createFullBright();
2020

2121
@Override
22-
public void renderBatch(List<BoxObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos) {
23-
Camera camera = event.getCamera();
22+
public void renderBatch(List<BoxObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation) {
2423
MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource();
2524
VertexConsumer bufferBuilder = bufferSource.getBuffer(RenderType.debugStructureQuads());
2625

@@ -33,7 +32,7 @@ public void renderBatch(List<BoxObject> batch, RenderLevelStageEvent event, Pose
3332
if (box.relativePosition) {
3433
poseStack.translate(eyePos.x, eyePos.y, eyePos.z);
3534
if (box.relativeRotation) {
36-
poseStack.mulPose(camera.rotation());
35+
poseStack.mulPose(eyeRotation);
3736
}
3837
}
3938
poseStack.translate(box.x, box.y, box.z);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import net.minecraft.world.phys.Vec3;
88
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
99
import org.jetbrains.annotations.NotNull;
10+
import org.joml.Quaternionf;
1011

1112
import java.util.List;
1213

1314
public interface IThreeDObjectRenderer<O extends ThreeDimensionalObject> extends IObjectRenderer {
1415

15-
void renderBatch(List<O> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos);
16+
void renderBatch(List<O> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation);
1617

1718
default void onPreRender(@NotNull O object) {
1819
if (!object.culling) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@
55
import com.mojang.blaze3d.vertex.VertexConsumer;
66
import de.srendi.advancedperipherals.client.RenderUtil;
77
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.SphereObject;
8-
import net.minecraft.client.Camera;
98
import net.minecraft.client.Minecraft;
109
import net.minecraft.client.renderer.GameRenderer;
1110
import net.minecraft.client.renderer.MultiBufferSource;
1211
import net.minecraft.client.renderer.RenderType;
1312
import net.minecraft.world.phys.Vec3;
1413
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
14+
import org.joml.Quaternionf;
1515

1616
import java.util.List;
1717

1818
public class SphereRenderer implements IThreeDObjectRenderer<SphereObject> {
1919

2020
@Override
21-
public void renderBatch(List<SphereObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos) {
22-
Camera camera = event.getCamera();
21+
public void renderBatch(List<SphereObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation) {
2322
MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource();
2423
VertexConsumer bufferBuilder = bufferSource.getBuffer(RenderType.debugStructureQuads());
2524

@@ -36,7 +35,7 @@ public void renderBatch(List<SphereObject> batch, RenderLevelStageEvent event, P
3635
if (sphere.relativePosition) {
3736
poseStack.translate(eyePos.x, eyePos.y, eyePos.z);
3837
if (sphere.relativeRotation) {
39-
poseStack.mulPose(camera.rotation());
38+
poseStack.mulPose(eyeRotation);
4039
}
4140
}
4241
poseStack.translate(sphere.x, sphere.y, sphere.z);

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@
55
import com.mojang.blaze3d.vertex.VertexConsumer;
66
import de.srendi.advancedperipherals.client.RenderUtil;
77
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.TorusObject;
8-
import net.minecraft.client.Camera;
98
import net.minecraft.client.Minecraft;
109
import net.minecraft.client.renderer.GameRenderer;
1110
import net.minecraft.client.renderer.MultiBufferSource;
1211
import net.minecraft.client.renderer.RenderType;
1312
import net.minecraft.world.phys.Vec3;
1413
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
14+
import org.joml.Quaternionf;
1515

1616
import java.util.List;
1717

1818
public class TorusRenderer implements IThreeDObjectRenderer<TorusObject> {
1919

2020
@Override
21-
public void renderBatch(List<TorusObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos) {
22-
Camera camera = event.getCamera();
21+
public void renderBatch(List<TorusObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation) {
2322
MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource();
2423
VertexConsumer bufferBuilder = bufferSource.getBuffer(RenderType.debugStructureQuads());
2524

@@ -36,7 +35,7 @@ public void renderBatch(List<TorusObject> batch, RenderLevelStageEvent event, Po
3635
if (torus.relativePosition) {
3736
poseStack.translate(eyePos.x, eyePos.y, eyePos.z);
3837
if (torus.relativeRotation) {
39-
poseStack.mulPose(camera.rotation());
38+
poseStack.mulPose(eyeRotation);
4039
}
4140
}
4241
poseStack.translate(torus.x, torus.y, torus.z);

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.mojang.blaze3d.vertex.VertexFormat;
77
import de.srendi.advancedperipherals.client.RenderUtil;
88
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim.TriangleObject;
9-
import net.minecraft.client.Camera;
109
import net.minecraft.client.Minecraft;
1110
import net.minecraft.client.renderer.LightTexture;
1211
import net.minecraft.client.renderer.MultiBufferSource;
@@ -15,6 +14,7 @@
1514
import net.minecraft.world.phys.Vec3;
1615
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
1716
import org.joml.Matrix4f;
17+
import org.joml.Quaternionf;
1818

1919
import java.util.List;
2020

@@ -36,8 +36,7 @@ public class TriangleRenderer implements IThreeDObjectRenderer<TriangleObject> {
3636
);
3737

3838
@Override
39-
public void renderBatch(List<TriangleObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos) {
40-
Camera camera = event.getCamera();
39+
public void renderBatch(List<TriangleObject> batch, RenderLevelStageEvent event, PoseStack poseStack, Vec3 eyePos, Quaternionf eyeRotation) {
4140
MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource();
4241
VertexConsumer buffer = bufferSource.getBuffer(TRIANGLE_TYPE);
4342

@@ -50,7 +49,7 @@ public void renderBatch(List<TriangleObject> batch, RenderLevelStageEvent event,
5049
if (tri.relativePosition) {
5150
poseStack.translate(eyePos.x, eyePos.y, eyePos.z);
5251
if (tri.relativeRotation) {
53-
poseStack.mulPose(camera.rotation());
52+
poseStack.mulPose(eyeRotation);
5453
}
5554
}
5655
poseStack.rotateAround(tri.getRotation(), tri.x, tri.y, tri.z);

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects;
22

3+
import dan200.computercraft.api.lua.LuaFunction;
4+
import dan200.computercraft.api.lua.MethodResult;
35
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayModule;
46
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
57
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.propertytypes.FixedPointNumberProperty;
@@ -57,6 +59,19 @@ public Quaternionf getRotation() {
5759
);
5860
}
5961

62+
@LuaFunction
63+
public MethodResult getPos() {
64+
return MethodResult.of(this.x, this.y, this.z);
65+
}
66+
67+
@LuaFunction
68+
public void setPos(double x, double y, double z) {
69+
this.x = (float) x;
70+
this.y = (float) y;
71+
this.z = (float) z;
72+
this.tryAutoUpdate();
73+
}
74+
6075
@Override
6176
public void encode(FriendlyByteBuf buffer) {
6277
super.encode(buffer);

src/main/java/de/srendi/advancedperipherals/common/smartglasses/modules/overlay/objects/three_dim/BoxObject.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim;
22

3+
import dan200.computercraft.api.lua.LuaFunction;
4+
import dan200.computercraft.api.lua.MethodResult;
35
import de.srendi.advancedperipherals.common.setup.APOverlayObjects;
46
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayModule;
57
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
@@ -33,6 +35,19 @@ public OverlayObjectType<BoxObject> getType() {
3335
return APOverlayObjects.BOX.get();
3436
}
3537

38+
@LuaFunction
39+
public MethodResult getSizes() {
40+
return MethodResult.of(this.sizeX, this.sizeY, this.sizeZ);
41+
}
42+
43+
@LuaFunction
44+
public void setSizes(double x, double y, double z) {
45+
this.sizeX = (float) Math.max(x, 0);
46+
this.sizeY = (float) Math.max(y, 0);
47+
this.sizeZ = (float) Math.max(z, 0);
48+
this.tryAutoUpdate();
49+
}
50+
3651
@Override
3752
public void encode(FriendlyByteBuf buffer) {
3853
super.encode(buffer);

src/main/java/de/srendi/advancedperipherals/common/smartglasses/modules/overlay/objects/three_dim/TriangleObject.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.three_dim;
22

3+
import dan200.computercraft.api.lua.LuaFunction;
4+
import dan200.computercraft.api.lua.MethodResult;
35
import de.srendi.advancedperipherals.common.setup.APOverlayObjects;
46
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayModule;
57
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
@@ -51,6 +53,45 @@ public OverlayObjectType<TriangleObject> getType() {
5153
return APOverlayObjects.TRIANGLE.get();
5254
}
5355

56+
@LuaFunction
57+
public MethodResult getPos1() {
58+
return MethodResult.of(this.x1, this.y1, this.z1);
59+
}
60+
61+
@LuaFunction
62+
public void setPos1(double x, double y, double z) {
63+
this.x1 = (float) x;
64+
this.y1 = (float) y;
65+
this.z1 = (float) z;
66+
this.tryAutoUpdate();
67+
}
68+
69+
@LuaFunction
70+
public MethodResult getPos2() {
71+
return MethodResult.of(this.x2, this.y2, this.z2);
72+
}
73+
74+
@LuaFunction
75+
public void setPos2(double x, double y, double z) {
76+
this.x2 = (float) x;
77+
this.y2 = (float) y;
78+
this.z2 = (float) z;
79+
this.tryAutoUpdate();
80+
}
81+
82+
@LuaFunction
83+
public MethodResult getPos3() {
84+
return MethodResult.of(this.x3, this.y3, this.z3);
85+
}
86+
87+
@LuaFunction
88+
public void setPos3(double x, double y, double z) {
89+
this.x3 = (float) x;
90+
this.y3 = (float) y;
91+
this.z3 = (float) z;
92+
this.tryAutoUpdate();
93+
}
94+
5495
@Override
5596
public void encode(FriendlyByteBuf buffer) {
5697
super.encode(buffer);

0 commit comments

Comments
 (0)