From 1818ffaaa01a440efae8785aa9dc9283da7ba955 Mon Sep 17 00:00:00 2001 From: TheBritishMidget Date: Tue, 9 Feb 2021 18:10:20 +0000 Subject: [PATCH] Added more Shapes to Waypoints Module --- .../seppuku/api/util/RenderUtil.java | 203 ++++++++++++++++++ .../impl/module/world/WaypointsModule.java | 29 ++- 2 files changed, 230 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java b/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java index c454db0..bd87c0c 100644 --- a/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java +++ b/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java @@ -11,6 +11,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.AxisAlignedBB; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL32; +import org.lwjgl.util.glu.Sphere; import java.nio.FloatBuffer; import java.nio.IntBuffer; @@ -443,6 +444,208 @@ public final class RenderUtil { tessellator.draw(); } + public static void drawFilledPyramid(AxisAlignedBB bb, int color) { + final float alpha = (color >> 24 & 0xFF) / 255.0F; + final float red = (color >> 16 & 0xFF) / 255.0F; + final float green = (color >> 8 & 0xFF) / 255.0F; + final float blue = (color & 0xFF) / 255.0F; + + final Tessellator tessellator = Tessellator.getInstance(); + + GlStateManager.disableCull(); + + final BufferBuilder bufferbuilder = tessellator.getBuffer(); + + bufferbuilder.begin(GL_TRIANGLES, DefaultVertexFormats.POSITION_COLOR); + + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); // 1 + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 2 + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); // 3 + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 4 + bufferbuilder.pos(bb.maxX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 5 + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); // 6 + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, alpha).endVertex(); + + tessellator.draw(); + } + + public static void drawBoundingBoxPyramid(AxisAlignedBB bb, float width, int color) { + final float alpha = (color >> 24 & 0xFF) / 255.0F; + final float red = (color >> 16 & 0xFF) / 255.0F; + final float green = (color >> 8 & 0xFF) / 255.0F; + final float blue = (color & 0xFF) / 255.0F; + + glLineWidth(width); + + final Tessellator tessellator = Tessellator.getInstance(); + final BufferBuilder bufferbuilder = tessellator.getBuffer(); + + bufferbuilder.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, 0.0F).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, 0.0F).endVertex(); + + bufferbuilder.pos(bb.maxX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, 0.0F).endVertex(); + + bufferbuilder.pos(bb.minX, bb.minY, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY, 0).color(red, green, blue, 0.0F).endVertex(); + + tessellator.draw(); + } + + public static void drawFilledDiamond(AxisAlignedBB bb, float yOffset, float extraY, int color) { + final float alpha = (color >> 24 & 0xFF) / 255.0F; + final float red = (color >> 16 & 0xFF) / 255.0F; + final float green = (color >> 8 & 0xFF) / 255.0F; + final float blue = (color & 0xFF) / 255.0F; + + final Tessellator tessellator = Tessellator.getInstance(); + + GlStateManager.disableCull(); + + final BufferBuilder bufferbuilder = tessellator.getBuffer(); + + bufferbuilder.begin(GL_TRIANGLES, DefaultVertexFormats.POSITION_COLOR); + + // Top Half + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); // 1 + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 2 + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 3 + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); // 4 + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, alpha).endVertex(); + + // Bottom Half + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); // 5 + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 6 + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); // 7 + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); // 8 + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, alpha).endVertex(); + + tessellator.draw(); + } + + public static void drawBoundingBoxDiamond(AxisAlignedBB bb, float width, float yOffset, float extraY, int color) { + final float alpha = (color >> 24 & 0xFF) / 255.0F; + final float red = (color >> 16 & 0xFF) / 255.0F; + final float green = (color >> 8 & 0xFF) / 255.0F; + final float blue = (color & 0xFF) / 255.0F; + + glLineWidth(width); + + final Tessellator tessellator = Tessellator.getInstance(); + final BufferBuilder bufferbuilder = tessellator.getBuffer(); + + bufferbuilder.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + + // Top Half + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, 0).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, 0).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.maxY + extraY, 0).color(red, green, blue, 0).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + // Bottom Half + + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(bb.minX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, 0).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.minZ).color(red, green, blue, alpha).endVertex(); + + bufferbuilder.pos(0, bb.minY - extraY, 0).color(red, green, blue, 0).endVertex(); + + bufferbuilder.pos(bb.maxX, yOffset, bb.maxZ).color(red, green, blue, alpha).endVertex(); + + tessellator.draw(); + } + + public static void drawSphere(float radius, int slices, int stacks, int color) { + final float alpha = (color >> 24 & 0xFF) / 255.0F; + final float red = (color >> 16 & 0xFF) / 255.0F; + final float green = (color >> 8 & 0xFF) / 255.0F; + final float blue = (color & 0xFF) / 255.0F; + + glColor4f(red, green, blue, alpha); + + new Sphere().draw(radius, slices, stacks); + } + public static void drawCrosses(AxisAlignedBB bb, float width, int color) { GlStateManager.glLineWidth(width); glColor(color); diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/world/WaypointsModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/world/WaypointsModule.java index 39af11f..5d80e28 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/world/WaypointsModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/world/WaypointsModule.java @@ -15,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.network.play.client.CPacketClientStatus; import net.minecraft.util.math.AxisAlignedBB; +import org.lwjgl.util.glu.Sphere; import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; import java.sql.Timestamp; @@ -35,12 +36,19 @@ public final class WaypointsModule extends Module { public final Value tracersAlpha = new Value("TracersAlpha", new String[]{"talpha", "ta", "topacity", "top"}, "Alpha value for each drawn line.", 255, 1, 255, 1); public final Value box = new Value("Box", new String[]{"b"}, "Renders a 3D object at each waypoint.", true); + public final Value shape = new Value("Shape", new String[]{"s"}, "Selects what shape should be rendered.", Shape.CUBE); public final Value boxRotate = new Value("BoxRotate", new String[]{"brotate", "rotate", "br"}, "Rotates each 3D object around in a circle.", true); public final Value boxRotateSpeed = new Value("BoxRotateSpeed", new String[]{"brotatespeed", "rotatespeed", "spinspeed", "brs"}, "The speed at which the 3D object rotates around.", 0.5f, 0.1f, 2.0f, 0.1f); public final Value boxWidth = new Value("BoxWidth", new String[]{"width", "w"}, "Pixel width of the 3D objects lines.", 1f, 0.1f, 5.0f, 0.1f); public final Value boxAlpha = new Value("BoxAlpha", new String[]{"balpha", "ba", "bopacity", "bop"}, "Alpha value for the 3D rendered object.", 127, 1, 255, 1); public final Value boxSize = new Value("BoxSize", new String[]{"size", "scale", "s"}, "Size of the 3D rendered object.", 0.5f, 0.1f, 3.0f, 0.1f); public final Value boxYOffset = new Value("BoxYOffset", new String[]{"byoffset", "byoff", "byo"}, "Y-level offset of the 3D rendered object.", 0.0f, -1.0f, 1.0f, 0.1f); + public final Value diamondYIncrease = new Value("DiamondExtraY", new String[]{"de", "dextray", "diamondy"}, "Extra height added to the top of the diamond object.", 0.5f, 0.1f, 3.0f, 0.1f); + + public enum Shape { + CUBE, PYRAMID, DIAMOND, SPHERE + } + private final Minecraft mc = Minecraft.getMinecraft(); private String host = ""; @@ -107,8 +115,25 @@ public final class WaypointsModule extends Module { this.boxSize.getValue(), this.boxSize.getValue() + this.boxYOffset.getValue(), this.boxSize.getValue()); - RenderUtil.drawFilledBox(bb, color); - RenderUtil.drawBoundingBox(bb, this.boxWidth.getValue(), color); + + switch (shape.getValue()) { + case CUBE: + RenderUtil.drawFilledBox(bb, color); + RenderUtil.drawBoundingBox(bb, this.boxWidth.getValue(), color); + break; + case PYRAMID: + RenderUtil.drawFilledPyramid(bb, color); + RenderUtil.drawBoundingBoxPyramid(bb, this.boxWidth.getValue(), color); + break; + case DIAMOND: + RenderUtil.drawFilledDiamond(bb, this.boxYOffset.getValue(), this.diamondYIncrease.getValue(), color); + RenderUtil.drawBoundingBoxDiamond(bb, this.boxWidth.getValue(), this.boxYOffset.getValue(), this.diamondYIncrease.getValue(), color); + break; + case SPHERE: + RenderUtil.drawSphere(boxSize.getValue(), 32, 32, color); + break; + } + GlStateManager.popMatrix(); } }