aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java46
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java19
-rw-r--r--src/test/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitualTest.java18
3 files changed, 54 insertions, 29 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java
index 5b5f4715..ad58c868 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java
@@ -100,14 +100,11 @@ public class MythologicalRitual {
if (Double.isNaN(slope)) {
return;
}
- Vec3d nextBurrowDirection = new Vec3d(100, 0, slope * 100).normalize().multiply(100);
- if (burrow.nextBurrowPlane == null) {
- burrow.nextBurrowPlane = new Vec3d[4];
+ Vec3d nextBurrowDirection = new Vec3d(100, 0, slope * 100).normalize();
+ if (burrow.nextBurrowLine == null) {
+ burrow.nextBurrowLine = new Vec3d[1001];
}
- burrow.nextBurrowPlane[0] = Vec3d.of(pos).add(nextBurrowDirection).subtract(0, 50, 0);
- burrow.nextBurrowPlane[1] = Vec3d.of(pos).subtract(nextBurrowDirection).subtract(0, 50, 0);
- burrow.nextBurrowPlane[2] = burrow.nextBurrowPlane[1].add(0, 100, 0);
- burrow.nextBurrowPlane[3] = burrow.nextBurrowPlane[0].add(0, 100, 0);
+ fillLine(burrow.nextBurrowLine, Vec3d.of(pos), nextBurrowDirection);
} else if (ParticleTypes.DRIPPING_LAVA.equals(packet.getParameters().getType()) && packet.getCount() == 2) {
if (System.currentTimeMillis() > lastEchoTime + 10_000) {
return;
@@ -120,18 +117,25 @@ public class MythologicalRitual {
if (previousBurrow.echoBurrowDirection[0] == null || previousBurrow.echoBurrowDirection[1] == null) {
return;
}
- Vec3d echoBurrowDirection = previousBurrow.echoBurrowDirection[1].subtract(previousBurrow.echoBurrowDirection[0]).normalize().multiply(100);
- if (previousBurrow.echoBurrowPlane == null) {
- previousBurrow.echoBurrowPlane = new Vec3d[4];
+ Vec3d echoBurrowDirection = previousBurrow.echoBurrowDirection[1].subtract(previousBurrow.echoBurrowDirection[0]).normalize();
+ if (previousBurrow.echoBurrowLine == null) {
+ previousBurrow.echoBurrowLine = new Vec3d[1001];
}
- previousBurrow.echoBurrowPlane[0] = previousBurrow.echoBurrowDirection[0].add(echoBurrowDirection).subtract(0, 50, 0);
- previousBurrow.echoBurrowPlane[1] = previousBurrow.echoBurrowDirection[0].subtract(echoBurrowDirection).subtract(0, 50, 0);
- previousBurrow.echoBurrowPlane[2] = previousBurrow.echoBurrowPlane[1].add(0, 100, 0);
- previousBurrow.echoBurrowPlane[3] = previousBurrow.echoBurrowPlane[0].add(0, 100, 0);
+ fillLine(previousBurrow.echoBurrowLine, previousBurrow.echoBurrowDirection[0], echoBurrowDirection);
}
}
}
+ static void fillLine(Vec3d[] line, Vec3d start, Vec3d direction) {
+ assert line.length % 2 == 1;
+ int middle = line.length / 2;
+ line[middle] = start;
+ for (int i = 0; i < middle; i++) {
+ line[middle + 1 + i] = line[middle + i].add(direction);
+ line[middle - 1 - i] = line[middle - i].subtract(direction);
+ }
+ }
+
public static void render(WorldRenderContext context) {
if (isActive()) {
for (GriffinBurrow burrow : griffinBurrows.values()) {
@@ -139,11 +143,11 @@ public class MythologicalRitual {
burrow.render(context);
}
if (burrow.confirmed != TriState.FALSE) {
- if (burrow.nextBurrowPlane != null) {
- RenderHelper.renderQuad(context, burrow.nextBurrowPlane, ORANGE_COLOR_COMPONENTS, 0.25F, true);
+ if (burrow.nextBurrowLine != null) {
+ RenderHelper.renderLinesFromPoints(context, burrow.nextBurrowLine, ORANGE_COLOR_COMPONENTS, 0.5F, 5F);
}
- if (burrow.echoBurrowPlane != null) {
- RenderHelper.renderQuad(context, burrow.echoBurrowPlane, ORANGE_COLOR_COMPONENTS, 0.25F, true);
+ if (burrow.echoBurrowLine != null) {
+ RenderHelper.renderLinesFromPoints(context, burrow.echoBurrowLine, ORANGE_COLOR_COMPONENTS, 0.5F, 5F);
}
}
}
@@ -191,10 +195,12 @@ public class MythologicalRitual {
private int enchantParticle;
private TriState confirmed = TriState.FALSE;
private final SimpleRegression regression = new SimpleRegression();
- private Vec3d[] nextBurrowPlane;
+ @Nullable
+ private Vec3d[] nextBurrowLine;
@Nullable
private Vec3d[] echoBurrowDirection;
- private Vec3d[] echoBurrowPlane;
+ @Nullable
+ private Vec3d[] echoBurrowLine;
private GriffinBurrow(BlockPos pos) {
super(pos, Type.WAYPOINT, ORANGE_COLOR_COMPONENTS, 0.25F);
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
index 9ffd3a43..0f73df16 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
@@ -2,7 +2,6 @@ package de.hysky.skyblocker.utils.render;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.logging.LogUtils;
-
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker;
import de.hysky.skyblocker.utils.render.culling.OcclusionCulling;
@@ -23,16 +22,16 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-
import org.joml.Matrix3f;
import org.joml.Matrix4f;
+import org.joml.Vector3f;
import org.lwjgl.opengl.GL11;
import org.slf4j.Logger;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
public class RenderHelper {
private static final Logger LOGGER = LogUtils.getLogger();
private static final Identifier TRANSLUCENT_DRAW = new Identifier(SkyblockerMod.NAMESPACE, "translucent_draw");
@@ -168,11 +167,12 @@ public class RenderHelper {
buffer.begin(DrawMode.LINE_STRIP, VertexFormats.LINES);
for (int i = 0; i < points.length; i++) {
- Vec3d normalVec = points[(i + 1) % points.length].subtract(points[i]).normalize();
+ Vec3d nextPoint = points[i + 1 == points.length ? i - 1 : i + 1];
+ Vector3f normalVec = new Vector3f((float) nextPoint.getX(), (float) nextPoint.getY(), (float) nextPoint.getZ()).sub((float) points[i].getX(), (float) points[i].getY(), (float) points[i].getZ()).normalize().mul(normalMatrix);
buffer
.vertex(positionMatrix, (float) points[i].getX(), (float) points[i].getY(), (float) points[i].getZ())
.color(colorComponents[0], colorComponents[1], colorComponents[2], alpha)
- .normal(normalMatrix, (float) normalVec.x, (float) normalVec.y, (float) normalVec.z)
+ .normal(normalVec.x, normalVec.y, normalVec.z)
.next();
}
@@ -326,7 +326,8 @@ public class RenderHelper {
MethodType mt = MethodType.methodType(void.class, Runnable.class);
return lookup.findStatic(deferredTaskClass, "schedule", mt);
- } catch (Throwable ignored) {}
+ } catch (Throwable ignored) {
+ }
return null;
}
diff --git a/src/test/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitualTest.java b/src/test/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitualTest.java
new file mode 100644
index 00000000..0938fc27
--- /dev/null
+++ b/src/test/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitualTest.java
@@ -0,0 +1,18 @@
+package de.hysky.skyblocker.skyblock.waypoint;
+
+import net.minecraft.util.math.Vec3d;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class MythologicalRitualTest {
+ @Test
+ void testFillLine() {
+ Vec3d[] line = new Vec3d[21];
+ Vec3d start = new Vec3d(0, 0, 0);
+ Vec3d direction = new Vec3d(1, 0, 0);
+ MythologicalRitual.fillLine(line, start, direction);
+ for (int i = 0; i < line.length; i++) {
+ Assertions.assertEquals(new Vec3d(i - 10, 0, 0), line[i]);
+ }
+ }
+}