diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt | 9 | ||||
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt | 67 |
2 files changed, 75 insertions, 1 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt index 534b54172..37e18e1d0 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.utils.LorenzUtils.round +import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.Entity import net.minecraft.network.play.server.S2APacketParticles import net.minecraft.util.AxisAlignedBB @@ -178,6 +179,8 @@ data class LorenzVec( return LorenzVec(x, y, z) } + fun negated() = LorenzVec(-x, -y, -z) + fun rotateXY(theta: Double) = LorenzVec(x * cos(theta) - y * sin(theta), x * sin(theta) + y * cos(theta), z) fun rotateXZ(theta: Double) = LorenzVec(x * cos(theta) + z * sin(theta), y, -x * sin(theta) + z * cos(theta)) fun rotateYZ(theta: Double) = LorenzVec(x, y * cos(theta) - z * sin(theta), y * sin(theta) + z * cos(theta)) @@ -201,6 +204,8 @@ data class LorenzVec( } fun getBlockBelowPlayer() = LocationUtils.playerLocation().roundLocationToBlock().add(y = -1.0) + + val expandVector = LorenzVec(0.0020000000949949026, 0.0020000000949949026, 0.0020000000949949026) } } @@ -224,3 +229,7 @@ fun S2APacketParticles.toLorenzVec() = LorenzVec(xCoordinate, yCoordinate, zCoor fun Array<Double>.toLorenzVec(): LorenzVec { return LorenzVec(this[0], this[1], this[2]) } + +fun RenderUtils.translate(vec: LorenzVec) = GlStateManager.translate(vec.x, vec.y, vec.z) + +fun AxisAlignedBB.expand(vec: LorenzVec) = this.expand(vec.x, vec.y, vec.z) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 8841f0d97..368394fae 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -21,6 +21,7 @@ import net.minecraft.client.gui.ScaledResolution import net.minecraft.client.renderer.GLAllocation import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.WorldRenderer import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.enchantment.Enchantment import net.minecraft.entity.Entity @@ -138,7 +139,8 @@ object RenderUtils { fun getViewerPos(partialTicks: Float) = exactLocation(Minecraft.getMinecraft().renderViewEntity, partialTicks) - fun AxisAlignedBB.expandBlock() = expand(0.0020000000949949026, 0.0020000000949949026, 0.0020000000949949026) + fun AxisAlignedBB.expandBlock(n: Int = 1) = expand(LorenzVec.expandVector.multiply(n)) + fun AxisAlignedBB.inflateBlock(n: Int = 1) = expand(LorenzVec.expandVector.multiply(-n)) /** * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 @@ -1147,6 +1149,69 @@ object RenderUtils { GlStateManager.disableBlend() } + fun WorldRenderer.pos(vec: LorenzVec) = this.pos(vec.x, vec.y, vec.z) + + fun draw3DQuad( + middlePoint: LorenzVec, + sidePoint1: LorenzVec, + sidePoint2: LorenzVec, + c: Color, + partialTicks: Float = 0F, + ) = QuadDrawer.draw3D(partialTicks) { + draw( + middlePoint, + sidePoint1, + sidePoint2, + c + ) + } + + class QuadDrawer @PublishedApi internal constructor(val tessellator: Tessellator) { + val worldRenderer = tessellator.worldRenderer + inline fun draw( + middlePoint: LorenzVec, + sidePoint1: LorenzVec, + sidePoint2: LorenzVec, + c: Color + ) { + GlStateManager.color(c.red / 255f, c.green / 255f, c.blue / 255f, c.alpha / 255f) + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldRenderer.pos(sidePoint1).endVertex() + worldRenderer.pos(middlePoint).endVertex() + worldRenderer.pos(sidePoint2).endVertex() + worldRenderer.pos(sidePoint1.add(sidePoint2).subtract(middlePoint)).endVertex() + tessellator.draw() + } + + companion object { + inline fun draw3D( + partialTicks: Float = 0F, + crossinline quads: QuadDrawer.() -> Unit + ) { + + GlStateManager.enableBlend() + GlStateManager.disableLighting() + GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0) + GlStateManager.disableTexture2D() + GlStateManager.disableCull() + + val tessellator = Tessellator.getInstance() + + GlStateManager.pushMatrix() + RenderUtils.translate(getViewerPos(partialTicks).negated()) + getViewerPos(partialTicks) + + quads.invoke(QuadDrawer(Tessellator.getInstance())) + + GlStateManager.popMatrix() + + GlStateManager.enableTexture2D() + GlStateManager.enableCull() + GlStateManager.disableBlend() + } + } + } + fun drawFilledBoundingBox_nea( aabb: AxisAlignedBB, c: Color, |
