diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskModel.java b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskModel.java index 51bb8521..d7c0e240 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskModel.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskModel.java @@ -5,7 +5,6 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Matrix4f; public class DiskModel extends SphereModel { - @Override public void render(MatrixStack.Entry matrices, VertexConsumer vertexWriter, int light, int overlay, float r, float g, float b, float a) { Matrix4f model = matrices.getModel(); @@ -15,9 +14,8 @@ public class DiskModel extends SphereModel { double radius = 1; - for(double zenith = 0; zenith < Math.PI; zenith += zenithIncrement) { + for (double zenith = 0; zenith < Math.PI; zenith += zenithIncrement) { drawVertex(model, vertexWriter, radius, zenith, Math.PI, light, overlay, r, g, b, a); } } - } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java index 39c17b6a..74896387 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java @@ -11,6 +11,7 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.math.Quaternion; public class DiskParticle extends SphereParticle { @@ -30,13 +31,10 @@ public class DiskParticle extends SphereParticle { @Override public void buildGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta) { - if (colorAlpha <= 0) { + if (colorAlpha <= 0 || radius <= 0) { return; } - MODEL.setPosition(x, y, z); - MODEL.setRotation(rotX, rotY, rotZ); - float[] color = ColorHelper.changeSaturation(colorRed, colorGreen, colorBlue, 4); RenderSystem.setShaderColor(color[0], color[1], color[2], colorAlpha / 3F); @@ -46,7 +44,13 @@ public class DiskParticle extends SphereParticle { int light = getBrightness(tickDelta); MatrixStack matrices = new MatrixStack(); - MODEL.render(matrices, radius, buffer, 1, light, 1, 1, 1, 1); + matrices.push(); + matrices.translate(x, y, z); + matrices.multiply(new Quaternion(rotX, rotY, rotZ, true)); + matrices.scale(radius, radius, radius); + MODEL.render(matrices, buffer, 1, light, 1, 1, 1, 1); + + matrices.pop(); immediate.draw(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereModel.java b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereModel.java index 235795d9..60ee0cb4 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereModel.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereModel.java @@ -3,46 +3,11 @@ package com.minelittlepony.unicopia.client.particle; import net.minecraft.client.render.VertexConsumer; import net.minecraft.util.math.Matrix4f; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Vec3f; import net.minecraft.util.math.Vector4f; -import net.minecraft.util.math.Quaternion; -import net.minecraft.util.math.Vec3d; public class SphereModel { - - protected Vec3d pos; - - protected Quaternion rotX = Quaternion.IDENTITY; - protected Quaternion rotY = Quaternion.IDENTITY; - protected Quaternion rotZ = Quaternion.IDENTITY; - - public void setPosition(double x, double y, double z) { - pos = new Vec3d(x, y, z); - } - - public void setRotation(float x, float y, float z) { - rotX = Vec3f.POSITIVE_X.getDegreesQuaternion(x); - rotY = Vec3f.POSITIVE_Y.getDegreesQuaternion(y); - rotZ = Vec3f.POSITIVE_Z.getDegreesQuaternion(z); - } - - public void render(MatrixStack matrices, float scale, VertexConsumer vertexWriter, int light, int overlay, float r, float g, float b, float a) { - if (scale == 0) { - return; - } - - matrices.push(); - - matrices.translate(pos.x, pos.y, pos.z); - matrices.multiply(rotX); - matrices.multiply(rotY); - matrices.multiply(rotZ); - - matrices.scale(scale, scale, scale); - + public void render(MatrixStack matrices, VertexConsumer vertexWriter, int light, int overlay, float r, float g, float b, float a) { render(matrices.peek(), vertexWriter, light, overlay, r, g, b, a); - - matrices.pop(); } public void render(MatrixStack.Entry matrices, VertexConsumer vertexWriter, int light, int overlay, float r, float g, float b, float a) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java index 59fe83f8..d6820cec 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java @@ -116,13 +116,6 @@ public class SphereParticle extends Particle implements Attachment { return; } - MODEL.setPosition( - MathHelper.lerp(tickDelta, prevPosX, x) - camera.getPos().x, - MathHelper.lerp(tickDelta, prevPosY, y) - camera.getPos().y, - MathHelper.lerp(tickDelta, prevPosZ, z) - camera.getPos().z - ); - MODEL.setRotation(0, 0, 0); - float lerpedRad = MathHelper.lerp(tickDelta, prevRadius, radius); float[] color = ColorHelper.changeSaturation(colorRed, colorGreen, colorBlue, 4); @@ -136,8 +129,31 @@ public class SphereParticle extends Particle implements Attachment { int light = getBrightness(tickDelta); MatrixStack matrices = new MatrixStack(); - MODEL.render(matrices, lerpedRad + thickness, buffer, light, 1, 1, 1, 1, 0.8F); - MODEL.render(matrices, lerpedRad - thickness, buffer, light, 1, 1, 1, 1, 1); + + matrices.push(); + matrices.translate( + MathHelper.lerp(tickDelta, prevPosX, x) - camera.getPos().x, + MathHelper.lerp(tickDelta, prevPosY, y) - camera.getPos().y, + MathHelper.lerp(tickDelta, prevPosZ, z) - camera.getPos().z + ); + + float scale = lerpedRad + thickness; + + if (scale > 0) { + matrices.push(); + matrices.scale(scale, scale, scale); + MODEL.render(matrices, buffer, light, 1, 1, 1, 1, 0.8F); + matrices.pop(); + } + + scale = lerpedRad - thickness; + + if (scale > 0) { + matrices.scale(scale, scale, scale); + + MODEL.render(matrices, buffer, light, 1, 1, 1, 1, 1); + } + matrices.pop(); immediate.draw();